☰
18位Sigma-Delta DAC:128倍过采样与五阶噪声整形实践
2026/10/28 3:11:36 网站建设 项目流程

简介:这份资源是哈尔滨工业大学2014年微电子学与固体电子学专业硕士学位论文《18bits Sigma-Delta DAC的设计》,面向具备电子工程基础、熟悉数模转换与Sigma-Delta技术的研发人员与研究生,可用于音频处理、工业控制等高精度大带宽转换场景的原理学习与设计参考。论文从国内外研究现状入手,系统梳理DAC工作原理,选定一位量化五阶全前馈结构调制器与128倍过采样率,配合三级数字FIR插值滤波器和六阶贝赛尔模拟低通滤波器,并基于GF 0.35μm CMOS工艺完成逻辑综合、布局布线、模拟开关电容电路设计及手工版图,最终仿真在-6dB输入下取得98.26dB信噪比。资源包共1个PDF文件,约3.03MB,便于按章节查阅系统指标、模块建模与仿真结论。目前已有108人学习,适合作为Sigma-Delta DAC架构选型与MATLAB行为级建模的完整参考范本。

1. 1 位输出凭什么标 18 位:Sigma-Delta DAC 的反直觉起点

先看一个矛盾:一份设计文档标称 18 位分辨率、100kHz 信号带宽、98dB 以上信噪比,但它末端的数模转换单元只有 1 位——输出线上永远只有两个电平。真正把精度做出来的,不是那个 1 位 D/A,而是它前面的 128 倍过采样、五阶噪声整形,以及后面那个六阶模拟低通滤波器。换句话说,精度是被“搬到带外再抹掉”的,不是被“精密匹配”出来的。这套机制值得搞懂,因为它解释了现代高精度数模转换为什么能把模拟电路的负担大规模转移到数字侧。

2. 噪声整形:被赶出信号带的那部分噪声去哪了

量化误差常被当成随机噪声处理:一个 N 位量化器,步长 Δ,误差均匀落在 ±Δ/2 之间,总功率恒为 Δ²/12,与输入信号无关。这个模型不完美,但它指出一个关键事实——量化噪声的总量是固定的,任何“提高精度”的手段,本质上都不是减少噪声,而是重新分配噪声在频域上的位置。Sigma-Delta 的两大支柱,过采样负责摊薄,噪声整形负责搬运。

2.1 过采样换信噪比:白噪声被摊到更宽的带宽上

奈奎斯特采样下,Δ²/12 这团噪声功率均匀铺在 0 到 fs/2 之间,信号带宽内占多少,取决于信号带宽占多大比例。一旦把采样率提到 2·fb·OSR,同样的噪声总功率被摊到 OSR 倍宽的频带上,落进 [0, fb] 的那部分按 1/OSR 缩小。

换算成 dB,过采样率每翻一倍,带内信噪比提升约 3dB。128 倍过采样只值 21dB,一位量化的理论峰值信噪比也只有 7.78dB,两者相加不到 29dB,离 98dB 差着整整 70dB。差额全部由噪声整形补上,这也是为什么这类架构里调制器的阶数比过采样率更值得斟酌。

注意:把量化噪声当白噪声,前提是输入足够“忙”。输入接近直流或者周期性极强时,量化误差会和信号强相关,白噪声假设失效,带内就会冒出离散单音,后面避坑章会专门讲这个。

2.2 噪声传递函数:一条塞在环路里的高通滤波器

把调制器画成线性模型:输入经前馈路径到量化器,量化器输出经反馈路径回到积分器链的入口。对量化噪声而言,它只看到从量化器输入到输出的那条通路;对信号而言,它看到的是另一条。于是同一个环路给出两个传递函数,STF(信号)和 NTF(噪声)。

五阶全前馈结构的 NTF 在形式上是一条高通:

NTF(z) = (1 - z^-1)^5 / D(z)

(1 - z^-1)^L在 z=1(直流)处有 L 阶零点,意味着带内噪声被压到极低;在 z=-1(fs/2)处增益最大,噪声被推到高频。零点阶数决定整形斜率,每增加一阶,带内噪声随过采样率下降的速度就多 3dB/倍频。理想线性模型下,L 阶整形在 OSR 翻倍时带内噪声降 3(2L+1) dB——这个数字看起来过于美好,因为它假设量化器是一个增益恒定的线性放大器,而一位量化器根本不是。

