10种软件滤波方法的示例程序

源代码在线查看: 10种软件滤波方法的示例程序.txt

软件大小: 2 K
上传用户: junbo2009
关键词: 软件 滤波方法 程序
下载地址: 免注册下载 普通下载 VIP

相关代码

				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;countN;count++)
				   {
				      value_buf[count] = get_ad();
				      delay();
				   }
				   for (j=0;jN-1;j++)
				   {
				      for (i=0;iN-j;i++)
				      {
				         if ( value_bufvalue_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;countN;count++)
				   {
				      sum + = get_ad();
				      delay();
				   }
				   return (char)(sumN);
				}
				
				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;countN,count++)
				      sum = value_buf[count];
				   return (char)(sumN);
				}
				
				5、中位值平均滤波法(又称防脉冲干扰平均滤波法)
				
				
				#define N 12
				
				char filter()
				{
				   char count,i,j;
				   char value_buf[N];
				   int  sum=0;
				   for  (count=0;countN;count++)
				   {
				      value_buf[count] = get_ad();
				      delay();
				   }
				   for (j=0;jN-1;j++)
				   {
				      for (i=0;iN-j;i++)
				      {
				         if ( value_bufvalue_buf[i+1] )
				         {
				            temp = value_buf;
				            value_buf = value_buf[i+1]; 
				             value_buf[i+1] = temp;
				         }
				      }
				   }
				   for(count=1;countN-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 + anew_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,countN;count++)
				   {
				      value_buf[count] = get_ad();
				      delay();
				   }
				   for (count=0,countN;count++)
				      sum += value_buf[count]coe[count];
				   return (char)(sumsum_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;ii3;ii++)
				    {
				     DelayInput[ii]=DelayInput[ii+1];
				     DelayOutput[ii]=DelayOutput[ii+1];
				     } 
				     DelayInput[3]=InputAD4;
				     DelayOutput[3]=ReturnValue;
				     
				     if (ReturnValue0)
				     {
				     ReturnValue=-ReturnValue;
				     }
				    return ReturnValue;  
				} 
							

相关资源