跟着DeepSeek学习测试ADC指标

引言

为啥要自己动手测试ADC指标,可以说自己爱折腾,可以说自己爱学习,说一千道一万还是因为no money。不过确实了解下来,发现测试方法也挺好玩,而且可操行(基于一些基础平台)很强。那还是找强大的ai大模型帮忙搜集组织这些测试方法,整理记录一下

ADC关键性能指标概述
  • 分辨率(Resolution):能够将模拟信号转换为数字信号时的最小量化单位,通常以位数(bit)表示。分辨率决定了ADC能够区分的最小电压变化。例如,一个12位ADC的分辨率意味着它可以将输入电压范围划分为212=40962^{12} = 4096212=4096 个不同的数字值。分辨率=Vref2n\text{分辨率} = \frac{V_{\text{ref}}}{2^n}分辨率=2nVref​​,音频上主要是16bit 24bit 32bit。例如,一个10位ADC,参考电压为5V,其分辨率为: [ 5V210=5V1024≈4.88mV\frac{5V}{2^{10}} = \frac{5V}{1024} \approx 4.88 \text{mV}2105V​=10245V​≈4.88mV ],有时候也叫比特精度,但分辨率和精度是两个不同的概念:
    分辨率:表示ADC能够区分的电压最小变化量。
    精度:表示ADC转换结果与实际电压值之间的误差范围,包括非线性误差、偏移误差等。
    高分辨率的ADC不一定具有高精度,但高精度的ADC通常需要足够的分辨率。
  • 有效位数(ENOB):ENOB(Effective Number of Bits)是衡量模数转换器(ADC)实际性能的关键指标,反映了ADC在真实环境中(考虑噪声和失真)的有效分辨率。理论分辨率(如16位ADC)可能因实际信号质量下降,ENOB通过量化实际动态范围与理想ADC的对比得出。 ENOB通过信噪比(SNR)和失真(SINAD)计算: [ ENOB=SINAD−1.766.02\text{ENOB} = \frac{\text{SINAD} - 1.76}{6.02}ENOB=6.02SINAD−1.76​ ]
    SINAD(Signal-to-Noise and Distortion Ratio信号与噪声加失真比):是衡量信号质量的重要指标,定义为信号功率与噪声加失真功率的比值,通常以分贝(dB)表示。采集信号数据并进行快速傅里叶变换(FFT)。识别基波分量并计算其功率。计算除基波外所有其他频率分量的总功率。通过公式计算SINAD: [ SINAD=10log⁡10(PsignalPnoise+Pdistortion)\text{SINAD} = 10 \log_{10} \left( \frac{P_{\text{signal}}}{P_{\text{noise}} + P_{\text{distortion}}} \right)SINAD=10log10​(Pnoise​+Pdistortion​Psignal​​)]。
    1.76 dB:理想ADC的量化噪声基准。
    6.02 dB:每增加1位分辨率对应的SNR提升量。
    测量方法
    正弦波测试:输入纯净正弦信号,分析输出频谱计算SINAD。
    FFT分析:通过快速傅里叶变换分离噪声和失真成分。
    示例
    若某ADC的SINAD为50 dB: [ ENOB=50−1.766.02≈8.01位\text{ENOB} = \frac{50 - 1.76}{6.02} \approx 8.01 \text{位}ENOB=6.0250−1.76​≈8.01位 ] 尽管标称12位,实际有效分辨率仅约8位。
  • 总谐波失真(THD)/总谐波失真+噪声(THD+N): 总谐波失真(THD)和总谐波失真+噪声(THD+N)是衡量信号质量的重要指标,但两者在定义和应用场景上存在显著差异。 总谐波失真(THD):THD用于量化信号中谐波失真成分的占比,通常以百分比表示。其定义为信号中所有谐波分量的有效值(RMS)与基波分量有效值的比值,计算公式为:[ THD=∑n=2∞Vn2V1×100THD = \frac{\sqrt{\sum_{n=2}^{\infty} V_n^2}}{V_1} \times 100%THD=V1​∑n=2∞​Vn2​​​×100 ]其中,( V_1 )为基波电压有效值,( V_n )为第n次谐波电压有效值。THD仅考虑谐波成分,忽略噪声和其他非谐波干扰。
    总谐波失真+噪声(THD+N):THD+N在THD的基础上增加了噪声的影响,更全面地反映信号失真情况。其定义为谐波分量与噪声的总有效值与基波有效值的比值:[ THD+N=∑n=2∞Vn2+Vnoise2V1×100THD+N = \frac{\sqrt{\sum_{n=2}^{\infty} V_n^2 + V_{noise}^2}}{V_1} \times 100%THD+N=V1​∑n=2∞​Vn2​+Vnoise2​​​×100 ]其中,( V_{noise} )为噪声的有效值。THD+N能更真实地评估系统在实际环境中的性能,尤其适用于低噪声或高精度要求的场景。测量方法:
    THD测量:通过带阻滤波器滤除基波,测量剩余谐波成分。
    THD+N测量:直接测量基波以外的全部能量(包括谐波和噪声),输入1 kHz正弦波(典型-1 dBFS)通常使用频谱分析仪或专用测试设备测量谐波及噪声能量。
  • 积分非线性(INL)和微分非线性(DNL):是衡量模数转换器(ADC)和数模转换器(DAC)性能的核心静态指标,直接反映转换器的精度。以下是深度解析:指标全称定义物理意义DNL微分非线性Differential Non-Linearity实际步进vs理想步进(1 LSB的理想变化量)衡量相邻码值的宽度均匀性→ 局部线性度INL积分非线性Integral Non-Linearity实际转换点vs理想直线(端点拟合或最佳拟合直线)衡量整体转换曲线的弯曲程度→ 全局线性度\begin{array}{c|c|c|c} \text{指标} & \text{全称} & \text{定义}& \text{物理意义} \\ \hline \text{DNL} & 微分非线性\text{Differential Non-Linearity} & 实际步进 vs 理想步进\text{(1 LSB的理想变化量)} & 衡量相邻码值的宽度均匀性\text{→ 局部线性度} \\ \text{INL} & 积分非线性\text{Integral Non-Linearity} & 实际转换点 vs 理想直线\text{(端点拟合或最佳拟合直线)} & 衡量整体转换曲线的弯曲程度\text{→ 全局线性度} \\ \end{array}指标DNLINL​全称微分非线性Differential Non-Linearity积分非线性Integral Non-Linearity​定义实际步进vs理想步进(1 LSB的理想变化量)实际转换点vs理想直线(端点拟合或最佳拟合直线)​物理意义衡量相邻码值的宽度均匀性→ 局部线性度衡量整体转换曲线的弯曲程度→ 全局线性度​​由于音频领域使用的sigma-delta过采样的方式,对这两个值不敏感,所以不是我们关注的方向。
  • 动态范围(Dynamic Range, DR)/无杂散动态范围(SFDR) :动态范围(DR)
    定义:系统或器件能够处理的最大信号与最小可检测信号(通常由噪声限制)的比值,通常以分贝(dB)表示。
    公式:
    DR=10log⁡10(PmaxPnoise) DR = 10 \log_{10} \left( \frac{P_{max}}{P_{noise}} \right) DR=10log10​(Pnoise​Pmax​​)
    DR=20log⁡10(Vfull scaleVnoise)(dB)DR = 20 \log_{10}\left( \frac{V_{\text{full scale}}}{V_{\text{noise}}} \right) \quad \text{(dB)}DR=20log10​(Vnoise​Vfull scale​​)(dB)
    其中:

