搞模数混合设计这些年,如果要我选一个“解决采样瓶颈最优雅的方案”,我肯定投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。这也是为什么做传统逐次逼近型(SAR)ADC时,每提升一位有效位数,都要让比较器、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环路里,还能利用环路的高增益抑制机械噪声和非线性。
射频领域则是另一条线。锁相环里的分数分频器常用多级噪声整形(MASH)DSM来控制分频比,把小数杂散推高到带外,再靠环路滤波器滤除。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] >= 0,y[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~256 | 1 | 12~16 bit | 需要很高OSR,对时钟抖动敏感 |
| 二阶 | 32~128 | 1~4 | 14~20 bit | 对积分器建立精度要求较高 |
| 三阶 | 16~64 | 3~5 | 18~24 bit | 稳定性设计复杂,需用DEM |
| MASH 2-1 | 16~64 | 1~4 | 18~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(f"SNR = {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变种都会觉得万变不离其宗。希望这篇长文能帮你把骨架搭起来,剩下的血肉,咱们在各自的示波器和仿真日志里慢慢填。