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

linglongyouzhi發表於2020-04-07
10種軟體濾波方法的示例程式
假定從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<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;          }       }    }    return value_buf[(N-1)/2]; }      3、算術平均濾波法 /* */ #define N 12 char filter() {    int  sum = 0;    for ( count=0;count<N;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<N,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<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 */ #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] = {1,2,3,4,5,6,7,8,9,10,11,12}; 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<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、消抖濾波法 #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

相關文章