( PmaxP_{max}Pmax​ ) 为系统能处理的最大信号功率(通常接近饱和点);
( PnoiseP_{noise}Pnoise​ ) 为噪声功率(通常为基底噪声)。
应用场景:描述系统对信号幅度的整体处理能力,如音频设备、ADC/DAC等。
无杂散动态范围(SFDR)
定义:系统在存在杂散(Spur)信号时,最大信号与最显著杂散信号的功率比值,以dB表示。
公式:
SFDR=10log⁡10(PsignalPspur) SFDR = 10 \log_{10} \left( \frac{P_{signal}}{P_{spur}} \right) SFDR=10log10​(Pspur​Psignal​​)
其中:

( PsignalP_{signal}Psignal​ ) 为输入信号功率;
( PspurP_{spur}Pspur​ ) 为最显著杂散信号功率。
应用场景:衡量系统在非线性失真(如谐波、互调失真)下的性能,常见于射频、通信系统。
核心区别

DR关注信号与噪声的对比,SFDR关注信号与杂散的对比;
DR反映线性动态范围,SFDR反映非线性失真限制下的动态范围;
SFDR通常低于DR,因杂散功率可能高于噪声基底。

测量方法
动态范围(DR)测量

确定噪声基底:输入信号置零,测量输出噪声功率谱密度(PSD),积分得到总噪声功率 ( P_{noise} )。
测量最大信号:逐步增大输入信号幅度,直至输出信号出现明显失真(如THD超过阈值),记录此时功率 ( P_{max} )。
计算DR:通过公式 ( DR=Pmax−PnoiseDR = P_{max} - P_{noise}DR=Pmax​−Pnoise​ )(dB)。
测试方法背后的数学原理:
测试信号选择(-60 dBFS正弦波)Vtest=Vfullscale∗10−60/20=Vfullscale∗0.001V_{test}=V_{full scale}*10^{-60/20}=V_{full scale}*0.001Vtest​=Vfullscale​∗10−60/20=Vfullscale​∗0.001
此时信号功率:Ptest=Vtest2∗10−6P_{test}=V_{test}^2*10^{-6}Ptest​=Vtest2​∗10−6
测量输出信噪比SNR:SNR_measured = 10 × log₁₀(P_test / P_noise) [单位:dB]
SNRmeasured=10log⁡10PtestPnoise\text{SNR}_{\text{measured}} = 10 \log_{10}\frac{P_{\text{test}}}{P_{\text{noise}}}SNRmeasured​=10log10​Pnoise​Ptest​​
SNRmeasured=10log⁡10Vtest2Vnoise2=20log⁡10VtestVnoise=20log⁡10Vfull scale×0.001Vnoise=20log⁡10Vfull scaleVnoise+20log⁡10(0.001)=DR−60(dB) \begin{align*} \text{SNR}_{\text{measured}} &= 10 \log_{10}\frac{V_{\text{test}}^2}{V_{\text{noise}}^2} \\ &= 20 \log_{10}\frac{V_{\text{test}}}{V_{\text{noise}}} \\ &= 20 \log_{10}\frac{V_{\text{full scale}} \times 0.001}{V_{\text{noise}}}\\ &= 20 \log_{10}\frac{V_{\text{full scale}}}{V_{\text{noise}}} + 20 \log_{10}(0.001) \\ &= \text{DR} - 60 \quad \text{(dB)} \end{align*}SNRmeasured​​=10log10​Vnoise2​Vtest2​​=20log10​Vnoise​Vtest​​=20log10​Vnoise​Vfull scale​×0.001​=20log10​Vnoise​Vfull scale​​+20log10​(0.001)=DR−60(dB)​
DR=SNRmeasured+60(dB)\boxed{\text{DR} = \text{SNR}_{\text{measured}} + 60 \quad \text{(dB)}}DR=SNRmeasured​+60(dB)​
为什么此方法有效?
避免非线性失真影响

