三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Python实现AM调制解调仿真:从原理到工程实践

Python实现AM调制解调仿真:从原理到工程实践

1. 项目概述与核心价值

今天咱们来聊聊模拟通信里一个既经典又绕不开的话题——AM调制解调的仿真实现。如果你正在学习通信原理,或者工作中需要快速验证一个AM系统的性能,这篇文章就是为你准备的。AM,也就是幅度调制,它不像FM(频率调制)或PM(相位调制)那么“抗造”,对噪声敏感是它的软肋,但正因为其原理直观、实现简单,它成为了理解模拟调制技术最理想的敲门砖。通过软件仿真,我们可以在不搭建任何硬件电路的情况下,深入观察信号从基带“坐上”载波,再到接收端被“卸货”的完整过程,直观地看到调制指数、载波频率这些关键参数是如何影响最终波形和频谱的,更能亲手体验包络检波和同步检波的区别。这比单纯看公式和理论波形图要实在得多。

对于学生来说,这是一个绝佳的课程设计或毕业设计选题,能把书本上的知识串成一条线;对于工程师,快速仿真可以帮助你在硬件投入前验证方案可行性,或者分析现有系统的瓶颈。接下来,我会用一个完整的仿真案例,带你走通AM调制、信道传输、解调以及性能分析的每一个环节,过程中会穿插大量我在实际仿真中踩过的坑和总结的技巧,保证你看完就能自己动手复现。

2. 仿真系统整体设计与思路拆解

2.1 为什么选择AM作为仿真起点?

在众多调制方式中,我选择AM作为仿真系列的开篇,原因有三。第一是原理的透明性。AM的数学表达式s(t) = [A + m(t)] * cos(2πf_c t)非常直观,调制信号m(t)直接叠加在直流分量A上,然后与载波相乘。这意味着在仿真中,你可以清晰地看到时域波形幅度随m(t)变化,频谱上则是简单的载频和两个边带。这种直观性有助于建立对“调制”这一概念最本质的理解。

第二是实现的简易性。无论是调制还是解调(特别是包络检波),其仿真模型都相对简单,几行代码就能构建核心流程。这降低了入门门槛,让我们可以把更多精力放在系统参数的影响分析、噪声引入和性能评估上,而不是纠结于复杂的算法实现。

第三是承上启下的教学价值。理解了AM,再去看DSB-SC(双边带抑制载波)、SSB(单边带)就会轻松很多,因为它们都可以看作是AM的变种或优化。通过仿真对比AM与这些改进型调制的频谱效率和抗噪性能,学习效果事半功倍。

2.2 仿真平台与工具选型考量

做通信仿真,MATLAB/Simulink 和 Python 是两大主流选择。我这里选择用Python(配合NumPy, SciPy, Matplotlib)来完成。原因在于其开源免费、灵活性高,并且代码可读性强,便于分享和复现。对于AM这种中等复杂度的仿真,Python的性能完全足够,而且其强大的科学计算和绘图库能让结果分析变得非常方便。

注意:如果你所在的实验室或公司环境强制要求使用MATLAB,其思路和流程是完全相通的,只是函数名和绘图语法不同。本文的重点是方法论关键参数设置,这些是跨平台通用的。

仿真的核心思路是构建一个离散时间系统。我们需要确定几个基础参数:采样频率Fs仿真时长T载波频率Fc调制信号频率Fm。这里有一个非常重要的经验原则:采样频率Fs必须远大于信号最高频率的两倍(奈奎斯特准则),通常要取到最高频率的5-10倍,以防止混叠并保证波形光滑。对于AM,最高频率是载频加上调制信号带宽,即Fc + B,其中B是调制信号的最高频率分量。

2.3 仿真流程框图与核心模块

整个仿真系统可以抽象为以下几个串联的模块:

  1. 信源模块:生成调制信号m(t)。通常使用单频正弦波或多频信号,便于观察。
  2. 调制模块:根据AM公式,将m(t)与载波c(t)相乘,并加上直流偏置A
  3. 信道模块:模拟真实传输环境。最简单的就是加入加性高斯白噪声(AWGN)。更复杂的可以模拟多径衰落,但本篇聚焦基础,以AWGN为主。
  4. 解调模块:实现两种经典解调方法——包络检波同步检波(相干解调)
  5. 分析与评估模块:绘制时域波形、频谱图,计算信噪比(SNR)、调制指数,并观察解调后的信号失真情况。

