精度和分辨率的概念详解
扫描二维码
随时随地手机看文章
分辨率和精度这两个,经常拿在一起说,才接触的时候经常混为一谈。对于ADC来说,这两样也是非常重要的参数,往往也决定了芯片价格,显然,我们都清楚同一个系列,16位AD一般比12位AD价格贵,但是同样是12位AD,不同厂商间又以什么参数区分性能呢?性能往往决定价格,那么什么参数对价格影响较大呢?不好意思,我其实还是有些迷惑的,但是看了下篇文章,至少知道“精度”是有很大影响力的。该篇文章主要解释ADC分辨率和精度的区别,非常详细且易懂,值得一看,全文如下:
最近做了一块板子,当然考虑到元器件的选型了,由于指标中要求精度比较高,所以对于AD的选型很慎重。
很多人对于精度和分辨率的概念不清楚,这里我做一下总结,希望大家不要混淆。
我们搞电子开发的,经常跟“精度”与“分辨率”打交道,这个问题不是三言两语能搞得清楚的,在这里只作抛砖引玉了。
简单点说,“精度”是用来描述物理量的准确程度的,而“分辨率”是用来描述刻度划分的。从定义上看,这两个量应该是风马牛不相及的。(是不是有朋友感到愕然^_^)。很多卖传感器的JS就是利用这一点来糊弄人的了。简单做个比喻:有这么一把常见的塑料尺(中学生用的那种),它的量程是10厘米,上面有100个刻度,最小能读出1毫米的有效值。那么我们就说这把尺子的分辨率是1毫米,或者量程的1%;而它的实际精度就不得而知了(算是0.1毫米吧)。当我们用火来烤一下它,并且把它拉长一段,然后再考察一下它。我们不难发现,它还有有100个刻度,它的“分辨率”还是1毫米,跟原来一样!然而,您还会认为它的精度还是原来的0.1毫米么?(这个例子是引用网上的,个人觉得比喻的很形象!)
回到电子技术上,我们考察一个常用的数字温度传感器:AD7416。供应商只是大肆宣扬它有10位的AD,分辨率是1/1024。那么,很多人就会这么欣喜:哇塞,如果测量温度0-100摄氏度,100/1024……约等于0.098摄氏度!这么高的精度,足够用了。但是我们去浏览一下AD7416的数据手册,居然发现里面赫然写着:测量精度0.25摄氏度!所以说分辨率跟精度完全是两回事,在这个温度传感器里,只要你愿意,你甚至可以用一个14位的AD,获得1/16384的分辨率,但是测量值的精度还是0.25摄氏度^_^
所以很多朋友一谈到精度,马上就和分辨率联系起来了,包括有些项目负责人,只会在那里说:这个系统精度要求很高啊,你们AD的位数至少要多少多少啊……
其实,仔细浏览一下AD的数据手册,会发现跟精度有关的有两个很重要的指标:DNL和INL。似乎知道这两个指标的朋友并不多,所以在这里很有必要解释一下。
DNL:Differencial NonLiner——微分非线性度
INL:Interger NonLiner——积分非线性度(精度主要用这个值来表示)
他表示了ADC器件在所有的数值点上对应的模拟值,和真实值之间误差最大的那一点的误差值。也就是,输出数值偏离线性最大的距离。单位是LSB(即最低位所表示的量)。
当然,像有的AD如△—∑系列的AD,也用Linearity error 来表示精度。
为什么有的AD很贵,就是因为INL很低。分辨率同为12bit的两个ADC,一个INL=±3LSB,而一个做到了±1.5LSB,那么他们的价格可能相差一倍。分辨率和精度—即Resolution和Accuracy。这是两个不同的参数,却经常被混用。并且ADC制造商在数据手册中定义ADC性能的方式也令人困惑,可能会让大家在应用开发中导致错误的推断。但事实上,分辨率并不能代表精确度,反之亦然。
分辨率和精度
分辨率
分辨率(Resolution)是指ADC能够分辨量化的最小信号的能力,用二进制位数表示。
比如:一个10位的ADC,其所能分辨的最小量化电平为参考电平(满量程)的2的10次方分之一。即分辨率越高,就可以将满量程里的电平分出更多份数,得到的结果就越精确,得到的数字信号再用DAC转换回去后就越接近原来输入的模拟值。
所以,对于给定的一个具体ADC器件,其分辨率值是固定的。
精度
精度(Precision)是指对于给定模拟输入,实际数字输出与理论预期数字输出之间的接近度(误差值是多少)。换而言之,转换器的精度决定了数字输出代码中有多少个比特表示有关输入信号的有用信息。
有些ADC器件的datasheet中,会注明精度值或精度范围。
对于给定的一个具体ADC器件,其精度值可能会受外界环境(温度、干扰等)的影响而变化。
ADC的动态范围精确度和分辨率
动态范围被定义为系统可测量到的最小和最大信号的比例。
最大信号可为峰间值,零到峰(Zero-to-Peak)值或均方根(RMS)满量程。其中任何一个都会给出不同值。例如,对于一个1V正弦波来说:峰间(满量程)值=2V 零到峰值=1V
RMS满量程=0.707×峰值振幅=0.707×1V=0.707V
最小信号通常为RMS噪声,这是在未应用信号时测量的信号的均方根值。测量得到的RMS噪声级别将取决于测量时使用的带宽。每当带宽翻倍,记录的噪声将增长1.41或3dB。
因此,一定要注意动态范围数字始终与某个带宽相关,而后者通常未被指定,这使记录的值变得没有意义。 器件的信噪比(SNR)和动态范围多数时候被定义为同一个值,即:动态范围 =SNR=RMS满量程/RMS噪声 并且经常使用dB作为单位,即动态范围(dB) = SNR(dB) = 20*Log10 (RMS满量程/RMS噪声)
与使用RMS满量程相反,一些制造商为了使图表看上去更漂亮,引用零到峰或峰间值,这使得最终的动态范围或SNR增加了3dB或9dB,因此我们需要仔细研究规范以避免误解。
ADC分辨率由数字化输入信号时所使用的比特数决定。对于16位器件,总电压范围被表示为(216 =65536)个独立的数字值或输出代码。因此,系统可以测量的绝对最小电平表示为1比特,或ADC电压范围的1/65536。
如前所述,对于16位ADC分辨率,由于出现内部或外部误差源,实际的精确度可能远小于分辨率。因此,举例而言,一个给定的16位ADC可能只能提供12位的精确度。对于这种情况,4LSb(最低有效位)表示ADC中生成的随机噪声。ADC动态范围和ADC精确度通常指相同的内容。
理想ADC生成一个数字输出代码,是关于模拟信号电压和电压参考输入的方程,其中
输出代码 = 满量程电压 × [VIN+ - VIN-] / [VREF+ - VREF-]
= 满量程电压 × [VIN /VREF]
每个数字输出代码表示参考电压的一个小数值。
必须注意,ADC动态范围应当匹配将要转换的信号的最大振幅,这样才能使ADC转换精度最大化。现在假设将要转换的信号在0V到2.5V间变化,而VREF等于3.3V。
16位ADC将包括216 = 65536个步骤或转换,且最低有效位(LSB)=VREF/65536=3.3V/65536=50.35uV。对于理想的ADC,所有代码都具有1LSB的相同宽度。
如果ADC的最大信号值为2.5V,那么意味着总共有49652次转换(2.5V/1LSB)。对于这种情况,将有15884次转换未被使用(65536-49652=15884)。这反应了转换后的信号精确度损失或ENOB(有效位数)损失(损失0.4位)。如果ADC参考(VREF)和ADC最大信号电平之间的差异增加,那么ENOB损失或精确度损失将加剧。例如,如果ADC最大信号电平为1.2V且VREF=3.3V,那么ENOB损失将为1.5位。因此ADC动态范围一定要匹配最大信号振幅,以获得最高精确度。
模数转换器(ADC)宣称具有“n”位分辨率,这常常被误解为精确度。分辨率和精确度完全是两个概念,两者不能混用。应该由具体的应用来确定是否允许丢失代码以及所需ADC精确度。