利用过采样技术提高ADC测量微弱信号时的分辨率
1. 引言
随着科学技术的发展,人们对宏观和微观世界逐步了解,越来越多领域(物理学、化学、天文学、军事雷达、地震学、生物医学等)的微弱信号需要被检测,例如:弱磁、弱光、微震动、小位移、心电、脑电等[1~3]。测控技术发展到现在,微弱信号检测技术已经相对成熟,基本上采用以下两种方法来实现:一种是先将信号放大滤波,再用低或中分辨率的ADC进行采样,转化为数字信号后,再做信号处理,另一种是使用高分辨率ADC,对微弱信号直接采样,再进行数字信号处理。两种方法各有千秋,也都有自己的缺点。前一种方法,ADC要求不高,特别是现在大部分微处理器都集成有低或中分辨率的ADC,大大节省了开支,但是增加了繁琐的模拟电路。后一种方法省去了模拟电路,但是对ADC性能要求高,虽然∑-△ADC发展很快,已经可以做到24位分辨率,价格也相对低廉,但是它是用速度和芯片面积换取的高精度[4],导致采样率做不高,特别是用于多通道采样时,由于建立时间长,采样率还会显著降低,因此,它一般用于低频信号的单通道测量,满足大多数的应用场合。而本文提出的方案,可以绕过上述两种方法的缺点,利用两者的优点实现微弱信号的高精度测量。
过采样技术是提高测控系统分辨率的常用方法,已经被广泛应用于各个领域。例如,过采样成功抑制了多用户CDMA系统中相互正交用户码接收机(A Mutually Orthogonal Usercode-Receiver,AMOUR)的噪声[5~6],提高了光流估计(optical flow estimation,OFE)的精度[7],改善了正交频分复用(OFDM)信号的峰-均比[8]等。但是,这些过采样技术应用的前提是采样前的信号幅值能与ADC的输入范围相当。而用ADC采集微弱信号时,直接使用过采样技术提高不了精度,而且由于信号幅值远小于ADC的输入范围,它的有效位数还会减小,使精度随之下降。本文采用先叠加成形函数的方法,然后利用过采样技术,解决了因为信号幅值小,而使过采样失效的问题。本文还详细分析了成形函数类型和幅值,以及过采样率对分辨率的影响。
2. 原理分析
2.1 微弱信号直接过采样的分析
过采样是通过数字平均来减小折合到输入端的噪声,提高信噪比,从而提高分辨率[9]。下面分析为什么输入信号幅值很小时,需要叠加成形函数,才能利用过采样提高分辨率。
如图1所示,输入信号为一周期性三角波,当用一个中分辨率的ADC1对其进行采样时,ADC的量化步长LSB1大于三角波幅值,其采样值均为0,失去了原信号的特征。而用一个高分辨率ADC2进行采样,量化步长LSB2小于三角波幅值,其采样值分布会发生改变,不会只为0,便能反映一定的信号特征。因此,如果输入信号幅值很小时,过采样也能提高分辨率,那么当过采样率足够大时,ADC1提高后的分辨率便能分辨出图1中的三角波信号。然而,实际上,即使过采样率再高,ADC1采样获得的值仍然全部为0,并不能表征三角波的特性。所以,当输入信号幅值小于ADC的量化步长时,过采样是不能提高ADC分辨率的。
本文采用叠加成形函数的方法,使得输入信号幅值大于ADC的量化步长,解决上述提到的问题。为便于过采样后下抽取的方便,成形函数的选取往往用线性变化的函数[10],如三角波,锯齿波等。下面便以锯齿波为例,详细阐述本方法的原理。
2.2 叠加成形函数后过采样分析
在分析之前,先对相关参数进行设定。ADC的分辨率为n位,输入满幅值为VREF,一个量化步长对应的模拟电压值为1LSB,过采样率为M。被测信号为s ,构造成形函数r为周期性锯齿波函数,幅值为C0,周期为采样M点所需要的时间。设,其中x为正整数,0≤△x<1。要提高分辨率,即要分辨出s中的△x。
由于信号s为微弱信号,且采用过采样,则可以做以下假设:
(1) s 在每个锯齿波周期中保持不变,可以看成直流,且整个信号的动态范围远小于ADC的动态范围。
(2) 为保证2.1节中所说的,使信号幅值大于一个量化步长,则成形函数的幅值,由于进入ADC的信号不能超过输入范围,因此构造的锯齿波幅值还必须满足
。
后文的叙述是以相关参数满足以上两个条件为基础进行的。下面从锯齿波幅值C0是否为整数倍量化步长来分析提高的分辨率。
2.2.1锯齿波幅值为整数倍量化步长
设(N ≥1),每个LSB内平均采样m 0 个点,则一个周期内锯齿波总的采样点数为M = N ×m 0。如图2所示,t1-t2内的采样点数为:(1-△x)m 0 ,而t3-t4内的采样点数为:△x×m 0,则ADC在t1-t4内的采样值分布为:
xLSB: (1-△x)m 0
(x+1)LSB: m 0
(x+2)LSB: m 0
(x+N-1)LSB: m 0
(x+N)LSB: △x×m 0
对所有采样值si求均值:
(1)
而锯齿波的幅值贡献为
(2)
由式(1)(2)得:,因此,只需对一个周期内的采样值求和再减掉成形函数(锯齿波)的均值,便可求的△x,提高信号的分辨率。
而实际应用中,要获得精确的整数倍LSB的锯齿波是很困难的,下面分析锯齿波幅值不为整数倍量化步长时的情况。
2.2.2锯齿波幅值不为整数倍量化步长
假设叠加的锯齿波的幅值,(N ≥1,0≤△N<1),每个LSB内采样点数为m0。由于△N +△x是否大于1,
的表达式有所不同,下面从两个方面分析
(1)△N +△x≤1时
采样值分布只在t3-t4内发生改变,(x+N)LSB的采样点数为:(△x+△N)×m 0,则
(3)
而锯齿波的贡献也发生改变,为
(4)
由式(3)、(4)得:
(5)
由式(5)可以看出,s,与s值是有误差的,误差大小为:
(6)
(2)△N +△x≥1时
采样值分布也是在t3-t4内发生改变,由于△N +△x≥1,使得采样值多出(x+N+1)LSB的部分,采样点数为:(1-△N -△x)m0,而(x+N)LSB的采样点数则为m0。因此:
(7)
而锯齿波的表达式保持不变,则由式(4)、(5)(6)、(7)得:
(8)
3. 分辨率分析
提高的分辨率主要由哪些参数决定呢? 通常判断是否能分辨开两个数值,主要看这两个数的差值是否大于最小分辨率,反过来说,最小分辨率等于两个数值恰好能分辨开时的差值。
如图3所示,分析x1和x2的采样值分布得到:x1在t2-t4的采样值分布与x2在t3-t4的相同,能否区别开x1和x2主要由x1在t1-t2和t4-t6的采样值分布与x2在t1-t3和t5-t6的采样值分布是否不同来决定。由图3可以看出,只要t2-t3内,能采集到数,则x1和x2的采样值分布就会不同,x1和x2就能分辨开来。t2-t3内采集一个点,对应纵坐标幅值AB至少为(1/m0)LSB(m0为每个LSB的采样点数),而AB= x2-x1,所以x2和x1的差值至少为(1/m0)LSB时才能分辨开。因此,提高的分辨率值为1/m0。综上所述,提高的分辨率由每个LSB内的采样点数m0决定,即由总的过采样倍数和叠加的锯齿波幅值决定。增加的位数可以通过过采样提高分辨率的方法来估计[11],为:(10lgm0)/6.02或(10lgM/C0)/6.02。
4. 误差分析
由于叠加的锯齿波幅值很难做到整数倍的LSB,都会有△N的误差,根据△N、△x和的大小会使最终结果产生如式(6)、(8)所表示的误差。那么误差在什么范围内是可以接受的,对结果不会造成致命影响呢?下面对误差表达式进行分析。
由式(6)、(8)可以看出,当N和△N一定时,误差的最大值eM出现在△x=1-△N的位置,因而式(6)、(8)的最大值均为:
(9)
当N>>△N时,式(9)可写为:
(10)
由于△N也是有误差的,很明显式(10)在△N=0.5的时候会有最大值,有eMmax=0.25/N。
而用AD转换器进行采样时,产生的误差大小为一个LSB,同理,只要该算法产生的最大误差小于提高的分辨率1/m0就是可接受的,是不会影响测量结果的。因此有:,则N必须满足:
(11)
5. 结论
本文详细阐述了ADC采样微弱信号时利用过采样技术提高分辨率的方法,并且分析了该方法的误差,并从误差出发,给出了使用条件。
当成形函数幅值能保证在ADC量化步长整数倍时,该算法不会带来额外误差,在提高同样分辨率前提小,由于成形函数幅值越大,过采样率会越大,对ADC的采样速度要求会增加,而过小幅值的成形函数产生会有困难,在实际应用时应在这两者之间选取平衡点。
而成形函数幅值不为ADC量化步长整数倍的情况在实际应用中更为常见,本文用的算法会带来额外误差。由式(11)可知,成形函数幅值必需保证在一定的大小,该算法才算有效。由于成形函数幅值的要求,过采样率相当高时才能提高一定的分辨率,使得该方法效率不高。然而,式(11)给出的是最恶劣情况下的条件,实际应用中,用相同分辨率DAC产生的锯齿波幅值与选用的ADC整数倍量化步长的误差不会那么大,而且还可以采用其他辅助方法使得其幅值与ADC整数倍量化步长之间的误差减小,提高本算法的精度。
参考文献
): 51-55.
[2] Cheng De-fu, Lin Jun, Yu Sheng-bao, Duan Qing-ming, Zu Kai-guang, Ji Yan-ju. Study on TEM weak signal detection techniques [J]. Journal of Jilin University (Information Science Edition), 2002, 20(2): 1-5.
.
,28(2):68-71.
,25(12): 1695-1702.
): 1837 – 1851.
(24-27): 2567 - 2570 .
): p72 – 78.
,4: 53-57.
[10] Texas Instruments Europe. -6.
[11] A V 奥本海姆,R W 谢弗,J R 巴克.(刘海棠,黄建国译). 离散时间信号处理(第2版)[Z]. 西安:西安交通大学出版社,2001,150-167.
利用过采样技术提高ADC测量微弱信号时的分辨率的更多相关文章
- 内蒙古特检院利用物联网/RFID技术提高电梯检测水平
随着电梯检验工作信息化进程的进一步深入,内蒙古特检院从检验工作中寻找新方法.新手段,为检验员新引入电梯检验手持终端设备,力求提高电梯检验水平,将"电梯安全惠民工程"落到实处. 电梯 ...
- PHP利用memcache缓存技术提高响应速度
PHP下memcache模块是一个高效的守护进程,提供用于内存缓存的过程式程序和面向对象的方便的接口,特别是对于设计动态web程序时减少对数据库的访问.memcache也提供用于通信对话(sessio ...
- 利用联合双边滤波或引导滤波进行升采样(Upsampling)技术提高一些耗时算法的速度。
这十年来,在图像处理领域提出了很多新的图像分析和处理方法,包括是自动的以及一些需要有人工参与的,典型的比如stereo depth computations.image colorization.to ...
- 单片机提高ADC精度总结
在常用传感器中,模数转换器是其中至关重要的环节,模数转换器的精度以及系统的成本直接影响到系统的实用性.因此.如何提高模数转换器的精度和降低系统的成本是衡量系统是否具有实际应用价值的标准. 图 1 ...
- MAP 最大后验——利用经验数据获得对未观测量的点态估计
Map (最大后验) 在贝叶斯统计学中,最大后验(Maximum A Posteriori,MAP)估计可以利用经验数据获得对未观测量的点态估计.它与Fisher的最大似然估计(Maximum Lik ...
- 利用站点ip引导提高站点权重的可行方案
如题,利用站点每天高数额的ip訪问量来提高站点权重,首先在谈论这个话题之前,我举个样例.我们知道想要一个站点权重非常高,首先它站点本身的内容一定是有价值的,而且受大众欢迎的,人们会常常訪问这个站点来寻 ...
- 跟我一起学WCF(2)——利用.NET Remoting技术开发分布式应用
一.引言 上一篇博文分享了消息队列(MSMQ)技术来实现分布式应用,在这篇博文继续分享下.NET平台下另一种分布式技术——.NET Remoting. 二..NET Remoting 介绍 2.1 . ...
- 机器学习实战 - 读书笔记(07) - 利用AdaBoost元算法提高分类性能
前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习笔记,这次是第7章 - 利用AdaBoost元算法提高分类性能. 核心思想 在使用某个特定的算法是, ...
- 利用curl并发来提高页面访问速度
在我们平时的程序中难免出现同时访问几个接口的情况,平时我们用curl进行访问的时候,一般都是单个.顺序访问,假如有3个接口,每个接口耗时500毫 秒那么我们三个接口就要花费1500毫秒了,这个问题太头 ...
随机推荐
- shell复习笔记----查找与替换
查找文档 以grep 程序查找文本(匹配文本 matching text)相当方便.传统上有三种程序可以用来查找整个文本文件. grep 最早的文本匹配程序.其最简单的方式就是使用固定字符串 $ wh ...
- mysql可以运行在不同sql mode模式下面,sql mode模式定义了mysql应该支持的sql语法,数据校验等
查看默认的sql mode模式:select @@sql_mode;我的数据库是:STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUT ...
- Nagios+msn+fetion自定义时间发送报警消息
转自http://blog.csdn.net/deccmtd/article/details/6063467 Nagios+fetion发送手机报警使用了几个月.每次报警短信来都要看下手机.感觉麻烦. ...
- PHP set_exception_handler 设置异常处理函数
If you're handling sensitive data and you don't want exceptions logging details such as variable con ...
- 在线学习SQL语句?没问题~~
以前弄得少,没注意.. http://sqlfiddle.com/ CREATE TABLE Presidents ( Id INT UNSIGNED NOT NULL AUTO_INCREMENT, ...
- java内存模型分析2
不同线程之间无法直接访问对方工作内存中的变量,线程间变量值的传递均需要在主内存来完成,线程.主内存和工作内存的交互关系如下图所示,和上图很类似. 这里的主内存.工作内存与Java内存区域的Java堆. ...
- tinyXml在linux下的使用
[下载] 一.下载 xml 软件包:tinyxml_2_6_2.zipTinyxml(轻量级 c++)下载地址:http://sourceforge.net/projects/tinyxml/?sou ...
- Servlet课程0425(五) sendRedirect实现不同页面共享数据
Login.java //登录界面 package com.tsinghua; import javax.servlet.http.*; import java.io.*; public class ...
- 115. Distinct Subsequences
题目: Given a string S and a string T, count the number of distinct subsequences of T in S. A subseque ...
- Java API ——Character类
1.Character类的概述 · Character 类在对象中包装一个基本类型 char 的值 · 此外,该类提供了几种方法,以确定字符的类别(小写字母,数字,等等),并将字符从大写转换成小写,反 ...