资料介绍
相信ADC的应用或多或少都会用到,在很多场合都有分辨率要求,要实现较高分辨率时,第一时间会想到采用一个较高位数的外置ADC去实现。可是高分辨率外置ADC往往价格都不便宜,这就带来一对矛盾:高指标与低成本。其实利用单片机片上的ADC利用过采样技术就能很好的解决这样一对矛盾体,本文来聊聊这个话题。
什么是过采样?
在信号处理中,过采样是指以明显高于奈奎斯特速率的采样频率对信号进行采样。从理论上讲,如果以奈奎斯特速率或更高的速率进行采样,则可以完美地重建带宽受限的信号。奈奎斯特频率定义为信号带宽的两倍。过采样能够提高分辨率和信噪比SNR,并且通过放宽抗混叠滤波器的性能要求,有助于避免混叠和相位失真。
在很多项目应用中,需要测量信号的动态范围较大,且需要参数的微小变化。例如,ADC需要测量很大的温度范围(比如工业中甚至要求从-200℃~500℃),但仍要求系统对小于1度的变化做出响应。常见的单片机片上ADC位数为12位,如要实现高于12位分辨率要怎么做呢?我们知道奈奎斯特-香农采样定理可知:
其中:
- 为输入待采样信号最高频率
- 为奈奎斯特频率。
如果实际采样频率高于奈奎斯特频率,即为过采样。那么低于奈奎斯特采样频率进行采样就称为欠采样,如下图:
或许你会问,常规的应用都是过采样,怎么也没见分辨率提高了呀?如果仅仅过采样,要实现更高分辨率显然是不够的,那么要怎么利用过采样实现更高的分辨率呢?要知道所采用的ADC硬件核分辨率是固定的,难道还会变不成?
过采样提高分辨率
如果对一模拟信号,采用过采样,然后再进行一定的软件后处理,理论上是可以得到更高分辨率的:
为增加有效位数(ENOB :effective number of bits),对信号进行过采样,所需的过采样率可以由下面公式确定(省略理论推导,过于枯燥):
其中:
- 为过采样频率
- 产品所需实际采样频率
- W为额外所需增加的分辨率位数
假设系统使用12位ADC每100 ms输出一次采样值也即(10 Hz)。为了将测量的分辨率提高到16位,我们按上述公式计算过采样频率:
因此,如果我们以对信号进行过采样,然后在所需的采样周期内收集足够的样本以对它们进行平均,现在可以将16位输出数据用于16位测量。
具体怎么做呢?
- 首先将256个连续采样累加
- 然后将总数除以16(或将总数右移4位)。该过程通常称为抽取,也即将速率采样。
- 在类似进行下一次16位样本处理
注意:用于累积过采样数据并执行除法抽取数据类型必须具有足够的字节宽度,以防止溢出和截断错误。比如这里累积和可以采样32位无符号整型。
由上面公式可得出一个重要结论:每提高W位分辨率,需要提高采样率4W倍。
过采样提高ADC的信噪比
ADC测量的SNR理论极限基于量化噪声,这是基于在没有过采样和平滑滤波情况下模数转换过程中固有的量化误差所致。而量化误差取决于ADC分辨率的位数,其中N为ADC的位数,Vref为参考电压。
SNR理论情况下极限值的计算方式是数据转换的有效位数,如下所示:
这个公式没必要去记,用到的时候参考计算一下即可。从公式中可看出,要提升一个模数转换器的理论SNR的一种可行方案可以通过提升采样位数,但是需要注意的是这里的信噪比是度量模数转换器本身的,就一个真实系统的信噪比还与整个信号链相关!
从上式中不难算出,12位ADC的理论SNR极限值为74dB,而通过过采样提升4位分辨率后,其SNR理论极限提高至96 dB!
到底怎么实现呢?
这里以伪代码的方式给出编程思路:
void init_adc(void) { /*配置ADC的采样率为过采样率连续中断模式*/ } void start_adc(void) { /*控制ADC启动采样*/ } /*不同的开发平台中断函数写法略有差异,比如51需要指定向量 */ /*OVERSAMPLE_FACTOR=4^RSHIFT_BITS 下面两个宏一起修改 */ #define RSHIFT_BITS (4) #define OVERSAMPLE_FACTOR (256) static unsigned short adc_result=0U; void adc_isr(void) { static unsigned short adc_index = OVERSAMPLE_FACTOR; static unsigned int accumulator = 0U; /*ADC_REG ADC转换结果寄存器,不同平台名称不同*/ accumulator += ADC_REG; adc_index--; if( adc_index==0 ) { /* 加和按因子抽取 */ adc_result = accumulator>>RSHIFT_BITS; accumulator = 0; adc_index = OVERSAMPLE_FACTOR; } }
该方案有一个缺陷,就是每次ADC中断都需要CPU参与,在过采样率很高的情况下,上述方案消耗很多CPU资源,那么如果单片机内存资源足够的情况下可以考虑采用DMA模式,采集很多数据并将数据暂存下来,然后再做累加平均抽取。这是空间换时间的策略的体现。这个编代码也很容易,只需要申请一片内存区,内存区的大小可以定为256的倍数,这是因为在提升4位分辨率情况下,一个16位的输出样本需要256个12位样本。
总结一下
在成本受限的情况下,可以通过单片机片内ADC过采样以及累积抽取的技术来提升采样分辨率,这种技术的特点:
- 可以使用过采样和平均来提高测量分辨率,而无需增加昂贵的片外ADC。
- 过采样和加和抽取将以提高CPU利用率和降低吞吐量为代价来提高SNR和测量分辨率。
- 过采样和加和抽取可以改善白噪声的信噪比。
本文转载自:嵌入式客栈微信公众号(作者: 逸珺)
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理。
- 宽带视频开关解决高分辨率视频设计挑战
- 太秀了!单片机内置ADC实现高分辨率采样?
- 太秀了!单片机内置 ADC 实现高分辨率采样?
- 太秀了!单片机内置ADC实现高分辨率采样?
- 单片机内置ADC如何实现高分辨率采样?
- 结合CLC和NCO实现高分辨率PWM 17次下载
- 高分辨率ADC的板布线分析 0次下载
- 高分辨率信号空调系统的浅析 22次下载
- 一种基于参考高分辨率图像的视频序列超分辨率复原算法 5次下载
- 垂直分辨率与使用高分辨率示波器测量微小信号的介绍 22次下载
- 基于FPGA的高分辨率图像DCT域增强 4次下载
- 如何优化高分辨率DAC的DC测量
- 超低频高分辨率信号源的设计
- 超高分辨率图像实时显示系统设计
- 高速高分辨率数据采集系统
- 高分辨率音频和传统音频区别 136次阅读
- 使用傅里叶叠层成像对运动物体进行高分辨率成像 730次阅读
- 关于峰峰值分辨率还是有效分辨率你了解了么? 530次阅读
- YOLOv8版本升级支持小目标检测与高分辨率图像输入 1.1w次阅读
- 了解模数转换器中的噪声、ENOB和有效分辨率 5935次阅读
- 用于高分辨率1Msps ADC的μModule隔离解决方案 1979次阅读
- 低噪声、精密运算放大器驱动高分辨率SAR ADC 1794次阅读
- 设计一个U形高分辨率网络(U-HRNet) 1746次阅读
- 如何通过过采样的方式提高有效位分辨率 6063次阅读
- 高分辨率ADC应用中的闭环增益误差和闭环带宽限制的考虑 2913次阅读
- 基于FPGA的高分辨率高刷新率图像采集系统设计 1168次阅读
- digilent高分辨率便携式数据记录器介绍 1505次阅读
- 使用TensorFlow生成的高分辨率抽象艺术图片的实现解析 5482次阅读
- 电压基准噪声对于增量-累加ADC分辨率的影响 3264次阅读
- 基于FH8735的高分辨率图形图像压缩技术 2022次阅读
下载排行
本周
- 1TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 2开关电源基础知识
- 5.73 MB | 6次下载 | 免费
- 3100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 4嵌入式linux-聊天程序设计
- 0.60 MB | 3次下载 | 免费
- 5基于FPGA的光纤通信系统的设计与实现
- 0.61 MB | 2次下载 | 免费
- 6基于FPGA的C8051F单片机开发板设计
- 0.70 MB | 2次下载 | 免费
- 751单片机窗帘控制器仿真程序
- 1.93 MB | 2次下载 | 免费
- 8基于51单片机的RGB调色灯程序仿真
- 0.86 MB | 2次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33564次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21548次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6653次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537796次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191185次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183278次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多