精度与分辨率的关系

[复制链接]
17763|63
一只小蜗牛 发表于 2009-8-21 13:42 | 显示全部楼层
学习了
程序匠人 发表于 2009-8-21 13:51 | 显示全部楼层
如果你有足够快的采样速度,而实际采样速度比不需要这么快。那么可以考虑用“过采样”技术来提升采样精度(注意,不是分辨率哦,是不是很神奇?)。

匠人关注这个东东有一阵子了。不过还没有实际操练过。

下面是个转贴,更多信息,可以去网上搜索。
----------------------------------------------------------------------------------------

过采样技术提升 ADC 采样精度【转】2009年02月04日 星期三 08:24其实原理很简单, 很容易明白, 怎样实现提高分辨率?
假定环境条件: 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
要记住, 这些采样次数, 还未包括我们 要做的 滑动滤波,
aweyfan 发表于 2009-8-21 14:03 | 显示全部楼层
匠人在误导
过采样只能提高分辨率

对avr 内嵌的10bit ad测试,过采样只能达到标称的分辨率,如果不采用过采样,后几位都在飘
程序匠人 发表于 2009-8-21 14:04 | 显示全部楼层
补充一个文件,给大家学习学习。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
程序匠人 发表于 2009-8-21 14:05 | 显示全部楼层
“对不起,您不能给自己发表的帖子评分。”
哈哈,**无门啊~~~~~
程序匠人 发表于 2009-8-21 14:08 | 显示全部楼层
匠人在误导
过采样只能提高分辨率

对avr 内嵌的10bit ad测试,过采样只能达到标称的分辨率,如果不采用过采样,后几位都在飘
aweyfan 发表于 2009-8-21 14:03


我原来也认为过采样只能提高分辨率,而不能提高精度。但是,有人告诉我,真的能提高精度。并且是有理论支持的,经过实践检验的。

据说是利用了噪声。

究竟是提高了分辨率,还是提高了精度。网上也是一片混乱。
jackxn 发表于 2009-8-21 16:03 | 显示全部楼层
学习下
gxs64 发表于 2009-8-21 18:25 | 显示全部楼层
精度=分辨得出数据的变化,准确
分辨率=分辨得出数据的变化,但不一定准确
t.jm 发表于 2009-8-21 18:30 | 显示全部楼层
过采样只能提高分辨率。
多次测量求平均值能提高测量精度,这是一个以前常用的测试技巧,书上不是常举这样的例子:5个人测量一个物体的长度…,去掉粗大误差后求平均值,这个结果通常会比单次测量要准。
 楼主| jiyiche 发表于 2009-8-21 20:04 | 显示全部楼层
谢谢各位了!
gtw 发表于 2009-8-21 20:18 | 显示全部楼层
本帖最后由 gtw 于 2009-8-21 21:31 编辑

匠人或许无意误导,其实过采样还是只是提高分辨率而已,精度已经天注定,改不了了。
邵子扬先生翻了不少ATMEL的应用笔记,造福大众,但这个标题确实不是太确切,请看ATMEL原文:《AVR121 Enhancing ADC resolution by oversampling》

这里 resolution只能解为分辨率,accuracy才是精度

原文就不上传了,这里就有。
http://www.atmel.com/dyn/products/app_notes.asp?family_id=607

评分

参与人数 1威望 +6 收起 理由
程序匠人 + 6

查看全部评分

gtw 发表于 2009-8-21 20:24 | 显示全部楼层
过采样,其实就是叠加可变均零已知量,使得本处于被量化误差抛弃的电压段在历史的长河中有一定比例的时间段能因为叠加的信号而被量化到周围的数字,再平均下来就可以分辨出更精细的位置了。
其实,有点像入股分红,过河拆桥。
gtw 发表于 2009-8-21 20:28 | 显示全部楼层
本帖最后由 gtw 于 2009-8-21 20:31 编辑

以前曾经做过纯理论的验证,即对连续的信号量用固定分辨率的AD采样,而不施加外部信号影响的情况下,所得分辨率是固定的,即便使用过采样的采样方法,也不能提高分辨率。
但是如果施加合理的外部扰动信号,再采用过采样的方法,仅仅从模拟的结果来看,就确实已经提高分辨率了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

