单片机常见滤波算法

这里写目录标题

  • 一、滑动滤波
    • 1、定义
    • 2、公式
    • 3、代码
    • 4、优缺点
  • 二、算术平均滤波
    • 1、原理
    • 2、公式
    • 3、代码
  • 三、加权平均滤波算法
    • 1、原理
    • 2、公式
    • 3、代码
  • 四、限幅滤波
    • 1、原理
    • 2、代码
    • 3、适用场合

一、滑动滤波

1、定义

滑动平均滤波就是把连续取得的N个采样值看成一个队列,队列的长度固定为N,每次采样得到一个新数据放到队尾,并丢掉原来队首的一次数据,把队列中的N个数据进行平均运算,就可以获得新的滤波结果。 经过滑动滤波之后,波形整体变得平滑。

2、公式

y ( n ) = 1 2 m + 1 ∑ n − m n + m x ( n − k ) y(n)=\frac{1}{2m+1} \sum_{n-m}^{n+m}x(n-k) y(n)=2m+11nmn+mx(nk)

式中:m为正整数,L=2m+1为滤波器阶数,等于滑动窗口的宽度。

3、代码

 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<N;count++)
        sum=value_buff[count];
    return (char)(sum/N);
}

其中get_data()是指你采集到的数据值。

4、优缺点

优点:算法简单,对周期性干扰有良好的抑制作用,平滑度高,适用于高频振动的系统。

缺点:对异常信号的抑制作用差,无法消除脉冲干扰的影响。

二、算术平均滤波

1、原理

连续取N次采样值后进行算术平均。

算术平均滤波算法适用于对具有随机干扰的信号进行滤波。

2、公式

y = 1 n + 1 ∑ 0 n x ( n ) y=\frac{1}{n+1} \sum_{0}^{n}x(n) y=n+110nx(n)

3、代码

char filter()
{
    int sum=0;
    for(count=0;count<N;count++)
    {
        sum+=get_data();
        delay():
    }
    return (char)(sum/N);
}

三、加权平均滤波算法

1、原理

在算术平均的基础上增加了加权系数。

可突出一部分信号,抵制另一部分信号,以提高采样值变化的灵敏度。

2、公式

y = ∑ i = 0 n x i C i y=\sum_{i=0}^{n}x_{i}C _{i} y=i=0nxiCi

y为n个采样值的加权平均值:Xi为第i次采样值;N为采样次数;Ci为加权系数。

加权系数Ci体现了各种采样值在平均值中所占的比例。

3、代码

 char codejq[N]={1,2,3,4,5,6,7,8,9,10,11,12}; //code数组为加权系数表,存在程序存储区
 
 char codesum_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<N;count++)
    {
        value_buff[count]=get_data();
        delay();
    }
    for(count=0;count<N;count++)
        sum+=value_buff[count]*jq[count];
    return (char)(sum/sum_jq);
}

四、限幅滤波

1、原理

该运算的过程中将两次相邻的采样相减,求出其增量,然后将增量的绝对值,与两次采样允许的最大差值A进行比较。A的大小由被测对象的具体情况而定。

如果小于或等于允许的最大差值,则本次采样有效;否则取上次采样值作为本次数据的样本。

2、代码

#define A //允许的最大差值
char data; //上一次的数据
char filter()
{
    char datanew; //新数据变量
    datanew=get_data(); //获得新数据变量
    if((datanew-data)>A||(data-datanew>A))
        return data;
    else
        return datanew;
}

3、适用场合

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

你可能感兴趣的:(单片机,自动化)