您的位置 首页 电路

单片机常用数字滤波函数

/////////////////////////////////限副滤波///////////////////#defineA10//A值可根据实际情况调整charvalue;//value为有效值

/////////////////////////////////限副滤波///////////////////

#define A 10//A值可根据实际情况调整
char value;//value为有效值
char filter()
{
char new_value;//new value为当时采样值
new value=”get”_ad();
if ((new_value-value>A)‖(value-new_value> A)
return value;
return new_value;
}

/////////////////////////中位值滤波/////////////////////////

#define N 11//N值可根据实际情况调整
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];//取中心值
}

/////////////////////////算术均匀滤波//////////////////////

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

///////////////////去极值均匀滤波//////////////////////

#define N 11//N值可根据实际情况调整
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++)//去掉第一个和末一个数
{
sum+=value_buf[count];
delay();
}
return (char)(sum/(N-2));
}

///////////////////移动均匀滤波(递推均匀滤波)///////////

#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)

}

//////////////////////加权均匀滤波///////////////////////
#define N 12
char code jq[N]={1,2,3,4,5,6,7,8,9,10,11,12};//加权系数表
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为当时采样值
new_value=get_ad();
return (a*new_value+(1-a)*value);
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/dianlu/266846.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部