单片机中常用滤波算法

时间:2025-07-14

部分滤波方法

单片机中常用滤波算法

限幅滤波算法:

将两次相邻的采样值相减,求出其增量的绝对值,与两次采样允许的最大差值A进行比较。A的大小由被测对象的具体情况而定,如果小于或等于允许的最大差值,则本次采样值有效;否则取上次采样值做本次采样数据的样本。(用于处理变化缓慢的数据) #define A

char data

char filter_1()

{

char data_new;

datanew = get_data(); if((datanew – data > A)||(data – datanew > A))

return data;

return datanew;

}

中值滤波算法:

对某一个参数连续采样N次(N为奇),然后排序(从小到大)再取中间值作为本次采样值。(去掉偶然因素引起的波动和采样器不稳定而引起的脉动干扰,要求变化缓慢) #define N 11

char filter_2()

{

char value_buf[N]; char count , i , j , temp;

for(count=0;count<N;count++)

{ value_buf[count] = get_data();

delay();

}

for(i=0; i<N ; i++)

for(j=0 ; j<i ; j++)

if(value_buf[i] > value_buf[j])

}

算术平均滤波算法:

连续N次取样,算术平均,适用于对具有随机干扰的信号进行滤波; char filter_3()

{

int Sum=0; { } 交换两值;

部分滤波方法

{

} Sum+=get_data(); delay();

return (char) (Sum/N) ;

}

加权平均滤波运算法:

为了协调平滑度和灵敏度之间的关系,对连续N次采样值分别乘上不同的加权系数之后再求累加和,加权系数一般先小后大,以突出后面若干采样的效果。 char code jq[N]={0,1,2,3,····12};

char code sum_jq=1+2+···+12; char filter_4() {

char count; char value_buf[N];

int sum=0;

for(count=0;count<N;count++) {

value_buf[count]=get_data();

delay(); }

for(count=0;count<0;count++)

{

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

}

return (char) (sum / sumjq); }

滑动平均滤波算法:

只采样一次,将这一次采样值和过去的若干次采样值一起求平均,得到的有效采样值一起求平均,得到的有效采样值即可投入使用;(采用环状队列结构可以方便地实现这种数据存放方式)

char value_buf[N]; char i=0;

char filter_5() {

char count ;

int sum=0;

value_buf[i++]=get_data();

if(i==N)

i=0;

for(count=0;count<N;count++)

{

sum=value_buf[count];

部分滤波方法

return (char) (sum/N); }

单片机中常用滤波算法.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219