历史上的今天
返回首页

历史上的今天

今天是:2025年12月15日(星期一)

正在发生

2022年12月15日 | 单片机开发中传感器数据常用算法总结

2022-12-15 来源:zhihu

滑动均值滤波算法

在嵌入式开发过程中会用到各种各样的传感器,比如压力传感器、光敏传感器、加速度传感器、温湿度传感器、角速率传感器等等。在这些传感器数据采集过程中掺杂着噪声,使得传感器测量精度误差过大【传感器数据数据波动很大】,传感器数据输出噪声来源可能是由于震动、温度的变化、电磁干扰等很多因素引起的,常常我们用数字信号处理的方法来消除或者抑制这种噪声。常用的数学方法有FFT滤波算法、DFT滤波算法、kalman算法、中值滤波算法、平均值滤波算法、滑动均值滤波、最小二乘法、排序算法、限幅滤波算法、高通滤波、低通滤波等。每种算法都有各自的特点和的应用场景,用好这些数学工具可以让你的产品或作品更加富有灵魂。


本系列文章主要讲解以上各类算法和应用场景。文本首先介绍滑动均值滤波算法。


以STM32软件项目入门实战中多路电压采集系统这个项目为例,讲述滑动均值滤波。在此之前我们必须清除ADC采集为什么要用到滑动均值滤波,首先采集口的模拟量可能夹杂着不同频段,不同峰值的干扰信号,那么ADC采集的数据量就会偏移原有的真实结果。那么通过硬件与数字滤波两种手段可大大减少采集误差,提高精度。软件方法有算数平均值(是将N个数值作和,之后除以数值个数。)、滑动平均值滤波、卡尔曼、FFT等。


滑动均值滤波算法实现步骤如下:首先是传感器数据的获取,采用的ADC+循环DMA的方式采集电压数据,以5个数据为1组,并将这些数据依次入队,也就是下面数组,最开始进入到队列的数据不停地冲刷,依次能达到数据滑动的目的。

代码实现

图是对5路ADC采样值进行的滑动均值滤波,每五个为一次做依次均值处理,因为ADC_ConvertedValue[]里面的数据由DMA不断进行刷新,因此实现了数据的滑动。

下图是利用matlab将采集的数据用滑动均值滤波做的处理,蓝色为带噪声的原始信号,红色为处理后的信号,可以看出滑动均值滤波可以滤除大量的噪声【毛刺】。

仿真效果图

滑动均值滤波使用时特性如下:对周期性干扰信号有良好的抑制作用,平滑度高,适用于高速率信号采集,算法简单便于计算。因为ADC采集在100KHz以上,所以本算法适合用该应用场景。


N值较大的情况下会导致灵敏度低,对于干扰信号较大的情况下也就是信噪比小的情况不适用该算法。


推荐阅读

史海拾趣

Anpec(茂达)公司的发展小趣事

凭借卓越的产品质量和良好的市场口碑,茂达电子在国内电源模拟IC设计领域的地位逐渐提升。公司不仅在国内市场取得了显著的成绩,还积极拓展海外市场,与众多国际知名企业建立了稳定的合作关系。茂达电子的产品广泛应用于计算机、通信和消费者等领域,为全球客户提供了高质量的电源解决方案。

Amphenol RF公司的发展小趣事

Anpec(茂达电子)自1997年创立之初,就肩负着提升国内电源模拟设计环境、建立自主模拟及电源相关产业的使命。初期,公司规模虽小,但志向远大。面对国内外市场的激烈竞争,茂达电子凭借对技术的执着追求和对市场的敏锐洞察,逐步在模拟集成电路设计领域站稳脚跟。

振宝佳(DMBJ)公司的发展小趣事

随着大陆市场化程度的加深和基础设施的完善,振宝佳公司看到了大陆市场的巨大潜力。为了更好地服务大陆客户,公司于2005年做出了重大战略转移,将总部迁移到塘厦。这一决策不仅使公司能够更贴近市场,也为其后续的发展奠定了坚实的基础。

ATC [American Technical Ceramics]公司的发展小趣事

