滑動平均濾波c語言 基本C語言濾波演算法

2021-10-13 09:10:28 字數 3798 閱讀 5755

11種軟體濾波方法的示例程式

假定從8位ad中讀取資料(如果是更高位的ad可定義資料型別為int),子程式為get_ad();

1、限副濾波

/*  a值可根據實際情況調整

value為有效值,new_value為當前取樣值

濾波程式返回有效的實際值  */

#define a 10

char value;

char filter()

char  new_value;

new_value = get_ad();

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

return value;

return new_value;

2、中位值濾波法

/*  n值可根據實際情況調整

排序採用冒泡法*/

#define n  11

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>value_buf[i+1] )

temp = value_buf;

value_buf = value_buf[i+1];

value_buf[i+1] = temp;

return value_buf[(n-1)/2];

3、算術平均濾波法

#define n 12

char filter()

int  sum = 0;

for ( count=0;count

sum + = get_ad();

delay();

return (char)(sum/n);

4、遞推平均濾波法(又稱滑動平均濾波法)

#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;count

sum = value_buf[count];

return (char)(sum/n);

5、中位值平均濾波法(又稱防脈衝干擾平均濾波法)

#define n 12

char filter()

char count,i,j;

char value_buf[n];

int  sum=0;

for  (count=0;count

value_buf[count] = get_ad();

delay();

for (j=0;j

for (i=0;i

if ( value_buf>value_buf[i+1] )

temp = value_buf;

value_buf = value_buf[i+1];

value_buf[i+1] = temp;

for(count=1;count

sum += value[count];

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

6、限幅平均濾波法

略 參考子程式1、3

7、一階滯後濾波法

/* 為加快程式處理速度假定基數為100,a=0~100 */

#define a 50

char value;

char filter()

char  new_value;

new_value = get_ad();

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

8、加權遞推平均濾波法

/* coe陣列為加權係數表,存在程式儲存區。*/

#define n 12

char code coe[n] = ;

char code sum_coe = 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,count

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

return (char)(sum/sum_coe);

9、消抖濾波法

#define n 12

char filter()

char count=0;

char new_value;

new_value = get_ad();

while (value !=new_value);

count++;

if (count>=n)   return new_value;

delay();

new_value = get_ad();

return value;

10、限幅消抖濾波法

略 參考子程式1、9

11、iir濾波例子

int  bandpassfilter4(int inputad4)

int  returnvalue;

int  ii;

reslo=0;

reshi=0;

macs=*pdelin;

op2=1068; //filtercoeff4[4];

macs=*(pdelin+1);

op2=8;    //filtercoeff4[3];

macs=*(pdelin+2);

op2=-2001;//filtercoeff4[2];

macs=*(pdelin+3);

op2=8;    //filtercoeff4[1];

macs=inputad4;

op2=1068; //filtercoeff4[0];

macs=*pdelou;

op2=-7190;//filtercoeff4[8];

macs=*(pdelou+1);

op2=-1973; //filtercoeff4[7];

macs=*(pdelou+2);

op2=-19578;//filtercoeff4[6];

macs=*(pdelou+3);

op2=-3047; //filtercoeff4[5];

*p=reslo;

*(p+1)=reshi;

mytestmul<<=2;

returnvalue=*(p+1);

for  (ii=0;ii<3;ii++)

delayinput[ii]=delayinput[ii+1];

delayoutput[ii]=delayoutput[ii+1];

delayinput[3]=inputad4;

delayoutput[3]=returnvalue;

//  if (returnvalue<0)

//  returnvalue=-returnvalue;

return returnvalue;

c語言 算術平均濾波法 算術平均濾波C程式

檔名 arithmeticfilter.c 功能描述 算術平均濾波,乙個週期內取樣 n次資料,取n 次取樣值的算術平均值做為這個週期的取樣值 include define uchar unsigned char define uint unsigned int 取樣次數 define n 4 次取樣...

c語言 算術平均濾波法 常見的濾波演算法 C語言

說明 假設從8位ad中讀取資料 若是更高位的ad,可將資料型別定義為int 子程式為get ad 一 限幅濾波法 優點 能有效克服因偶然因素引起的脈衝干擾。缺點 無法抑制那種週期性的干擾,且平滑度差。1 限幅濾波 a值可根據實際情況調整 value為有效值,new value為當前取樣值 濾波程式返...

c語言 算術平均濾波法 C語言十大濾波演算法

限幅濾波法 函式名稱 amplitudelimiterfilter 限幅濾波法 優點 能有效克服因偶然因素引起的脈衝干擾 缺點 無法抑制那種週期性的干擾,且平滑度差 說明 1 呼叫函式 getad 該函式用來取得當前值 2 變數說明 value 最近一次有效取樣的值,該變數為全域性變數 newval...