从FM收音机原理到FPGA实现:深入浅出聊聊调频解调与FIR滤波器的那些事儿

张开发
2026/4/21 6:58:12 15 分钟阅读

分享文章

从FM收音机原理到FPGA实现:深入浅出聊聊调频解调与FIR滤波器的那些事儿
从FM收音机原理到FPGA实现深入浅出聊聊调频解调与FIR滤波器的那些事儿每次转动收音机的旋钮寻找喜欢的电台时你有没有想过那些看不见的电波是如何变成耳边清晰的声音FM广播就像一位隐形的音乐快递员它用频率的变化来打包声音信息而收音机则负责拆开这个包裹。本文将带你从日常生活中的收音机体验出发揭开调频技术的神秘面纱并展示如何用FPGA这个数字世界的魔术师来实现这一过程。1. FM调频频率变化的艺术想象一下在拥挤的广场上你正试图向远处的朋友传递信息。如果使用AM调幅方式就像改变喊叫的音量大小——声音时大时小。而FM调频则像是改变喊叫的节奏快慢——语速时快时慢。FM广播采用的正是后一种更抗干扰的方式它通过改变载波频率来携带音频信息。FM调制的核心特点载波频率随音频信号幅度变化频率偏移量与音频信号强度成正比相比AM更抗噪声干扰在数学上FM信号可以表示为s(t) A_c * cos[2πf_c t 2πk_f ∫m(τ)dτ]其中A_c载波振幅f_c载波中心频率k_f频率偏移灵敏度m(t)调制信号音频2. FM解调从频率变化中提取信息解调就像拆开快递包裹我们需要从频率变化中还原出原始音频信号。传统收音机常用的是鉴频器方案而在数字领域我们则采用更精确的数学方法。2.1 数字解调的关键步骤微分处理计算信号的瞬时变化率always (posedge clk) begin if(uf_tready_i 1 s_axis_data_tvalid 1) begin sv_data_r s_axis_data_tdata; uf_data_r s_axis_data_tdata - sv_data_r; end end绝对值处理获取频率变化幅度always (posedge clk) begin if(abs_tready_i 1 uf_valid_r 1) begin if(uf_data_r 0) abs_data_r uf_data_r; else abs_data_r -uf_data_r; end end低通滤波提取音频信号fir_compiler_lowpass_10k_30k_1m fm_fir_u1 ( .aresetn (rst_n), .aclk (clk), .s_axis_data_tvalid (abs_valid_r), .s_axis_data_tdata (abs_data_r), .m_axis_data_tdata (fir_fm_tdata_i) );提示微分操作相当于模拟电路中的鉴频器而FIR滤波器则替代了传统RC低通网络提供了更精确的频率选择性。3. FIR滤波器数字世界的频率守门人FIR有限长单位冲激响应滤波器是数字信号处理中的瑞士军刀特别适合FPGA实现。它就像一位严格的安检员只允许特定频率范围的信号通过。FIR滤波器优势对比特性模拟滤波器FIR数字滤波器精度受元件误差影响数学精确灵活性硬件固定可编程改变稳定性受温度影响完全稳定复杂度高阶实现困难易于高阶实现Xilinx FIR IP核大大简化了设计流程主要配置参数包括滤波器类型低通、高通等采样频率截止频率抽头数决定滤波锐度系数位宽4. FPGA实现从理论到硬件的桥梁将上述算法映射到FPGA上需要精心设计数据路径和时序控制。以下是关键模块的实现要点4.1 调制模块设计采用DDS直接数字频率合成技术生成FM信号dds_compiler_phase dds2 ( .aclk (clk), .aresetn (rst_n), .s_axis_phase_tvalid(s_axis_phase_tvalid_r), .s_axis_phase_tdata (s_axis_phase_tdata_i), .m_axis_data_tdata (fm_tdata_i) );4.2 解调模块优化为提升实时性可采用流水线设计微分计算级绝对值处理级FIR滤波级输出缩放级资源使用参考基于Xilinx 7系列约500个LUT300个FF1个DSP48E11个18Kb BRAM5. 仿真与调试验证设计的火眼金睛完善的测试平台是确保设计正确的关键。建议采用分层验证策略模块级测试单独验证调制和解调模块initial begin rst_n 0; #(10 * CLK_PERIOD) rst_n 1; #(3000 * CLK_PERIOD) $stop; end系统级测试检查端到端信号完整性时序分析确保满足时钟约束典型的仿真波形应显示调制后的FM信号频率随时间变化解调后的信号还原原始音频波形各阶段信号符合预期幅值范围6. 性能提升技巧在实际项目中我们还可以进一步优化设计系数对称性利用减少50%乘法运算多相分解降低时钟频率要求位宽优化平衡精度和资源消耗流水线设计提高系统吞吐量例如对称系数FIR实现可以节省资源// 前半部分系数 coeff[0] 16h0123; coeff[1] 16h0456; // 后半部分是对称的 coeff[N-1] coeff[0]; coeff[N-2] coeff[1];在某个车载收音机项目中通过优化FIR滤波器的抽头数和系数位宽我们将逻辑资源使用量降低了30%同时保持了良好的音质。

更多文章