分母 D(z) 由反馈系数和前馈系数共同决定,它要保证环路稳定。全前馈结构里,信号从输入直接前馈到量化器输入端,也前馈到每一级积分器的输出求和点,而反馈只有一条:从量化器输出回到第一级积分器的输入。这个拓扑带来一个非常实际的收益——信号不穿过积分器链,只有量化噪声穿过。各级积分器的输出摆幅因此被压得很小,运放的输出摆幅和线性度要求跟着放松,这对模拟部分是实打实的省事。

2.3 为什么是五阶、一位、单环全前馈

结构选型上有三条正交的轴:单环还是级联(MASH)、一位还是多位、前馈还是反馈。这份设计在三条轴上分别选了单环、一位、全前馈,三个选择都有明确的代价。

单环对级联:级联结构把多个低阶调制器串起来,用数字逻辑抵消前级的量化噪声,理论上能用低阶环路拿到高阶整形,且天然稳定。但级联结构的 STF 不平坦,模拟实现中前级量化器的泄漏会直接污染抵消结果,对元件匹配敏感。单环高阶的稳定性要靠系数设计来保证,一旦设计成功,它对模拟失配的容忍度更高。

一位对多位:多位量化能显著降低量化噪声,还能改善环路稳定性,代价是反馈路径上的 D/A 必须精确——多比特 D/A 的元件失配会直接引入非线性,通常要用动态元素匹配之类的技术去修。一位量化把这个麻烦彻底消掉:两个电平之间的比值是 1,不存在匹配问题,D/A 天生线性。代价是量化噪声极大,必须靠高阶整形去压,而高阶加一位恰好是稳定性最紧张的那一组组合。

五阶是这条张力线上的落点。阶数再往上,一位量化器的等效增益随输入幅度剧烈变化,环路易进入大信号振荡,稳定输入范围(也就是允许的最大输入幅度)迅速收窄。这份设计把输入幅度限制在 -6dBFS,正是给稳定性留余量的直接体现。

2.4 行为级先跑通,再谈 RTL

系统级阶段要做的事,是在写任何一行 RTL 之前,用浮点模型把阶数、系数、过采样率、输入幅度这四个量调到互相自洽。下面是这类调制器行为级模型的骨架,结构上刻意贴近后面 RTL 的实现方式,不引入 MATLAB 工具箱里的现成函数,便于逐行对照。

% 五阶全前馈一位量化调制器:定点化之前的行为级验证 N = 2^16; % 仿真点数取 2 的幂,便于 FFT 对齐栅格 OSR = 128; fs = 25.6e6; % 100kHz 带宽 x 2 x 128 fbin = 37 * fs / N; % 取质数倍频点,避开 FFT 栅格泄漏 x = 0.5 * sin(2*pi*fbin*(0:N-1)/fs); % 0.5 幅度约合 -6dBFS b = [0.5 0.25 0.125 0.0625 0.03125]; % 前馈系数,决定 NTF 零点分布 w = zeros(1,5); % 五级积分器状态 y = zeros(1,N); for n = 1:N v = x(n) + b * w.'; % 全前馈求和,信号不穿积分器 y(n) = sign(v); % 一位量化,输出 +1 / -1 % 只有第一级吃输入与反馈,后级仅累加前级输出 w = [w(1) + x(n) - y(n), ... w(2) + w(1), w(3) + w(2), ... w(4) + w(3), w(5) + w(4)]; end % 带内信噪比:把 FFT 结果里 [0, fb] 之外的 bin 全部丢掉再比

b这组系数不是随便写的,它的取值决定了 NTF 分母的极点位置,进而决定环路的稳定裕度;实际设计里通常用综合工具反解,或者从巴特沃斯/切比雪夫原型映射过来,再回到时域扫输入幅度,找出不振荡的最大值。sign()那行是模型里最“假”的地方——真实量化器有比较器失调和亚稳态,行为级看不出来,只有到电路级才会暴露。

仿真输出的频谱上会看到一条从低频往上爬的噪声曲线,爬升斜率就是整形阶数,噪声在 fs/2 附近达到峰值。这条曲线在带内的积分值,除以信号功率,就是 SNR。系数改动之后,这条曲线的形状会变,但要小心:带内噪声降下去不代表设计变好了,稳定性边界可能同时收窄了。

3. 三级 FIR 级联插值:128 倍是摊出来的,不是一次乘出来的

插值滤波器的任务是把采样率从 2·fb 抬到 2·fb·OSR,也就是 200kSa/s 抬到 25.6MSa/s。数字域插值的方法是先在样点之间补零,再用低通滤波器把补零引入的高频镜像压掉。补零本身不产生新信息,它只是把原有频谱在频域上复制了 OSR 份,滤波器负责只留基带那一份。

