精度不够,噪声来凑

举报
tsinghuazhuoqing 发表于 2021/12/27 00:16:13 2021/12/27
【摘要】 将观察到的模拟量转换成数字量,给观察和处理到来很大的便利。比如一个数字温度计可以清晰的显示出你的体温,这要比判断水银温度计方便。 数字温度计 但这里也会出现一个问题,信号转换成数字信号会产生量...

将观察到的模拟量转换成数字量,给观察和处理到来很大的便利。比如一个数字温度计可以清晰的显示出你的体温,这要比判断水银温度计方便。
数字温度计

数字温度计

但这里也会出现一个问题,信号转换成数字信号会产生量化误差,会降低数值的精度。比如数字温度计只显示到1摄氏度,则在 ± 0.5 \pm 0.5 ±0.5摄氏度范围内所显示的温度都一样,这对判断你是否发烧有时也会带来麻烦。

那么该如何提高ADC转换精度,降低量化误差对于测量结果的影响呢?

1. ADC的信噪比(SNR)

ADC将模拟信号转换成有限个数的数字编码,通常取连续区间的整数。比如0~255就构成了8位ADC的数字编码集合。变化后的数字就与原来模拟信号产生了量化误差。对于理想ADC,这种量化误差一般位于 ± 0.5 \pm 0.5 ±0.5LSB。如果在每次采样之间信号变化若干个量化区间,而且变化与采样时间不同步,这种量化误差基本上呈现一种白色噪声,取值均匀分布在从直流到采样频率一半的频率区间内。
ADC可以表示成两个阶段时间采样和幅度量化

ADC可以表示成两个阶段时间采样和幅度量化

SNR表征了ADC结果中的信号能量与噪声能量的比值。在上述理想假设下,仅仅考虑量化误差所产生的噪声,对于满量程模拟信号经过量化之后对应的信噪比有下面公式给出:
S N R d B = 6.02 N + 1.76 SNR_{dB} = 6.02N + 1.76 SNRdB=6.02N+1.76
其中N是ADC的位数,也称为ADC的分辨率。当转换结果的SNR增加时,对应的ADC的 有效位数也增加了,一个ADC的有效位对应6dB的信噪比。所以前面提到的减少数字量化误差本质上是如何提高转换结果中SNR。

2. Nyquist定理和过采样

Nyquist定理,也称为Shannon采样定理,表明如使用均匀时间间隔的信号采样完全恢复原来的信号,采样频率至少比原信号最高频率大两倍,否则就会在采样的数据中出现“混叠”假的干扰信号。

为此,实际应用中常常在采样前使用低通滤波器将高于采样频率一半的成分去掉,做到这一点有时比较困难。

在下面的东途中,可以看到不同比例下所显示的图片因为空间像采样频率不满足Nyquist频谱而出现的混叠现象。
二维图片中的混叠现象

二维图片中的混叠现象

过采样就是采用比Nyquist频率高多的采样速率采集信号,然后再对信号进行平滑滤波、下采样,这样就可以避免使用抗混叠低通滤波器了。

3. 使用白噪声进行过采样

3.1 带有白噪声时过采样后的信噪比(SNR)

如果采样后的数据转化成数字信号时的量化误差为白噪声,那么它的能量密度均匀分布在直流到Nyquist采样频率一般的频率空间里,它与是采样频率之间没有关联。

当使用高的采样速率的时,量化噪声分布在更宽的频率范围内。如下图所示:

过采样如何影响量化噪声的

过采样如何影响量化噪声的

根据上图所示,当采用更高的采样频率是,同样的量化噪声能力(绿色方框所示)就会分布在更宽的频率空间(灰色方框),这样就只有少部分的噪声落在信号频谱范围内了: [ − f m ,    f m ] \left[ { - f_m ,\,\,f_m } \right] [fm,fm]。而信号频谱范围外的噪声可以通过数字低通滤波器消除掉。

减少了量化噪声,从而也就带来了ADC有效的转换位数。使用 O S R OSR OSR表示过采样比率,即实际采样速率除以Nyquist采样频率。那么通过过采样所带来的信噪比的变化为: S N R o v s = 6.02 ⋅ N + 1.72 + 10 log ⁡ ( O S R ) SNR_{ovs} = 6.02 \cdot N + 1.72 + 10\log \left( {OSR} \right) SNRovs=6.02N+1.72+10log(OSR)
因此,每增加一倍的采样频率,就会提高信噪比3dB,相当于提高了ADC 1 / 2 1/2 1/2个bit。增加6个dB就可以提高ADC转换精度1个bit。

