DDS:用数字精确合成任意频率波形
更新时间:2026-09-12。本文是「集成电路大类 · 芯片设计」**进阶层(intermediate)**数字逻辑第五十六篇。分频只能从固定时钟得到几个整数分频,模拟压控振荡器调频不精确。需要精细、快速、相位连续地产生正弦/任意波形(通信调制、函数发生器、扫频)时,用的是 DDS/NCO(直接数字频率合成/数控振荡器)——核心只是一个加法器、一个寄存器和一张表。
本文要回答的问题
- 一个相位累加器加一张正弦表,为什么能产生任意频率?
- 输出频率和频率控制字(FTW)的关系是什么,频率分辨率为什么能做到极细?
- 为什么 DDS 改频率是「即时且相位连续」的,PLL 换频却慢?
- 相位截断误差、幅度量化误差从哪来,杂散(spur)怎么治?
- 输出频率为什么不能超过采样率一半?什么时候用 CORDIC 替代表?
一、结构:累加相位 → 查表得幅度 → DAC
FTW ──►(+)◄──┐ 高位 A ──►[sin LUT]──► y ──► DAC ──► 平滑低通 ──► 正弦
┌──┴───┐ (相位→幅度)
│累加器│◄── 寄存器(每时钟 +FTW)
└──────┘- 相位累加器:N 位寄存器,每个采样时钟把当前值加上频率控制字
FTW,自然回绕(模 2^N)。它表示「相位在单位圆上的位置」,从 0 走到 2^N−1 再回 0 就是一个完整周期(相位 0~2π); - 相位→幅度表:取累加器高位 A 位作地址,查预先存好的正弦幅度 LUT(查表实现函数),得到本拍波形样点;
- DAC + 重建滤波器:把数字样点变模拟,滤除采样镜像。只做数字部分时常叫 NCO,加 DAC 才是完整 DDS。
二、频率与分辨率:一个优雅的线性关系
每时钟相位前进 FTW 个码(满刻度对应 2π),累加器走完一圈(2^N 个码)产生一个波形周期,需要 2^N / FTW 个时钟,故
fout = FTW · fclk / 2^N,频率分辨率(FTW 加 1)Δf = fclk / 2^N。
N=32、fclk=100MHz 时,Δf ≈ 0.023Hz——不用动任何模拟元件,靠把 FTW 取大就能得到毫赫兹级的频率步进,这是 DDS 相对模拟方案最致命的优势。调频率就是改加法器的一个输入常数。
logic [N-1:0] phase;
always_ff @(posedge clk) phase <= phase + ftw; // 相位累加,自然回绕
assign lut_addr = phase[N-1 -: A]; // 截高 A 位查表
// sin_lut[k] = round(AMP*sin(2π·k/2^A)),存 ROM 或用 CORDIC 算
assign y = sin_lut[lut_addr];三、相位连续与快速跳频
改 FTW 后,相位累加器从当前位置继续走,只是每步迈得更大/更小,所以输出波形相位不断点、无跳变(phase continuous),且下一个时钟就生效。相比之下 PLL 改变倍频要重新牵引锁定、有几十~几百 µs 瞬态(见PLL)。因此 DDS 是快速跳频(FSK/跳频通信)、线性调频(chirp,让 FTW 随时间线性增)、相位调制的天然实现。加一个独立的相位偏移寄存器还能做 PSK。
四、两类量化误差与杂散
- 相位截断误差:累加器 N 位但只用高 A 位查表(表不可能 2^N 项),丢弃的低位相位是周期性误差,在频谱上产生相位截断杂散(truncation spurs)。缓解:加大 A、或对截断位加抖动(dither)把离散杂散噪化;
- 幅度量化误差:LUT 输出 D 位有限字长,等效加量化噪声,决定无杂散动态范围 SFDR≈6.02D dB;
- 奈奎斯特限制:DDS 本质是采样系统,fout 必须 < fclk/2,实际取 ~40% fclk 以内给重建滤波留余量;高于此会折叠出镜像频率。要更高频可 DDS 驱动 PLL 混频,或做上变频。
- 表压缩:正弦对称(一个象限可还原全波)可把 LUT 缩小到 1/4;对面积敏感时干脆不要表,用 CORDIC 实时把相位旋转成 sin/cos,用 N 拍延迟换 ROM 面积。
五、DDS、NCO、PLL 怎么配合
NCO(纯数字相位累加+幅度)+ DAC + 滤波 = DDS;通信收发机里常用 DDS/NCO 产生基带/中频本振和调制载波,PLL 负责把低频高精度参考倍频到射频,二者互补——DDS 精、细、快但受采样率限;PLL 能到很高频率但跳频慢、分辨率靠分频/ΔΣ 调制(分数 N PLL)。函数发生器、AWG、DDS 芯片(如 AD98xx)、软件无线电、电机正弦驱动都是它的落点。
与现有篇目的衔接
总结
一句话总结:DDS/NCO 让一个 N 位相位累加器每个时钟加上频率控制字 FTW、自然模 2^N 回绕(表示相位绕单位圆一圈),再取其高位作地址查正弦 LUT 得幅度样点、经 DAC 与重建低通输出正弦;核心公式 fout=FTW·fclk/2^N 使频率与 FTW 线性,分辨率 Δf=fclk/2^N 在 32 位、百 MHz 时钟下细到毫赫兹级,改频率只是改加法器常数、下一拍即生效且相位从当前值连续推进,因此天然支持快速跳频、chirp 和相位调制,这是需要锁定时间的 PLL 给不了的;两类固有杂散来自相位截断(只取高位查表)和幅度有限字长,可用加宽地址、dither、提高 LUT 位宽改善,输出受奈奎斯特限在 fclk/2 内,工程上用正弦对称性把表压到 1/4 或直接用 CORDIC 实时算 sin/cos 省 ROM;DDS 精、细、快但频率受采样率限制,PLL 频率高但跳频慢,通信系统常让 DDS 产生精细本振/调制、PLL 上变频,二者互补。