在开始写代码前,脑子里一定要有这个数据流图,这样调试的时候才知道问题可能出在哪个环节。

3. 核心细节解析与实操要点

3.1 调制指数:AM系统的“音量旋钮”

调制指数m(也称调幅深度)是AM系统中最重要的参数之一,没有之一。它定义为调制信号振幅Am与直流偏置A的比值,即m = Am / A。它的物理意义是载波幅度被调制信号改变的程度。

  • 当 m < 1 时,称为欠调制。这是正常的工作状态,已调信号的包络能够完美地复现调制信号的形状,解调后失真小。
  • 当 m = 1 时,称为满调制。这是临界状态,包络谷点刚好触及零轴,功率利用率最高,但对系统稳定性要求也高。
  • 当 m > 1 时,称为过调制。此时已调信号的包络会发生严重畸变,过零交叉,用简单的包络检波法解调会产生严重失真,必须使用同步检波才能部分恢复。

在仿真中,我们可以通过调整AAm来轻松改变m,并直观地观察时域波形的变化。一个常被忽略的要点是:调制指数直接影响发送功率的分配。在已调波总功率中,载波功率占据了很大一部分(且不携带信息),边带功率才真正承载信息。m越大,边带功率占比越高,功率利用率越高,但抗过载能力越弱。

3.2 载波频率与采样频率的“默契配合”

FcFs的选择不是随意的,它们必须满足严格的数学关系以确保仿真正确。

  1. 载波频率Fc:它应该远高于调制信号的最高频率Fm。通常Fc > 10 * Fm。这样在频域上,调制信号的频谱才能被顺利地“搬移”到载频两侧,而不会发生混叠。例如,如果语音信号带宽是4kHz,载频通常选择几百kHz到几MHz。
  2. 采样频率Fs:必须满足Fs > 2 * (Fc + B)。这是奈奎斯特采样定理的要求。但在实际仿真中,为了绘制出光滑的高频载波波形,我们通常取更保守的值:Fs = k * Fc,其中k是一个整数,通常取10到20。例如,Fc=100kHzFs可以取2MHz (k=20)。这样每个载波周期就有20个采样点,画出来的正弦波看起来就很连续。

实操心得:我习惯在代码开头将FcFmFs等参数设为变量。调试时,如果发现波形奇怪或频谱异常,第一个要检查的就是这几个频率参数是否满足上述关系。曾经因为Fs设置过低,导致解调后信号出现低频混叠,排查了很久。

3.3 两种解调方法的本质区别与实现关键

包络检波是AM最经典、最简单的解调方式,其物理实现就是一个二极管加一个RC低通滤波器。在仿真中,我们如何“数字地”实现包络检波?核心步骤是:

  1. 对接收到的已调信号取绝对值(模拟二极管的整流作用)。
  2. 设计一个截止频率略高于调制信号最高频率Fm的低通滤波器(模拟RC电路的放电过程)。
  3. 对整流后的信号进行低通滤波,滤除高频载波分量,剩下的就是调制信号的包络。 这里的关键在于低通滤波器的设计。截止频率设高了,残留的高频载波纹波大;设低了,调制信号的高频成分被衰减,造成失真。通常取Fm的1.2到1.5倍。

同步检波(相干解调)则是一种更“数学”的方法,性能通常优于包络检波,尤其是在低信噪比或过调制情况下。其原理是:用接收端本地生成的一个与发射载波同频同相的相干载波,与已调信号相乘,然后通过低通滤波器提取出基带信号。 仿真实现步骤:

  1. 本地生成相干载波cos(2πf_c t + φ)。理想情况下,相位φ=0
  2. 将接收信号与该相干载波相乘。
  3. 用一个截止频率为Fm的低通滤波器滤除高频分量(2倍载频附近)。 同步检波性能的瓶颈在于载波同步。如果本地载波存在频率偏差Δf或相位偏差φ,解调输出会产生严重的失真(频率偏差导致输出信号频率偏移,相位偏差导致幅度衰减)。仿真中我们可以故意引入偏差来观察其影响,这有助于理解锁相环(PLL)在真实接收机中的重要性。

4. 实操过程与核心环节实现

