2 模拟通信之AM调制解调——实战篇(1) 1. AM调制器的硬件实现AM调制器的硬件实现其实比你想象的要简单得多。我当年第一次做AM调制电路时用的就是最基础的元器件一个信号发生器、一个乘法器芯片比如AD633再加上几个电阻电容。关键是要理解每个元器件的作用以及如何把它们组合起来实现调制功能。1.1 二极管环形调制器最经典的AM调制电路莫过于二极管环形调制器了。这个电路由四个二极管组成环形结构看起来像个桥式整流电路。它的工作原理其实很巧妙当载波信号为正半周时其中一对二极管导通负半周时另一对二极管导通。这样就能实现载波信号和调制信号的相乘。我在实验室实测过这种电路发现有几个关键点需要注意载波信号的幅度要足够大确保二极管能够完全导通和截止调制信号的幅度不能太大否则会出现过调制输出端需要加一个带通滤波器滤除不需要的高次谐波1.2 晶体管调制电路如果你觉得二极管环形调制器太复杂可以试试更简单的晶体管调制电路。我常用的一个方案是用BJT晶体管把载波信号加到基极调制信号加到集电极。这种电路的优点是结构简单调试方便特别适合初学者上手。实际调试时我发现工作点的设置特别重要。集电极电流太大容易失真太小又会导致调制深度不够。建议先用示波器观察输出波形慢慢调整偏置电压直到获得理想的调制效果。2. MATLAB仿真AM调制硬件实现虽然直观但调试起来比较麻烦。相比之下用MATLAB做仿真就方便多了。我经常用这种方法快速验证调制方案然后再去搭建实际电路。2.1 基础调制代码实现下面这段代码是我常用的AM调制仿真模板% 参数设置 fs 10000; % 采样率 fc 1000; % 载波频率 fm 100; % 调制信号频率 ma 0.5; % 调制度 t 0:1/fs:1; % 时间向量 % 生成信号 carrier cos(2*pi*fc*t); % 载波信号 mod_signal ma*cos(2*pi*fm*t); % 调制信号 am_signal (1 mod_signal).*carrier; % AM调制信号 % 绘图 figure; subplot(3,1,1); plot(t, mod_signal); title(调制信号); subplot(3,1,2); plot(t, carrier); title(载波信号); subplot(3,1,3); plot(t, am_signal); title(AM调制信号);运行这段代码你就能看到完整的调制过程。我建议你尝试修改ma值观察过调制(ma1)时的波形变化这对理解调制度的概念很有帮助。2.2 频谱分析调制完成后我们还需要分析信号的频谱特性。MATLAB的FFT函数可以很方便地实现这一点% 频谱分析 n length(am_signal); f (-n/2:n/2-1)*(fs/n); % 频率向量 am_spectrum abs(fftshift(fft(am_signal))); figure; plot(f, am_spectrum); xlim([-1500 1500]); title(AM信号频谱); xlabel(频率(Hz)); ylabel(幅度);从频谱图上你可以清楚地看到载波分量和两个边带。这正是AM调制的特征载波不携带信息信息完全包含在两个边带中。3. 实际调试中的常见问题在实际工程中AM调制会遇到各种预料之外的问题。根据我的经验最常见的有以下几个3.1 过调制问题过调制是新手最容易犯的错误。当调制度ma1时调制信号的负半周会使载波幅度变为负值导致包络失真。我在一次项目中就遇到过这种情况接收端完全无法解调出原始信号。解决方法很简单在调制前测量调制信号的峰值幅度确保直流偏置A大于调制信号的峰值幅度必要时可以在调制器前加一个限幅电路3.2 载波泄漏理想情况下调制后的信号应该完全抑制载波。但实际上由于电路不对称等原因总会有部分载波泄漏。这个问题在二极管环形调制器中尤为明显。我常用的解决方案是仔细匹配二极管参数加入载波抑制调节电路使用性能更好的平衡调制器芯片3.3 噪声影响AM调制对噪声特别敏感因为噪声会直接叠加在信号的包络上。我在做无线传输实验时发现即使信噪比看起来不错解调出的信号质量也可能很差。改善方法包括在调制前对信号进行预加重使用带通滤波器限制信号带宽在接收端采用锁相环技术提高抗噪性能4. 包络检波器的设计与实现AM解调最常用的方法就是包络检波。别看它简单里面可是有很多门道的。4.1 二极管检波电路最基本的包络检波器只需要一个二极管、一个电阻和一个电容。我刚开始学习时对这个电路的工作原理一直半懂不懂直到用示波器观察了每个点的波形才真正明白。这个电路的关键在于RC时间常数的选择时间常数太大无法跟上包络变化导致失真时间常数太小残留过多载波频率成分经过多次实验我总结出一个经验公式RC值应该介于载波周期的1/10和调制信号周期的1/10之间。4.2 精密整流电路普通二极管检波有个缺点存在死区电压。对于小信号这种非线性会引入严重失真。这时可以使用运算放大器构成的精密整流电路。我常用的电路是在运放反馈回路中加入二极管利用运放的高开环增益来克服二极管的死区电压。这种电路虽然复杂一些但线性度好得多特别适合高质量音频信号的解调。5. 同步检波的实现技巧虽然包络检波简单但性能有限。在要求高的场合同步检波是更好的选择。不过实现起来也更有挑战性。5.1 载波恢复技术同步检波最大的难点是如何恢复出与发射端同频同相的载波。我尝试过几种方法直接从AM信号中提取载波使用窄带滤波器或锁相环发射导频信号专门发射一个弱载波作为参考使用Costas环一种特殊的锁相环结构其中Costas环的效果最好但实现复杂度也最高。对于初学者我建议先从简单的窄带滤波器方案开始尝试。5.2 数字实现方案现在越来越多的系统采用数字方式实现同步检波。我在FPGA上实现过一个版本核心代码如下// 数字下变频 always (posedge clk) begin mix_out am_signal * local_osc; end // 低通滤波 always (posedge clk) begin filtered mix_out - (mix_out 4) (filtered 4); end这种数字方案的优势是稳定性好参数调整方便。不过需要注意采样率要足够高通常至少是载波频率的4倍以上。