单片机系统中常用的滤波算法有哪些

控制/MCU

1883人已加入

描述

//在单片机系统中常用的滤波算法

//(1)程序判断法

#defineA

chardata; //上一次的数据

charfiLTEr_1()

{

chardatanew;//新数据变量

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

if((datanew–data》A)||(data–datanew》A)//滤波算法

returndata;

returndatanew;

单片机系统

}

//(2)中值滤波法

#defineN11

charfilter_2()

{

charvalue_buf[N];

charcount,i,j,temp;

for(count=0;count{

value_buf[count]=get_data();

delay();

}

for(j=0;j{

for(i=0;i{

if(value_buf[i]》value_buf[i+1])

{

temp=value_buf[i];

value_buf[i]=value_buf[i+1];

value_buf[i+1]=temp;

}

}

}

returnvalue_buf[(N-1)/2];

}

//(3)算术平均滤波法

charfilter_3()

{

intsum=0;

for(count=0;count{

sum+=get_ad();

delay();

}

return(char)(sum/N);

}

//(4)加权平均滤波法

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

charcodesum_jq=1+2+3+4+5+6+7+8+9+10+11+12;

charfilter_4()

{

charcount;

charvalue_buf[N];

intsum=0;

for(count=0,count{

value_buf[count]=get_data();

delay();

}

for(count=0,countsum+=value_buf[count]*jq[count];

return(char)(sum/sum_jq);

}

//(5)滑动平均滤波法

charvalue_buf[N];

chari=0;

charfilter_5()

{

charcount;

intsum=0;

value_buf[i++]=get_ad();

if(i==N)i=0;

for(count=0;countsum=value_buf[count];

return(char)(sum/N);

}

//(6)低通滤波法

charfilter_6()

{

charnew_value;

new_value=get_data();

return(100-a)*value+a*new_value;

}

//(7)中位值平均滤波

charfilter_7()

{

charcount,i,j;

charvalue_buf[N];

intsum=0;

for(count=0;count{

value_buf[count]=get_data();

delay();

}

for(j=0;j{

for(i=0;i{

if(value_buf[i]》value_buf[i+1])

{

temp=value_buf[i];

value_buf[i]=value_buf[i+1];

value_buf[i+1]=temp;

}

}

}

for(count=1;countsum+=value[count];

return(char)(sum/(N-2));

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分