單片機(jī)系統(tǒng)中常用的濾波算法
//在單片機(jī)系統(tǒng)中常用的濾波算法
//(1)程序判斷法
#defineA
chardata; //上一次的數(shù)據(jù)
charfiLTEr_1()
{
chardatanew;//新數(shù)據(jù)變量
datanew=get_data();//獲得新數(shù)據(jù)
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)算術(shù)平均濾波法
charfilter_3()
{
intsum=0;
for(count=0;count
sum+=get_ad();
delay();
}
return(char)(sum/N);
}
//(4)加權(quán)平均濾波法
charcodejq[N]={1,2,3,4,5,6,7,8,9,10,11,12};//coe數(shù)組為加權(quán)系數(shù)表,存在程序存儲(chǔ)區(qū)。
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,count
return(char)(sum/sum_jq);
}
//(5)滑動(dòng)平均濾波法
charvalue_buf[N];
chari=0;
charfilter_5()
{
charcount;
intsum=0;
value_buf[i++]=get_ad();
if(i==N)i=0;
for(count=0;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;count
return(char)(sum/(N-2));
}