单片机数字滤波的算法

发布者:学富五车最新更新时间:2015-11-02 来源: eefocus关键字:单片机  数字滤波  算法 手机看文章 扫描二维码
随时随地手机看文章
单片机主要作用是控制外围的器件,并实现一定的通信和数据处理。但在某些特定场合,不可避免地要用到数学运算,尽管单片机并不擅长实现算法和进行复杂的运算。下面主要是介绍如何用单片机实现数字滤波。

在单片机进行数据采集时,会遇到数据的随机误差,随机误差是由随机干扰引起的,其特点是在相同条件下测量同一量时,其大小和符号会现无规则的变化而无法预测,但多次测量的结果符合统计规律。为克服随机干扰引起的误差,硬件上可采用滤波技术,软件上可采用软件算法实现数字滤波。滤波算法往往是系统测控算法的一个重要组成部分,实时性很强。

 

采用数字滤波算法克服随机干扰的误差具有以下优点:

   数字滤波无需其他的硬件成本,只用一个计算过程,可靠性高,不存在阻抗匹配问题。尤其是数字滤波可以对频率很低的信号进行滤波,这是模拟滤波器做不到的。

   数字滤波使用软件算法实现,多输入通道可共用一个滤波程序,降低系统开支。

 只要适当改变滤波器的滤波程序或运算,就能方便地改变其滤波特性,这对于滤除低频干扰和随机信号会有较大的效果。

   在单片机系统中常用的滤波算法有限幅滤波法、中值滤波法、算术平均滤波法、加权平均滤波法、滑动平均滤波等。

 

(1)限幅滤波算法

该运算的过程中将两次相邻的采样相减,求出其增量,然后将增量的绝对值,与两次采样允许的最大差值A进行比较。A的大小由被测对象的具体情况而定,如果小于或等于允许的最大差值,则本次采样有效;否则取上次采样值作为本次数据的样本。

 

算法的程序代码如下:

 

#define A                //允许的最大差值

char data;                //上一次的数据

char filter()

{

char datanew;        //新数据变量

datanew=get_data();   //获得新数据变量

if( (datanew-data)>A||(data-datanew>A) )

    return data;

else

   return datanew;

}

 

说明:限幅滤波法主要用于处理变化较为缓慢的数据,如温度、物体的位置等。使用时,关键要选取合适的门限制A。通常这可由经验数据获得,必要时可通过实验得到。

  

(2)中值滤波算法

该运算的过程是对某一参数连续采样N次(N一般为奇数),然后把N次采样的值按从小到大排列,再取中间值作为本次采样值,整个过程实际上是一个序列排序的过程。

 

算法的程序代码如下:

#define N 11    //定义获得的数据个数

char  filter()

