软件滤波,单片机抗干扰技术,各种软件滤波方法!

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

软件大小: 174 K
上传用户: yeshuqin
关键词: 软件滤波 单片机 抗干扰技术 软件
下载地址: 免注册下载 普通下载 VIP

相关代码

				[程序宝典]10种软件滤波方法的示例程序
				程序匠人 发表于 2005-9-3 9:18:00       阅读全文(948) | 回复(0) | 引用(0) 
				匠人注:一文由匠人原创,并曾经发表在21ICBSS的[侃单片机]栏目,后被多方转载,但大多数没有注明原作者,郁闷啊~~~~~~~~,以下这程序是他人根据匠人文中汇总的方法用C语言实现的程序范例:
				
				 
				
				10种软件滤波方法的示例程序 
				OurWay 发表于 2005-9-2 22:24:00 
				
				10种软件滤波方法的示例程序(JKRL)
				 假定从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[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				   {
				      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[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				      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;    
				}
				
				10、限幅消抖滤波法
				/*
				*/
				略 参考子程序1、9 
				
				 
				 
							

相关资源