1.限幅滤波 2.中位值滤波 3.算术平均值滤波 4.递推平均滤波

源代码在线查看: 一些常用的软件滤波方法.txt

软件大小: 2 K
上传用户: supertruman
关键词: 滤波 限幅 平均值 算术
下载地址: 免注册下载 普通下载 VIP

相关代码

				一些常用的软件滤波方法
				
				            一些常用的软件滤波方法 
				                        收集:杨本荣  来源: 网络   发表于 2005-9-3 
				
				                  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] = {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				                     {
				                        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;    
				                  }
				
				
				
							

相关资源