深入浅出Delta-sigma调制:用FPGA搭建一个1-bit ADC来理解PDM音频原理

张开发
2026/4/21 0:02:14 15 分钟阅读

分享文章

深入浅出Delta-sigma调制:用FPGA搭建一个1-bit ADC来理解PDM音频原理
深入浅出Delta-sigma调制用FPGA搭建一个1-bit ADC来理解PDM音频原理在数字信号处理领域Delta-sigmaΔΣ调制技术以其独特的噪声整形特性成为高精度模数转换和音频编码的核心方案。本文将带您从FPGA实践的角度亲手搭建一个1-bit ADC原型系统通过硬件描述语言实现ΔΣ调制器进而理解PDM脉冲密度调制音频的工作原理。不同于传统的理论讲解我们采用从实践反推理论的教学方法让抽象的数字信号处理概念变得触手可及。1. Delta-sigma调制基础与硬件原型Delta-sigma调制的核心思想是通过过采样和噪声整形将量化噪声推向高频区域。想象一下用天平称重物体的过程我们不断添加或移除小砝码通过观察天平的倾斜方向来逼近物体的真实重量。这个动态平衡的过程正是ΔΣ调制器的物理隐喻。1.1 一阶ΔΣ调制器的FPGA实现让我们先用Verilog构建一个最简单的数字比较器累加器模型module delta_sigma_1st_order( input clk, input rst_n, input signed [15:0] analog_in, // 模拟输入(用16位有符号数表示) output reg pdm_out // 1-bit PDM输出 ); // 定义1-bit DAC的参考电平 localparam POS_REF 32767; // 对应逻辑1 localparam NEG_REF -32768; // 对应逻辑0 reg signed [31:0] integrator 0; // 32位累加器 always (posedge clk or negedge rst_n) begin if (!rst_n) begin integrator 0; pdm_out 0; end else begin // 计算当前误差并积分 integrator integrator (pdm_out ? (analog_in - POS_REF) : (analog_in - NEG_REF)); // 比较器决策 pdm_out (integrator 0) ? 1b1 : 1b0; end end endmodule这个基础模型展示了ΔΣ调制的三个关键要素过采样以远高于信号带宽的时钟频率处理数据负反馈通过1-bit DAC将输出反馈到输入端积分器累积量化误差并在下一个周期补偿提示在仿真时建议输入一个缓慢变化的斜坡信号观察PDM输出的密度如何跟踪输入电平的变化。1.2 从数字模型到真实ADC的转换若将上述数字系统转换为实际的1-bit ADC只需做以下调整数字系统组件物理ADC对应部件数字比较器模拟比较器数字积分器模拟积分电路数字减法器模拟减法电路1-bit DAC开关参考电压这种对应关系揭示了ΔΣ ADC和PDM DAC的本质一致性——它们都是基于相同调制原理的互逆过程。2. 噪声整形与过采样技术噪声整形是ΔΣ调制的魔法所在。通过将量化噪声推向高频区域配合后续的数字滤波我们能在信号带宽内获得惊人的有效分辨率。2.1 频域特性分析在Simulink或Python中建立模型后可以观察到典型的噪声整形曲线import numpy as np import matplotlib.pyplot as plt # 模拟ΔΣ调制器的噪声传递函数 def noise_transfer_function(order, osr): f np.linspace(0, 0.5, 1000) ntf (2 * np.sin(np.pi * f)) ** order snr 10 * np.log10((3 * (2*order1) * osr**(2*order1))/(np.pi**(2*order))) return f, ntf, snr f, ntf, _ noise_transfer_function(order2, osr64) plt.semilogy(f, ntf) plt.xlabel(归一化频率) plt.ylabel(噪声增益) plt.title(二阶ΔΣ调制器的噪声传递函数) plt.grid(True)一阶调制每倍频程20dB的噪声衰减二阶调制每倍频程40dB的噪声衰减过采样率(OSR)采样频率与信号带宽的比值每加倍OSR可提升约3dB的信噪比2.2 实际电路中的权衡设计ΔΣ系统时需要平衡几个关键参数调制器阶数高阶调制器提供更好的噪声整形但可能引入稳定性问题过采样率选择音频应用常用64x或128x过采样需要权衡处理速度和资源消耗量化位数1-bit系统结构简单、线性度好多-bit系统可降低时钟频率要求3. 从ADC到音频PDM的转换理解了ΔΣ ADC的工作原理后将其逆向应用就得到了PDM音频系统。这种对称性正是数字信号处理的精妙之处。3.1 完整的音频处理链典型的FPGA音频PDM输出系统包含以下环节PCM音频源从存储器读取WAV文件或通过I2S接口接收实时音频流ΔΣ调制器将16/24-bit PCM转换为1-bit PDM通常采用二阶或三阶结构时钟管理生成精确的过采样时钟确保与音频采样率严格同步输出驱动通过GPIO引脚输出PDM信号可能需要电平转换电路3.2 Verilog实现进阶下面是一个更完整的二阶ΔΣ调制器实现专为音频应用优化module audio_pdm_generator ( input wire clk_48m, // 主时钟(48MHz) input wire rst_n, input wire [15:0] pcm_in, // 16-bit有符号PCM output wire pdm_out // 1-bit PDM输出 ); // 时钟分频48MHz / 64 750kHz (OSR64) reg [5:0] clk_div 0; wire osr_clk clk_div[5]; always (posedge clk_48m) clk_div clk_div 1; // 二阶ΔΣ调制器 reg signed [17:0] integrator1 0; reg signed [17:0] integrator2 0; reg pdm_reg 0; wire signed [15:0] dac_out pdm_reg ? 16sd32767 : -16sd32768; wire signed [16:0] error1 pcm_in - dac_out; wire signed [17:0] stage1 integrator1 error1; wire signed [16:0] error2 stage1[17:1] - dac_out; wire signed [17:0] stage2 integrator2 error2; always (posedge osr_clk or negedge rst_n) begin if (!rst_n) begin integrator1 0; integrator2 0; pdm_reg 0; end else begin integrator1 stage1; integrator2 stage2; pdm_reg (stage2 0); end end assign pdm_out pdm_reg; endmodule这个实现中值得注意的几个优化采用独立的过采样时钟域使用17位累加器防止溢出简化了第二级的误差计算直接使用寄存器输出提高时序性能4. 系统验证与性能调优搭建好硬件系统后需要通过多种手段验证其性能并优化参数。4.1 测试信号生成建议使用以下测试信号验证系统直流电平测试输入固定的直流值用示波器观察PDM占空比验证线性度正弦波扫频从20Hz到20kHz扫频测量输出幅度响应确认带宽限制特性FFT分析对PDM输出做频谱分析观察噪声整形效果测量实际信噪比4.2 常见问题排查在实际部署中可能会遇到以下典型问题现象可能原因解决方案高频噪声过大积分器位数不足增加累加器位宽低频失真时钟抖动使用更稳定的时钟源输出不稳定反馈延迟过大优化时序约束或流水线设计信噪比低于预期过采样率不足提高OSR或使用高阶调制4.3 进阶优化方向对于追求极致性能的设计可以考虑多位量化使用2-bit或3-bit内部量化降低时钟频率要求但需校准DAC失配动态元件匹配采用随机化或旋转技术消除多位DAC的非线性数字校正技术后台校准积分器增益误差补偿时钟抖动影响在完成基础系统后尝试将PDM输出接入实际的低通滤波器电路用扬声器或耳机监听音频质量。从刺耳的数字噪声到清晰的声音再现这个转变过程本身就是对ΔΣ调制原理最直观的诠释。

更多文章