3、动态性能指标:SFDR、THD、ENOB的仿真与实测

各位同学,咱们今天聊聊DAC的动态性能指标。说实话,静态指标(INL、DNL)只能告诉你芯片“躺平”时有多准,但真正决定系统好坏的,是它在高速切换时的表现。我个人习惯把动态指标比作“运动员的赛场表现”——静态指标是体检数据,动态指标才是比赛成绩。

3.1 三大核心指标:SFDR、THD、ENOB

这三个指标是绑在一起的,我建议你理解成一个整体。咱们一个一个来拆。

3.1.1 SFDR(无杂散动态范围)

定义:输出信号基波幅度与最大杂散分量(谐波或非谐波)的比值,单位dBc或dBFS。

说白了,就是看你的DAC输出频谱里,除了想要的信号,最大的那个“捣乱鬼”有多强。我在项目中遇到过,有些客户只看SFDR,觉得只要这个值高就万事大吉。其实不然,后面会讲。

计算公式

SFDR (dBc) = 20 * log10(基波幅度 / 最大杂散幅度)

注意:如果杂散是谐波,通常用dBc;如果是噪声基底,有时用dBFS。

3.1.2 THD(总谐波失真)

定义:所有谐波分量功率之和与基波功率的比值。

嗯,这里要注意:THD通常只考虑前2~10次谐波(具体看应用)。为什么?因为高次谐波能量太小,测了也没意义。我一般取前5次谐波,够用了。

我的经验:THD和SFDR是“此消彼长”的关系吗?不一定。SFDR只看最大的那个杂散,THD看所有谐波的总和。有时候SFDR很高(因为最大杂散被压住了),但THD反而一般(因为其他谐波没压住)。你想想看,这就像班里第一名考了99分,但全班平均分只有60分——SFDR就是那个第一名,THD就是平均分。

3.1.3 ENOB(有效位数)

定义:考虑噪声和失真后,DAC实际能达到的等效分辨率位数。

这个指标最实在。你买了个16位的DAC,但ENOB只有12位,那实际性能就是12位的水平。我曾经被客户问过:“为什么我16位DAC测出来只有12位?”——嗯,这就是ENOB告诉你的真相。

计算公式

ENOB = (SINAD - 1.76) / 6.02

其中SINAD = 信号与噪声+失真之比(dB)。

3.2 仿真方法:从时域到频域

仿真动态指标,核心就是做FFT。我习惯的流程是这样的:

  1. 生成输入信号:通常是单音正弦波,频率选在奈奎斯特频率的1/3左右(避免谐波混叠)。
  2. 跑瞬态仿真:采样点数要够,我一般取2^14 = 16384点,保证频率分辨率。
  3. 做FFT分析:加窗(推荐Blackman-Harris或Hanning),然后提取基波、谐波、噪声。
  4. 计算指标:用上面公式算SFDR、THD、ENOB。

避坑指南:我曾经犯过一个低级错误——FFT点数没选好,导致频谱泄漏严重,SFDR测出来差了10dB。后来我养成了习惯:先算一下频率分辨率Δf = fs/N,确保信号频率是Δf的整数倍(相干采样)。

下面给一个简单的Verilog-A仿真代码片段,用于提取SFDR:

// 伪代码:FFT后找基波和最大杂散
real fft_out[N];
real fund_amp, max_spur_amp;
int fund_idx, spur_idx;

// 找基波(已知输入频率)
fund_idx = floor(f_in * N / fs);
fund_amp = fft_out[fund_idx];

// 找最大杂散(排除基波和直流)
max_spur_amp = 0;
for (i=2; i<N/2; i++) {
    if (i != fund_idx && fft_out[i] > max_spur_amp) {
        max_spur_amp = fft_out[i];
        spur_idx = i;
    }
}

// 计算SFDR
SFDR = 20 * log10(fund_amp / max_spur_amp);

3.3 实测方法:频谱仪与数据采集

实测和仿真最大的区别在于:实测有噪声、有非理想性、有测量仪器本身的误差。我建议你按以下步骤来:

步骤 操作 注意事项
1 搭建测试平台 信号源+频谱仪+滤波器(防混叠)
2 设置信号频率 避开电源噪声频率(如50Hz/60Hz及其谐波)
3 采集频谱数据 RBW(分辨率带宽)设小一点,我一般用1kHz
4 读取基波幅度 用频谱仪的Marker功能
5 读取杂散幅度 注意区分谐波和非谐波杂散
6 计算SFDR/THD 频谱仪通常自带计算功能,但建议手动验证

警告:实测时,输入信号的纯度直接影响测试结果。我曾经用了一个THD只有-60dB的信号源去测一个-80dB SFDR的DAC——结果测出来只有-60dB,我还以为是DAC设计有问题。后来才发现是信号源拖了后腿。所以,信号源的SFDR至少要比DAC高10dB以上。

3.4 仿真与实测的差异分析

你可能会问:为什么仿真结果和实测总是对不上?嗯,原因很多:

  • 模型精度:仿真模型没考虑衬底噪声、电源噪声、温度梯度。
  • 测量噪声:频谱仪的本底噪声、电缆损耗、接头反射。
  • PCB影响:走线耦合、电源去耦不充分。

我个人的经验是:仿真结果通常比实测好3~5dB。如果你的仿真和实测差超过10dB,那肯定有地方出了问题。回头检查一下测试设置,或者看看是不是模型漏了什么。

3.5 如何提升动态性能?

最后,分享几个我常用的“土办法”:

  1. 优化开关时序:减少码间干扰,尤其是MSB切换时的毛刺。
  2. 增加去耦电容:每个电源引脚放一个100nF+10μF,别省。
  3. 使用差分输出:共模噪声能抵消掉一半。
  4. 降低输出摆幅:别满幅输出,留点余量,失真会小很多。

我的小技巧:如果你发现SFDR在某个特定频率突然变差,别急着改电路。先看看是不是那个频率正好是电源噪声的谐波,或者是不是PCB上某个走线的谐振频率。我曾经花了两周改电路,最后发现是测试桌上手机充电器的干扰——拔掉充电器,SFDR立刻好了5dB。

好了,动态指标这块就讲到这里。记住:仿真帮你找方向,实测帮你验证结果。两者结合,才能做出靠谱的DAC。下一章咱们聊聊噪声整形与过采样技术,那是提升ENOB的“核武器”。