下面,我将用Python代码分步实现一个完整的AM调制解调仿真系统,并加入噪声信道。我们会观察调制指数的影响,并对比两种解调方式的性能。

4.1 参数设置与信号生成

import numpy as np import matplotlib.pyplot as plt from scipy import signal import warnings warnings.filterwarnings('ignore') # ========== 1. 仿真参数设置 ========== Fs = 1000000 # 采样频率 1MHz T = 0.01 # 仿真时长 10ms t = np.arange(0, T, 1/Fs) # 时间向量 Fm = 1000 # 调制信号频率 1kHz Fc = 10000 # 载波频率 10kHz (Fc >> Fm) # 调制信号 m(t) = Am * cos(2πFm t) Am = 1.0 # 调制信号振幅 m_t = Am * np.cos(2 * np.pi * Fm * t) # 载波信号 c(t) = cos(2πFc t) c_t = np.cos(2 * np.pi * Fc * t) # 直流偏置 A,用于控制调制指数 m = Am / A A = 1.2 # 设置直流偏置,此时 m = 1/1.2 ≈ 0.83 (欠调制) # A = 1.0 # m = 1.0 (满调制) # A = 0.8 # m = 1.25 (过调制) m_index = Am / A # 计算调制指数 print(f"调制指数 m = {m_index:.2f}")

首先定义了所有基础参数。这里Fs=1MHzFc=10kHz的100倍,足以清晰描绘载波。FcFm的10倍,满足频谱搬移要求。通过注释切换A的值,可以轻松模拟欠调、满调和过调三种状态。

4.2 AM调制与信道传输

# ========== 2. AM调制 ========== # s(t) = [A + m(t)] * c(t) s_t = (A + m_t) * c_t # ========== 3. 信道:加入高斯白噪声(AWGN) ========== def add_awgn(signal, snr_db): """ 向信号添加加性高斯白噪声。 signal: 输入信号 snr_db: 信噪比 (dB) """ # 计算信号功率 sig_power = np.mean(signal ** 2) # 根据SNR(dB)计算噪声功率 noise_power = sig_power / (10 ** (snr_db / 10)) # 生成功率为noise_power的高斯白噪声 noise = np.random.randn(len(signal)) * np.sqrt(noise_power) return signal + noise, noise SNR_dB = 20 # 设置信道信噪比为20dB r_t, noise = add_awgn(s_t, SNR_dB) # r_t 为接收到的含噪信号

调制过程严格按公式[A + m(t)] * cos(2πf_c t)实现。add_awgn函数是一个实用的工具函数,它根据指定的信噪比SNR_dB计算出需要添加的噪声功率,确保噪声强度是可控的。这里先设为20dB,这是一个中等质量的信道,之后我们可以调整到更低(如10dB)来观察噪声的影响。

4.3 包络检波法实现

# ========== 4. 解调:方法一,包络检波 ========== # 4.1 整流(取绝对值) rectified = np.abs(r_t) # 4.2 设计低通滤波器滤除载频 nyquist = Fs / 2 cutoff_freq = Fm * 1.5 # 截止频率设为调制频率的1.5倍 normalized_cutoff = cutoff_freq / nyquist # 使用巴特沃斯滤波器,阶数不宜过高,防止振铃效应 b, a = signal.butter(N=4, Wn=normalized_cutoff, btype='low') # 使用filtfilt进行零相位滤波,避免引入延迟失真 demod_envelope = signal.filtfilt(b, a, rectified) # 4.3 去除直流分量(减去包络的均值,恢复原始调制信号) demod_envelope = demod_envelope - np.mean(demod_envelope)

包络检波的数字实现精髓在于滤波器的设计和应用。这里选择了四阶巴特沃斯低通滤波器,特性比较平坦。signal.filtfilt函数进行前向后向滤波,实现了零相位延迟,这对于需要对齐时间的分析非常有用。最后减去直流分量,是为了与原始调制信号m(t)进行对比。注意,真实的包络检波电路输出本身就包含直流,后续音频处理会用电容隔直。

4.4 同步检波法实现

