C语言10种简单的数字滤波算法

来源:本站
导读:目前正在解读《C语言10种简单的数字滤波算法》的相关信息,《C语言10种简单的数字滤波算法》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C语言10种简单的数字滤波算法》的详细说明。
简介:文章给出C语言10种简单的数字滤波算法,希望对你学习C语言有所帮助。

假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad();

1、限副滤波

/*A值可根据实际情况调整

value为有效值,new_value为当前采样值

滤波程序返回有效的实际值*/

#defineA10

charvalue;

charfilter()

{

charnew_value;

new_value=get_ad();

if((new_value-value>A)||(value-new_value>A)

returnvalue;

returnnew_value;

}

2、中位值滤波法

/*N值可根据实际情况调整

排序采用冒泡法*/

#defineN11

charfilter()

{

charvalue_buf[N];

charcount,i,j,temp;

for(count=0;count<N;count++)

{

value_buf[count]=get_ad();

delay();

}

for(j=0;j<N-1;j++)

{

for(i=0;i<N-j;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、算术平均滤波法

/*

*/

#defineN12

charfilter()

{

intsum=0;

for(count=0;count<N;count++)

{

sum+=get_ad();

delay();

}

return(char)(sum/N);

}

4、递推平均滤波法(又称滑动平均滤波法)

/*

*/

#defineN12

charvalue_buf[N];

chari=0;

charfilter()

{

charcount;

intsum=0;

value_buf[i++]=get_ad();

if(i==N)i=0;

for(count=0;count<N,count++)

sum=value_buf[count];

return(char)(sum/N);

}

5、中位值平均滤波法(又称防脉冲干扰平均滤波法)

/*

*/

#defineN12

charfilter()

{

charcount,i,j;

charvalue_buf[N];

intsum=0;

for(count=0;count<N;count++)

{

value_buf[count]=get_ad();

delay();

}

for(j=0;j<N-1;j++)

{

for(i=0;i<N-j;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[count];

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

}

6、限幅平均滤波法

/*

*/

略参考子程序1、3

7、一阶滞后滤波法

/*为加快程序处理速度假定基数为100,a=0~100*/

#definea50

charvalue;

charfilter()

{

charnew_value;

new_value=get_ad();

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

}

8、加权递推平均滤波法

/*coe数组为加权系数表,存在程序存储区。*/

#defineN12

charcodecoe[N]={1,2,3,4,5,6,7,8,9,10,11,12};

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

charfilter()

{

charcount;

charvalue_buf[N];

intsum=0;

for(count=0,count<N;count++)

{

value_buf[count]=get_ad();

delay();

}

for(count=0,count<N;count++)

sum+=value_buf[count]*coe[count];

return(char)(sum/sum_coe);

}

9、消抖滤波法

#defineN12

charfilter()

{

charcount=0;

charnew_value;

new_value=get_ad();

while(value!=new_value);

{

count++;

if(count>=N)returnnew_value;

delay();

new_value=get_ad();

}

returnvalue;

}

10、限幅消抖滤波法

/*

*/

略参考子程序1、9

提醒:《C语言10种简单的数字滤波算法》最后刷新时间 2024-03-14 00:58:48,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C语言10种简单的数字滤波算法》该内容的真实性请自行鉴别。