单片机
返回首页

单片机开发中传感器数据常用算法总结

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值较大的情况下会导致灵敏度低,对于干扰信号较大的情况下也就是信噪比小的情况不适用该算法。


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 用NE555制作定时器

  • 如何调制IC555振荡器

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章