动态测试基础——DFT/FFT 频谱分析原理系列《从原理到实测ADC 测试技术深度解析》第三篇难度进阶关键词DFT、FFT、频谱泄漏、整数周期、dBFS、ADC 动态测试一、静态测试的盲区经过前两篇的学习我们已经掌握了用直方图法提取 ADC 的 DNL 和 INL。这些指标描述的是 ADC 在低频、准静态条件下的线性特性。然而真实的 ADC 在高频工作时往往表现出与低频截然不同的特性采样保持电路S/H的带宽限制会导致高频信号失真**时钟抖动Clock Jitter**在高频输入时对 SNR 的影响被放大晶体管的非线性在高频下更为突出产生更强的谐波失真内部数字噪声的耦合在高速采样时更难抑制这些问题在静态测试中完全看不到。直方图测试通常在fin≪fs/2f_{in} \ll f_s/2fin≪fs/2的条件下进行其结果只代表低频性能无法预测 ADC 在接近奈奎斯特频率时的行为。动态频谱测试Spectral Testing正是为此而设计的通过对 ADC 输出进行离散傅里叶变换DFT以频域视角全面揭示 ADC 的动态特性。二、频谱测试的硬件方案方案一ADC DAC 回放将 ADC 的数字输出接到一个高性能 DAC再将 DAC 的模拟输出送入频谱分析仪。信号发生器 → [ADC] → [DAC] → 频谱分析仪 ↑ 时钟发生器优点直观容易上手缺点DAC 本身的性能必须显著优于被测 ADC否则 DAC 的失真会掩盖 ADC 的问题此外还需注意 DAC 输出的sinc(x)/x\text{sinc}(x)/xsinc(x)/x频率整形效应方案二数据采集系统 DFT推荐将 ADC 的数字输出直接送入 PC 或 FPGA用软件如 MATLAB对采集到的数据序列执行 DFT在计算机中完成频谱分析。信号发生器 → [ADC] → 数据采集系统(PC/FPGA) → DFT 软件分析 ↑ 时钟发生器优点灵活精度高便于自动化避免了 DAC 回放引入的额外误差这是现代 ADC 测试的主流方法。信号链的关键要求无论采用哪种方案以下几点都必须注意信号发生器纯度输入正弦波的谐波失真必须远低于 ADC 被测指标通常要低 10 dB 以上否则测到的ADC 失真实际上来自信号源输入端带通滤波器滤除信号发生器输出的谐波确保 ADC 输入信号的频谱纯度时钟抖动时钟发生器的相位噪声会直接恶化 ADC 的高频 SNR必须使用低抖动时钟源三、离散傅里叶变换DFT基础3.1 DFT 的定义与频率分辨率对NNN个以Ts1/fsT_s 1/f_sTs1/fs为间隔采集的样本x[0],x[1],…,x[N−1]x[0], x[1], \ldots, x[N-1]x[0],x[1],…,x[N−1]进行 DFT得到NNN个频率分量X[m]∑k0N−1x[k]⋅e−j2πmk/N,m0,1,…,N−1X[m] \sum_{k0}^{N-1} x[k] \cdot e^{-j2\pi mk/N}, \quad m 0, 1, \ldots, N-1X[m]k0∑N−1x[k]⋅e−j2πmk/N,m0,1,…,N−1频率轴的解读共NNN个频率 bin均匀覆盖000到fsf_sfs第mmm个 bin 对应的物理频率为fmm⋅fs/Nf_m m \cdot f_s / Nfmm⋅fs/N频率分辨率相邻 bin 的间距fs/Nf_s / Nfs/N例如若fs1f_s 1fs1MHzN1024N 1024N1024则每个 bin 的宽度为1000000/1024≈976.61000000 / 1024 \approx 976.61000000/1024≈976.6Hz。3.2 对称性与有效频率范围DFT 的频谱关于fs/2f_s/2fs/2奈奎斯特频率对称因此只有前N/2N/2N/2个 bin对应000到fs/2f_s/2fs/2包含独立信息。通常只绘制这一半频谱。3.3 dBFS 归一化为了方便比较DFT 幅度通常以dBFS相对于满量程dB Full Scale表示∣Am∣dBFS20log10∣X[m]∣aFS⋅N/2|A_m|_{\text{dBFS}} 20 \log_{10} \frac{|X[m]|}{a_{FS} \cdot N/2}∣Am∣dBFS20log10aFS⋅N/2∣X[m]∣其中aFSa_{FS}aFS是满量程正弦波的 RMS 值。在此归一化下满量程正弦波的基频 bin 0 dBFS所有其他成分噪声、谐波均为负值绝对值越大表示该成分相对于满量程越小。3.4 MATLAB 示例fs1e6;% 采样率 1 MHzfx50e3;% 输入信号频率 50 kHzAfs1;% 满量程幅度N1024;% 采样点数% 生成时间向量和输入信号tlinspace(0,(N-1)/fs,N);yAfs*cos(2*pi*fx*t);% DFT 并转换为 dBFSs20*log10(abs(fft(y))/N/Afs*2);% 只取前半段0 到 fs/2ss(1:N/2);f(0:length(s)-1)/N;% 归一化频率轴以 fs 为单位plot(f,s);xlabel(Frequency [f/fs]);ylabel(Magnitude [dBFS]);对于理想的纯正弦输入无量化频谱应在fx/fsf_x/f_sfx/fs处出现单一峰值0 dBFS其余所有 bin 的幅度理论上为−∞-\infty−∞dBFS实际受计算机浮点精度限制约为−300-300−300dBFS。四、频谱泄漏——最常见的陷阱4.1 什么是频谱泄漏如果用上述 MATLAB 代码但把fx改成一个非整数比的频率例如fx 53.3e3会发现频谱图的峰值不再是单一的尖峰而是弥散到周围许多 bin噪底看起来高出许多。这就是**频谱泄漏Spectral Leakage**现象。4.2 泄漏的根本原因DFT 隐含地假设输入序列是周期性重复的——即把NNN个样本作为一个块然后认为真实信号是这个块无限重复拼接而成的。当信号频率与fs/Nf_s/Nfs/N不成整数比时在块的边界处会出现相位/幅度的突变信号末尾与下一块开头不连续。这种人为引入的不连续性等效于在频域中对理想单音谱线进行了卷积导致能量从单一 bin 扩散到相邻的许多 bin 中。直观理解DFT 只能精确表示频率恰好落在某个 bin 中心的信号。若信号频率落在两个 bin 之间则 DFT 需要用多个 bin 的线性组合来近似表现为能量在多个 bin 间弥散。4.3 后果频谱泄漏的危害是双重的信号能量弥散基频的功率散布到多个 bin导致信号幅度估计偏低噪底抬高泄漏的能量淹没附近的噪声和谐波使 SNR、SFDR 等指标无法准确测量五、解决泄漏整数周期法5.1 原理消除频谱泄漏最干净的方法是保证NNN个样本恰好包含信号的整数个完整周期。若信号在NNN个样本中包含MMM个完整周期则fxM⋅fsNf_x M \cdot \frac{f_s}{N}fxM⋅Nfs此时信号频率恰好落在第MMM个 DFT bin 的中心所有能量集中在单一 bin 中无泄漏。5.2 整数周期的约束条件为保证测试结果的有效性整数周期数MMM的选择必须满足两个条件条件一MMM必须是整数消除泄漏这是最基本的要求确保信号在观测窗口内首尾相接。条件二N/MN/MN/M每周期样本数必须是非整数即MMM最好是质数若N/MN/MN/M是整数则量化噪声序列也会以周期N/MN/MN/M重复成为周期性的非随机噪声在频谱上形成若干离散的谱线而非均匀的噪声基底。这会使 SNR 的计算结果出现偏差。选择MMM为质数如 67、97、127 等保证N/MN/MN/M不是整数量化噪声就会均匀分布在所有 bin 中统计特性更接近真实情况。条件三NNN最好是 2 的幂次N2kN 2^kN2k时可以用**FFT快速傅里叶变换**代替 DFT 进行计算。FFT 的计算复杂度为O(NlogN)O(N\log N)O(NlogN)而直接 DFT 为O(N2)O(N^2)O(N2)对大NNN而言速度差异极为显著。5.3 MATLAB 实现fs1e6;N2^10;% 1024 点2的幂次cycles67;% 质数周期数确保 N/cycles 不是整数fxfs*cycles/N;% 计算满足整数周期条件的信号频率Afs1;t(0:N-1)/fs;yAfs*cos(2*pi*fx*t);% 使用 FFTN 为 2 的幂次时等价于 DFT但速度更快s20*log10(abs(fft(y))/N/Afs*2);ss(1:N/2);f(0:N/2-1)/N;plot(f,s);此时频谱图中基频处出现一个非常尖锐的单一峰值0 dBFS其余所有 bin 的噪声均匀地分布在约−300-300−300dBFS数值精度极限。5.4 整数周期法的限制整数周期法虽然效果好但有一个实际限制信号频率fxf_xfx必须被严格控制必须恰好等于M⋅fs/NM \cdot f_s / NM⋅fs/N。在实际测量中这意味着测试系统必须能够将信号发生器的频率锁定到采样时钟通常通过 PLL 实现。若测试系统没有这种能力则需要转向另一种方案——加窗Windowing这将在下一篇中详细介绍。六、DFT 噪声基底的正确解读6.1 一个常见的困惑用 DFT 测量 ADC 的 SNR 时新手常常感到困惑DFT 频谱图上的噪声基底和实际 ADC 的总量化噪声功率不是同一回事以 10 位 ADC 为例理论 SQNR 6.02 × 10 1.76 ≈ 62 dB。但在 DFT 频谱图N2048N 2048N2048中每个噪声 bin 的幅度大约在−92-92−92dBFS附近远低于−62-62−62dBFS。6.2 原因DFT 的频率细分效应DFT 本质上是一个滤波器组每个 bin 只接收宽度为fs/Nf_s/Nfs/N的窄带信号。若总量化噪声功率均匀分布在000到fs/2f_s/2fs/2的频率范围内则每个 bin 接收到的噪声功率仅为总噪声的1/(N/2)1/(N/2)1/(N/2)。DFT 噪声基底低于实际噪底的幅度为Δ−10log10(N/2)[dB]\Delta -10\log_{10}(N/2) \quad [\text{dB}]Δ−10log10(N/2)[dB]对于N2048N 2048N2048Δ−10log10(1024)≈−30 dB\Delta -10\log_{10}(1024) \approx -30 \text{ dB}Δ−10log10(1024)≈−30dB所以 DFT 频谱图上的噪声基底约为−62−30−92-62 - 30 -92−62−30−92dBFS与实际计算完全吻合。6.3 实践意义这个关系有两层重要含义读图时不能直接把 DFT 噪声基底当作 ADC 的实际噪声水平需要加上10log10(N/2)10\log_{10}(N/2)10log10(N/2)dB 才得到真实噪底设计测试时增大NNN可以降低每个 bin 的噪声功率让原本被噪声淹没的谐波分量浮现出来有助于测量 SFDR 等失真指标七、小结要点内容静态测试的局限无法反映高频性能需要动态频谱测试推荐硬件方案数字输出直接送 PC软件 DFT 分析dBFS 归一化满量程正弦波基频 0 dBFS其余为负值频谱泄漏原因信号频率不落在 bin 中心时DFT 块边界出现不连续整数周期法fxM⋅fs/Nf_x M \cdot f_s / NfxM⋅fs/NMMM取质数NNN取 2 的幂次噪声基底修正DFT 实测噪底 实际噪底−10log10(N/2)- 10\log_{10}(N/2)−10log10(N/2)下一篇《加窗技术与频谱测试实战》当测试系统无法锁定信号频率时加窗是替代整数周期法的重要手段。我们将详细介绍 Nuttall、Hann 等常用窗函数的特性分析加窗的代价与收益并给出两种方法的适用场景对比。