十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AM数字收发机中的带通采样:从频谱混叠到工程实现全解析

AM数字收发机中的带通采样:从频谱混叠到工程实现全解析 简介这是一份围绕“基于带通采样结构的模拟普通调幅AM数字收发机设计”的课程设计资料面向通信工程、电子信息类专业学生也可供无线电爱好者学习AM调制与数字收发机结构。压缩包共3个文件体积仅760KB包含2个Matlab仿真程序发射端与接收端和1份Word设计报告分别覆盖正交调制、数字射频接收机前端带通采样等核心实现。资源已有1953人学习下载是完成同类课程设计时值得参考的完整方案。读者可从中获得从指标设定到仿真验证的全过程调制信号特性、普通AM调制指数设置以及以学号后6位×4计算短波AM载波频率的方法Matlab程序支持发射端正交调制和接收端数字下变频的流程演示报告则提供设计思路与结构说明对照代码即可理解参数设置与系统架构。对于需要快速搭建仿真、撰写课程设计报告的同学这份资料能明显节省前期调研和排错时间。1. 直接从带通采样入手的AM收发机课程设计该怎么做“模拟普通调幅AM数字收发机”这个题目最容易让初学者栽进去的地方并不是调制解调本身而是采样率的选择。AM信号只有 9kHz 左右带宽载频却可能在几百 kHz 甚至几十 MHz若按传统的低通采样定理去设计接收端的 ADC 采样率会被迫拉高到载频的两倍以上后续的 DSP 处理量随之失控整个系统的成本和功耗都变得不现实。带通采样也称欠采样、谐波采样就是为了解决这个矛盾而存在的用一个远低于载频的采样率把窄带信号搬移到较低的“数字中频”再处理。但代价是必须处理好频谱混叠关系选错采样率带外噪声和镜像信号会直接折叠到有用频带内解调出来的波形根本没法看。这篇文章会从带通采样定理的边界条件讲起给出 AM 信号在数字无线电收发机里的完整落地路径包括采样率的选取原则、发射端数字 AM 信号的生成方式、接收端的数字下变频与解调策略以及量化位数、滤波器阶数、EVM 评估这些实际工程中躲不开的参数。适合正在做数字无线电课程设计、或者想把 SDR 接收链路从“能跑通”推进到“指标可控”的工程师阅读。代码以 Python 伪代码为主但参数表和公式可以直接移植到 MATLAB 或 Verilog 测试平台里使用。2. 带通采样定理与 AM 信号的频谱混叠边界2.1 AM 信号的窄带特性决定了带通采样是天然选择普通调幅信号的时域表达式为s(t) (A0 m(t)) * cos(2π * fc * t)其中 A0 是载波幅度m(t) 是调制信号fc 是载频。只要调制度不超过 1A0 m(t) 恒为正接收端可以用包络检波恢复出 m(t)。从频谱上看AM 信号是载频两侧各一个边带总带宽为调制信号最高频率的两倍。以中波广播为例音频最高频率通常取 4.5kHz那么射频带宽就是 9kHz而载频可能在 531kHz 到 1602kHz 之间——也就是说信号可以窄到 9kHz但中心频率高达 1.6MHz。如果按低通采样定理设计采样率至少要达到 3.2MHz 以上才能覆盖载频实际工程中往往会取 5MHz 左右。而带通采样理论告诉我们对于带宽 9kHz、中心频率 1.6MHz 的信号采样率只需要满足混叠条件就可以低到 20kHz~30kHz 这个量级。采样率降低的倍率接近 100 倍对 ADC、存储和后续 FFT 处理的压力都是数量级的下降。这正是数字无线电课程设计里采用带通采样结构的核心动机不是“不能低通采样”而是“用带通采样可以让整个系统更贴近真实的窄带接收机设计”。2.2 带通采样定理的完整表述与适用条件带通采样定理的标准描述是对于一个中心频率为 fc、带宽为 B 的带通信号采样率 fs 的选择不是唯一的凡是满足下式的 fs 都可以保证频谱不发生混叠1) fs 2 * B 2) 存在整数 n 0使得 (2 * fc - B) / n fs (2 * fc B) / (n 1)这个条件的含义是采样后信号的频谱会在 (0, fs/2) 范围内多次折叠但只要折叠后的正负频谱不相互重叠就可以用数字滤波器把目标频段取出来。n 的取值决定了信号被搬移到“第几次奈奎斯特区”n 越大fs 越低但可选的采样率区间越窄对模拟抗混叠滤波器的过渡带要求也越高。需要注意的关键点有三个。第一条件里 B 是信号带宽不是载频很多初学者误把 2*fc 当作下限导致采样率选得过高。第二“不存在混叠”和“能把信号搬移到希望的频率”是两回事后者还取决于 n 的奇偶性当 n 为奇数时采样后频谱的实部会反折表现为信号倒置如果是 AM 包络检波问题不大但若后续要做相干解调就必须处理这个倒置。第三带通采样本身并不产生信息损失但必须保证采样前有抗混叠滤波器将带宽之外的噪声和干扰抑制掉否则这些成分会平移到带内这是实际设计中失败率最高的环节。2.3 画频谱搬移图确定最优采样率区间实操中我不会直接套不等式而是把“搬移后的频谱位置”画出来判断。具体做法是对原始信号频率 f采样后出现在数字域的频率为f_alias |f - n * fs| (取最小非负值且不超过 fs/2)对于 AM 信号只需要考察载频 fc 和两个边带 (fc - B/2, fc B/2) 搬移后的位置。如果 fc 搬移后的中心频率落在 fs/4 附近最理想——既不贴近直流避免 1/f 噪声和直流偏置也不贴近 fs/2避免数字滤波器过渡带压力。列出搬移结果时可以按下面这个小型表格来对比n 取值fs 范围以 fc1.6MHz, B9kHz 计算搬移后中心频率特点3455.4 ~ 640.4 kHzfs/4 附近需另行核算采样率较高抗混叠滤波器易做15106.6 ~ 109.9 kHz约 108kHz抗混叠过渡带较宽3151.6 ~ 52.9 kHz约 51.2kHz采样率低但滤波器过渡带较窄6325.4 ~ 26.0 kHz约 25.1kHz采样率很低对滤波器陡峭度要求高上表里 fc 是取 1.6MHz 中波上限计算的。可以看出n 越大fs 越接近 2B 的下限AD 转换后的数据率很低但模拟带通滤波器的 Q 值和过渡带要求会显著提高。我一般会建议在 n 15 到 n 31 之间取中间点既有可接受的采样率又不会让滤波器的阶数爆炸。选定 fs 后还要回头确认搬移后的信号带宽不到 fs/2 的 20%给数字下变频的抽取滤波器留出过渡带空间。这一步很多人不做结果就是频谱图上看着信号完整解调出来的音频却带有高频噪声原因就是过渡带重叠后折叠进了带内。3. 搭建基于带通采样的 AM 数字收发机链路3.1 发射端直接生成数字 AM 信号的参数设计常见做法是先在 MATLAB 或 Python 里生成标准的数字 AM 信号经过 DAC 输出到模拟前端或者干脆用任意波形发生器直接输出这个序列。数字 AM 信号的生成可以分解为三步定义采样率 fs、生成调制信号 m(n)、输出 (A0 m(n)) * cos(2πfcn/fs)。下面这段代码以发射端基带频率 1kHz、采样率 51.2kHz、载频 1.6MHz 为例载频高于采样率需要带通采样配合 DAC 前的重建滤波器才能正确输出但数字域内直接计算并保存文件是没有问题的import numpy as np from scipy.signal import firwin, lfilter fs 51200.0 # 数字域采样率按带通采样选取 fc 1.6e6 # 射频载频注意 fc 远高于 fs f_mod 1000.0 # 调制信号频率 A0 1.0 # 载波幅度 m_index 0.5 # 调制度必须小于 1 t np.arange(0, 0.05, 1/fs) # 50ms 观察窗 m_t 0.8 * np.sin(2 * np.pi * f_mod * t) carrier np.cos(2 * np.pi * fc * t) # 数字域直接用高采样率计算 s_am (A0 m_index * m_t) * carrier # 写文件用于后续验证 s_am.astype(np.float32).tofile(am_baseband_fs51k2.f32)这段代码里有两个容易出错的地方。第一fc 不参与 fs 的生成关系carrier 的计算式在数字域上仍按连续时间处理只有当信号真正经过 ADC 采样时带通采样定理才会产生频移效果所以这里把 fc 设成 1.6MHz 并不影响数字波形本身。第二调制度 m_index 要小于 1否则会出现过调制包络检波解调出来就会严重失真课程设计里如果看到解调信号包络在过零点附近明显削波先检查这一项。3.2 接收端采样后频谱搬移位置的计算与数字下变频接收机的核心任务是把 ADC 采样后的数字中频信号搬移到基带。先确定搬移后的信号落在哪里用前文的公式计算fc1.6MHzfs51.2kHzn 取 31 时搬移中心频率为f_if fc - 31 * fs 1.6e6 - 31 * 51200 12800 Hz这个 12.8kHz 就是数字中频。后续数字下变频需要产生本地载波 cos(2π * f_if * n / fs) 和 sin(2π * f_if * n / fs)分别与输入相乘得到 I 路和 Q 路再用低通滤波器提取差频分量。因为带通采样时 n 为奇数的区间会造成频谱倒置需要特别留意解调出来的音频是否反转。from scipy.signal import firwin, lfilter def freq_shift_and_filter(x, fs, f_if): n np.arange(len(x)) lo_i np.cos(2 * np.pi * f_if * n / fs) lo_q -np.sin(2 * np.pi * f_if * n / fs) i_mix x * lo_i q_mix x * lo_q # 低通滤波器截止频率设为信号带宽的一半 taps firwin(64, 5000, fsfs, windowhamming) i_base lfilter(taps, 1.0, i_mix) q_base lfilter(taps, 1.0, q_mix) return i_base, q_base3.3 包络检波与相干解调的取舍AM 解调最直接的方法是包络检波对带通采样后的中频信号取绝对值再经过低通滤波器恢复基带。用 Python 表达就是envelope np.abs(x) audio lfilter(taps, 1.0, envelope)这个方案实现简单不依赖载波同步但要求信号始终满足正包络条件而且抗噪声能力较弱。另一种是对下变频后的 I、Q 求幅度demod_am np.sqrt(i_base**2 q_base**2)两种方式在实际链路中我都验证过后者在带通采样场景下更稳妥。原因是带通采样后的中频频率较低数字滤波器对包络检波产生的二倍频分量抑制能力有限而正交下变频加求模运算天然抵消了载波分量滤波器压力小得多。课程设计里如果追求演示效果可以用包络检波快速出波形如果后续还打算加信道编码或同步务必切换到正交下变频方案。3.4 抗混叠滤波器这个环节决定整个链路成败带通采样对 ADC 前端的抗混叠滤波器要求不是“有即可”而是“在目标频段以外尽可能深地抑制”。原因在于非目标频段的任何微弱干扰在采样后都可能折回带内。滤波器的设计输入有两个中心频率 fc、带宽略大于信号带宽以及最重要的过渡带宽度。过渡带宽度由采样率 fs 和信号带宽 B 决定。若 fs51.2kHzB9kHz那么靠近带外的第一个“死区”出现在 fs/2 - B/2 至 fs/2 之间滤波器必须在这大约 1kHz 的范围内完成从通带到阻带的过渡这只能靠高阶滤波器实现。设计时可用 Q 值来评估可实现性。带通滤波器 Q 值约为 fc/B1.6MHz/9kHz 约为 178在模拟域这个 Q 值用两级 LC 谐振可以实现但对元件容差敏感。所以我会建议把带通采样频率选高一点的区间比如 n15 对应的 fs106.6kHz~109.9kHz虽然让 ADC 数据率高了一倍但滤波器过渡带宽放宽到 8kHz 级别实际调试难度显著下降。4. 数字无线电中的参数选择、量化与 EVM 评估4.1 ADC 位数与动态范围怎么确定带通采样后的信号是窄带的信噪比要求比宽带系统低因此 ADC 位数不必选得过高。窄带接收机灵敏度主要取决于带内热噪声和量化噪声之比。以采样率 51.2kHz、目标 SNR 为 40dB 为例所需有效位数 ENOB 只有 7 位左右12 位的 ADC 已经绰绰有余。但注意“带外噪声”会通过抗混叠滤波器的裙边泄漏进来所以实际有效位数需要预留 2~3dB 的余量。下表给出参考ADC 位数理论量化 SNRdB带通采样场景下的工程建议10 位61.9信号强、干扰少时可勉强使用12 位74.0课程设计推荐性价比最高14 位86.0有强邻道干扰时推荐16 位98.1一般窄带场景过剩“够用即可”是很重要的设计思想盲目选择高位数 ADC 会带来功耗、成本和布局难度上升而带通采样结构恰恰通过降低 fs 减小了高位数 ADC 的实现难度。4.2 采样率选型后端的重采样与抽取ADC fs 固定在某一档后后端 DSP 往往希望用更低的处理速率解调。常规做法是多级抽取。但注意带通采样下信号已经搬移到中频抽取前必须先把中频信号滤除高频镜频否则抽取后的频谱会混叠的比原来更严重。一个常用的具体实现是先解调到基带再用半带滤波器逐级二倍抽取。这里给出抽取之前的关键判断代码def check_alias_before_decimate(x, fs, dec_factor): from scipy.signal import decimate # decimate 会自动做抗混叠滤波但截止频率是 fs/2/dec_factor y decimate(x, dec_factor, ftypefir, zero_phaseTrue) return y这里很容易犯的错误是直接取每隔 N 点抽一个而不先滤波。实际链路中只要这么做解调输出就会叠加上高频噪声而且这种噪声无法靠后端滤除因为它已经与信号频谱混在一起了。4.3 用 EVM 量化解调质量调试收发机时不能只凭耳朵听音频或者看波形“像不像”。最常用的量化指标是误差矢量幅度EVM。对于 AM 信号可以将解调输出与理想基带信号对齐后计算 RMS 误差def calculate_evm(demod, ref): demod demod / np.sqrt(np.mean(demod**2)) ref ref / np.sqrt(np.mean(ref**2)) n_min min(len(demod), len(ref)) err demod[:n_min] - ref[:n_min] evm np.sqrt(np.mean(err**2)) / np.sqrt(np.mean(ref[:n_min]**2)) * 100 return evmEVM 低于 5% 时解调质量属于良好10% 以上基本不可接受。如果观察发现 EVM 偏高且带有周期性波动优先怀疑采样率选择导致频谱搬移位置贴近 fs/4 且滤波器带宽过宽如果是随机性增大优先检查 ADC 有效位数或者前端噪声系数。5. 带通采样收发机调试中的三个关键验证技巧5.1 用频谱搬移公式反向验证采样率是否落入“死区”带通采样最隐蔽的坑是 fs 恰好让搬移后的信号贴近直流。输入一个正弦波作为测试源改变 fs 值用 FFT 观察输出谱线落在哪里。若信号峰出现在前几个 FFT bin 内就说明频谱已被搬到死区需要微调 fs。一个可用的判断工具是计算 f_alias fc - nfs然后检查 f_alias 是否大于 3B 且小于 fs/2 - 3*B。如果不满足就必须切换 n 或者 fs。5.2 在数字域做无混叠验证的“双采样率对比法”如果手头没有射频信号源可以完全在数字域验证带通采样链路的正确性先用一个比较高的采样率比如 6.4MHz生成完整 AM 信号再用数字抽取模拟带通采样效果用一个理想带通滤波器把无混叠情况下的频谱和保护频带的差异对比出来。把原始高采样率信号的频谱与带通采样后的频谱放在同一张图上对比观察比 fs/2 更高的频率成分是否被压缩到带内。如果原本没有信号的区域出现了镜像必然是因为带外噪声或频谱折叠引起的。5.3 用收发联合仿真确认解调极性对于 AM 信号包络检波对信号倒置不敏感但很有可能会因为反折导致边带极性反转。解决办法是发送一个带有非对称特征的测试信号比如单频 1kHz 加 3kHz 的混合音解调后用波形观察幅度关系是否符合原始混合关系。若两者幅度比例正确极性就正确若出现非预期的包络对称形态需要给 I/Q 其中一路加负号。顺便提醒这个验证步骤即使不做包的出来的音频通常也能听懂所以许多人会漏掉但课程设计答辩时导师往往会直接拿这个场景来检查你是否真正理解带通采样与频谱倒置的关系。这三招覆盖了从采样率设定到链路输出的全链路验证。无论你的平台是 MATLAB、Python 还是 FPGA 上的 Verilog 测试平台都建议先把这三步固化成函数或脚本每次改动参数后自动跑一遍而不是肉眼盯频谱图效率和正确率都会明显更好。本文还有配套的精品资源点击获取
返回列表