滑动均值滤波算法
在嵌入式开发过程中会用到各种各样的传感器,比如压力传感器、光敏传感器、加速度传感器、温湿度传感器、角速率传感器等等。在这些传感器数据采集过程中掺杂着噪声,使得传感器测量精度误差过大【传感器数据数据波动很大】,传感器数据输出噪声来源可能是由于震动、温度的变化、电磁干扰等很多因素引起的,常常我们用数字信号处理的方法来消除或者抑制这种噪声。常用的数学方法有FFT滤波算法、DFT滤波算法、kalman算法、中值滤波算法、平均值滤波算法、滑动均值滤波、最小二乘法、排序算法、限幅滤波算法、高通滤波、低通滤波等。每种算法都有各自的特点和的应用场景,用好这些数学工具可以让你的产品或作品更加富有灵魂。
本系列文章主要讲解以上各类算法和应用场景。文本首先介绍滑动均值滤波算法。
以STM32软件项目入门实战中多路电压采集系统这个项目为例,讲述滑动均值滤波。在此之前我们必须清除ADC采集为什么要用到滑动均值滤波,首先采集口的模拟量可能夹杂着不同频段,不同峰值的干扰信号,那么ADC采集的数据量就会偏移原有的真实结果。那么通过硬件与数字滤波两种手段可大大减少采集误差,提高精度。软件方法有算数平均值(是将N个数值作和,之后除以数值个数。)、滑动平均值滤波、卡尔曼、FFT等。
滑动均值滤波算法实现步骤如下:首先是传感器数据的获取,采用的ADC+循环DMA的方式采集电压数据,以5个数据为1组,并将这些数据依次入队,也就是下面数组,最开始进入到队列的数据不停地冲刷,依次能达到数据滑动的目的。
代码实现
图是对5路ADC采样值进行的滑动均值滤波,每五个为一次做依次均值处理,因为ADC_ConvertedValue[]里面的数据由DMA不断进行刷新,因此实现了数据的滑动。
下图是利用matlab将采集的数据用滑动均值滤波做的处理,蓝色为带噪声的原始信号,红色为处理后的信号,可以看出滑动均值滤波可以滤除大量的噪声【毛刺】。
仿真效果图
滑动均值滤波使用时特性如下:对周期性干扰信号有良好的抑制作用,平滑度高,适用于高速率信号采集,算法简单便于计算。因为ADC采集在100KHz以上,所以本算法适合用该应用场景。
N值较大的情况下会导致灵敏度低,对于干扰信号较大的情况下也就是信噪比小的情况不适用该算法。
关键字:单片机开发 传感器数据 常用算法
引用地址:
单片机开发中传感器数据常用算法总结
推荐阅读最新更新时间:2024-11-12 01:08
中科芯与IAR共建生态合作,IAR集成开发环境全面支持CKS32系列MCU
中国上海 – 2023 年 1 0 月 18 日 – 嵌入式开发软件和服务的全球领导者IAR今日宣布,与中科芯集成电路有限公司(以下简称中科芯)达成生态合作,IAR已全面支持CKS32系列MCU的应用开发。这一合作将进一步推动嵌入式系统的发展,并为开发者提供更完整、高效的开发解决方案。 IAR Embedded Workbench集成开发环境一直是全球众多开发者首选的嵌入式软件开发解决方案之一。 这一强大的工具套件已全面支持中科芯CKS32系列MCU,为开发者提供了无与伦比的支持。通过该解决方案,开发者可以充分利用代码优化功能,同时还享有一系列强大的调试功能,包括代码和数据断点、运行时堆栈分析、调用堆栈可视化等。此外,IAR
[嵌入式]
ARM-Linux开发与MCU开发比较
1.ARM-Linux应用开发和单片机开发的不同 这里先要做一个说明,对于ARM的应用开发主要有两种方式:一种是直接在ARM芯片上进行应用开发,不采用操作系统,也称为裸机编程,这种开发方式主要应用于一些低端的ARM芯片上,其开发过程非常类似单片机,这里不多叙述。还有一种是在ARM芯片上运行操作系统,对于硬件的操作需要编写相应的驱动程序,应用开发则是基于操作系统的,这种方式的嵌入式应用开发与单片机开发差异较大。ARM-Linux应用开发和单片机的开发主要有以下几点不同: 应用开发环境的硬件设备不同 单片机:开发板、仿真器(调试器)、USB线; ARM-Linux:开发板、网线、串口线、SD卡; 对于ARM-Linux
[单片机]
Crank Storyboard:微控制器和微处理器之间协同开发GUI
使用各种微控制器(MCU)和微处理器(MPU)的团队能否找到节省资源并优化工作流程的方法?ST合作伙伴计划的成员Crank Software给与了答案。这家总部位于加拿大的跨国公司以Storyboard(一个用于嵌入式GUI开发的跨平台框架)而闻名。该工具可以创建复杂而引人入胜的界面。开发人员可以尝试在STM32 MCU和MPU上演示图像,从而在短短几分钟内就可以开始测试环境。演示图像也是框架将相似的UI引入各种组件的能力的一个很好的例子。因此,这些图像对于希望从MCU迁移到MPU或反之亦然的工程师来说是一个对象课程。 迁移的挑战 使用各种组件具有许多优势。例如,它可以帮助公司在为客户量身定制解决方案的同时享受更大的灵活
[嵌入式]
缺少仿真器时avr单片机的开发方法
对FLASH存贮器单片机,不要仿真机也能方便快速地开发程序。具体可以从以下几方面入手: 一、尽量使用高级语言开发系统程序 您有没有在写汇编程序时,标错一个标号而浪费您大把时间找错或跳转偏移量过大而不得不改动程序结构的经历。其实您如果使用高级语言开发程序,就不会有这样的痛苦。 在开发程序时,除了建立一个良好的开发文档外,使用语言的选择也很重要。有许多人认为使用汇编写程序比较精简,而用高级语言开发会浪费很多程序空间,其实这是一种误解。对一个有经验的,而且非常熟悉某种单片机的汇编高手而言,他是能写出比高级语言更精简的代码。而对汇编不是很熟的开发者、或突然更换了一种新的单片机,您能保证一定可以写出比高级语言更简练的代码吗? 高级语言的优越
[单片机]
单片机在人际语言互动方面的开发利用
(1)设计初衷。语言是人类特有的通信方式,在漫长的人类社会发展过程中发挥着无可比拟的作用。让机器“说话”一直是电子技术 不断努力的方向,语言合成是人机语声通信的一个重要组成部分。近年来,随着大规模集成电路的发展,多种外围电路简单性价比高专用语音处理芯片相继问世,如uM6101、8P101 等。但这些芯片多缺乏“智能”组合合成的能力,有的甚至只能实现简单的语音录放功能,因此,应用范围受到一定的限制。最近一些研发人员利用单片机改造电子闹钟的语音自动报时功能在单片机的智能化应用方面迈出了建设性的步伐。 (2)软件设计原理。波形编码技术在众多语音合成编码方案脱颖而出,让单片机工作在定时计数方式,当单片机接收到需报时(或整点自动报时,或定
[单片机]
基于P89V51RB2单片机实验箱设计与开发
引言 单片机,是嵌入式处理器的一大类(另外还有DSP、FPGA等),具有高度集成、体积小、功耗低、降低成本等诸多优点。随着单片机技术的不断发展,单片机在微机控制领域占据着重要地位,由于其具有体积小、可靠性好、易扩展、控制功能强、使用方便等优点,在智能仪表、工业测控、计算机网络与通信设备、日常生活及家用电器等方面都得到了广泛的应用 .单片机已广泛应用于工业控制、智能家用电器、通讯、医疗和军事等众多领域,社会对掌握单片机技术的应用型人才的需求越来越大 . 本设计的实验箱采用了数字逻辑,单片机原理,电路基础,动态数码管扫描等各个方面的理论依据。单片机原理是一种在线式实时控制计算机,在线式就是现场控制,需要的是有较强的抗干
[单片机]
51单片机开发步骤详解
想要从事高端嵌入式开发,首先要会用ARM与Linux,想要会用ARM与Linux,首先要会单片机,想要零基础学会单片机,就要想从51单片机开始; 想要学好单片机,基础:1、C语言了解;2、微机原理与接口技术了解;想要提升开发能力,就必须要不断地实践,建议小白可以在网上(某宝)买一块51单片机开发板,自己参照课程研究研究 下面我把我的经历给大家说一下,希望有志于单片机开发的童鞋能做一个参考 第一步: C语言基础,建议买一本谭浩强的《C语言程序设计》,如果不想买,可以在网上找一个PDF版; 微机原理与接口技术基础,建议去中国大学MOOC上看一下相关课程,也可以看C语言课程;记住:这些课程要不求甚解,因为这些都是非常抽象的概念,如果非要
[单片机]
开发设计单片机应用系统应注意的问题
作为一名电子产品的专业设计人员来讲,开发和设计单片机应用系统除考虑电磁干扰问题之外,还应考虑如下问题: 1.注意低功耗设计 目前,绿色、环保、节能等词汇越来越频繁地出现在人们的生活中,连GDP都有绿色GDP。对于每个电子产品的设计者来说,都不能不考虑产品的低功耗设计问题。众所周知,各种电子产品的供电方式有两种:一种是电池供电系统;另一种是交流供电系统。对于电池供电系统来说,为了延长电池的使用寿命,必须降低整个系统的功耗。如手机,每隔3-6天就要充电,笔记本电脑充满电最长时间能用7-8小时,最短时间的只能用1-2小时左右。对于交流供电系统来说,虽然没有充电的限制,也是功耗越低越好。两件产品功能相同,但耗电不同,肯定是功耗低者更有竞争
[单片机]