电子行业是一个充满竞争和变化的领域,企业需要不断创新才能应对市场的挑战。假设ATC在面对激烈的市场竞争时,始终保持对创新的追求和投入。公司不仅注重产品技术的创新,还积极探索新的商业模式和市场策略。通过不断创新,ATC成功应对了市场的各种挑战,保持了稳健的发展态势。

Cortina Systems Inc公司的发展小趣事

随着全球经济的日益一体化,国际合作成为许多公司拓展市场的重要途径。假设ATC在某次国际技术交流会上与一家欧洲知名电子企业达成了合作协议,双方共同开发了一款新型陶瓷电容器。这款电容器不仅性能卓越,而且成本相对较低,因此在全球市场上受到了广泛的欢迎。通过这次合作,ATC不仅提升了自身的技术实力,也进一步拓展了海外市场。

HB公司的发展小趣事

背景:Fritz Hartmann Gerätebau KG成立于1961年,起初专注于电子元器件的研发与生产。随着技术的不断积累和市场的逐步拓展,公司业务逐渐壮大,并更名为Hartmann Codier GmbH。这一时期,公司凭借对开关技术的深刻理解,逐步在行业内建立了良好的声誉。

发展:在初创阶段,Hartmann Codier GmbH致力于提升产品质量和技术水平,通过不断的技术创新和产品优化,逐渐在旋转编码开关和微动开关领域占据了一席之地。同时,公司也积极拓展国内外市场,为后续的快速发展奠定了坚实的基础。

问答坊 | AI 解惑

modelsim下编译xilinx库的方法

建立ModelSim SE 的Xilinx仿真库方法,从网上搜到的有很多,实践过其中几种,其中一种较简单的方法如下:1)当然是要安装ModelSim 和ISE 。 2)将ModelSim根目录下的modelsim.ini文件的只读属性去掉。3)在ModelSim命令窗口输入:compxlib -s mti_s ...…

查看全部问答>

s3c2440 Wince5.0 睡眠与唤醒

看了[url=http://www.hzlitai.com.cn/article/ARM9-article/1685.html][/url]尝试让系统睡眠 ; Sometimes it is not working in cache mode. So I modify to jump to ROM area.        ldr        ...…

查看全部问答>

关于DMA的疑惑,请大家指点!

最近要做DMA,有点疑惑向大家请教。 我有一个ARM处理器,支持外部DMA,我的ARM会和一个FPGA相连,从FPGA里面DMA出数据来。从硬件上来说,ARM的片选3接到了FPGA上面,我想应该是基于片选3的地址空间来读数据,对吧。如果从FPGA来DMA数据,我是不是 ...…

查看全部问答>

新手求助-使用DNW时无法进入主下载选单

我按照2440使用手册的说明,使用DWN准备烧写BootLoader时,系统总是直接启动核心板上的系统,无法进入烧写得选单,请问各位高手有什么办法吗?另外使用仿真器下载时,提示找不到CPU,这是什么问题?…

查看全部问答>

哪位大侠来帮我看看下面的程序!

  我在2410linux下面运行通过read()、write()接口和O_RDWR IOCTL读写I2C设备的程序: #include   #include   #include   #include   #include   #include   # ...…

查看全部问答>

关于屏幕旋转(wince)

用pb定制操作系统,用的是s3c2400+arm9,分辨率320x240,现在想使屏幕转转90度,没有用自带的显示驱动,用的是sm501显示芯片及驱动。请高手指教!…

查看全部问答>

想学习linux嵌入式开发,请教学习方法和教材

想学习linux嵌入式开发,请教学习方法和教材…

查看全部问答>

BENQ M23G调试出现奇怪的问题,大虾救救

出现的问题:能接电话,不能打电话,发短信正常,收短信的内容不对。 我的操作如下: AT+CFUN=1 AT+CFUN=1          AT+COPS=0          AT+IPR=115200     &nbs ...…

查看全部问答>

山寨牌2440开发板

命名《山寨》大家觉得如何,哈哈 [ 本帖最后由 青叶漂零 于 2010-10-28 18:25 编辑 ]…

查看全部问答>

复杂电路分析

拿到一张复杂的电路图,各位都会怎么分析呢??如何确定电路中电流的流向和信号的输入输出的呢??请前辈们介绍下自己的经验(最好能举出特定的例子进行说明),在这里万分感谢了。。。…

查看全部问答>