基于FPGA的PL端实现FM信号调制解调

一、技术背景与系统架构

在无线通信领域,调频(FM)技术因其抗干扰能力强、音质优良等特点被广泛应用于广播、对讲机等场景。传统模拟FM调制依赖模拟电路实现,存在参数调整不灵活、集成度低等问题。随着FPGA技术发展,基于数字信号处理的FM调制解调方案逐渐成为主流。

本文采用行业常见开发板搭载射频收发器的硬件架构,通过FPGA的可编程逻辑(PL)端实现纯Verilog设计的FM调制解调系统。系统核心分为三部分:

  1. 数字基带处理模块:完成音频信号的数字化、FM调制与解调
  2. 射频接口控制模块:通过SPI配置射频芯片参数,实现数字基带与模拟射频的桥接
  3. 时钟与同步模块:提供系统所需的精确时钟,确保调制解调的时序同步

系统数据流如下:

  • 调制路径:音频ADC采样 → 数字预处理 → FM调制 → DAC输出至射频芯片
  • 解调路径:射频芯片接收 → ADC采样 → FM解调 → 数字后处理 → 音频DAC输出

二、FM调制模块的Verilog实现

1. 调制原理与数学模型

FM调制的数学表达式为:
[ s(t) = Ac \cos\left[2\pi f_c t + k_f \int{-\infty}^t m(\tau)d\tau\right] ]
其中:

  • ( A_c ):载波幅度
  • ( f_c ):载波频率
  • ( k_f ):调频灵敏度
  • ( m(t) ):音频调制信号

数字实现时,需将积分运算转换为离散累加:
[ \phi[n] = \phi[n-1] + 2\pi k_f m[n] \Delta t ]
[ s[n] = \cos(2\pi f_c nT_s + \phi[n]) ]

2. Verilog代码实现

  1. module fm_modulator (
  2. input clk, // 系统时钟
  3. input reset, // 异步复位
  4. input signed [15:0] audio_in, // 音频输入(16位有符号)
  5. output signed [15:0] fm_out // 调制输出(16位有符号)
  6. );
  7. parameter F_CARRIER = 10_000_000; // 载波频率10MHz
  8. parameter F_SAMPLE = 48_000; // 音频采样率48kHz
  9. parameter KF = 100; // 调频灵敏度系数
  10. reg [31:0] phase_accumulator; // 相位累加器
  11. reg [31:0] phase_increment; // 相位增量
  12. // 计算相位增量(与音频输入成正比)
  13. always @(*) begin
  14. phase_increment = (audio_in * KF) >>> 8; // 右移8位实现除法
  15. end
  16. // 相位累加与载波生成
  17. always @(posedge clk or posedge reset) begin
  18. if (reset) begin
  19. phase_accumulator <= 0;
  20. end else begin
  21. phase_accumulator <= phase_accumulator + phase_increment;
  22. end
  23. end
  24. // 使用DDS技术生成正弦波
  25. wire [15:0] sine_lookup;
  26. sine_table sine_inst (
  27. .addr(phase_accumulator[31:24]), // 取高8位作为查找表地址
  28. .data(sine_lookup)
  29. );
  30. assign fm_out = sine_lookup; // 实际实现需考虑幅度缩放
  31. endmodule

3. 关键优化点

  1. 相位累加器位宽选择:32位累加器可提供足够的频率分辨率,同时避免溢出
  2. 调频灵敏度校准:通过参数KF调整调制指数,需根据实际射频芯片参数配置
  3. 正弦波生成方式:可采用CORDIC算法替代查找表,节省资源但增加延迟

三、FM解调模块的Verilog实现

1. 解调原理与算法选择

FM解调的核心是从调制信号中恢复出调制频率的变化。常用数字解调方法包括:

  1. 正交解调法:将信号与正交载波相乘,通过低通滤波提取调制信号
  2. 差分检测法:计算相邻采样点的相位差
  3. 锁相环法(PLL):通过闭环控制跟踪载波相位

本文采用正交解调法,因其实现简单且性能稳定。