3.1 镜像的位置决定了过渡带有多少余量

补零后,原始频谱在 0 到 fs_orig 之间有一份,在 fs_orig 到 2·fs_orig 之间有一份镜像,依此类推。低通滤波器的通带要做到 fb,阻带起点要压在 fs_orig - fb 以下,两者的比值就是过渡带的宽窄。一级完成 128 倍插值,意味着滤波器要工作在 25.6MHz,过渡带极窄,抽头数会膨胀到不可接受——乘法和存储都在最高时钟域跑,功耗和面积都不划算。

分级的意义就在于此:把一次难以实现的窄过渡带,换成若干次宽松的宽过渡带。常见的做法是把倍数从大到小排列,前级用结构极简的梳状滤波器(CIC)承担大倍数,后级用半带滤波器做精修。每一级的过渡带相对宽松,因为它们各自的采样率还不高,归一化到自身采样率上,指标就好做。

3.2 半带滤波器:一半系数为零带来的硬件红利

半带滤波器是 2 倍插值场景的标准件。它的冲激响应除了中心抽头之外,所有偶数位置的系数严格为零:

h[2k] = 0, k ≠ 0

补零之后做卷积时,落在零系数位置上的乘加项可以直接跳过。再叠加线性相位 FIR 的系数对称性h[k] = h[N-1-k],实际需要的乘法器数量大约是同阶通用 FIR 的四分之一。这个红利在半带级数多的时候非常可观,也是三级级联方案在面积上能站得住脚的核心理由。

// 半带滤波器两相分解:插零后的卷积拆成偶/奇两条支路 // 偶相位:除中心抽头外系数全零,输出直接是延迟对齐后的输入 // 奇相位:非零抽头全部落在这里,对称预加后乘法量再减半 always @(posedge clk or negedge rst_n) begin if (!rst_n) begin shift <= 0; phase <= 1'b0; end else begin shift <= {shift[TAPS-2:0], x_in}; // 输入样点移位链 // 对称预加:shift[k] + shift[TAPS-1-k],共用同一个系数 pair_sum <= shift[0] + shift[TAPS-1] + shift[1] + shift[TAPS-2]; // 实际按 TAPS/2 组展开 // 偶相位透传,奇相位做乘加,两相各跑一个时钟 y_out <= phase ? (pair_sum * h_odd) : shift[TAPS/2]; phase <= ~phase; end end

shift[TAPS/2]是中心抽头对齐的位置,偶相位直接把它送出去,是半带滤波器最“白拿”的一步。pair_sum的位宽必须比输入宽,因为预加会产生一位增长;h_odd用 CSD 编码可以把常数乘法做成少量移位加,进一步省掉乘法器。这里最容易被忽略的是位宽:预加、乘加、累加三级各自有增益,任何一级不预留足够的头寸,综合出来的结果就会在特定输入下溢出翻转,而溢出在频谱上表现为突然抬高的噪底,很难和调制器不稳定区分开。

3.3 位宽增长与舍入噪声的累积

插值链每一级都会增加有效位宽:滤波器系数的增益、多相分支的累加,都会让数据字变宽。变宽的部分不能无限保留,必须在级间截位,而截位就是引入舍入噪声。这些噪声落在带内,会直接吃掉系统信噪比。

处理思路是把噪声预算当成一条链来分。假设整链允许的带内噪声功率对应 100dB 信噪比,那么插值滤波器各级、调制器、D/A、模拟滤波器各自分到一份,互不挤占。截位的位置越靠前,噪声被后续增益放大的倍数越小,但保留位宽的成本越高。这份设计把 18 位作为对外位数,内部各级的实际数据通路宽度会明显大于 18 位,多出来的部分就是给舍入噪声留的余量。

级间位置主要噪声来源对带内信噪比的威胁
插值第一级输出补零镜像残留镜像落回带内,表现为固定杂散
插值级间截位舍入噪声宽带抬底,与级数正相关
调制器输入前级量化误差被整形搬到带外,威胁较小
1 位 D/A 后时钟抖动、开关电荷注入直接落带内,不可整形

表格里最后一行是关键:噪声整形只对调制器内部的量化噪声有效,D/A 之后引入的任何误差都不再享受整形红利,只能靠模拟滤波器的那点抑制。这也是模拟部分比数字部分更难做的原因。

4. 模拟端:开关电容、不交叠时钟与贝塞尔