# ========== 5. 解调:方法二,同步检波(理想相干) ========== # 5.1 生成本地相干载波(假设理想同步,频率相位完全一致) local_carrier = np.cos(2 * np.pi * Fc * t) # 相位为0 # 5.2 与接收信号相乘 product = r_t * local_carrier # 5.3 低通滤波,截止频率设为Fm cutoff_freq_sync = Fm normalized_cutoff_sync = cutoff_freq_sync / nyquist b2, a2 = signal.butter(N=4, Wn=normalized_cutoff_sync, btype='low') demod_sync = signal.filtfilt(b2, a2, product) # 5.4 同步检波输出需要乘以2并去除直流,才能与原始信号幅度匹配(由公式推导) demod_sync = 2 * demod_sync demod_sync = demod_sync - np.mean(demod_sync)

同步检波假设了理想的载波恢复,这是其性能上限。相乘后产生的频谱分量包含一个低频的m(t)分量和一个高频的2f_c分量,低通滤波器负责滤除后者。输出乘以2是因为相干解调后的理论幅度是原信号的一半(具体推导涉及三角恒等式)。我们可以通过引入相位误差来模拟非理想情况:

# ========== 6. 同步检波(带相位误差) ========== phase_error = np.pi / 6 # 引入30度相位误差 local_carrier_error = np.cos(2 * np.pi * Fc * t + phase_error) product_error = r_t * local_carrier_error demod_sync_error = signal.filtfilt(b2, a2, product_error) demod_sync_error = 2 * demod_sync_error demod_sync_error = demod_sync_error - np.mean(demod_sync_error)

4.5 结果可视化与分析

# ========== 7. 绘制结果 ========== fig, axes = plt.subplots(4, 2, figsize=(14, 12)) fig.suptitle(f'AM调制解调仿真 (m={m_index:.2f}, SNR={SNR_dB}dB)', fontsize=16) # 绘制时域波形 time_window = int(0.001 * Fs) # 只看前1ms的细节 axes[0, 0].plot(t[:time_window], m_t[:time_window]) axes[0, 0].set_title('原始调制信号 m(t)') axes[0, 0].set_xlabel('时间 (s)') axes[0, 0].set_ylabel('幅度') axes[0, 0].grid(True) axes[0, 1].plot(t[:time_window], s_t[:time_window]) axes[0, 1].plot(t[:time_window], A + m_t[:time_window], 'r--', linewidth=1.5, label='包络 A+m(t)') axes[0, 1].plot(t[:time_window], -(A + m_t[:time_window]), 'r--', linewidth=1.5) axes[0, 1].set_title('已调信号 s(t) 及其包络') axes[0, 1].set_xlabel('时间 (s)') axes[0, 1].set_ylabel('幅度') axes[0, 1].legend() axes[0, 1].grid(True) # 绘制频谱 def plot_spectrum(ax, signal, title, Fs): n = len(signal) freqs = np.fft.fftfreq(n, 1/Fs) spectrum = np.fft.fft(signal) magnitude = np.abs(spectrum) / n positive_idx = np.where(freqs >= 0) ax.plot(freqs[positive_idx], magnitude[positive_idx]) ax.set_title(title) ax.set_xlabel('频率 (Hz)') ax.set_ylabel('幅度谱') ax.set_xlim([0, 20000]) # 聚焦在0-20kHz ax.grid(True) plot_spectrum(axes[1, 0], m_t, '调制信号频谱', Fs) plot_spectrum(axes[1, 1], s_t, '已调信号频谱 (AM)', Fs) # 绘制含噪信号及解调结果对比 axes[2, 0].plot(t[:time_window], r_t[:time_window]) axes[2, 0].set_title('接收信号 r(t) (含噪声)') axes[2, 0].set_xlabel('时间 (s)') axes[2, 0].set_ylabel('幅度') axes[2, 0].grid(True) axes[2, 1].plot(t[:time_window], demod_envelope[:time_window], label='包络检波') axes[2, 1].plot(t[:time_window], demod_sync[:time_window], '--', label='同步检波(理想)') axes[2, 1].plot(t[:time_window], m_t[:time_window] * 0.8, ':', label='原始信号(参考)') # 缩放后对比 axes[2, 1].set_title('解调信号对比 (局部)') axes[2, 1].set_xlabel('时间 (s)') axes[2, 1].set_ylabel('幅度') axes[2, 1].legend() axes[2, 1].grid(True) # 绘制同步检波相位误差影响 axes[3, 0].plot(t[:time_window], demod_sync[:time_window], label='理想同步') axes[3, 0].plot(t[:time_window], demod_sync_error[:time_window], '--', label=f'相位误差{phase_error:.2f} rad') axes[3, 0].plot(t[:time_window], m_t[:time_window] * 0.8, ':', label='原始信号(参考)') axes[3, 0].set_title('同步检波相位误差影响') axes[3, 0].set_xlabel('时间 (s)') axes[3, 0].set_ylabel('幅度') axes[3, 0].legend() axes[3, 0].grid(True) # 计算并显示均方误差(MSE) mse_envelope = np.mean((demod_envelope - m_t) ** 2) mse_sync = np.mean((demod_sync - m_t) ** 2) axes[3, 1].text(0.1, 0.7, f'包络检波 MSE: {mse_envelope:.2e}', fontsize=12, transform=axes[3,1].transAxes) axes[3, 1].text(0.1, 0.5, f'同步检波 MSE: {mse_sync:.2e}', fontsize=12, transform=axes[3,1].transAxes) axes[3, 1].text(0.1, 0.3, f'调制指数 m: {m_index:.2f}', fontsize=12, transform=axes[3,1].transAxes) axes[3, 1].text(0.1, 0.1, f'信道 SNR: {SNR_dB} dB', fontsize=12, transform=axes[3,1].transAxes) axes[3, 1].axis('off') axes[3, 1].set_title('性能指标') plt.tight_layout() plt.show()

