过采样技术原理介绍解析

分享到:

假定环境条件: 10位ADC最小分辨电压1LSB 为1mv ,假定没有噪声引入的时候, ADC采样上的电压真实反映输入的电压, 那么小于1mv的话,如ADC在0.5mv是数据输出为0 。

我们现在用4倍过采样来, 提高1位的分辨率,当我们引入较大幅值的白噪声: 1.2mv振幅(大于1LSB), 并在白噪声的不断变化的情况下, 多次采样, 那么我们得到的结果有:

真实被测电压 白噪声叠加电压 叠加后电压 ADC输出 ADC代表电压

0.5mv 1.2mv 1.7mv 1 1mv

0.5mv 0.6mv 1.1mv 1 1mv

0.5mv -0.6mv -0.1mv 0 0mv

0.5mv -1.2mv -0.7mv 0 0mv

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值相应位 9 8 7 6 5 4 3 2 1 0

0.5mv测量值 0 0 0 0 0 0 0 0 0 0 0mv(10位ADC的分辨率1mv,小于1mv无法分辨,所以输出值为0)

叠加白噪声的4次过采样值的和 0 0 0 0 0 0 0 0 1 0 2mv

滑动平均滤波2mv/4次 0 0 0 0 0 0 0 0 0 0 0mv(平均数, 对改善分辨率没作用)

过采样插值2mv/2 0 0 0 0 0 0 0 0 0 0 1 2mv/2=0.5mv, 将这个数作为11位ADC值, 那么代表就是0.5mv

这里我们提高了1位的ADC分辨率。

这样说应该就很简单明白了吧, 其实多出来的位上的数据, 是通过统计输入量的分布, 计算出来的, 而不是硬件真正分辨率出来的, 引入噪声并大于1LSB, 目的就是要使微小的输入信号叠加到ADC能识别的程度(原ADC最小分辨率)。

理论来说, 如果ADC速度够快, 可以无限提高ADC的分辨率, 这是概率和统计的结果,但是ADC的采样速度限制, 过采样令到最后能被采样的信号频率越来越低,就拿stm32的ADC来说, 12ADC, 过采样带来的提高和局限。

分辨率 采样次数 每秒采样次数

12ADC 1 1M

13ADC 4 250K

14ADC 16 62.5K

15ADC 64 15.6K

16ADC 256 3.9K

17DC 1024 976

18ADC 4096 244

19ADC 16384 61

20ADC 65536 15

要记住, 这些采样次数, 还未包括我们要做的滑动滤波 。

论坛已做迁移,有相关技术资料和问题讨论可以到电路城对应版块(“模拟/电源”)
X