2. Verilog代码实现

  1. module fm_demodulator (
  2. input clk,
  3. input reset,
  4. input signed [15:0] fm_in, // 调制信号输入
  5. output signed [15:0] audio_out // 解调音频输出
  6. );
  7. parameter F_CARRIER = 10_000_000; // 载波频率
  8. parameter F_SAMPLE = 48_000; // 采样率
  9. reg [15:0] nco_phase; // 数控振荡器相位
  10. wire signed [15:0] nco_sin, nco_cos;
  11. // 数控振荡器(NCO)生成正交载波
  12. always @(posedge clk or posedge reset) begin
  13. if (reset) begin
  14. nco_phase <= 0;
  15. end else begin
  16. nco_phase <= nco_phase + (F_CARRIER / F_SAMPLE);
  17. end
  18. end
  19. // 正交载波生成(实际实现需替换为查找表或CORDIC)
  20. assign nco_sin = ...; // 正弦波输出
  21. assign nco_cos = ...; // 余弦波输出
  22. // 正交解调
  23. wire signed [31:0] i_prod, q_prod;
  24. assign i_prod = fm_in * nco_cos;
  25. assign q_prod = fm_in * nco_sin;
  26. // 低通滤波(简化示例,实际需多级滤波)
  27. reg signed [31:0] i_accum, q_accum;
  28. reg [3:0] filter_count;
  29. always @(posedge clk or posedge reset) begin
  30. if (reset) begin
  31. i_accum <= 0;
  32. q_accum <= 0;
  33. filter_count <= 0;
  34. end else begin
  35. i_accum <= i_accum + i_prod;
  36. q_accum <= q_accum + q_prod;
  37. filter_count <= filter_count + 1;
  38. if (filter_count == 15) begin
  39. // 计算相位差(简化处理)
  40. audio_out <= (i_accum - q_accum) >>> 8; // 右移实现缩放
  41. i_accum <= 0;
  42. q_accum <= 0;
  43. filter_count <= 0;
  44. end
  45. end
  46. end
  47. endmodule

3. 解调性能优化

  1. 载波同步:需通过自动频率控制(AFC)纠正载波频偏
  2. 滤波器设计:采用级联积分梳状(CIC)滤波器+FIR滤波器的组合,兼顾资源与性能
  3. 相位解缠:处理相位跳变时需进行解缠处理,避免2π模糊

四、系统集成与测试验证

1. 射频芯片配置要点

通过SPI接口配置射频芯片时需注意:

  1. 频率合成器设置:确保本振频率与载波频率匹配
  2. 滤波器带宽:根据调制指数选择合适的通道带宽
  3. 增益控制:采用自动增益控制(AGC)防止信号饱和

2. 测试验证方法

  1. 调制质量评估:使用频谱仪观察调制信号的频谱特性
  2. 解调音频分析:通过示波器或音频分析仪评估信噪比(SNR)
  3. 实时性能测试:使用信号源模拟多径衰落环境,验证系统鲁棒性

3. 常见问题解决方案

问题现象 可能原因 解决方案
调制频偏不足 KF参数过小 增大调频灵敏度系数
解调失真 滤波器截止频率过高 优化滤波器参数
载波频偏 晶振精度不足 采用温度补偿晶振(TCXO)

五、性能优化与扩展应用

1. 资源占用优化

  1. 流水线设计:将复杂运算分解为多级流水线,提高时钟频率
  2. 时序约束:合理设置多周期路径约束,避免时序违规
  3. DSP48E1利用:在支持该硬核的FPGA上,使用DSP块实现乘法器

2. 功能扩展方向

  1. 立体声调制:通过正交调制实现立体声FM广播
  2. RDS数据嵌入:在副载波上叠加RDS数据
  3. 自适应调制:根据信道质量动态调整调制指数

3. 实际应用建议

  1. 时钟方案选择:优先使用差分时钟输入,降低抖动
  2. 电源设计:为射频部分和数字部分分别设计电源,避免干扰
  3. 热管理:在长时间运行时,注意FPGA和射频芯片的散热

本文详细阐述了基于行业常见硬件平台的FM数字调制解调系统的Verilog实现方法,从原理分析到代码实现,再到系统优化,提供了完整的技术解决方案。实际开发中,开发者可根据具体硬件参数调整关键参数,并通过仿真与实测验证系统性能。该方案不仅适用于广播通信,还可扩展至物联网无线传输、工业遥控等场景,具有较高的工程应用价值。