这段绘图代码生成了一个综合仪表盘。时域波形让我们直观看到调制、噪声和解调效果;频谱图验证了AM的频谱结构(载频和两个边带);解调对比图清晰地展示了两种方法的差异;相位误差图则是一个重要的教学点。最后的均方误差(MSE)给出了定量的性能比较。

5. 常见问题与排查技巧实录

仿真跑起来,波形出不来,或者结果和预期不符,是新手最常遇到的问题。下面我总结几个高频“坑点”和排查思路。

5.1 波形失真或频谱异常

  • 现象:已调信号s(t)的包络不光滑,或者解调后信号严重畸变,频谱图上出现奇怪的镜像或混叠。
  • 排查步骤
    1. 首要检查采样频率Fs:这是最常见的原因。确保Fs至少大于2*(Fc + Fm),并建议Fs > 10*Fc以获得光滑波形。计算一下你的参数,用print语句输出FsFcFm的值。
    2. 检查时间向量t:确保t是用np.arange(0, T, 1/Fs)生成的,而不是np.linspacearange能保证固定的采样间隔,这对频域分析至关重要。linspace可能会因为浮点数精度问题导致最后一个点的时间不是精确的T,从而影响FFT结果。
    3. 观察调制指数m:如果m>1(过调制),包络失真(过零交叉)是正常现象。此时包络检波输出会严重失真,但同步检波(在理想条件下)仍能较好恢复。确认你的AAm设置是否正确。
    4. 检查滤波器参数:包络检波的低通滤波器截止频率是否设置合理?如果太接近Fm,会滤掉部分有用信号;如果太高,残留的载波纹波会很大。同步检波的低通滤波器截止频率是否设为Fm左右?

5.2 同步检波输出幅度不对或为零

  • 现象:同步检波出来的信号幅度远小于原始信号,或者几乎是一条零线。
  • 排查步骤
    1. 检查本地载波:首先打印或绘制一小段本地载波local_carrier和接收信号r_t,确保它们都是正常的余弦波,且频率一致。一个低级错误是本地载波频率Fc写成了调制频率Fm
    2. 验证相乘结果:在低通滤波之前,先绘制product = r_t * local_carrier的时域波形和频谱。你应该能在频谱上看到一个明显的低频分量(在Fm处)和一个高频分量(在2*Fc附近)。如果看不到低频分量,说明相乘环节有问题。
    3. 检查低通滤波器:确认同步检波所用的低通滤波器截止频率设置正确(约等于Fm),并且滤波器的阶数不要太高,以免在截止频率附近产生过大的非线性相移。可以尝试使用filtfilt来消除相位失真。
    4. 幅度补偿:别忘了同步检波的理论输出是0.5*m(t)(假设载波幅度为1)。我们的代码中已经乘以2进行补偿。如果没乘,幅度会减半。

