新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)常用數(shù)字濾波函數(shù)

單片機(jī)常用數(shù)字濾波函數(shù)

作者: 時(shí)間:2016-11-18 來(lái)源:網(wǎng)絡(luò) 收藏
/////////////////////////////////限副濾波///////////////////

#define A 10//A值可根據(jù)實(shí)際情況調(diào)整
char value;//value為有效值
char filter()
{
char new_value;//new value為當(dāng)前采樣值
new value="get"_ad();
if ((new_value-value>A)‖(value-new_value> A)
return value;
return new_value;
}

本文引用地址:http://butianyuan.cn/article/201611/315881.htm

/////////////////////////中位值濾波/////////////////////////

#define N 11//N值可根據(jù)實(shí)際情況調(diào)整
char filter()
{
char value_buf[N];
char count,i,j,temp;
for (count=0;count{
value_buf[count]=get_ad();//獲取采樣值
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;
}
}
}
return value_buf[(N-1)/2];//取中間值
}

/////////////////////////算術(shù)平均濾波//////////////////////

#define N 12
char filter()
{
int sum="0";
for(count=0;count{
sum+=get_ad();
delay();
}
return (char)(sum/N);
}


///////////////////去極值平均濾波//////////////////////

#define N 11//N值可根據(jù)實(shí)際情況調(diào)整
int sum="0";

char filter()
{
char value_buf[N];
char count,i,j,temp;
for (count=0;count{
value_buf[count]=get_ad();//獲取采樣值
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<(N-1);count++)//去掉第一個(gè)和末一個(gè)數(shù)
{
sum+=value_buf[count];
delay();
}
return (char)(sum/(N-2));
}

///////////////////移動(dòng)平均濾波(遞推平均濾波)///////////

#define N 12
char value_buf[N];
char i="0";
char filter()
{
char count;
int sum="0";
value_buf[i++]=get_ad();
if(i=N) i=0;
for (count=0;countsum+=value_buf[count];
return (char)(sum/N)

}


//////////////////////加權(quán)平均濾波///////////////////////
#define N 12
char code jq[N]={1,2,3,4,5,6,7,8,9,10,11,12};//加權(quán)系數(shù)表
char code sum_jq=1+2+3+4+5+6+7+8+9+10+11+12;
char filter()
{
char count;
char value_buf[N];
int sum="0";
for (count=0;count{value_buf[count]=get_ad();//獲取采樣值
delay();
}
for (count=0;countsum+=value_buf[count]*jq[count];
return (char)(sum/sum_jq);
}


/////////////////////////低通濾波////////////////////////

#define a0.25
char value;//value為已有值
char filter()
{
char new_value;//new value為當(dāng)前采樣值
new_value=get_ad();
return (a*new_value+(1-a)*value);
}



評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