若直接输入满幅信号(0 dBFS),ADC的非线性失真(THD)会污染测量结果。

-60 dBFS信号足够小:确保ADC工作在线性区(失真可忽略),此时输出噪声功率 ≈ 无信号时的本底噪声功率
PnoiseP_{noise}Pnoise​ 。

信噪比(SNR)与动态范围(DR)的统一

当输入信号远小于满量程时,测得SNR实际反映了 “信号与底噪的比值”。

通过+60 dB的补偿,将小信号测试结果换算为满量程信号对比底噪的比值(即DR的定义)。
无杂散动态范围(SFDR)测量

输入单频信号:施加一个纯净正弦波信号,频率为 ( f_{in} ),幅度接近满量程但未饱和。
频谱分析:通过频谱仪或FFT分析输出信号,识别除基频外的杂散分量(如谐波、互调产物)。
定位最差杂散:找到功率最高的杂散信号 ( P_{spur} )。
计算SFDR:通过公式 ( SFDR=Psignal−PspurSFDR = P_{signal} - P_{spur}SFDR=Psignal​−Pspur​ )(dB)。
。

  • 信噪比(SNR):满量程信号有效值与无信号时噪声的比值(dB)。

测试方法:输入-60 dBFS信号,计算SNR = 测量值 + 60 dB。参考上面的测试方法。

  • 频率响应(Frequency Response):ADC对不同频率信号的增益一致性。