参与人数 1威望 +6 收起 理由
程序匠人 + 6

查看全部评分

老狼 发表于 2009-8-21 22:13 | 显示全部楼层
“我原来也认为过采样只能提高分辨率,而不能提高精度。但是,有人告诉我,真的能提高精度。并且是有理论支持的,经过实践检验的。
据说是利用了噪声。”
----------------过采样仅对于噪声是白噪声的情况好用,确实能提高精度,但是对于叠加了非规律的干扰信号的信号,只能提高分辨率,实际应用中,白噪声也是不存在的,如果过采样能替代高分辨率AD,就没人用14,16位AD了。很多情况下,是不能采用过采样的,例如你采集的波形正玄信号,因为各点的斜率是不同的,33楼的三角波,因为理想情况下的各点斜率是相同的,所以和直流信号很相似,
信号的处理,对于渐变信号或者直流信号,可以考虑采用画得滤波,不过不提倡,最好采用FIR后者IIR。
如果你的后继信号处理,要用到FFT,千万不要用滑动滤波。一定要用FIR或者IIR。IIR的极性很讨厌,但是效率比FIR高,FIR幅频响应很好,推荐使用。而滑动滤波,那是以前的CPU速度太慢的情况下的产物,32位时代,还是不要用了吧。

24楼发的那个**,看了一下,理论是不对的,他对采样定律的理解也是不对的。信号在被抽取之前,不符合Nyquest采样定律的输入信号必须被低通滤波,以避免混叠,这篇**是典型的“只要给我数字信号,我就能处理好信号”,永远记住,后面的数字信号处理,代替不了前端的模拟信号处理,以前一位TI的女工程师,写了很多怎样设计信号采集系统,感兴趣的可以看看。

评分

参与人数 1威望 +6 收起 理由
程序匠人 + 6

查看全部评分

程序匠人 发表于 2009-8-21 22:19 | 显示全部楼层
根据老狼的说法:“过采样仅对于噪声是白噪声的情况好用,确实能提高精度,但是对于叠加了非规律的干扰信号的信号,只能提高分辨率,实际应用中,白噪声也是不存在的,如果过采样能替代高分辨率AD,就没人用14,16位AD了。很多情况下,是不能采用过采样的,例如你采集的波形正玄信号,因为各点的斜率是不同的,33楼的三角波,因为理想情况下的各点斜率是相同的,所以和直流信号很相似”

那是不是可以说,过采样提高精度,在理论上是可行的?——只能你能搞出真正的白噪声。
老狼 发表于 2009-8-21 22:27 | 显示全部楼层
问题是,现实中,白噪声是不存在的,呵呵!
gtw 发表于 2009-8-21 22:32 | 显示全部楼层
未必一定要白噪声,以前研究过一个国外同行的电路,MCU是8bitADC,实际情况根据分析应当是采用了施加扰动信号过采样的。具体是,两路AD测量电压,另外一个口线通过两组电阻+电容分别向两路AD施加周期性的正负扰动信号。
其实提高分辨率的关键之一是要施加足够大小的扰动信号,使信号能够被量化到其他相邻AD值,才可以以时间换分辨率。并且,扰动信号在整个周期内变化越均匀,效果越好。
老狼 发表于 2009-8-21 23:00 | 显示全部楼层
8位或者10位AD,玩出更高的位数,倒也不是不可以玩,但是不是这样的方法,老狼知道一个方法,不过仅适用于周期信号或者直流信号,通常现在叫片上系统的CPU都带AD,DA,两者结合使用
1:1路AD将原始信号做周期的采集,存储在一个数组A (注意锁频)
2:在信号的第二个周期,将数组A中的信号做DA输出,再用一个运放,将两个信号相减,相减后的信号再次放大2的n次,这个信号在进入第二路AD。
3:将第一次采集的数组A与第二次采集的数组B,做拼接运算(要想精度高,还要调节数组B的系数),扩展精度
基本原理就是这样,当然,很多地方还可以做小的调整。
john_light 发表于 2009-8-21 23:48 | 显示全部楼层
讨论气氛很热烈,我过来做笔记。
john_light 发表于 2009-8-21 23:49 | 显示全部楼层
按照惯例点层楼卖瓜子零嘴……
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部