当前位置: 网站首页 > 技术应用 > 单片机应用 > 应用范例

单片机数字滤波算法

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

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

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

(1)限幅滤波算法

算法的程序代码如下:

chardata; //上一次的数据

{

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

return data;

returndatanew;

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

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

#define N11 //定义获得的数据个数

{

char count,i,j,temp;

{

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

for(j=0;j

for(value_buff[i]>value_buff[i+1]

temp=value_buff[i];

value_buff[i+1]=temp;

}

}

(3)算术平均滤波算法

算法的程序代码如下:

{

for(count=0;count

sum+=get_data();

}

}

(4)加权平均滤波算法

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

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

char filter()

char count;

int sum=0;

{

delay();

for(count=0;count

return(char)(sum/sum_jq);

(5)滑动平均滤波算法

程序代码如下:

char i=0;

{

int sum=0;

if(i==N)

for(count=0;count

return (char)(sum/N);

(6)低通滤波

Yn=a* Xn+(1-a) *Yn-1

Yn-1——上次的滤波输出值;

Yn——本次滤波的输出值。

fL=a/2Pit pi为圆周率3.14…

, t——采样间隔时间;

fL=(1/32)/(2*3.14*0.5)=0.01Hz

低通滤波算法程序于加权平均滤波相似,但加权系数只有两个:a和1-a。为计算方便,a取一整数,1-a用256-a,来代替,计算结果舍去最低字节即可,因为只有两项,a和1-a,均以立即数的形式编入程序中,不另外设表格。虽然采样值为单元字节(8位A/D)。为保证运算精度,滤波输出值用双字节表示,其中一个字节整数,一字节小数,否则有可能因为每次舍去尾数而使输出不会变化。

 

<section !important;"="" break-word="" border-box="" 255,="" rgb(255,="" arial,="" yahei",="" "microsoft="" ui",="" yahei="" gb",="" sans="" "hiragino="" sc",="" "pingfang="" neue",="" helvetica="" style="max-width: 100%;">

END

点击次数:  【关闭
  • 壹零零单片机©版权所有 2008-2023 粤ICP备17151077号

Powered by  xinfuke  5.2.5 ©2008-2024  www.100mcu.com