控制/MCU
//在单片机系统中常用的滤波算法
//(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));
}
全部0条评论
快来发表一下你的评论吧 !