到了 1 位 D/A 这一步,信号在形式上已经变成了一串高速脉冲,它的平均值才对应原始波形。模拟部分要做两件事:把这串脉冲变成有明确基准电平的模拟量,再滤掉 fs 附近那一大片整形后的噪声。

4.1 1 位 D/A 与单双端转换的配合

1 位 D/A 的结构简单到几乎不能叫电路:两个基准电平之间的一对开关,由调制器输出控制。它的精度完全取决于基准的干净程度和开关的对称性——因为没有匹配问题,所以也不需要校准。

单双端转换紧接在后面。差分信号的价值在于抑制共模干扰和偶次谐波,而 1 位 D/A 输出的仍是单端形式,需要转成差分再送进开关电容滤波器。转换环节的失配会直接产生二次谐波,这是差分链路里最典型的非线性来源,靠版图对称和开关尺寸加倍来压。

4.2 两相不交叠时钟:为什么“不交叠”是硬约束

开关电容电路靠电荷在电容之间转移来完成滤波,转移的时机由两相时钟控制。采样相 φ1 把输入电荷采到电容上,放大相 φ2 把电荷送到积分电容。如果 φ1 和 φ2 同时为高,输入和输出就被直接短路,电荷从输入一路冲到输出,采样精度彻底失效。

所以两相时钟必须保证:φ1 下降之后,经过一段死区时间,φ2 才上升;φ2 下降之后,同样要等一段,φ1 才上升。这段死区就是“不交叠时间”。

阶段φ1φ2电路状态
采样高低输入接到采样电容,积分电容保持
死区 1低低全部开关断开,电荷暂存
放大低高采样电容接到运放虚地,电荷转移
死区 2低低等待下一次采样

死区时间不是越长越好。太短,开关还没完全关断另一相就导通了,出现直通,输出上会看到台阶状的毛刺;太长,运放的建立时间被压缩,电荷转移不完整,等效于增益误差,表现为滤波器频响偏离设计值。这个时间窗口通常要放在工艺角、温度、电源电压的联合扫描里取值,而不是在典型条件下调好就收工。

4.3 六阶贝塞尔:放弃陡峭,换群时延平坦

模拟低通滤波器的选型有一个容易被忽视的维度:不只是看幅频响应的滚降陡不陡,还要看相频响应。巴特沃斯幅频最平坦,切比雪夫滚降更陡但有通带波纹,贝塞尔的最大特点则是群时延最平坦——通带内各频率的延迟基本一致。

对 DAC 输出来说,这一点很重要。整形后的噪声集中在 fs 附近,理论上需要一个足够陡的滤波器把它们压下去;但信号本身要保证波形不失真,群时延不平坦会让方波边沿振铃、脉冲展宽,这在工业控制和波形发生类应用里是硬伤。贝塞尔牺牲了滚降速度,换来相位线性,代价是必须把阶数提到六阶,且对过采样率有依赖——只有 OSR 足够高,噪声才被推得足够远,缓滚降的滤波器才够用。

这份设计把 OSR 定在 128、模拟滤波器定在六阶贝塞尔,这两个参数是绑在一起决策的:过采样率再降,贝塞尔就压不住带外噪声;阶数再降,阻带衰减不够。反过来,如果把模拟滤波器换成切比雪夫,阶数可以降,但群时延波动带来的波形失真无法用数字手段补偿。

5. 避坑与排查:混合信号链路最容易翻车的五个地方

5.1 行为级信噪比漂亮,定点 RTL 一跑掉好几个 dB

现象:浮点模型跑出 110dB 以上的带内信噪比,换成定点位宽后 RTL 仿真只剩 95dB 上下,频谱整体抬底,没有明显杂散。

原因:MATLAB 里所有运算默认双精度,系数量化和级间截位的误差完全不存在;定点化之后,前馈系数的有效位数不够会改变 NTF 零点位置,积分器累加位宽不够会在特定输入下溢出,两种效应都表现为宽带噪底抬高。

解决:做位宽扫描,把每一级的数据位宽、系数位宽当成变量,从宽到窄逐级收,每收一次跑一遍带内信噪比,找到拐点再留一到两位余量;同时把行为级模型也改成定点实现,两边逐点比对波形,先保证 bit-true,再谈指标。

5.2 频谱上冒出离散杂散,而不是平滑爬升的噪声曲线

现象:输出频谱里出现若干根孤立的尖峰,幅度在 -40dBc 到 -60dBc 之间,位置不随输入频率线性移动。

原因:调制器进入大信号振荡或者极限环。一位量化器在高阶环路里,输入幅度超过稳定边界后会周期性饱和,环路退化成低频振荡器;另一种情况是系数缩放不当,积分器在启动瞬间就冲到饱和,之后再也回不到线性区。