5.3 包络检波输出有高频“锯齿”

  • 现象:包络检波后的信号demod_envelope上叠加了明显的高频纹波。
  • 原因与解决:这是整流后残留的载波高频分量没有被低通滤波器完全滤除。
    1. 降低滤波器截止频率:尝试将cutoff_freq1.5*Fm降低到1.2*FmFm。注意别降得太低,否则会损伤信号本身。
    2. 增加滤波器阶数:适当增加巴特沃斯滤波器的阶数N(例如从4增加到6),可以提高滤波器的滚降特性,更好地抑制高频。但阶数太高可能引起时域振铃效应,需要权衡。
    3. 检查整流信号:在滤波前,先绘制rectified = np.abs(r_t)的波形。它应该是一个全为正、且包络跟随m(t)的波形。如果这里的高频成分就异常多,可能是接收信号r_t本身信噪比太差,或者Fs不够高导致载波波形不光滑。

5.4 性能评估指标计算

除了用眼睛看波形,定量评估也很重要。最常用的指标是信噪比(SNR)均方误差(MSE)

  • 计算解调输出信噪比:在已知添加的噪声功率的情况下,可以计算解调信号的信噪比。但更通用的方法是在仿真中,如果我们将原始调制信号m(t)视为“真值”,那么解调信号d(t)m(t)之间的误差功率可以视为“噪声”功率。
    # 假设 demod_signal 是解调输出, m_t 是原始调制信号 signal_power = np.mean(m_t ** 2) noise_power = np.mean((demod_signal - m_t) ** 2) # 误差功率 snr_linear = signal_power / noise_power snr_db = 10 * np.log10(snr_linear) print(f"解调输出信噪比: {snr_db:.2f} dB")
    通过改变信道SNR_dB,绘制解调输出SNR_dB随信道SNR_dB变化的曲线,可以直观比较包络检波和同步检波在不同信道条件下的性能优劣。通常,同步检波在低信噪比下性能优势更明显。

5.5 仿真速度优化技巧

当仿真时长T很长,或采样率Fs很高时,计算量和内存消耗会很大。可以尝试以下优化:

  1. 向量化操作:确保全部使用NumPy的数组运算,避免Python原生for循环。
  2. 减少绘图数据点:绘图时,使用切片只绘制前几毫秒的细节,例如t[:int(0.001*Fs)]
  3. 使用更高效的滤波器:对于实时性要求不高的后处理分析,signal.filtfilt虽然零相位但计算量较大。如果允许一定的相位延迟,可以使用signal.lfilter
  4. 分段处理:对于超长信号,可以考虑分段进行调制、加噪、解调处理。

6. 扩展实验与深入探索方向

掌握了基础仿真后,你可以尝试以下扩展,这会让你的理解更深一层:

  1. 调制信号复杂化:不要只使用单频正弦波。尝试用多个正弦波叠加,或者加载一段真实的音频文件(如WAV格式)作为m(t)。观察已调波频谱从离散谱线变为连续谱带的过程。解调时,注意滤波器的截止频率要覆盖音频信号的最高频率。
  2. 模拟过调制与失真:将调制指数m设置为大于1的值,分别用包络检波和同步检波解调。你会清晰地看到包络检波输出在调制信号负半周时的切割失真,而同步检波在理想条件下仍能恢复信号形状(但幅度关系可能变化)。这解释了为什么广播系统中要避免过调制。
  3. 噪声门限效应:逐步降低信道SNR_dB(从20dB降到0dB,甚至负值)。观察两种解调方式输出信号的质量变化。你会发现,当噪声大到一定程度时,包络检波的输出会突然劣化,出现大量脉冲噪声,这就是著名的门限效应。而同步检波的性能是随SNR降低而逐渐恶化的。
  4. 非理想同步的影响:在同步检波中,系统性地改变本地载波的相位(从0到π)和频率(引入微小偏差Δf)。绘制解调输出幅度与相位误差的关系曲线,以及输出波形在频率偏差下的“拍频”现象。这能让你深刻理解载波同步在相干解调中的极端重要性。
  5. 与DSB-SC对比:只需将AM调制公式中的直流分量A设为0,就得到了双边带抑制载波(DSB-SC)信号。仿真对比AM和DSB-SC的频谱(DSB-SC没有载频分量),并尝试用包络检波解调DSB-SC(会发现失效),从而理解载波分量在解调中的作用。

仿真不只是验证理论,更是探索和发现问题的工具。多改变参数,多观察异常现象,并思考其背后的物理和数学原因,这样收获才是最大的。

← 返回列表