所以,假设需要增加p个ADC的有效转换比特,那么所需要的采样频率为:
F o v s = 4 p ⋅ F s F_{ovs} = 4^p \cdot F_s Fovs=4pFs
其中 F s F_s Fs是当前ADC的采样频率。

3.2 数据抽取(Decimation)

通常情况下的频率是将 m 个数据相加之后再除以 m。这相当于对数据进行了低通平滑滤波,将信号中的毛刺去掉。

这种简单的平均并不能够带来结果的 bit 位的增加。数据抽取(Decimation)和过采样结合可以增加数据的有效位数。应用中,将 4 p 4^p 4p个数据累加,得到 N+2p 位的数,然后在右移 p 位,便可以得到 N+p 位的数据了。

3.3 什么时候采用过采样可以提高ADC的有效位数?

为了能够使得过采样加数据抽取可能够提高ADC的有效位数,需要满足以下条件:

  • 在输入信号中应该有一定的噪声,具有在感兴趣频率范围内均匀分布的高斯分布的噪声;
  • 噪声的幅值应该能够使得信号ADC结果最后一位跳动,否则所采集到的数值都一样,经过平均抽取就无法有效提高精度了。

通常情况下ADC内部的热噪声以及输入信号中的噪声就可以满足上面的要求,否则就要另外增加白色噪声,此时成为噪声扰动(dither)方法。那么就有两个问题出现了:

  • 第一就是如何判断采集过程中有复合高斯分布的白噪声?
  • 如果没有如何人工添加?

对于第一个问题在实际中可以通过对一个直流信号进行采集数据的直方图统计,通过它的分布,可以进行Gause检验验证是复合高斯白噪声分布的。下面两个图显示了两种可能的情形。
数据直方图分析

数据直方图分析

对于第二个问题,可以在需要添加噪声的时候,将二极管,或者电阻所产生的热噪声注入到输入信号中。此过程需要保证注入的噪声与输入信号之间不相关。因此在一些反馈系统中,这种直接注入白色噪声的方法就会失效。

下图显示了单片机采集1.65V直流电压所得到的ADC数据,在EXCEL表格中绘制的直方图分析表格,它反映了单片机ADC内部的热噪声。
对于DC=1.65V采样的ADC结果的直方图分析

对于DC=1.65V采样的ADC结果的直方图分析

使用三角波信号扰动进行过采样

为了使得过采样数据能够提高有效ADC位数,需要采样数据能够在多个数字之间变动。如果输入数据噪声非常小,采集到的ADC数据是稳定的,此时就需要额为在信号中加入波动的噪声,以使得采集到的数据能够 有变动。

一种常使用的扰动噪声信号就是三角波信号。理论分析可知,加入的三角波在周期上应该等于ADC采样时间再乘以过采样倍数,三角波在幅度上为 n+0.5LSB,n可以取0,1,2,3。

如何增加三角信号来提高过采样性能

如何增加三角信号来提高过采样性能

如果输入信号 与加入的三角波信号不消管,通过过采样可以得到结果的信噪比为: S N R G a i n = 20 ⋅ log ⁡ ( O S R 2 ) SNR_{Gain} = 20 \cdot \log \left( {\frac{{OSR}}{2}} \right) SNRGain=20log(2OSR)
因此,每增加一倍的采样率,就可以增加一位有效ADC位数。但实际上,这个增加的位数有可能减少,因此一般情况下,如果需要增加 p 位的ADC分辨率,施加三角波扰动过采样的频率应该等于: F o v s = 2. 2 p ⋅ F s F_{ovs} = 2.2^p \cdot F_s Fovs=2.2pFs
对比前面通过白噪声过采样的情况,再增加同样ADC有效位数时,使用三角波扰动所需要增加的采样频率更低。

不像前面所分析的白噪声,可以直接由期间内部的热噪声产生。如果需要在输入信号中添加三角波形,则需要借助外部的电路完成。下面显示了在原有的信号采集调理电路回路中,通过RC电路将单片机所产生的PWM方波信号转换成三角波,然后在叠加在输入信号的幅值上去。

使用硬件电路完成增加三角波扰动

使用硬件电路完成增加三角波扰动

虽说使用外加三角波扰动可以更加有效提高采样位数,但它要求三角波的周期与采样周期之间保持有效的倍数关系,这往往需要对单片机内部的时钟设置有了更高的要求,有的时候可能无法满足。

如果单片机电路中还带有DAC模块,则可以利用DAC产生所需要的白噪声,或者三角波噪声,叠加到采样信号中,通过过采样 有效提高采样的有效位数。

噪声,有的时候会干扰信号被人讨厌,但有的时候则会帮助澄清信息,改善ADC的精度。这个世界就是这么奇妙。

文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。

原文链接:zhuoqing.blog.csdn.net/article/details/104272049

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。