笔记:跟着deepseek学习测试adc指标
跟着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=10log10(PsignalPnoise+Pdistortion)\text{SINAD} = 10 \log_{10} \left( \frac{P_{\text{signal}}}{P_{\text{noise}} + P_{\text{distortion}}} \right)SINAD=10log10(Pnoise+PdistortionPsignal)]。
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=10log10(PmaxPnoise) DR = 10 \log_{10} \left( \frac{P_{max}}{P_{noise}} \right) DR=10log10(PnoisePmax)
DR=20log10(Vfull scaleVnoise)(dB)DR = 20 \log_{10}\left( \frac{V_{\text{full scale}}}{V_{\text{noise}}} \right) \quad \text{(dB)}DR=20log10(VnoiseVfull scale)(dB)
其中:
( PmaxP_{max}Pmax ) 为系统能处理的最大信号功率(通常接近饱和点);
( PnoiseP_{noise}Pnoise ) 为噪声功率(通常为基底噪声)。
应用场景:描述系统对信号幅度的整体处理能力,如音频设备、ADC/DAC等。
无杂散动态范围(SFDR)
定义:系统在存在杂散(Spur)信号时,最大信号与最显著杂散信号的功率比值,以dB表示。
公式:
SFDR=10log10(PsignalPspur) SFDR = 10 \log_{10} \left( \frac{P_{signal}}{P_{spur}} \right) SFDR=10log10(PspurPsignal)
其中:
( 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=10log10PtestPnoise\text{SNR}_{\text{measured}} = 10 \log_{10}\frac{P_{\text{test}}}{P_{\text{noise}}}SNRmeasured=10log10PnoisePtest
SNRmeasured=10log10Vtest2Vnoise2=20log10VtestVnoise=20log10Vfull scale×0.001Vnoise=20log10Vfull scaleVnoise+20log10(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=10log10Vnoise2Vtest2=20log10VnoiseVtest=20log10VnoiseVfull scale×0.001=20log10VnoiseVfull 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)
标准化测试步骤
通过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测试的核心要点总结
更多推荐

所有评论(0)