测试方法:扫频测试(20 Hz-20 kHz),对比输入/输出幅度差(±0.5 dB内为优)。

  • 通道间串扰(Crosstalk):相邻通道信号泄漏程度。

测试方法:单通道输入满幅信号,测量其他通道的输出(<-80 dB为佳)。

搭建ADC测试环境
  • 硬件需求:信号源、示波器、数据采集卡
  • 软件需求:DeepSeek工具、Python/Matlab脚本
  • 测试电路连接与校准
  • 生成测试信号(正弦波、斜坡信号等)
  • 采集ADC输出数据并存储
分析ADC data sheet标称值
  • V_in_max:或者叫做full scale Input level,一般是根据参考电压给出的值V_in_ref或者analog_Vdd,也有直接给出绝对电压值的,例如:1.2V。
  • SNR:很多data sheet上还要附加A-weigh,这里指的是A计权, 是一种基于人耳听觉特性的频率加权方式,用于模拟人耳对不同频率声音的敏感度差异。平坦响应:所有频率等权重;A计权:削弱低频/高频,突出中频(更符合主观听感),因为人耳对1-4 kHz中频最敏感,对低频(<200 Hz)和高频(>10 kHz)灵敏度下降,这是应用于噪声测量、音频设备信噪比(SNR)测试、环境噪声评估的加权方法。频响加权公式∣HA(f)∣=12194.2172⋅f4(f2+20.5989972)⋅(f2+12194.2172)⋅(f2+107.652652)⋅(f2+737.862232)|H_A(f)| = \frac{12194.217^2 \cdot f^4}{(f^2 + 20.598997^2) \cdot (f^2 + 12194.217^2) \cdot \sqrt{(f^2 + 107.65265^2) \cdot (f^2 + 737.86223^2)}}∣HA​(f)∣=(f2+20.5989972)⋅(f2+12194.2172)⋅(f2+107.652652)⋅(f2+737.862232)​12194.2172⋅f4​对应的关键参数说明:参数值物理意义f1 Hz20.598997 Hz低频极点f2 Hz107.65265 Hz低频极点f3 Hz737.86223 Hz高频零点f1 Hz12194.217 Hz高频极点A1000 dB+2.0 dB1kHz基准增益\begin{array}{c|c|c} \text{参数} & \text{值} & \text{物理意义} \\ \hline f_1\text{ Hz} & 20.598997\text{ Hz} & \text{低频极点} \\ f_2\text{ Hz} & 107.65265\text{ Hz} & \text{低频极点} \\ f_3\text{ Hz} & 737.86223\text{ Hz} & \text{高频零点} \\ f_1\text{ Hz} & 12194.217\text{ Hz} & \text{高频极点} \\ A_{1000}\text{ dB} & +2.0\text{ dB} & \text{1kHz基准增益} \\ \end{array}参数f1​ Hzf2​ Hzf3​ Hzf1​ HzA1000​ dB​值20.598997 Hz107.65265 Hz737.86223 Hz12194.217 Hz+2.0 dB​物理意义低频极点低频极点高频零点高频极点1kHz基准增益​​特性验证(关键频率点)如下:
    频率理论值实际值31.5 Hz−39.4 dB−39.3 dB63 Hz−26.2 dB−26.1 dB1 kHz0.0 dB0.0 dB8 kHz−0.8 dB−0.9 dB20 kHz−6.6 dB−6.2 dB\begin{array}{c|c|c} \text{频率} & \text{理论值} & \text{实际值} \\ \hline 31.5\text{ Hz} & -39.4\text{ dB} & -39.3\text{ dB} \\ 63\text{ Hz} & -26.2\text{ dB} & -26.1\text{ dB} \\ 1\text{ kHz} & 0.0\text{ dB} & 0.0\text{ dB} \\ 8\text{ kHz} & -0.8\text{ dB} & -0.9\text{ dB} \\ 20\text{ kHz} & -6.6\text{ dB} & -6.2\text{ dB} \\ \end{array}频率31.5 Hz63 Hz1 kHz8 kHz20 kHz​理论值−39.4 dB−26.2 dB0.0 dB−0.8 dB−6.6 dB​实际值−39.3 dB−26.1 dB0.0 dB−0.9 dB−6.2 dB​​
    python实现的A计权滤波器如下:
