您的位置 首页 发布

单片机数字滤波的算法

单片机主要作用是控制外围的器件,并实现一定的通信和数据处理。但在某些特定场合,不可避免地要用到数学运算,尽管单片机并不擅长实现算法

单片机首要作用是操控外围的器材,并完成必定的通讯和数据处理。但在某些特定场合,不可避免地要用到数学运算,虽然单片机并不拿手完成算法和进行杂乱的运算。下面首要是介绍如何用单片机完成数字滤波。

在单片机进行数据收集时,会遇到数据的随机差错,随机差错是由随机搅扰引起的,其特点是在相同条件下丈量同一量时,其巨细和符号会现无规则的改动而无法猜测,但屡次丈量的成果契合核算规则。为战胜随机搅扰引起的差错,硬件上可选用滤波技能,软件上可选用软件算法完成数字滤波。滤波算法往往是体系测控算法的一个重要组成部分,实时性很强。

选用数字滤波算法战胜随机搅扰的差错具有以下长处:

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

l数字滤波运用软件算法完成,多输入通道可共用一个滤波程序,下降体系开支。

l 只需恰当改动滤波器的滤波程序或运算,就能方便地改动其滤波特性,这关于滤除低频搅扰和随机信号会有较大的作用。

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

(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//界说取得的数据个数

charfilter()

{

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];

}

阐明:中值滤波比较适用于去掉由偶尔要素引起的动摇和采样器不稳定而引起的脉动搅扰。若被丈量值改动比较慢,选用中值滤波法作用会比较好,但假如数据改动比较快,则不宜选用此办法。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/fabu/259104.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部