解决:把输入幅度从 -6dBFS 继续往下退,观察杂散是否消失,确认是稳定边界问题;在积分器输出加饱和检测,仿真时打印各级峰值,看哪一级先顶到电源轨;必要时在量化器前注入小幅伪随机抖动,打断极限环。

5.3 零输入或极小信号时带内出现单音

现象:输入接零,输出频谱在几千赫兹处有一根稳定的单音,幅度不大但足以让空闲信道指标不合格。

原因:一位量化器在输入接近零时,量化误差与信号强相关,白噪声假设失效,环路把这种相关性放大成周期性图案,也就是常说的空闲音。这是 1 位量化的固有缺陷,多位量化靠更多的电平数缓解,一位只能靠抖动。

解决:在量化器输入注入幅度极小的抖动信号(dither),把相关性打散成随机噪声;抖动的幅度要控制在不明显恶化带内信噪比的范围内,通常取量化步长的几分之一。另一种做法是在系统层面接受这个单音,用应用侧的静音检测规避。

5.4 差分输出的偶次谐波偏高

现象:单端仿真时谐波指标正常,接成差分之后二次谐波反而变差,三次谐波没变化。

原因:单双端转换环节的两条支路失配,或者 1 位 D/A 的两个开关电荷注入不对称。差分结构抑制的是偶次谐波,前提是两条支路完全对称;一旦失配,原本被抵消的二次分量就漏出来了。

解决:开关尺寸加倍并加 dummy 开关吸收电荷注入;采样开关改用下极板采样,把电荷注入的影响从采样电容上移开;版图上两条支路严格镜像对称,走线长度、寄生电容尽量一致。

5.5 时钟馈通导致噪底抬高

现象:整链仿真信噪比比预期低 3dB 左右,频谱上没有明显杂散,就是噪底整体偏高,且随温度变化。

原因:两相不交叠时钟的死区时间不够,开关在切换瞬间出现短暂直通,电荷从输入直接漏到输出;或者死区时间过长,运放建立不完整,等效于每次转移都留下残余电荷,逐次累积成随机误差。

解决:把死区时间做成可配置参数,在工艺角、温度、电压的联合扫描下扫一遍,找到信噪比最优的窗口;时钟驱动链上加缓冲,保证两相时钟的边沿陡度一致,避免边沿缓慢导致的“软交叠”。

6. 取舍:98.26dB 与 100dB 之间那 1.74dB

设计指标写的是带内信噪比大于 100dB,最终混合信号仿真在 -6dBFS 输入下给出 98.26dB。差 1.74dB,不算失败,但值得拆开看这 1.74dB 花在哪了。

第一个来源是输入幅度。所有信噪比数字都必须带上输入条件,-6dBFS 相比满量程本身就少了 6dB 信号功率,这是为了让一位量化器远离稳定边界而主动付出的代价。第二个来源是运放的有限增益:开关电容积分器在放大相并不能把电荷完全转移到积分电容,残余比例与运放开环增益成反比,这部分误差直接表现为增益误差和带内噪声。第三个来源是时钟抖动,采样时钟的相位噪声在 1 位 D/A 输出上等效为随机的脉冲宽度变化,落进带内就是白噪声,而且没法被噪声整形抑制。

这三个因素叠在一起,量级恰好在一两个 dB 上下。想把它们压下去,路径很明确:把过采样率从 128 提到 256,带内噪声立刻降 3dB 以上,但时钟频率翻倍、数字功耗翻倍、模拟滤波器带宽要求跟着变;把调制器阶数从五阶提到六阶,理论上收益更大,但一位量化下六阶环路的稳定输入范围会收窄到 -8dBFS 甚至更低,信号动态范围反而被吃掉。所以停在 128 和五阶,是一个保守但自洽的落点。

真正决定这类设计成败的,往往不是这些纸面上的指标,而是验证顺序。先行为级确认结构和系数,再定点确认位宽,再 RTL 确认逻辑,再电路级确认模拟非理想,最后混合信号一起跑——每一步都有独立的观测手段,每一步的偏差都能定位到具体模块。跳过任何一步,后面就得靠猜。血泪经验是:定点化的那一步最容易被当成走过场,结果往往就是它把几个 dB 悄悄吃掉了。

从那以后我每次做这类混合信号链路,都强制先跑一遍行为级到定点的逐点比对,波形对不上就不往下走,哪怕信噪比数字看着还行。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询