{

    char value_buff[N];            //定义存储数据的数组

    char count,i,temp;

for(count=0;count //获取数据

{

    value_buf[count]=get_data();

    delay();                 //如果采集数据比较慢,那么就需要延时或中断

}

 

for(i=0;i           //用冒泡法对数据进行排序,当然最好用其他排序方法

{

   if(value_buff[i]>value_buff[i+1])

       {

         temp=value_buff[i];

         value_buff[i]=value_buff[i+1];

         value_buff[i+1]=temp;

     }

}

return value_buff[(N-1)/2];

}

说明:中值滤波比较适用于去掉由偶然因素引起的波动和采样器不稳定而引起的脉动干扰。若被测量值变化比较慢,采用中值滤波法效果会比较好,但如果数据变化比较快,则不宜采用此方法。

 

 [page]

(3)算术平均滤波算法

该算法的基本原理很简单,就是连续取N次采样值后进行算术平均。

算法的程序代码如下:

char filter()

{

int sum=0;

for (count=0;count

{

    sum+=get_data();

    delay():

}

return (char)(sum/N);

}

说明:算术平均滤波算法适用于对具有随机干扰的信号进行滤波。这种信号的特点是有一个平均值,信号在某一数值附近上下波动。信号的平均平滑程度完全到决于N值。当N较大时,平滑度高,灵敏度低;当N较小时,平滑度低,但灵敏度高。为了方便求平均值,N一般取4、8、16、32之类的2的整数幂,以便在程序中用移位操作来代替除法。

 

 

(4)加权平均滤波算法

由于前面所说的“算术平均滤波算法”存在平滑度和灵敏度之间的矛盾。为了协调平滑度和灵敏度之间的关系,可采用加权平均滤波。它的原理是对连续N次采样值分别乘上不同的加权系数之后再求累加,加权系数一般先小后大,以突出后面若干采样的效果,加强系统对参数变化趋势的认识。各个加权系数均小于1的小数,且满足总和等于1的结束条件。这样加权运算之后的累加和即为有效采样值。其中加权平均数字滤波的数学模型是:

 

 

                              

式中:D为N个采样值的加权平均值:XN-i为第N-i次采样值;N为采样次数;Ci为加权系数。加权系数Ci体现了各种采样值在平均值中所占的比例。一般来说采样次数越靠后,取的比例越大,这样可增加新采样在平均值中所占的比重。加权平均值滤波法可突出一部分信号抵制另一部分信号,以提高采样值变化的灵敏度。

 

样例程序代码如下:

char code jq[N]={1,2,3,4,5,6,7,8,9,10,11,12};  //code数组为加权系数表,存在程序存储区

char code sum_jq=1+2+3+4+5+6+7+8+9+10+11+12;

char filter()

{

char count;

char value_buff[N];

int sum=0;

for(count=0;count

{

    value_buff[count]=get_data();

       delay();

}

for(count=0;count

       sum+=value_buff[count]*jq[count];

return (char)(sum/sum_jq);

}

 

(5)滑动平均滤波算法

以上介绍和各种平均滤波算法有一个共同点,即每获取一个有效采样值必须连续进行若干次采样,当采速度慢时,系统的实时得不到保证。这里介绍的滑动平均滤波算法只采样一次,将一次采样值和过去的若干次采样值一起求平均,得到的有效采样值即可投入使用。如果取N个采样值求平均,存储区中必须开辟N个数据的暂存区。每新采集一个数据便存入暂存区中,同时去掉一个最老数据,保存这N个数据始终是最新更新的数据。采用环型队列结构可以方便地实现这种数据存放方式。

 

程序代码如下:

char value_buff[N];

char i=0;

char filter()

{

     char count;

     int sum=0;

     value_buff[i++]=get_data();

     if(i==N)

         i=0;

for(count=0;count

       sum=value_buff[count];

return (char)(sum/N);

}

 

 数字滤波的算法还有很多种方法,比如一阶滞后低通滤波器(惯性滤波法),限时滤波,容错冗余三中取二滤波法等等。


关键字:单片机  数字滤波  算法 引用地址:单片机数字滤波的算法

上一篇:单片机的I/O口输出电流问题
下一篇:msp430 学习经验总结

推荐阅读最新更新时间:2024-03-16 14:38

PIC单片机C语言程序设计(15)
  本文是讲座《单片机C 语言程序设计》的结束篇,为了帮助大家更好地掌握前面所学的知识,我们将归纳性地介绍初学者用C 语言编辑PIC 单片机实用程序时应具备的思维方法和基本知识,并通过下面的实例进行一次小结,以期对大家今后深入学习PIC 单片机C 语言程序设计有所帮助。   十六、PIC单片机C语言程序的组成   一个完整的PIC 单片机C 语言源程序应包括:包含头文件、变量定义、常量说明、函数定义、主函数main( )、若干个其他功能函数、各种功能C 语句,以及已定义的函数和函数体、注释等部分组成。   说明:对PIC 单片机中级或中级以下的产品,其头文件是#include pic.h 和#include pic1687x.
[单片机]
PIC<font color='red'>单片机</font>C语言程序设计(15)
51单片机:独立按键控制LED灯
1. 独立按键控制LED灯状态 亮灭实验完成后,就可以控制LED状态,首先我们知道由于机械结构的弹性作用,按键开关在闭合时不会一瞬间稳定的接通,在断开时,也不会一下子断开。所以就得需要程序消抖,也就是适当延时,程序如下 #include reg52.h //定义LED灯 sbit LED1 = P2^0; sbit LED2 = P2^1; sbit LED3 = P2^2; sbit LED4 = P2^3; sbit LED5 = P2^4; sbit LED6 = P2^5; sbit LED7 = P2^6; sbit LED8 = P2^7; //定义独立按键 sbit KEY1 = P3^1; //需要
[单片机]
51<font color='red'>单片机</font>:独立按键控制LED灯
基于STM32单片机移植μcgui总结
因为上一个题目的界面是自己一个一个点打到屏幕上去的,计算过程相当恶心,所以这两天赶紧弄了一下 CGUI,希望对后面的人机交互界面的设计有所帮助。 说实话,我对于人机交互界面的设计真心没什么的灵感,上次赵颖老师就委婉的表达了这个意思,我也深刻的意识到了这个问题,就是设计的界面相当普通,没有给人一种眼前一亮的感觉。 首先感谢队友王绥学给我提供的资料,因为自己电脑运行各种大型软件实在是太卡,所以这个暑假把女朋友电脑留下,不过资料都在另外一台电脑中,需要的资料就给队友要,十分的感谢啊! 按照教程一步一步的做下来,前面几步关于GUI的参数设置没什么问题,无非是用到的功能将其参数置1,用不到的功能将其参数置0
[单片机]
51单片机之定时器\计数器的工作原理
定时器/计数器的结构: PS:此处涉及到了TCON和TMOD特殊功能寄存器,详见51单片机之特殊功能寄存器SFR篇 TH0、TH1:俩个加法型的计数变量,当外部产生一次时钟信号时,计数加一,直到加到最大值时发生溢出 何时处于计数器方式?何时处于定时器方式? 1、当计数变量使用单片机内部的时钟作为时钟源,我们称这种方式为定时器方式 2、当计数变量使用片外引脚P3.4、P3.5上存在的方波脉冲的时候,我们称这种方式为计数器方式 在使用片外引脚P3.4、P3.5上存在的方波脉冲时,需要俩个机器周期的时间才能确定一次脉冲信号,即需要产生下降沿时才能确定一次脉冲信号 TCON和TMOD特殊功能寄存器: 定时器/计数器工
[单片机]
51<font color='red'>单片机</font>之定时器\计数器的工作原理
基于89C51单片机的环境噪声测量仪
   1 引 言      环境噪声监测,是人类提高生活质量,加强环境保护的一个重要环节,在各大城市的繁华街区和居民区,已有大型环境噪声显示器竖立街头。但目前国内的便携式噪声测试仪,多为价格昂贵的进口专用设备,除卫生、计量等环保专业部门拥有外,无法作为民用品推广普及。本文介绍一种以89C51单片机为核心,采用V/F转换技术构成的低成本、便携式数字显示环境噪声测量仪。该仪器工作稳定、性能良好,经校验定标后能满足一般民用需要,可广泛应用于工矿企业、机关、学校等需要对环境噪声进行测量和控制的场合。 2 声压级的测量机理   人耳的听阈一般是20μPa,痛阈一般是200 Pa,其间相差107倍,这样宽广的声压范围很不易测量,
[应用]
图像处理的相关算法介绍
在机器视觉这一领域诞生的初期,一种普遍的研究范式,是将图像看做二维的数字信号,然后借用数字信号处理中的方法,这就是图像处理。今天小编给大家介绍的就是图像处理的相关技术。 点运算 有一些运算只对图像的每一个像元点操作,产生一幅新图像,二值化就是一个典型的例子。在预先设定了阀值的情况下,二值化的输出仅仅取决于该点的值,因此 式中 fA 和 fB 分别为输入和输出图像。这种运算可使用查找表,LUT,在图像数据顺序通过时一次完成。各种灰度校正也是这种运算,所不同的是二值化产生了二值图像,而校正产生的仍为灰度图像。 局部运算 局部运算的输出仍为一幅图像,输出图像的每一个像元值取决于输入图像相对应的像元以及它周围的邻近像元。因此
[嵌入式]
图像处理的相关<font color='red'>算法</font>介绍
80C32E单片机与TLV2548串行A/D的接口设计
   O 引言   TLV2548是TI公司生产的12位、多通道、小尺寸、低功耗、高速串行A/D转换芯片,它有一个专与DSP连接的帧同步(FS)信号,故可广泛用于DSP高速数据采集系统中。   MCS-51系列单片机历经了多年的发展,其应用技术已十分稳定可靠。TLV2548尺寸小、接口简单。且这两种芯片都有过上天飞行的经历,因此,可以适用低成本、控制简单、数据处理量不大、可靠性要求较高的航天产品中。   为此,本文将介绍80C32E单片机与TLV2548的接口电路及其控制程序的设计方法。    1 接口电路设计   80C32E与TLV2548的接口电路如图1所示。   TLV2548提供了一个SPI串口。80C3
[单片机]
一文读懂汽车控制芯片(MCU
本文从工作要求,性能要求,产业格局,行业壁垒四个维度,分别介绍车身、底盘、动力、座舱四个域的 MCU 芯片 。并整理了国产MCU芯片的应用现状,供从业者参考。 1.控制类芯片介绍 控制类芯片主要就是指MCU(Microcontroller Unit),即微控制器,又叫单片机,是把CPU的主频与规格做适当缩减,并将存储器、定时器、A/D转换、时钟、I/O端口及串行通讯等多种功能模块和接口集成在单个芯片上,实现终端控制的功能,具有性能高、功耗低、可编程、灵活度高等优点。 车规级MCU示意图 汽车是MCU的一个非常重要的应用领域,据 IC Insights数据,2019年全球MCU应用于 汽车电子 的占比约为33%。高端车
[汽车电子]
一文读懂汽车控制芯片(<font color='red'>MCU</font>)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved