历史上的今天
今天是: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值较大的情况下会导致灵敏度低,对于干扰信号较大的情况下也就是信噪比小的情况不适用该算法。
史海拾趣
|
建立ModelSim SE 的Xilinx仿真库方法,从网上搜到的有很多,实践过其中几种,其中一种较简单的方法如下:1)当然是要安装ModelSim 和ISE 。 2)将ModelSim根目录下的modelsim.ini文件的只读属性去掉。3)在ModelSim命令窗口输入:compxlib -s mti_s ...… 查看全部问答> |
|
看了[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,有点疑惑向大家请教。 我有一个ARM处理器,支持外部DMA,我的ARM会和一个FPGA相连,从FPGA里面DMA出数据来。从硬件上来说,ARM的片选3接到了FPGA上面,我想应该是基于片选3的地址空间来读数据,对吧。如果从FPGA来DMA数据,我是不是 ...… 查看全部问答> |
|
我按照2440使用手册的说明,使用DWN准备烧写BootLoader时,系统总是直接启动核心板上的系统,无法进入烧写得选单,请问各位高手有什么办法吗?另外使用仿真器下载时,提示找不到CPU,这是什么问题?… 查看全部问答> |
|
我在2410linux下面运行通过read()、write()接口和O_RDWR IOCTL读写I2C设备的程序: #include #include #include #include #include #include # ...… 查看全部问答> |
|
用pb定制操作系统,用的是s3c2400+arm9,分辨率320x240,现在想使屏幕转转90度,没有用自带的显示驱动,用的是sm501显示芯片及驱动。请高手指教!… 查看全部问答> |
|
出现的问题:能接电话,不能打电话,发短信正常,收短信的内容不对。 我的操作如下: AT+CFUN=1 AT+CFUN=1 AT+COPS=0 AT+IPR=115200 &nbs ...… 查看全部问答> |




