资讯动态

三阶连续时间Delta-Sigma ADC的Matlab仿真与噪声整形设计

发布时间:2026/10/18 3:22:32 来源:尧图企业网站定制
简介这是一份面向模拟集成电路与信号处理学习者的3阶连续时间Delta-Sigma ADC Matlab仿真代码适合具备一定ADC理论基础、希望深入理解CTSDM架构与性能评估的工程师或研究生。资源包共10个文件包含3个m脚本、3篇pdf参考论文、1个mdl Simulink模型、1个xlsx数据表、1个txt说明及1张png操作示意图整体约3.14MB覆盖时序仿真、频域分析与功率谱计算等核心环节。代码以3阶3位量化、20倍过采样、400MHz采样率为典型配置可帮助读者观察积分器级联对量化噪声的整形效果并借助FFT与功率谱密度评估信噪比和有效位数。配套论文与说明文档进一步补充了设计背景与参数依据便于对照模型理解调制器行为。目前已有960人学习适合作为ADC建模入门与性能验证的实践参考。1. 三阶连续时间 Delta-Sigma ADC为什么它比离散时间版本更难调很多人第一次在 Matlab 里搭 Delta-Sigma ADC 模型时都会选离散时间结构——开关电容、采样保持、差分方程一切都干净利落。但一旦把场景切到连续时间事情立刻变得玄学起来环路滤波器不再是几个系数相乘而是一组连续时间积分器量化器前面那个采样器到底放在哪、反馈 DAC 的脉冲形状怎么定、环路延迟怎么补偿每一个选择都会让噪声传递函数NTF偏离教科书上的理想曲线。三阶连续时间 Delta-Sigma ADC 之所以值得单独拿出来讲是因为它把过采样、噪声整形、连续时间积分和反馈延迟这几个机制拧在了一起任何一个环节理解不到位仿真出来的频谱就会在某个频点突然翘起来而你根本不知道是哪一级积分器在捣乱。这份 Matlab 仿真代码的价值就在于它把这条从连续时间环路到离散等效模型的映射关系用可运行的方式摊开给你看。2. 连续时间环路滤波器为什么积分器系数不能直接照搬离散时间2.1 从 s 域到 z 域的等效变换连续时间 Delta-Sigma 调制器的核心是一个连续时间环路滤波器通常由级联的积分器构成。三阶结构意味着环路滤波器在 s 域有三个极点理想情况下全部落在原点形成三个级联的积分器。问题在于量化器和反馈 DAC 是离散时间行为——量化器在每个时钟周期采样一次DAC 在每个周期输出一个脉冲。这就导致整个系统是一个连续时间滤波器被离散时间事件打断的混合系统。常见的做法是把这个混合系统等效成一个全离散时间的环路方法是把连续时间积分器和反馈 DAC 的脉冲响应一起做脉冲不变变换或双线性变换。但这里有个坑不同的 DAC 脉冲形状不归零、归零、半延迟归零会改变等效离散时间环路滤波器的系数。如果你直接拿离散时间 Delta-Sigma 的系数去套连续时间结构等效出来的 NTF 零点位置会偏带内噪声整形效果直接打折。这份 Matlab 代码里环路滤波器的连续时间系数和 DAC 脉冲形状是分开定义的然后通过一个等效变换函数算出离散时间环路系数。这样做的好处是你可以单独改 DAC 脉冲形状观察 NTF 怎么变而不需要重新推导整个环路。% 连续时间三阶环路滤波器系数s 域 % 积分器增益k1, k2, k3 k1 0.5; k2 0.3; k3 0.2; % DAC 脉冲形状1 不归零2 归零3 半延迟归零 dac_mode 1; % 采样周期 Ts 1e-6; % 根据 DAC 脉冲形状计算等效离散时间环路系数 % 这里用脉冲不变变换的近似形式 switch dac_mode case 1 % 不归零 % 不归零脉冲的等效系数需要补偿半个周期的延迟 a1 k1 * Ts; a2 k2 * Ts; a3 k3 * Ts; case 2 % 归零 % 归零脉冲等效系数减半 a1 k1 * Ts / 2; a2 k2 * Ts / 2; a3 k3 * Ts / 2; case 3 % 半延迟归零 a1 k1 * Ts * 0.75; a2 k2 * Ts * 0.75; a3 k3 * Ts * 0.75; end这段代码的关键在于dac_mode这个参数。不归零脉冲意味着 DAC 在整个采样周期内都输出当前量化结果这会在环路里引入半个周期的额外延迟归零脉冲在每个周期后半段强制输出为零减少了延迟但增加了量化噪声的带内分量半延迟归零则是折中方案。代码里用简单的比例因子来近似这种影响实际推导需要做积分运算但作为仿真模型的起点这个近似已经能让你看到系数变化的趋势。2.2 环路延迟补偿为什么是必须的连续时间 Delta-Sigma 调制器里有一个绕不开的问题量化器从采样到输出有延迟DAC 从接收到量化结果到输出脉冲也有延迟。这些延迟在环路里累积会吃掉相位裕度严重时直接让 NTF 在带内出现峰值噪声整形失效。常见的补偿手段是在反馈路径里插入一个额外的延迟或者调整积分器的系数来抵消。这份 Matlab 代码里环路延迟是通过一个显式的延迟参数来建模的你可以把它设成 0、0.5 个周期或 1 个周期然后观察输出频谱的变化。当延迟设为 0.5 个周期时等效离散时间环路系数需要做相应的旋转补偿否则 NTF 的零点会偏离单位圆。% 环路延迟单位采样周期 loop_delay 0.5; % 补偿后的等效离散时间系数 % 延迟会导致系数向量旋转 if loop_delay 0 % 用旋转因子补偿延迟 rot exp(-1j * 2 * pi * loop_delay * (0:2)); a1 a1 * rot(1); a2 a2 * rot(2); a3 a3 * rot(3); end这里的旋转因子补偿是一种频域近似实际连续时间系统里延迟的影响是非线性的但在过采样率较高时这种近似足够让 NTF 保持在合理范围内。如果你把loop_delay设成 1 个周期而不做补偿仿真出来的频谱会在低频段出现明显的抬升这就是延迟吃掉相位裕度的直接证据。3. 量化器与反馈 DAC噪声整形到底是怎么被“塑”出来的3.1 量化噪声的线性化模型Delta-Sigma 调制器的噪声整形能力建立在把量化器近似成一个加性白噪声源的基础上。这个近似在量化台阶足够小、输入信号变化足够快时成立。三阶连续时间结构里量化噪声经过环路滤波器的整形传递函数变成 NTF 1 / (1 L(s))其中 L(s) 是环路增益。这份 Matlab 代码里量化器用一个简单的取整函数实现但关键在于量化误差被显式提取出来然后注入到环路里。这样做的好处是你可以单独观察量化噪声经过整形后的频谱而不是只看最终输出。% 量化器3 位输出量化台阶为 1 function [y, q_error] quantizer(x, n_bits) % 量化台阶 delta 2 / (2^n_bits - 1); % 量化输出 y round(x / delta) * delta; % 量化误差 q_error y - x; end这个量化器函数返回两个值量化结果和量化误差。在仿真循环里量化误差被反馈回环路滤波器的输入端模拟真实的噪声注入。注意n_bits这个参数——它决定了量化台阶的大小也决定了带内噪声底。三阶整形在过采样率足够高时可以把带内噪声压得很低但量化器位数太少的话高阶整形的收益会被量化噪声的绝对幅度吃掉。3.2 反馈 DAC 的非理想性怎么建模理想 DAC 在每个时钟周期输出一个干净脉冲但实际电路里 DAC 有上升下降时间、时钟抖动、脉冲宽度误差。这些非理想性在连续时间 Delta-Sigma 里比离散时间更敏感因为 DAC 的输出直接和连续时间积分器交互。这份 Matlab 代码里DAC 的非理想性通过两个参数建模脉冲宽度误差和时钟抖动。脉冲宽度误差用一个比例因子表示时钟抖动用一个随机延迟表示。这两个参数都会在输出频谱里引入额外的噪声分量尤其是时钟抖动它会把量化噪声混频到带内。% DAC 非理想性参数 dac_pulse_error 0.02; % 脉冲宽度误差 2% clock_jitter 1e-9; % 时钟抖动 1ns % 在每个采样周期里DAC 输出脉冲宽度有误差 % 时钟抖动导致采样时刻随机偏移 t_jitter clock_jitter * randn(1, n_samples);dac_pulse_error影响的是反馈脉冲的面积面积误差直接等效成环路增益误差会让 NTF 的零点位置偏移。clock_jitter影响的是采样时刻的精度抖动越大带内噪声抬升越明显。这两个参数在代码里是分开的你可以单独打开一个观察它对频谱的贡献这样就能分清到底是 DAC 脉冲误差还是时钟抖动在主导噪声底。4. 仿真循环与频谱分析怎么从时域波形看出噪声整形在 work4.1 时域迭代的每一步在算什么连续时间 Delta-Sigma 的仿真循环和离散时间版本最大的区别在于连续时间积分器的状态更新需要用数值积分方法而不是简单的差分方程。这份 Matlab 代码里用的是前向欧拉法每个采样周期内把连续时间积分器的微分方程离散化然后更新状态。% 初始化积分器状态 state1 0; state2 0; state3 0; % 仿真循环 for n 1:n_samples % 输入信号 u sin(2 * pi * fin * n * Ts); % 第一级积分器 state1 state1 k1 * Ts * (u - feedback); % 第二级积分器 state2 state2 k2 * Ts * state1; % 第三级积分器 state3 state3 k3 * Ts * state2; % 量化器输入 quant_in state3; % 量化 [y, q_error] quantizer(quant_in, 3); % 反馈 feedback y; % 记录输出 output(n) y; end这段循环里state1、state2、state3分别是三级积分器的状态变量。注意feedback这个变量——它来自上一周期的量化输出这就是环路延迟的来源。如果你把feedback改成当前周期的量化输出环路就变成了无延迟的理想结构但实际电路里做不到。前向欧拉法在这里的精度取决于Ts和积分器系数的乘积如果k1 * Ts太大数值积分会不稳定仿真结果会发散。4.2 频谱分析里那些“不该出现”的峰仿真跑完之后对输出序列做 FFT你会看到噪声整形后的频谱低频段被压得很低高频段翘起来。但如果你看到低频段有不该出现的峰或者噪声底比预期高很多通常有几个原因。第一个原因是积分器系数太大导致数值积分不稳定这时候时域波形会先发散再饱和频谱上表现为宽带噪声抬升。第二个原因是环路延迟补偿没做对NTF 零点偏离单位圆带内出现峰值。第三个原因是量化器位数太少量化噪声的绝对幅度超过了整形能压制的范围。这份 Matlab 代码里频谱分析部分用了一个加窗 FFT窗函数是 Hann 窗目的是减少频谱泄漏。如果你不加窗输入信号不是整数周期时频谱上会出现很多旁瓣容易和噪声整形的效果混淆。% 加 Hann 窗做 FFT window hann(n_samples); output_windowed output .* window; % FFT spectrum abs(fft(output_windowed)) / n_samples; spectrum_db 20 * log10(spectrum(1:n_samples/2) eps); % 频率轴 f (0:n_samples/2-1) / n_samples * (1/Ts);eps是为了避免对零取对数。spectrum_db就是你要看的噪声整形曲线。正常情况下低频段应该比高频段低很多斜率大约是 60 dB/decade三阶整形。如果你看到的斜率不对回去检查积分器系数和环路延迟。5. 避坑与排查连续时间 Delta-Sigma 仿真里最容易翻车的几个点5.1 现象时域波形发散频谱一片糊原因前向欧拉法的稳定性条件不满足。连续时间积分器离散化后如果k * Ts太大数值积分会发散。三阶结构里三级积分器级联稳定性条件更苛刻。解决减小Ts或者减小积分器系数。先单独跑一级积分器确认它稳定再逐级加上去。如果必须用大系数换用梯形法或龙格库塔法做数值积分。5.2 现象低频段噪声底比预期高 20 dB 以上原因量化器位数太少或者量化台阶设置不对。三阶整形在过采样率 64 倍时理论上可以把带内噪声压到 -100 dB 以下但如果量化器只有 1 位量化噪声的绝对幅度太大整形后的带内噪声仍然很高。解决增加量化器位数或者提高过采样率。检查quantizer函数里的delta计算是否正确2 / (2^n_bits - 1)这个公式对应的是满量程为 2 的情况。5.3 现象频谱上出现明显的谐波峰原因输入信号幅度太大量化器过载。Delta-Sigma 调制器的输入范围有限超过这个范围后量化器进入饱和谐波失真急剧增加。解决减小输入信号幅度通常留 3 到 6 dB 的裕量。在代码里把u的幅度从 1 降到 0.5 或 0.3观察谐波峰是否消失。5.4 现象环路延迟补偿后 NTF 零点仍然偏移原因旋转因子补偿是一种频域近似在过采样率不够高时误差较大。另外DAC 脉冲形状和延迟补偿是耦合的单独调一个可能不够。解决把loop_delay和dac_mode联合起来调先固定dac_mode扫描loop_delay从 0 到 1找到使带内噪声最低的组合。如果精度要求高用脉冲不变变换的精确形式重新推导等效系数。5.5 现象仿真跑得很慢内存不够原因连续时间仿真需要很小的Ts来保证数值积分精度导致采样点数巨大。如果Ts是 1e-9 秒仿真 1 毫秒就需要 100 万个点。解决用多速率仿真连续时间部分用小步长离散时间部分用采样周期步长。或者先用行为级模型验证环路参数再用晶体管级模型做精细仿真。6. 从仿真到流片连续时间 Delta-Sigma 的设计取舍连续时间 Delta-Sigma ADC 的仿真模型最终要落到电路实现上。这时候你会发现仿真里那些理想化的假设每一个都要付出代价。积分器系数越大电容越小但噪声和失配越严重环路延迟补偿越精确需要的额外电路越多DAC 脉冲形状越复杂时钟要求越高。这份 Matlab 代码的价值不在于它给出了一个可以直接流片的方案而在于它把连续时间环路、量化器、反馈 DAC 和延迟补偿这几个模块的相互作用用可运行的方式呈现出来。你可以改一个参数立刻看到频谱怎么变这种即时反馈是理解噪声整形机制最快的方式。我自己的习惯是每次调连续时间 Delta-Sigma 的环路参数之前先把这份代码里的dac_mode和loop_delay固定成实际电路里最可能用的组合然后只调积分器系数观察 NTF 的变化。等 NTF 形状满意了再回头调量化器位数和过采样率最后才加非理想性。这个顺序能帮你分清哪些参数是主导因素哪些是次要因素。从那以后我每次做连续时间 Delta-Sigma 仿真都强制走一遍这个流程避免在非理想性上浪费时间。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