原创 10种滤波方法(很实用)

2009-7-2 18:39 2332 7 8 分类: MCU/ 嵌入式

在日常的项目设计中,经常要用到一些算法程序,假设对AD的取样函数为get_ad( )


5种滤波方法(很实用)


1、限幅滤波


/*A值可以根据实际情况调整


#define  A   10   //设置两次采样的最大偏差值


char value;          //上次采样的有效数据变量


char fifter( )


{         


                     char  new_value  ;  //本次采样的值变量


                     new_value=get_ad( );           //读如本次采样数据


                    if((new_value-value)>A||(value-new_value)>A) //比较是否超出最大偏差


                           return value; //如果超出,返回上次的有效值做为本次的有效值


                   else


                  return    new_vlaue; //没有超出,返回本次采样值作为本次的有效值


}


2 中位值滤波方法


/* N值可以根据实际情况调整


#define    N    11  //设置连续采样的次数


char fifter( )


{


      char value_buf[N];   //连续采样N次值缓冲寄存器


      char  count i ,  j,  temp;          //i ,j是水泡下标量,count为采样数据读入的下标量


     for(count=0;count<N;count++)


            {


                      value_buf[count]=get_ad( );


delay();


for(j=0;j<N;j++)  //水泡排序


{


      for(i=0;i<N-j;i++)


                     {


                              if(value_buf>value_buf[i+1])


                                   {


                                            temp="value"_buf;


                                           value_buf=valu_buf[i+1];


                                          value_buf[i+1]=temp;


}


3  算术平均值方法


/*N (-----------)呵呵


#define  N    13


void   fifter( )


{


         int  sum="0";         //求和变量,用于采样的累加值


        char  count;


for(count=0;count<N;count++)


{


    sum+=get_ad( );


}


return(char)(sum/N);


}


4 消抖滤波方法


#define   N    13    //设置计数器益出值


char fifter( )


{


                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  new_value


}


5//限幅消抖滤波方法


/*A值可以根据实际情况调整,value为上次采样有效值,new_value为当前采样值


/*N  设置计算器益处值


char   value;   //有效值变亮


char fifter( )


{


             char   count="0";  //计数变量


             char new_value;   //本次采样值


             new_value=get_ad;           //导入本次采样值


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


                        {


                                new_value=value;


while(value!=new_value)


{


           count++;  //


           if(count>=N)   return   new_value;


           delay( )


           return   value;


}


return   value;


}


//以上为经常用到的算法

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户374544 2009-7-3 17:59

最后一个有问题
相关推荐阅读
用户1635721 2009-07-11 20:54
HT1621驱动程序显示
HT1621驱动程序有32个物理地址,一个物理地址含4BIT,即两个物理地址为8BIT刚好一个字节#ifndef __timer__h_#define __timer__h_    //*硬件连接:段...
用户1635721 2009-06-30 20:06
按键加减(按住连加)
//速度加减程序void speed_add_dec(){if(speedadd_flag)                   //查询到速度加键被按下{   x++;               ...
用户1635721 2009-06-28 19:49
主程序流程
#include<reg52.h>#include "__scankey__h_#include "__tongxin__h_void speaker(uchar time)   for(...
用户1635721 2009-06-28 19:22
LCD头文件、积存器、标志定义(电子表项目)
#ifndef __lcd__h__#define __lcd__h__#include<mcu.h>//*****************************************...
用户1635721 2009-06-28 19:01
74HC573扫描显示(电子表项目)
#ifndef __74hc573__h_#define __74hc573__h_//锁存74HC573信号为定义 扫描字符段。11脚当为高电平时移位,低电平锁存控制 9脚输出使能端,低电平有效sb...
EE直播间
更多
我要评论
1
7
关闭 站长推荐上一条 /3 下一条