新闻  |   论坛  |   博客  |   在线研讨会
10种滤波方法(很实用)
0750long | 2009-07-08 12:47:28    阅读:5862   发布文章

10种滤波方法(很实用)

 

在日常的项目设计中,经常要用到一些算法程序,假设对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[i]>value_buf[i+1])

                                   {

                                            temp="value"_buf[i];

                                           value_buf[i]=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;

}

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

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客