from scipy.signal import bilinear, lfilter
import numpy as np

def a_weighting(fs):
    # IEC 61672标准系数
    f1 = 20.598997
    f2 = 107.65265
    f3 = 737.86223
    f4 = 12194.217
    a1000 = 1.9997
    
    num = [(2*np.pi*f4)**2 * (10**(a1000/20)), 0, 0, 0, 0]
    den = np.polymul(
        [1, 4*np.pi*f4, (2*np.pi*f4)**2],
        np.polymul(
            [1, 4*np.pi*f1, (2*np.pi*f1)**2],
            [1, 2*np.pi*f3]
        )
    )
    return bilinear(num, den, fs)

标准化测试步骤

设置DUT为静音模式
测量本底噪声谱
应用A计权滤波
计算噪声功率P_noise_A
输入1kHz 0dBFS正弦波
测量全频带信号功率P_signal
计算SNR_A = P_signal - P_noise_A

通过A计权SNR测量,工程师能更准确地评估设备在主观听感上的噪声性能,这是高保真音频设计的黄金标准。

  • THD+N(Total Harmonic Distortion and Noise):之前也说过了。
  • Freq. Response:这里的频响一般只给出一个低通的关系,以及低通下纹波的典型值,以及阻带的衰减值,并没有给出扫频信号的响应曲线。
数据分析与指标计算
  • 使用FFT进行频域分析(SNR、THD、SFDR计算)
  • 直方图法分析DNL和INL
  • Python/Matlab代码示例
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.fft import fft
    
    # 示例:计算FFT  
    signal = np.loadtxt('adc_output.txt')
    N = len(signal)
    yf = fft(signal)
    xf = np.linspace(0.0, 1.0/(2.0*1e-6), N//2)
    plt.plot(xf, 2.0/N * np.abs(yf[0:N//2]))
    plt.xlabel('Frequency (Hz)')
    plt.ylabel('Amplitude')
    plt.grid()
    plt.show()
    
常见问题与优化建议
  • 信号源噪声对测试结果的影响
  • 采样时钟抖动的抑制方法
结论
  • ADC测试的核心要点总结

更多推荐