精华内容
下载资源
问答
  • 几种常用滤波方法

    万次阅读 2017-08-08 10:44:17
    几种软件滤波算法的原理和比较 第1种方法:限幅滤波法(又称程序判断滤波法) A方法: 根据经验判断,确定两次采样允许的最大偏差值(设为A),每次检测到新值时判断: 如果本次值与上次值之差A,则本次值无效...
    几种常用的滤波方法
     
    

    几种软件滤波算法的原理和比较

    第1种方法:限幅滤波法(又称程序判断滤波法)

    A方法: 根据经验判断,确定两次采样允许的最大偏差值(设为A),每次检测到新值时判断: 如果本次值与上次值之差<=A,则本次值有效,如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值。

    B优点: 能有效克服因偶然因素引起的脉冲干扰。

    C缺点: 无法抑制那种周期性的干扰,平滑度差。

    第2种方法:中位值滤波法

    A方法: 连续采样N次(N取奇数),把N次采样值按大小排列,取中间值为本次有效值。

    B优点: 能有效克服因偶然因素引起的波动干扰,对温度、液位的变化缓慢的被测参数有良好的滤波效果。

    C缺点: 对流量、速度等快速变化的参数不宜。

    第3种方法:算术平均滤波法

    A方法: 连续取N个采样值进行算术平均运算,N值较大时:信号平滑度较高,但灵敏度较低;N值较小时:信号平滑度较低,但灵敏度较高。N值的选取:一般流量,N=12;压力:N=4。

    B优点: 适用于对一般具有随机干扰的信号进行滤波,这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动。

    C缺点: 对于测量速度较慢或要求数据计算速度较快的实时控制不适用,比较浪费RAM 。

    第4种方法:递推平均滤波法(又称滑动平均滤波法)

    A方法: 把连续取N个采样值看成一个队列,队列的长度固定为N,每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出原则) 。把队列中的N个数据进行算术平均运算,就可获得新的滤波结果。N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4。

    B优点: 对周期性干扰有良好的抑制作用,平滑度高,适用于高频振荡的系统。

    C缺点: 灵敏度低,对偶然出现的脉冲性干扰的抑制作用较差,不易消除由于脉冲干扰所引起的采样值偏差,不适用于脉冲干扰比较严重的场合,比较浪费RAM。

    第5种方法:中位值平均滤波法(又称防脉冲干扰平均滤波法)

    A方法: 相当于“中位值滤波法” “算术平均滤波法”,连续采样N个数据,去掉一个最大值和一个最小值,然后计算N-2个数据的算术平均值。N值的选取:3~14。

    B优点: 融合了两种滤波法的优点,对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差。

    C缺点: 测量速度较慢,和算术平均滤波法一样,比较浪费RAM。

    第6种方法:限幅平均滤波法

    A方法: 相当于“限幅滤波法” “递推平均滤波法”,每次采样到的新数据先进行限幅处理,再送入队列进行递推平均滤波处理。

    B优点: 融合了两种滤波法的优点,对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差。

    C缺点: 比较浪费RAM 。

    第7种方法:一阶滞后滤波法

    A方法: 取a=0~1,本次滤波结果=(1-a)*本次采样值 a*上次滤波结果。

    B优点: 对周期性干扰具有良好的抑制作用,适用于波动频率较高的场合。

    C缺点:相位滞后,灵敏度低,滞后程度取决于a值大小,不能消除滤波频率高于采样频率的1/2的干扰信号。

    第8种方法:加权递推平均滤波法

    A方法: 是对递推平均滤波法的改进,即不同时刻的数据加以不同的权,通常是,越接近现时刻的资料,权取得越大,给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低。

    B优点: 适用于有较大纯滞后时间常数的对象和采样周期较短的系统。

    C缺点: 对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号,不能迅速反应系统当前所受干扰的严重程度,滤波效果差。

    第9种方法:消抖滤波法

    A方法: 设置一个滤波计数器,将每次采样值与当前有效值比较: 如果采样值=当前有效值,则计数器清零。如果采样值<>当前有效值,则计数器 1,并判断计数器是否>=上限N(溢出),如果计数器溢出,则将本次值替换当前有效值,并清计数器。

    B优点: 对于变化缓慢的被测参数有较好的滤波效果,可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动。

    C缺点: 对于快速变化的参数不宜,如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效值导入系统。

    第10种方法:限幅消抖滤波法

    A方法: 相当于“限幅滤波法” “消抖滤波法”,先限幅后消抖。

    B优点: 继承了“限幅”和“消抖”的优点,改进了“消抖滤波法”中的某些缺陷,避免将干扰值导入系统。

    C缺点: 对于快速变化的参数不宜。

    第11种方法:IIR 数字滤波器

    A方法: 确定信号带宽, 滤之。 Y(n) = a1*Y(n-1) a2*Y(n-2) ... ak*Y(n-k) b0*X(n) b1*X(n-1) b2*X(n-2) ... bk*X(n-k)。

    B优点: 高通,低通,带通,带阻任意。设计简单(用matlab)。

    C缺点: 运算量大。

    展开全文
  • 常用的11软件滤波,用C语言编写。 1.限幅滤波 2.中位值滤波 3.算数平均滤波 4.递推平均滤波 5.中位值平均滤波法 6.限幅平均滤波法 7.一阶滞后滤波 8.加权递推平均滤波 9.消抖滤波 10.限幅消抖滤波 11.卡尔曼滤波...
  • 本文倾心整理和总结了几种常用的连续状态方程的离散方法,为了适用于离散卡尔曼滤波方程。专注于给您实在干货,提供实在参考,保证能对各位同行有所帮助。
  • 1、限幅滤波法(又称程序判断滤波法) A、方法: 根据经验判断,确定两次采样允许的最大偏差值(设为 A) 每次检测到新值时判断: 如果本次值与上次值之差 <=A, 则本次值有效 如果本次值与上次值之差 > A,...

    1、限幅滤波法(又称程序判断滤波法)

    A、方法:
        根据经验判断,确定两次采样允许的最大偏差值(设为 A)
        每次检测到新值时判断:
        如果本次值与上次值之差 <=A, 则本次值有效
        如果本次值与上次值之差 > A, 则本次值无效, 放弃本次值, 用上次值代替本次值
    B、优点:
        能有效克服因偶然因素引起的脉冲干扰
    C、缺点
        无法抑制那种周期性的干扰
        平滑度差
    

    2、中位值滤波法

    A、方法:
        连续采样 N 次(N 取奇数)
        把 N 次采样值按大小排列
        取中间值为本次有效值
    B、优点:
        能有效克服因偶然因素引起的波动干扰
        对温度、液位的变化缓慢的被测参数有良好的滤波效果
    C、缺点:
        对流量、速度等快速变化的参数不宜
    

    3、算术平均滤波法

    A、方法:
        连续取 N 个采样值进行算术平均运算
        N 值较大时:信号平滑度较高,但灵敏度较低
        N 值较小时:信号平滑度较低,但灵敏度较高
        N 值的选取:一般流量,N=12;压力:N=4
    B、优点:
        适用于对一般具有随机干扰的信号进行滤波
        这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动
    C、缺点:
        对于测量速度较慢或要求数据计算速度较快的实时控制不适用
        比较浪费 RAM
    

    4、递推平均滤波法(又称滑动平均滤波法)

    A、方法:
        把连续取 N 个采样值看成一个队列
        队列的长度固定为 N
        每次采样到一个新数据放入队尾, 并扔掉原来队首的一次数据.(先进先出原则)
        把队列中的 N 个数据进行算术平均运算, 就可获得新的滤波结果
        N 值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4
    B、优点:
        对周期性干扰有良好的抑制作用,平滑度高
        适用于高频振荡的系统    
    C、缺点:
        灵敏度低
        对偶然出现的脉冲性干扰的抑制作用较差
        不易消除由于脉冲干扰所引起的采样值偏差
        不适用于脉冲干扰比较严重的场合
        比较浪费 RAM
    

    5、中位值平均滤波法(又称防脉冲干扰平均滤波法)

    A、方法:
        相当于 “中位值滤波法”+“算术平均滤波法”
        连续采样 N 个数据,去掉一个最大值和一个最小值
        然后计算 N-2 个数据的算术平均值
        N 值的选取:3~14
    B、优点:
        融合了两种滤波法的优点
        对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差
    C、缺点:
        测量速度较慢,和算术平均滤波法一样
        比较浪费 RAM
    

    滤波效果:红色是滤波后,蓝色是滤波前
    在这里插入图片描述

    6、限幅平均滤波法

    A、方法:
        相当于 “限幅滤波法”+“递推平均滤波法”
        每次采样到的新数据先进行限幅处理,
        再送入队列进行递推平均滤波处理
    B、优点:
        融合了两种滤波法的优点
        对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差
    C、缺点:
        比较浪费 RAM
    

    7、一阶滞后滤波法

    A、方法:
        取 a=0~1
        本次滤波结果 =(1-a)* 本次采样值 + a * 上次滤波结果
    B、优点:
        对周期性干扰具有良好的抑制作用
        适用于波动频率较高的场合
    C、缺点:
        相位滞后,灵敏度低
        滞后程度取决于 a 值大小
        不能消除滤波频率高于采样频率的 1/2 的干扰信号
    

    8、加权递推平均滤波法

    A、方法:
        是对递推平均滤波法的改进,即不同时刻的数据加以不同的权
        通常是,越接近现时刻的数据,权取得越大。
        给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低
    B、优点:
        适用于有较大纯滞后时间常数的对象
        和采样周期较短的系统
    C、缺点:
        对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号
        不能迅速反应系统当前所受干扰的严重程度,滤波效果差
    

    9、消抖滤波法

    A、方法:
        设置一个滤波计数器
        将每次采样值与当前有效值比较:
        如果采样值=当前有效值,则计数器清零
        如果采样值 <> 当前有效值,则计数器 + 1,并判断计数器是否>= 上限 N(溢出)
            如果计数器溢出, 则将本次值替换当前有效值, 并清计数器
    B、优点:
        对于变化缓慢的被测参数有较好的滤波效果,
        可避免在临界值附近控制器的反复开 / 关跳动或显示器上数值抖动
    C、缺点:
        对于快速变化的参数不宜
        如果在计数器溢出的那一次采样到的值恰好是干扰值, 则会将干扰值当作有效值导入系统
    

    10、限幅消抖滤波法

    A、方法:
        相当于 “限幅滤波法”+“消抖滤波法”
        先限幅, 后消抖
    B、优点:
        继承了 “限幅” 和“消抖”的优点
        改进了 “消抖滤波法” 中的某些缺陷, 避免将干扰值导入系统
    C、缺点:
        对于快速变化的参数不宜
    

    11、IIR 数字滤波器

    A. 方法:
     确定信号带宽, 滤之。
    Y(n) = a1*Y(n-1) + a2*Y(n-2) + … + ak*Y(n-k) + b0*X(n) + b1*X(n-1) + b2*X(n-2) + … +
    bk*X(n-k)
    B. 优点:高通,低通,带通,带阻任意。设计简单 (用 matlab)
    C. 缺点:运算量大。
    


    软件滤波的 C 程序样例

    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;count<N;COUNT++)
       {
          value_buf[count] = get_ad();
          delay();
       }
       for (j=0;j<N-1;J++)
       {
          for (i=0;i<N-J;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<N;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<N,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<N;COUNT++)
       {
          value_buf[count] = get_ad();
          delay();
       }
       for (j=0;j<N-1;J++)
       {
          for (i=0;i<N-J;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<N-1;COUNT++)
          sum += value[count];
       return (char)(sum/(N-2));
    }
    

    6、限幅平均滤波法

    /*
    */  
    略 参考子程序 13
    

    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<N;COUNT++)
       {
          value_buf[count] = get_ad();
          delay();
       }
       for (count=0,count<N;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、限幅消抖滤波法

    /*
    */
    略 参考子程序 19
    

    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;ii<3;ii++)
        {
         DelayInput[ii]=DelayInput[ii+1];
         DelayOutput[ii]=DelayOutput[ii+1];
         } 
         DelayInput[3]=InputAD4;
         DelayOutput[3]=ReturnValue;
    
       //  if (ReturnValue<0)
       //  {
       //  ReturnValue=-ReturnValue;
       //  }
        return ReturnValue;  
    
    展开全文
  • 常见的几种数字滤波算法及特点

    千次阅读 2020-04-04 18:57:17
    1. 均值滤波(算术平均,去极值平均,加权平均,滑动平均) 2.中值滤波 3.限幅滤波 4.限速滤波 5.惯性滤波 常用的排序方法

    一、均值滤波

    均值滤波即对多个采样值进行求和、取平均,是消除随机误差最常用的方法,主要分为以下几种:

    1. 算术平均滤波

    原理: 在采样周期T内,对测量信号y连续进行m次采样,并把m个采样值相加取算术平均值作为本次的有效采样值。即:
    Y = (y1+y2+y3+···+ym) / m ;
    其中采样次数m的值决定了信号的平滑度和灵敏度。提高m的值可以改善平滑度,但系统灵敏度随之降低。因此,采样次数m 取值随被控对象的不同而不同。一般情况下,流量信号可取10左右,压力信号可取4左右,而温度、成分等缓慢变化信号可取2甚至不进行算术平均。在编程时m一般取2、4、8等(2的整数幂),以便用移位来代替除法运算求得平均值。

    特点: 采样的平滑度与灵敏度之间存在矛盾(采样次数少则平滑性差,次数多则灵敏度下降);且无法消除偶然的干扰脉冲,只是将均值作为了结果,测量精度有所降低。

    2. 去极值平均滤波

    原理: 去极值平均滤波与算术平均滤波原理相似,只是在算术平均滤波的基础上,先将m个数据中的最大值与最小值剔除,再计算余下的m-2个数据的算术平均值。即:
    Y = [ (y1+y2+y3+···+ym) - ymax - ymin ] / (m-2) ;
    相应地,在编程时m一般取4、6、10等(2的整数幂+2),以便用移位来代替除法运算求得平均值。其中剔除最值常用的排序方法是冒泡排序或选择排序。

    特点: 采样的平滑度与灵敏度之间存在矛盾(采样次数少则平滑性差,次数多则灵敏度下降)。

    3. 加权平均滤波

    原理: 对每次的采样值以不同的权系数(越新鲜的采样值权重越大)相加,m一般取到4即可,即:
    Y = (C1·y1+C2·y2+C3·y3+···+Cm·ym) ;
    例如m=4时,权系数可以取:C1=e-3t/R, C2=e-2t/R, C3=e-t/R, C4=1/R,其中R=e-3t+e-2t+e-t+1;

    特点: 可以协调系统平滑性与灵敏度之间的矛盾,在不降低平滑性的前提下提高灵敏度,更适用于纯滞后较大的对象。

    4. 滑动平均滤波

    原理: 滑动平均滤波是在每个采样周期只采样一次,将这一次的采样值和过去的若干采样值一起求平均,所得结果为有效采样值。
    不妨以取m个采样值求滑动平均为例,利用循环队列的结构方式来暂存数据,每新采集一个数据便并入该队列的队尾,同时“挤”掉队首的一个数据,这样在队列中能够始终保持有m个不断更新的数列。

    特点: 当系统的采样速度较慢或采样信号变化较快时,能够保证系统的实时性。

    二、中值滤波

    原理: 将信号y进行连续采样,把所得到的m个采样值按大小进行排序,取中值作为本次采样的有效采样值。(当m为奇数时取中间数,当m为偶数时取中间两数的均值;一般m取3~5次即可)。

    特点: 对于 缓慢变化过程中的偶然因素所引起的波动 或 采样器不稳定造成的误差所引起的脉动干扰 比较有效;但由于采样点的限制,应用范围不宽,不适用于快速变化过程(如流量)的信号采样。

    三、限幅滤波

    经验说明,生产过程中许多物理量变化需要一定时间,因此相邻两次采样值之间的变化幅度应在一定限度内,即 |Yn - Yn-1| ≤ ΔY。

    原理: 限幅滤波就是通过比较两次相邻采样值差的绝对值和最大允差ΔY(取决于采样周期和信号变化率),从而得到有效采样值。
    即:当 |Yn - Yn-1| ≤ ΔY 时,表明本次采样真实,取本次采样值为有效采样值;当 |Yn - Yn-1| > ΔY时,表明本次采样不真实,取前1次采样值为有效采样值。简易理解如下:
    Y = Yn, (| Yn - Yn-1 | ≤ ΔY)------差距合理,此次测量有效
    Y = Yn-1,(| Yn - Yn-1 | > ΔY)----差距过大,此次测量不作数

    特点: 限幅滤波对随机干扰或因采样器不稳定引起的失真有良好的滤波效果。主要用于变化比较缓慢的参数,如温度、物理位置等测量系统。具体应用时,关键的问题是最大允差ΔY的选取,ΔY太大,各种干扰信号“乘虚而入”,使系统误差增大;ΔY太小,又会使某些有用信号被“拒之门外”,使采样效率变低。因此,门限值ΔY的选取非常重要,通常可根据经验数据获得,必要时也可由实验得出。

    四、限速滤波

    原理: 把当前采样值Yn与前两次采样值Yn-1、Yn-2进行比较,取差值的绝对值ΔY作为比较依据,分别得到有效采样值Y,即:
    Y=Yn-1,( | Yn-1-Yn-2 | ≤ ΔY )-----仅前两次的差值<ΔY,取前1次的采样值
    Y=Yn, ( | Yn-1-Yn-2 | > ΔY 且 | Yn-Yn-1 | ≤ ΔY )----仅当后两次差值<ΔY时,取本次
    Y=(Yn+ Yn-1)/2------前、后两次差值均>ΔY,即当 |Yn-1-Yn-2|>ΔY 且 | Yn-Yn-1|>ΔY时,取该两次均值

    特点: 保证了采样的实时性和连续性;但ΔY的确定不够灵活,必须根据现场的情况不断更换新值,且不能反映当采样点数N>3时各采样值受干扰的情况。

    五、惯性滤波

    原理: 惯性滤波(又称一阶滞后滤波)是模仿硬件RC低通滤波器的数字实现。

    常用的RC滤波器的传递函数是:Y(s) / X(s) = 1 / (1+Tf·s) ------①

    式①中,Tf是滤波器的滤波时间常数,其大小关系到滤波效果。一般来说,Tf越大,滤波器的截止频率(滤出的干扰频率)越低,滤出的电压波纹较小,但输出滞后较大。由于时间常数大以及高精度的RC电路不易制作,所以硬件RC不可能对极低频率的信号进行滤波。为此可以模仿硬件RC滤波器的特性参数,用软件做成低通滤波器,从而实现一阶惯性的数字滤波。

    将①式写成差分方程形式:Tf · [y(k) - y(k-1)] / T + y(k) = x(k) ------②

    将②式整理后,得到:y(k)= T/(T+Tf)·x(k) + Tf/(T+Tf)· y(k-1) ------③

    令 α =T/(T+Tf),亦即:y(k) = α·x(k) + (1-α)·y(k-1) ------④

    式③中,x(k)为第k次采样的滤波输入值,即第k次采样值;y(k-1)为第k-1次采样的滤波输出值;y(k)为第k次采样的滤波输出值;α即T/(T+Tf)为滤波系数;Tf为滤波环节的时间常数;T为采样周期。一般当T远小于Tf即α远小于1时,本次的有效采样值(滤波输出值)主要取决于上次的有效采样值(滤波输出值),而本次的采样值(滤波输入值)仅起到一点修正作用。假定采样周期T足够小,则有
    α ≈ T/Tf ,滤波算法的截止频率为:f = 1/(2·Π·RC) = α/(2·Π·T) ----⑤

    式④中,f 为截止频率,Π为圆周率,RC为电路分析中常见的的阻容参数,T为采样周期。当采样周期 T一定时,滤波系数 α 越小,数字滤波器的截止频率 f 就越低。

    特点: 模拟了具有惯性的RC滤波器,对频率较低随机变化的信号滤波效果很好;但不能滤除高于1/2采样频率的干扰信号。

    六、复合滤波

    为了进一步提高滤波效果,有时可以把2种或2种以上不同功能的数字滤波器组合起来,组成复合数字滤波器,或称多级数字滤波器。
    例如防脉冲干扰平均值滤波就是一种应用实例,由于这种滤波方法兼顾了中值滤波和算术平均值滤波的优点,所以无论对缓慢变化的信号,还是对快速变化的信号,都能获得较好的滤波效果。
    再如对高频和低频部分都需要滤波的信号,就可以用复合滤波;也可采用双重滤波的方法,即把采样值经过低通滤波后,再经过一次高通滤波。这样,结果更接近理想值,这实际上相当于多级RC滤波器。

    附、常用的排序方法

    1. 冒泡排序法
      https://www.cnblogs.com/Xloading/p/12003652.html
    2. 选择排序法
      https://blog.csdn.net/changhangshi/article/details/82740541
    展开全文
  • 几种常用滤波算法

    千次阅读 2019-10-04 22:20:38
    几种常用滤波算法 在嵌入式开发中经常会用到一些滤波算法,我整理了一些资料把这些算法封装成可以直接调用的函数,方便以后的开发,包括限幅滤波、中位值滤波法、 算术平均滤波法、一阶滞后滤波法、加权递推平均...

    `

    几种常用的滤波算法

    在嵌入式开发中经常会用到一些滤波算法,我整理了一些资料把这些算法封装成可以直接调用的函数,方便以后的开发,包括限幅滤波、中位值滤波法、 算术平均滤波法、一阶滞后滤波法、加权递推平均滤波法、消抖滤波法 ,其他的一些包括卡尔曼滤波什么的之后有机会再整理

    #include "filter.h"
    
    
    
    /*
    限幅滤波
    
      A方法: 根据经验判断,确定两次采样允许的最大偏差值(设为A),每次检测到新值时判断: 如果本次值与上次值之差<=A,则本次值有效,如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值。
    
      B优点: 能有效克服因偶然因素引起的脉冲干扰。
    
      C缺点: 无法抑制那种周期性的干扰,平滑度差。
    
    		A值可根据实际情况调整
    
    		value为有效值,new_value为当前采样值
    
    		滤波程序返回有效的实际值
    */
    
    #define DEVIATION  10
    
    float limit_filter(float new_value)
    {
        static int num = 0;
        static float value = 0;  //需要赋一个初值
        num ++;
        if(num == 1)
        	value = new_value;
        else
        {
    	    if ( ( new_value - value > DEVIATION ) || ( value - new_value > DEVIATION ))
    	        return value;
    	}
        return new_value;
    }
    
    
    /*
    中位值滤波法
    
      A方法: 取之前采样的N次(N取奇数),把N次采样值按大小排列,取中间值为本次有效值。
    
      B优点: 能有效克服因偶然因素引起的波动干扰,对温度、液位的变化缓慢的被测参数有良好的滤波效果。
    
      C缺点: 对流量、速度等快速变化的参数不宜。
    
        排序采用冒泡法 只需要移动最后一个元素即可
    
    */
    #define MIDDLE_FILTER_N  11
    
    float middle_filter( float new_value)
    {
        static float value_buf[MIDDLE_FILTER_N];
        float temp ;
        uint8_t count, i;
        for ( count = 0; count < MIDDLE_FILTER_N - 1; count++)
        {
            value_buf[count] = value_buf[count + 1] ;
        }
        value_buf[MIDDLE_FILTER_N - 1] = new_value;
    
        for (i = MIDDLE_FILTER_N; 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[(MIDDLE_FILTER_N - 1) / 2];
    }
    
    
    /*
       算术平均滤波法
    
    		A方法: 连续取N个采样值进行算术平均运算,N值较大时:信号平滑度较高,但灵敏度较低;N值较小时:信号平滑度较低,但灵敏度较高。N值的选取:一般流量,N=12;压力:N=4。
    
      B优点: 适用于对一般具有随机干扰的信号进行滤波,这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动。
    
      C缺点: 对于测量速度较慢或要求数据计算速度较快的实时控制不适用,比较浪费RAM 。
    
       无需每次求一编所有的和,减去第一个数据加上新数据
    
    */
    
    #define AVERAGE_N 12
    
    float average_filter(float new_value)
    {
        static float average_value_buf[AVERAGE_N];
        static  float average_sum = 0;
        uint8_t count;
        average_sum -= average_value_buf[0];
        for ( count = 0; count < AVERAGE_N - 1; count++)
        {
            average_value_buf[count] = average_value_buf[count + 1] ;
        }
        average_value_buf[AVERAGE_N - 1] = new_value;
        average_sum += average_value_buf[11];
    
        return (average_sum /(AVERAGE_N * 1.0) );
    }
    
    
    
    /*
    一阶滞后滤波法
    		A方法: 取a=0~1,本次滤波结果=(1-a)*本次采样值+a*上次滤波结果。
    
      B优点: 对周期性干扰具有良好的抑制作用,适用于波动频率较高的场合。
    
      C缺点:相位滞后,灵敏度低,滞后程度取决于a值大小,不能消除滤波频率高于采样频率的1/2的干扰信号。
    
         为加快程序处理速度假定基数为100,a=0~100
    */
    
    #define FIRST_LAG_PROPORTION 0.4
    
    float first_order_lag_filter( float new_value)
    {
        static float first_order_value , first_order_last_value;
        first_order_value = first_order_last_value;
        first_order_last_value = new_value;
        return (1 - FIRST_LAG_PROPORTION) * first_order_value + FIRST_LAG_PROPORTION * new_value;
    }
    
    
    /*
    加权递推平均滤波法
    
      A方法: 是对递推平均滤波法的改进,即不同时刻的数据加以不同的权,通常是,越接近现时刻的资料,权取得越大,给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低。
    
      B优点: 适用于有较大纯滞后时间常数的对象和采样周期较短的系统。
    
      C缺点: 对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号,不能迅速反应系统当前所受干扰的严重程度,滤波效果差。
    
    		coe数组为加权系数表,存在程序存储区。
    */
    
    #define WEIGHT_AVERAGE_N 12
    
    
    
    uint8_t  coe[WEIGHT_AVERAGE_N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
    uint8_t  sum_coe = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12;
    
    float weighted_filter(float new_value)
    {
        static float weight_average_buf[WEIGHT_AVERAGE_N];
        uint8_t count;
        float  sum = 0;
        for ( count = 0; count < AVERAGE_N - 1  ; count++)
        {
            weight_average_buf[count] = weight_average_buf[count+ 1] ;
        }
        weight_average_buf[AVERAGE_N - 1] = new_value;
    
        for (count = 0 ; count < WEIGHT_AVERAGE_N; count++)
            sum += weight_average_buf[count] * coe[count];
        return (sum / (sum_coe * 1.0));
    }
    
    /*
    消抖滤波法
      A方法: 设置一个滤波计数器,将每次采样值与当前有效值比较: 如果采样值=当前有效值,则计数器清零。如果采样值<>当前有效值,则计数器+1,并判断计数器是否>=上限N(溢出),如果计数器溢出,则将本次值替换当前有效值,并清计数器。
    
      B优点: 对于变化缓慢的被测参数有较好的滤波效果,可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动。
    
      C缺点: 对于快速变化的参数不宜,如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效值导入系统。
    */
    
    #define SHAKE_N 12
    
    float shake_filter( float new_value , float now_value)
    {
        static uint8_t count = 0;
        if(now_value != new_value)
        {
            count++;
            if (count >= SHAKE_N)
            {
                count = 0;
                return new_value;
            }
        }
        return now_value;
    }
    
    
    
    展开全文
  • 方便以后的开发,包括限幅滤波、中位值滤波法、 算术平均滤波法、一阶滞后滤波法、加权递推平均滤波法、消抖滤波法 ,其他的一些包括卡尔曼滤波什么的之后机会再整理
  • 除此之外,还有递归高斯滤波、FFT法、重复卷积法等。 1、直接卷积法 2、重复卷积法 3、FFT实现法         原理很简单out = IFFT2(FFT(in)*...
  • 包含图像处理中常用几种滤波方法matlab代码和ppt讲解,包含均值滤波,中值滤波,高斯滤波,双边滤波示例演示。
  • 第1种方法:限幅滤波法(又称程序判断滤波法)  A方法: 根据经验判断,确定两次采样允许的最大偏差值(设为A),每次检测到新值时判断: 如果本次值与上次值之差<=A,则本次值有效,如果本次值与上次值之差>...
  • 几种简单的常用数字滤波函数,C编写,转载。
  • OpenCV之5种滤波方法

    千次阅读 2017-09-01 21:23:34
    5种滤波方法分别为:3线性滤波:方框滤波、均值滤波、高斯滤波2非线性滤波:中值滤波、双边滤波简单来说,方框滤波就是邻域内取个平均值,均值滤波就是方框滤波再归一化一下,高斯滤波就是用正态分布去和图像做...
  • 滤波电路常用于滤去整流输出电压中的纹波,一般由电抗元件组成,如在负载电阻两端并联电容器C,或与负载串联电感器L,以及由电容,电感组成而成的各种复式滤波电路。
  • MATLAB常用滤波函数比较:均值滤波 和 中值滤波

    万次阅读 多人点赞 2019-03-14 10:11:12
    MATLAB常用滤波函数比较:均值滤波和中值滤波 均值滤波中值滤波运行结果程序代码 均值滤波 均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,...
  • 种滤波方式

    千次阅读 2018-08-30 14:00:00
    均值滤波,是最简单的一种滤波操作,输出图像的每一个像素是核窗口内输入图像对应像素的像素的平均值( 所有像素加权系数相等),其实说白了它就是归一化后的方框滤波。 下面开始讲均值滤波的内容吧。 ⑴均值滤波的...
  • 几种常见的滤波算法(转)

    千次阅读 2017-08-03 10:20:00
    1、限幅滤波法(又称程序判断滤波法) A、方法: 根据经验判断,确定两次采样允许的最大偏差值(设为A) 每次检测到新值时判断: 如果本次值与上次值之差,则本次值有效 如果本次值与上次值之差>A,则本次值...
  • 传统的电流积分法、电池内阻法、放电试验法、开路电压法、负载电压法,也较为创新的Kalman滤波法、模糊逻辑理论法和神经网络法等,各种估算方法自己的优缺点,下面对常用几种SOC方法进行简要介绍: ...
  • 常用数字滤波算法

    万次阅读 2017-05-25 16:19:49
    第1种方法:限幅滤波法(又称程序判断滤波法)  A方法: 根据经验判断,确定两次采样允许的最大偏差值(设为A),每次检测到新值时判断: 如果本次值与上次值之差A,则本次值无效,放弃本次值,用上次值代替本次值...
  • 在工业过程控制系统中,由于被控对象的环境比较恶劣,干扰源比较多,仪器、仪表采集的信息常会受到干扰,所以在模拟系统中,为了消除干扰,...下面给出几种常用的数字滤波方法的C语言函数,这些函数一定的通用性,适用于PC...
  • 图像处理的几种滤波

    万次阅读 多人点赞 2018-06-19 01:57:50
    均值滤波均值滤波,是图像处理中最常用的手段,从频率域观点来看均值滤波是一低通滤波器,高频信号将会去掉,因此可以帮助消除图像尖锐噪声,实现图像平滑,模糊等功能。理想的均值滤波是用每个像素和它周围像素...
  • PCL中常用几种滤波算法

    千次阅读 2019-09-23 19:39:15
    在点云处理流程中,滤波处理作为预处理的第一步,会对后续数据处理工作影响很大,只有在滤波与处理中,将噪声点、离群点、空洞、数据压缩等按照后续处理定制,才能更好地进行配准、特征提取、曲面重建、可视化等后续...
  • 在工业现场对数据采集时,需要考虑数据采集的实时性和安全性,简单介绍几种数据采集滤波方法,希望对大家有用.
  • 图像滤波指的是在尽量保留图像细节特征的条件...下面是常用的一些滤波器及在opencv中对应的函数,分为线性滤波和非线性滤波 方框滤波–> boxblur函数来实现 –>线性滤波 均值滤波(邻域平均滤波)–&g..
  • 00-数据处理中的几种常用数字滤波算法00-数据处理中的几种常用数字滤波算法00-数据处理中的几种常用数字滤波算法00-数据处理中的几种常用数字滤波算法
  • 用于称重仪表的几种数字滤波算法 电子称 滤波算法
  • OpenCV中提供了五种滤波方法,分别是均值滤波、不缩放比例均值滤波、中值滤波、高斯滤波和双边滤波。前两种滤波实质上属于一种滤波方法,只不过“不缩放比例均值滤波”比“均值滤波”在计算处理速度上要快一些。下面...
  • 卡尔曼滤波学习心得

    千次阅读 2019-10-05 12:02:39
    卡尔曼滤波学习心得卡尔曼...​ 卡尔曼滤波法是一时域方法,对于具有高斯分布的噪声的线性系统,应用该方法可以得到系统状态的递推最小均方差估计,该方法用状态方程(表示一个状态的转化)描述动力学系统的动态模...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,917
精华内容 5,966
关键字:

常用的滤波方法有几种