Differential nonlinearity (DNL) and Integral nonlinearity (INL)定义

如图,DNL(差分非线性)误差指的是任意一个输出台阶的宽度与1 LSB理想台阶宽度之间的偏差;INL(积分非线性)误差指的是实际输出相较于全量程传输函数的最大偏差,实际全量程的传输函数需要补偿ADC本身的Gain Error和offset。
DNL用公式可以定义为:
DNL(k)=Vx(k+1)−Vx(K)LSB,0≤k≤2N−1
其中LSB为:
LSB=VFSR2N=2∗Vref2N
此时的DNL则为:
DNL=MAX[DNL(k)]
INL用公式就可定义为:
INL(k)=Vx(k+1)−Vx(k)|TransferfunctionLSB输入RAMP波情况
在测试上可以通过统计直方图的方式进行。以概率论的论的角度来说,在大样本量的情况下如果ADC的DNL为0,那么按照统计直方图方式来统计这些大样本量的数据,其结果是每个台阶所对应的统计直方图命中数(hits)是相等的。实际情况下DNL不可能为0,那么台阶宽度较小的其对应的统计直方图hits数相对于均值就少,反之则数量则多,示意图如下:

在输入信号为一个如下的Ramp波的时候,ADC的输出code进行大样本量统计的时候是符合前面提及的统计直方图的。

此时就可以计算DNL为:
DNL(k)=H(k)mean[H]−1INL(k)=∑i=0kDNL(i)输入sine波情况
输入RAMP波时,ADC的输出是均匀分布的,而输入Sine波的时候其输出分布不再是均匀的,如下为sine波信号的概率密度分布函数(PDF):
p(V)=1πA2−V2其中A为输入信号摆幅,如图为一个理想sine波概率密度分布曲线:

生成一个sine波信号,按照8bit位宽(共计2**8个台阶)直方图统计这个输入信号可以得到sine波信号的PDF基本符合这个情况如下:

按照2^8台阶数统计sine波输入信号直方图统计得到2^8个bins对应的直方图数据
CodeCounts=Hist(SineWaveSampled,Bins=28)

因为分布不在符合前面的均匀分布,所以就需要按照其规律把这个直方图“拟合”成一个均匀分布。按照如下几步就可以得到基于sine波输入的INL和DNL。
step1.求取直方图累积
对前面求得的直方图CodeCounts进行直方图累积:
cumsum(k)=∑i=0kCodeCounts(i)
累积直方图之后可以发现最后一个code counts的结果是整个数据的采样样本量总数:
这部分理解,可以将连续的sine波看做成一个从-π/2 ~ π/2 的重复,所以整个累积过程可以看做如下:

step2.Sine to Ramp
这一步就是要把基于sine波的累积直方图(Cumsum Curve)转换为Ramp,Ramp是从-FSR/2 到FSR/2 逐渐爬升的。示意如图:
当前每个code_i对应的V_i可以按照如下求得:
V(i)=−FSR/2∗Cos(πCumsum(i)N)其中N为总的样本量个数。
关于这部分理解:我们前面将这个累积统计的区间归一化到了-π/2 ~ π/2 ,那么整个样本量可以看做π,即如图为一个半径r=FSR/2的半圆。每个code台阶所对应的θi和当前累积的样本量与总样本的占比有关,随意此时的θi则为:
θi=πCumsum(i)N

按照余弦的关系Cos(θi) = Vi / (FSR/2),所以得Vi为:
Vi=−12FSR∗cos(θi)=−12FSR∗cos(πCumsum(i)N)然后就可以得到sin2ramp结果如下:
step3.计算DNL和INL
DNL(k)=V(k+1)−V(k)−1DNL=MAX[DNL(k)]

INL(k)=∑i=0kDNL(i)INL=MAX[INL(k)]

置信区间、样本量和误差
根据中心极限定理可知,随机样本量为n的多次采样,其均值标准化后其分布收敛于正态分布:
CI=X¯±Z∗σ(n)其中:
- CI = the confidence interval(置信区间)
- X̄ = the population mean
- Z* = the critical value of the z-distribution(临界值)
- σ = the population standard deviation
- √n = the square root of the population size
不同置信区间对应的Z值如下:
置信区间(%) | Z |
80 | 1.282 |
85 | 1.440 |
90 | 1.645 |
95 | 1.960 |
99 | 2.576 |
99.5 | 2.807 |
99.9 | 3.291 |
假设此时一个位数为12的ADC,要求的DNL误差为0.01LSB,在输入sine波情况下,假设要求测试的置信度为95%,那么此时最低要求的样本量则为:
Nsamples=Z2∗σ2/e2=(1.96)2∗π/(0.01)2∗(212−1)
以上,本文是对于maxim官网中对于输入sine波求dnl和inl的方法解析,仅供参考交流,欢迎指正。原文:Histogram Testing Determines DNL and INL Errors (stg-maximintegrated.com)