
搞模数混合设计这些年如果要我选一个“解决采样瓶颈最优雅的方案”我肯定投Delta-Sigma调制一票。这种调制技术表面上看起来就是“过采样负反馈量化器”但内核里塞满了信号与噪声的博弈。很多初学者一上来就被一堆NTF公式吓退实际上DSM的原理没有想象中那么难反而是它的工程坑特别多稍不注意就会在仿真和实测里翻车。这篇文章围绕Delta-Sigma调制DSM技术从原理到工程实现完整过一遍。我会把过采样、噪声整形、环路稳定性这些核心概念掰开揉碎地讲再给出可复现的建模和仿真思路最后整理一份我踩过和见过的常见问题排查实录。适合正在做高精度ADC/DAC、音频编解码、传感器接口、射频频率综合器的工程师以及准备入行混合信号设计的同学。读完你会理解Delta-Sigma调制之所以能在高精度转换器领域称霸几十年靠的并不是多么复杂的电路拓扑而是一整套非常漂亮的系统级权衡。下面直接进正题。1. 先从直觉理解Delta-Sigma调制1.1 量化噪声才是精度瓶颈在讨论DSM之前先把ADC/DAC的核心矛盾说清楚。任何有限位数的量化器在把模拟信号变成数字码时都会引入量化误差。假设一个N位量化器满量程范围是FSR最小量化步长LSB FSR / 2^N。在不做过采样的情况下量化误差可以近似看成在[-LSB/2, LSB/2]内均匀分布的白噪声其总功率是LSB²/12。奈奎斯特采样时这份噪声功率全部落在DC到fs/2的信号带内因此理想N位ADC的信噪比就是经典的6.02N 1.76 dB。这也是为什么做传统逐次逼近型SARADC时每提升一位有效位数都要让比较器、DAC、采样保持电路的整体噪声和失配降一半。到了18位以上模拟电路的匹配精度几乎逼近物理极限再做下去成本极高。那换个思路行不行如果我只用一个比较器但让它跑得飞快然后用数字滤波把噪声滤掉这就是过采样的雏形。把采样率提高到奈奎斯特速率的OSR倍后量化噪声总功率不变但分散到更宽的频带上落在信号带内的噪声功率就压缩为原来的1/OSR。由于信号能量不变带内SNR提升了10log10(OSR) dB。换句话说过采样率每翻一倍SNR只增加3 dB相当于0.5位有效精度。这个收益太有限了单纯靠过采样很难做出高位数必须配合另外一招。1.2 负反馈把噪声挤到带外Delta-Sigma调制最核心的思想就是利用负反馈环路对量化误差做“整形”。它的基本结构是一个积分器、一个低分辨率量化器最常见是1比特比较器和一个反馈DAC。先把信号路径走一遍输入信号经过积分器后进入量化器量化器输出既作为整个调制器的数字输出又通过反馈DAC回到输入端和输入信号做差。因为是负反馈环路会不断调整积分器的输出让量化器的平均值逼近输入信号。关键在于这个结构对信号和误差的处理完全不同。输入信号经过积分器和量化器的路径在低频段增益接近1相当于一个延迟后的直通而量化误差是在量化器内部注入的它经历的是“先被积分器积分再被差分反馈抵消”的过程最后在传递函数里形成一个高通特性。用Z域表示一阶DSM的输出可以写成Y(z) z⁻¹·X(z) (1 - z⁻¹)·E(z)这里的STF z⁻¹就是一个纯延迟NTF 1 - z⁻¹在DC处为零在高频处增益为2。也就是说量化噪声在低频被极大抑制在高频被放大。只要后续用数字低通滤波器把带外噪声滤掉留下来的带内噪声就非常小。能理解到这一层DSM的“Aha moment”就在这。它不是去消除量化误差而是把误差推到自己不关心的频段里去然后用数字滤波“扫出去”。这个思路和城市垃圾处理很像——垃圾总量没变但把它运到远离居住区的地方再划定隔离带居民实际感受到的干扰就小多了。1.3 为什么是它统治高精度DSM的这个特性让它特别适合做高精度、低带宽的信号链。音频是最典型的例子24位192 kHz采样率的音频ADC内部几乎都是高阶多比特DSM加数字抽取滤波音频DAC则反过来用数字插值滤波加DSM把多位音频数据变成1比特或低比特高速码流再经过模拟低通滤波还原。数字功放里的D类放大器也常利用DSM做脉宽/密度调制降低带内噪声和THD。传感器领域也一样。MEMS加速度计、陀螺仪、压力传感器接口里闭环Sigma-Delta调制器几乎是标配。因为传感器输出带宽通常只有几百赫兹到几千赫兹但需要非常高的分辨率这种“低带宽、高精度”的需求正是DSM的主场。把MEMS敏感结构直接嵌入到DSM环路里还能利用环路的高增益抑制机械噪声和非线性。射频领域则是另一条线。锁相环里的分数分频器常用多级噪声整形MASHDSM来控制分频比把小数杂散推高到带外再靠环路滤波器滤除。Wi-Fi、蓝牙、蜂窝芯片里的频率综合器基本都用这个方案。另外近年来在射频直接采样接收机、发射机数字预失真等方向DSM也有不少新玩法。需要顺便说一句遥感领域也有个缩写叫DSM全称Digital Surface Model数字表面模型那是测绘的术语和咱们聊的Delta-Sigma调制完全是两码事。搜索引擎里经常混在一起看到“DSM生成DEM”这类词的时候别串台。2. 环路结构与核心参数设计2.1 一阶DSM怎么拆出来我们先动手把一阶DSM的数学模型推一遍后面仿真要用。一个离散时间一阶DSM包含一个累加器离散积分器、一个1比特量化器和一个单位延迟的反馈DAC。设第n个采样周期积分器输出为v[n]量化器输出为y[n]反馈系数为1输入为x[n]。积分器方程是v[n] v[n-1] x[n] - y[n-1]量化器做一个符号判决如果v[n] 0y[n] 1否则y[n] -1。写成z域量化误差e[n] y[n] - v[n]代入整理就得到上面那个传递函数。注意这个差分方程里反馈用的是上一拍的输出y[n-1]所以有一个周期的延迟。这个延迟对环路的稳定性至关重要去掉这个延迟一阶结构就可能出现振荡。很多初学的人用Matlab的simulink搭模型时反馈通路忘记打勾“单位延迟”结果运行起来波形完全不对就是在这个地方踩坑。从这个结构里还可以直观看出过采样为什么有效假设输入是一个低频的正弦波量化器输出的是一个正负脉冲宽度不等的1比特码流。码流在局部区间的平均值恰好反映了输入电平而码流的精细抖动则对应被推高到高频的量化噪声。码流越密过采样率越高平均值跟随得越细腻低频信噪比就越好。2.2 高阶环路的收益和代价一阶DSM每倍增过采样率只提升9 dB信噪比远远不够。把积分器串联起来构成二阶、三阶甚至更高阶的环路可以让噪声整形的斜率更陡。二阶NTF是(1 - z⁻¹)²每倍增OSR提升15 dB等效约2.5位三阶每倍OSR提升21 dB。往后的收益越来越大但稳定性的代价也随之暴涨。原因在于积分器给环路增加了相位滞后。一阶、二阶系统天生稳定三阶以上如果不加限制高增益下环路会变成振荡器。工程上通常用Lee准则做稳定性判断为了稳定NTF的最大幅值|NTF|∞通常要小于2有些设计会放到2.2但需要详细仿真验证。这个准则没有严格的数学证明却在实际设计中被反复验证有效属于典型的“经验公式”。另一个常见的稳定性判据是看量化器输入信号的分布会不会让积分器饱和。高阶环路里后级积分器的输出动态范围很大一旦饱和环路增益迅速下降噪声整形就会失效严重的时候直接振荡。所以高阶DSM的输入幅度通常限制在满量程的70%~80%这也是为什么DSM的数据手册里满量程输入一般标为-0.5 dBFS甚至更低。多比特量化是缓解稳定性问题的一个有效手段。把1比特比较器换成3位或4位Flash ADC做量化器内部量化步长变小、量化噪声降低、回路增益余量增加同等阶数和OSR下能显著提升SNR。代价是反馈DAC必须是多比特的而多比特DAC的元件失配会直接产生谐波失真必须搭配动态元件匹配DEM技术把失配噪声随机化或整形。所以多比特DSM的模拟前端复杂度一下子上来了。实际设计里常见的是二阶或三阶、4位量化、配合DWA或随机化DEM的架构。2.3 关键参数怎么一起定很多新手看着DSM会懵OSR取多少环路几阶量化器几位这三个参数互相牵制不能一个一个孤立地选。我习惯先明确三个约束目标带宽、目标有效位数、可用的采样率上限。先用目标SNR和带宽推出最低OSR。第一步确定一个保守的量化噪声预算留出6~10 dB余量。第二步根据所选阶数L用带内量化噪声公式反算需要的OSR。比如二阶环路带内噪声近似为π⁴/(5·OSR⁵)·Δ²/12把目标SNR代进去就能解出OSR的初始值。第三步检查这个OSR下采样率是否在工艺和功耗可接受范围。采样率太高数字逻辑功耗和模拟建立时间都会出问题。下面这张表是我常用的一组权衡参考基于中等质量的多比特量化器算是经验值不能当精确设计手册用环路阶数典型OSR范围量化器位数可实现有效位数范围主要代价一阶64~256112~16 bit需要很高OSR对时钟抖动敏感二阶32~1281~414~20 bit对积分器建立精度要求较高三阶16~643~518~24 bit稳定性设计复杂需用DEMMASH 2-116~641~418~22 bit数字噪声抵消电路匹配要求高MASH结构值得单独说一句。它用多个低阶环路线性组合出一个高阶整形效果稳定性比单环路高阶好很多但要求模拟环路的增益完全精确匹配数字噪声抵消滤波器稍有失配就会重新泄露出量化噪声。我在项目里见过不少用MASH翻车的案例基本都是前端的模拟增益匹配没做好。相比之下单环高阶多比特量化DEM在现代工艺下更容易收敛建议优先考虑。3. 从公式到可用电路建模、仿真与实现3.1 用Simulink搭一个一阶DSM理论推导再漂亮不上手仿真始终隔着一层。我自己第一次完整跑通DSM仿真是在Simulink里搭的一阶模型整个过程非常直观推荐你也照着走一遍。在Simulink里新建一个模型添加如下模块Sine Wave设置幅度0.5、频率1 kHz采样时间设为1/fs比如fs 2.56 MHz。Add两个输入一个加号接输入信号一个减号接反馈信号。Discrete-Time Integrator积分器采样时间为1/fs初始条件0。Relay或Sign做1比特量化器阈值0输出±1。Relay比Sign更灵活可以设置开关阈值。Unit Delay反馈通路单位延迟采样时间1/fs。反馈DAC可以直接用Gain模块增益为1把数字±1映射到模拟±1。Spectrum Analyzer或直接记录输出到工作区用MATLAB做FFT分析。这里最容易出错的是各模块的采样时间设置。Simulink默认可能是连续时间或自动继承必须显式把所有离散模块的采样时间设为1/fs否则会得到完全错误的仿真结果。另一个容易踩的坑是Sine Wave模块不要设置成连续时间否则在离散环路的混叠效应下输入频率会被错误映射。正确做法是把Sample time设为1/fs并保证输入频率远低于fs/2。跑完仿真后采集输出码流y在MATLAB里用加窗FFT看频谱输入信号频率上有一个尖峰低频段噪声被压得很低噪声功率从低频到高频逐渐抬升大致呈每十倍频程20 dB上升的斜率这就是一阶整形的特征。再对带内积分做SNR你会发现这个1比特调制器拿到10 kHz带宽内的SNR比直接用一个1比特比较器高出一大截噪声整形的效果立刻显现。3.2 用Python快速验证噪声整形不是所有人都有MATLAB license我平时也会用Python做快速验证。这里给一个最简的一阶DSM仿真代码不依赖任何特定的库numpy加matplotlib就能跑import numpy as np import matplotlib.pyplot as plt fs 2.56e6 # 采样率 2.56 MHz fb 10e3 # 信号带宽 10 kHz OSR fs / (2 * fb) # 过采样率 128 N 65536 # 仿真点数 t np.arange(N) / fs fin 1e3 # 输入正弦频率 1 kHz A 0.5 # 输入幅度小于满量程避免过载 x A * np.sin(2 * np.pi * fin * t) y np.zeros(N) v 0.0 for n in range(1, N): v v x[n-1] - y[n-1] y[n] 1.0 if v 0 else -1.0 # FFT分析 window np.hanning(N) Y np.fft.rfft(y * window) / (N * np.mean(window)) freq np.fft.rfftfreq(N, 1/fs) power 20 * np.log10(np.abs(Y) 1e-12) # 计算带内SNR bin_in int(fin / fs * N) mask (freq fb) (freq ! fin / fs) signal_power np.abs(Y[bin_in])**2 noise_power np.sum(np.abs(Y[mask])**2) snr 10 * np.log10(signal_power / noise_power) print(fSNR {snr:.1f} dB)跑出来SNR大约在50~57 dB之间对应约8.5~9位有效分辨率。看上去不高但请注意这只是一个1比特量化器加一阶环路一颗普通SAR ADC要做到这个有效位数内部DAC和比较器至少得做到14位级别的匹配精度而DSM只用最简单的一比特比较器就达到了。这个实验对理解DSM的价值非常直观。试着把环路改成二阶——在反馈通路加一个积分器让两个积分器串联NTF变成(1 - z⁻¹)²。同样的OSR和输入幅度SNR能直接跳到70 dB以上。你会很直观地看到“阶数对整形的巨大收益”。3.3 从行为模型到晶体管级实现行为级仿真验证通过后下一步是选实现形式。DSM大体分两类离散时间DT和连续时间CT。离散时间实现最常见的是开关电容SC电路靠电容充放电完成积分和采样精度高、对时钟波形要求相对宽松是音频ADC/DAC的主流选择。连续时间实现则用RC或Gm-C积分器省掉了采样开关的建立时间压力能工作在GHz级别的采样率但时钟抖动对内部DAC影响极大通常要采用RZ归零波形来抑制。到电路级几个核心参数必须提前想清楚运放的增益带宽积GBW和摆率SR一阶SC积分器在一个采样周期内需要完成电荷转移运放建立误差必须小于LSB/2。通常要求GBW至少是采样率的5~10倍摆率要大否则信号相关建立误差会转化为谐波失真。积分器电容取值热噪声KT/C要低于量化噪声预算电容大噪声低但功耗面积上升。低功耗设计时可以在前级用较大电容后级逐级缩小。参考电压缓冲器反馈DAC需要精确的参考电压参考缓冲器的噪声和建立时间会直接影响DSM的线性度和噪声。这一点常被忽略实际上很多DSM芯片性能上不去就是死在参考缓冲器上。比较器回踢噪声1比特量化器比较时会把噪声踢回积分器后级积分器可以吸收一部分但需要仔细检查。数字端的抽取滤波ADC或插值滤波DAC同样关键。ADC侧要用多级级联的CIC滤波器加补偿FIR把带外整形噪声滤掉同时把采样率降到奈奎斯特率DAC侧则要先数字插值再由DSM编码成低比特流。滤波器的通带纹波和阻带抑制要留够不然前级整形白做了。4. 工程中最容易踩的坑与排查方法4.1 稳定性问题一不留神就振荡高阶DSM的稳定性是个玄学理论只能给边界最终得靠仿真扫描。我最常用的方法把输入幅度从0.1扫描到满量程观察积分器输出波形和输出码流看有没有出现低频大幅振荡或周期性长串同号码。出现振荡时波形往往不是正常的小幅抖动脉冲而是几十上百个连续同一极性码型。定位到不稳定后优先做三件事。一是降低输入幅值这是最粗暴但有效的办法。二是检查NTF增益LTspice里不好直接看Simulink里可以给量化器加Test Point把v[n]频谱打出来如果低频出现异常的共振峰多半是NTF峰值过高。三是调整零点位置在二阶环路里加入谐振零点在带内边缘放一对共轭零点能在不牺牲稳定性的前提下把带内噪声再压几个dB。实践中还有一个隐蔽的坑高阶环路里如果有一级积分器先饱和环路会在某个大信号瞬态时突然失稳恢复后又重新收敛表现出来就是SNR明显下降但波形不是完全发散。这种“准不稳定”状态最坑人因为表面看输出还是正弦频谱也不杂乱但你就是达不到设计指标。遇到这种情况去检查积分器动态范围给后级积分器增加限幅或者重新分配各级增益。4.2 输出码流里的idle tone一阶DSM在直流小信号输入时输出码流会出现周期性的重复模式比如固定的0101或001011序列频谱上对应一串离散杂散它不是白噪声而是与人有关的“音调”。这就是idle tone也叫极限环振荡。音调在带内时会直接恶化SNR听感上还特别刺耳。治理idle tone的办法有几个加高频小幅度的抖动信号dithering是最简单的把dsm的输入或量化器阈值扰动一下就能破坏周期性用多比特量化器也能大幅抑制升级到二阶以上环路后带内idle tone会显著减少但仍可能存在低频散点。我习惯在仿真阶段就直接给环路加一个幅度为0.25 LSB的高频抖动用实际频谱验证效果再决定要不要保留。Idle tone还有一个容易误导的变种当输入频率与采样率成整数倍关系时量化噪声会相干堆叠在几个固定频点上聚成尖峰。办法是用相干采样让输入频率与FFT分辨率对齐或者输入频率非整数倍的采样周期让噪声尽量去相关。4.3 时钟抖动对DSM的伤害比想象中大DSM的性能上限往往由时钟抖动决定。量化器采样时刻的抖动等效为在输入信号上叠加了一个与信号斜率成正比的噪声这个噪声直接落在带内滤波去不掉。对于连续时间DSM内部DAC脉冲的抖动影响更大因为反馈波形是模拟的脉冲宽度抖动直接变成误差电荷。我见过一个连续时间带通DSM仿真理想时钟SNR有75 dB一加上200 fs RMS的时钟抖动SNR直接掉到62 dB。排查时先在频谱上找特征抖动导致的噪声在带内是平的不会像量化噪声那样呈现整形趋势。如果带内底噪是平的且随时钟源变化基本就是抖动主导。缓解手段有几层。最简单的就是选低抖动时钟源对音频DSM用晶振足够。对GHz级连续时间DSM必须仔细设计PLL环路带宽和VCO相位噪声必要时用RZ波形把DAC反馈脉冲变得对抖动不敏感。另一个工程技巧是把内部采样时钟和反馈DAC的时钟严格同源且走线尽量短减少时钟偏斜带来的确定性误差。4.4 常见问题速查表现象可能原因排查方向常用对策输出频谱底噪抬高无整形趋势时钟抖动过大换用低抖动时钟源测试锁相环优化降低VCO噪声直流输入时输出码型周期性出现idle tone极限环观察时域码型做频谱散点分析加dithering改用多比特量化输入幅度稍大即发散失稳积分器饱和或NTF峰值过高逐级观察积分器时域波形降低输入幅度优化NTF稳定系数谐波失真高SNR比预期低很多DAC失配或运放建立不足检查DAC波形降低采样率对比用DEM技术提高运放GBW频谱出现边带对称的杂散采样时钟与输入混叠验证输入频率是否小于fs/2-带宽调整输入频率检查抗混叠滤波前级积分器输出锯齿巨大输入过载或反馈系数不对计算输入幅度相对满量程比例限制输入在70%~80%FS内离散时间DSM仿真速度过慢过采样率太高点数不够增大OSR/减少仿真点数权衡用多速率或近似模型预研5. 上手DSM之前最想叮嘱的几件事如果这篇文章能让你少走一点弯路我最高兴的就是下面这些经验能被你记住。先从一阶和二阶开始。很多工程师一上来就奔着四阶5比特去结果是稳定性调不明白、DEM做不好、仿真还仿真不出来往往三个月后灰头土脸退回二阶。实际上二阶环路加3~4比特量化在多数应用里已经足够好先把二维稳定性和工艺偏差带来的裕量吃透再考虑升级拓扑。仿真阶段推荐用MATLAB的delsig工具箱或者Richard Schreier开源的Delta-Sigma Toolbox里面synthesizeNTF、simulateDSM、calculateSNR这些函数非常成熟。我写代码前习惯先用它跑一遍理想调制器得到SNR上限再叠加非理想因素。这样能快速判断性能天花板在哪里避免后面在电路级反复试错。最后分享一个我个人踩过多次的坑千万注意行为级仿真和电路级仿真之间的步长和时序语义差异。同样的环路Simulink里用的是离散时钟驱动Spectre里用开关电容跑出来的SNR可能相差3~5 dB。这不是算法错了而是时域采样的具体位置、参考电压建立误差、寄生电容这些因素对高阶整形环路的影响被放大了。建议在行为级模型里就加入非理想参数比如有限增益、有限带宽、噪声系数把裕量留够而不是指望电路级调出奇迹。DSM这个方向说难是难在系统权衡和无数细节说易也易在核心原理足够优雅。你只要把过采样、噪声整形、稳定性这三件事吃透了再看各种DSM变种都会觉得万变不离其宗。希望这篇长文能帮你把骨架搭起来剩下的血肉咱们在各自的示波器和仿真日志里慢慢填。