假定环境条件:10位ADC最小分辨电压1LSB为1mv
假定没有噪声引入的时候,ADC采样上的电压真实反映输入的电压,那么小于1mv的话,如ADC在0.5mv是数据输出为0
我们现在用4倍过采样来,提高1位的分辨率,
当我们引入较大幅值的白噪声:1.2mv振幅(大于1LSB),并在白噪声的不断变化的情况下,多次采样,那么我们得到的结果有
真实被测电压白噪声叠加电压叠加后电压ADC输出ADC代表电压
0.5mv1.2mv1.7mv11mv
0.5mv0.6mv1.1mv11mv
0.5mv-0.6mv-0.1mv00mv
0.5mv-1.2mv-0.7mv00mv
ADC的和为2mv,那么平均值为:2mv/4=0.5mv!!!0.5mv就是我们想要得到的
这里请留意,我们平时做滤波的时候,也是一样的操作喔!那么为什么没有提高分辨率?????
是因为,我们做滑动滤波的时候,把有用的小数部分扔掉了,因为超出了字长啊,那么0.5取整后就是0了,结果和没有过采样的时候一样是0,
而过采样的方法时候是需要保留小数部分的,所以用4个样本的值,但最后除的不是4,而是2!那么就保留了部分小数部分,而提高了分辨率!
从另一角度来说,变相把ADC的结果放大了2倍(0.5*2=1mv),并用更长的字长表示新的ADC值,
这时候,1LSB(ADC输出的位0)就不是表示1mv了,而是表示0.5mv,而(ADC输出的位1)才是原来表示1mv的数据位,
下面来看看一下数据的变化:
ADC值相应位9876543210
0.5mv测量值00000000000mv(10位ADC的分辨率1mv,小于1mv无法分辨,所以输出值为0)
叠加白噪声的4次过采样值的和00000000102mv
滑动平均滤波2mv/4次00000000000mv(平均数,对改善分辨率没作用)
过采样插值2mv/2000000000012mv/2=0.5mv,将这个数作为11位ADC值,那么代表就是0.5mv
这里我们提高了1位的ADC分辨率
这样说应该就很简单明白了吧,其实多出来的位上的数据,是通过统计输入量的分布,计算出来的,
而不是硬件真正分辨率出来的,引入噪声并大于1LSB,目的就是要使微小的输入信号叠加到ADC能识别的程度(原ADC最小分辨率).
理论来说,如果ADC速度够快,可以无限提高ADC的分辨率,这是概率和统计的结果
但是ADC的采样速度限制,过采样令到最后能被采样的信号频率越来越低,
就拿stm32的ADC来说,12ADC,过采样带来的提高和局限
分辨率采样次数每秒采样次数
12ADC11M
13ADC4250K
14ADC1662.5K
15ADC6415.6K
16ADC2563.9K
17DC1024976
18ADC4096244
19ADC1638461
20ADC6553615
要记住,这些采样次数,还未包括我们要做的滑动滤波,