第三讲:动态失真的根源

各位同学,咱们今天聊点实在的。静态失真搞明白了,动态失真才是真正让人头疼的东西。我做了这么多年音频设计,坦白讲,大部分翻车案例都出在动态失真上。

3.1 建立时间不足:你以为是稳态,其实是瞬态

先问个问题:DAC输出一个正弦波,你觉得每个采样点都稳定了吗?

其实不是。每个采样点切换时,输出级都需要一段时间才能稳定到目标值。这个时间就叫建立时间(Settling Time)。

我见过不少工程师,只看DC精度,觉得运放失调电压调好了就万事大吉。结果一测THD+N,惨不忍睹。为什么?因为建立时间不够,下一个采样点来了,上一个还没站稳。

关键点:建立时间不足会导致码间干扰(ISI),这是动态失真的主要来源之一。

具体来说,建立时间不足会带来两个问题:

  • 幅度误差:输出还没到目标值就被强行切换,幅度偏小
  • 相位误差:不同码字对应的建立曲线不同,导致相位偏移

我建议你在设计时,至少留出3倍的时间常数给建立过程。别卡着理论最小值,那是在给自己挖坑。

3.2 时钟抖动:看不见的杀手

时钟抖动这东西,说大不大,说小不小。你想想看,一个理想的采样时钟应该是等间隔的脉冲。但实际电路里,每个脉冲的边沿位置都会随机偏移。这个偏移就是抖动。

抖动对DAC的影响有多大?我直接给你公式:

SNR_jitter = 20 * log10(1 / (2 * π * f * σ_jitter))

其中f是信号频率,σ_jitter是RMS抖动。你看,频率越高,抖动影响越大。这就是为什么高频信号对时钟要求特别苛刻。

我的经验:曾经有个项目,低频段THD做到-110dB,一到20kHz就掉到-95dB。查了三天,最后发现是时钟抖动在作怪。换了低抖动晶振,问题解决。

时钟抖动的来源主要有三个:

  1. 电源噪声:电源纹波会调制时钟边沿
  2. 热噪声:晶体管的热噪声会随机扰动阈值
  3. 串扰:数字信号跳变耦合到时钟线上

嗯,这里要注意:很多工程师只关注晶振本身的抖动指标,却忽略了PCB布局。我曾经见过一个设计,晶振旁边走了一条高速数字线,结果抖动直接翻倍。

3.3 开关时序误差:R-2R网络的噩梦

如果你用的是R-2R梯形网络DAC,那开关时序误差就是你的头号敌人。

R-2R网络里,每个位对应一个开关。理想情况下,所有开关应该同时动作。但实际电路中,开关的导通和关断时间不可能完全一致。这就导致了一个短暂的时间窗口里,输出出现错误的中间值。

注意:开关时序误差产生的毛刺(Glitch)能量,会直接转化为谐波失真。尤其是MSB切换时,毛刺最大。

我建议你关注两个指标:

  • Glitch Impulse Area:毛刺的面积,单位pV·s
  • Glitch Energy:毛刺的能量,通常用nV·s表示

怎么解决?说白了就两条路:

  1. 优化开关驱动:让所有开关的驱动信号延迟匹配
  2. 使用采样保持:在开关切换时保持输出不变,等稳定后再更新

我个人习惯用第二种方法。虽然会增加一点复杂度,但效果立竿见影。

3.4 动态参数的测量:SFDR和THD

好了,理论讲完了,咱们看看怎么测。

动态失真最常用的两个指标是SFDR和THD。我直接给你测量流程:

3.4.1 THD测量

THD测量其实很简单:输入一个纯净的正弦波,看输出里有多少谐波分量。

THD = sqrt(V2^2 + V3^2 + ... + Vn^2) / V1

其中V1是基波幅度,V2、V3等是各次谐波幅度。

测量时要注意:

  • 输入信号要足够纯净,至少比DAC的THD好10dB
  • 采样率要满足奈奎斯特条件
  • FFT点数要足够多,一般用65536点以上
避坑指南:我曾经用了一个谐波失真0.01%的信号源去测一个THD目标0.001%的DAC,结果测出来全是信号源的失真。后来学乖了,先用带通滤波器把信号源净化一下。

3.4.2 SFDR测量

SFDR(无杂散动态范围)测量的是基波幅度与最大杂散分量之间的比值。

这个指标比THD更严格,因为它不仅看谐波,还看所有非谐波杂散。

测量步骤:

  1. 输入单频正弦波
  2. 采集输出数据做FFT
  3. 找到基波幅度
  4. 找到除基波外最大的频谱分量
  5. 计算两者差值(dBc)
重要提示:SFDR测量时,要排除直流分量和基波本身。另外,注意区分dBc和dBFS,前者是相对于载波,后者是相对于满量程。

3.5 实测案例:一个典型的动态失真分析

最后,我分享一个实际案例。

某次设计一个16位R-2R DAC,目标THD+N为-96dB。初版样机测出来只有-88dB。

排查过程:

排查项 测试结果 结论
静态DNL/INL ±0.5 LSB 正常
时钟抖动 5 ps RMS 偏高
建立时间 1.2 μs 不足(采样周期1 μs)
开关时序 MSB毛刺 200 pV·s 偏大

你看,三个动态失真源全中。最后我做了三件事:

  • 换用低抖动晶振(降到1 ps RMS)
  • 优化输出运放的带宽(建立时间降到0.3 μs)
  • 增加采样保持电路(毛刺降到20 pV·s)

最终THD+N做到了-98dB,还超出目标2dB。

所以啊,动态失真这东西,不能只看一个指标。三个根源都要照顾到,才能做出好设计。