平均值滤波_滑动平均值滤波 - CSDN
精华内容
参与话题
  • 平均值滤波算法是比较常用,也比较简单的滤波算法。在滤波时,将N个周期的采样值计算平均值,算法非常简单。当N取值较大时,滤波后的信号比较平滑,但是灵敏度差;相反N取值较小时,滤波平滑效果差,但灵敏度好。 ...

    1、算法介绍        

           平均值滤波算法是比较常用,也比较简单的滤波算法。在滤波时,将N个周期的采样值计算平均值,算法非常简单。当N取值较大时,滤波后的信号比较平滑,但是灵敏度差;相反N取值较小时,滤波平滑效果差,但灵敏度好。

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

    缺点:对异常信号的抑制作用差,无法消除脉冲干扰的影响。

    2、实现代码

            下面的代码是平均值滤波的示例代码。

    float data[10];
    
    float averageFilter(float in_data)
    {
    	float sum = 0;
    	for(int i=0; i<9; i++)
    	{
    		data[i]=data[i+1];
    		sum = sum + data[i];
    	}
    	data[9] = in_data;
    	sum = sum + data[9];
    	
    	return(sum/10);
    
    }

    在代码中,data[]为全局变量,它用来记录10个周期的采样值,averageFilter()为滤波函数,它的输入为新采集到的数据,函数中,首先将data[]中的数据进行移位,并将新采集到的数据保存到data[]中,同时计算data[]中10个数据的和,最后返回10个数据和的平均值。

    3、示例

            下面我们通过一个示例来体会平均值滤波的作用,滤波对象为车速信号,滤波效果如下图所示。图中,横轴为时间,单位:秒,纵轴为速度,单位km/h。其中,蓝色为滤波前的数据,红色为滤波后的数据。可见,平均值滤波对数据进行了很大程度的平滑,但是,数据存在滞后。

     

    展开全文
  • 一种高效的平均值滤波方法

    千次阅读 2014-08-20 15:09:06
    在十种经典软件滤波算法中,可以看到很多算法都是平均值滤波算法变种,事实上最常用的也还是平均值滤波算法。但传统的平均值滤波算法很占内存,每次运算都要求累加和,再求平均值,导致运算效率不高。

           在十种经典软件滤波算法中,可以看到很多算法都是平均值滤波算法变种,事实上最常用的也还是平均值滤波算法。但传统的平均值滤波算法很占内存,每次运算都要求累加和,再求平均值,导致运算效率不高,并且实际中为满足不同的需要,我们需要一种简单、高效和功能强大的滤波算法。

    设:采样值 C、累加器 S,平均值 A,采样次数 N

    传统的平均值滤波算法

    S = C(1) + C(2) + ... + C(N)

    A = S / N

    需要用循环来计算累加和,比较耗时,C(1~N)是缓存,随采样数N增大,所需内存量也增大 

    向队列平均值算法推进

    S = C(1) + C(2) + ... + C(N) (第一次)

    C(x) = C(x + 1) (队列前移)

    C(N) = C

    S = S - C(1) + C(N)

    A = S / N

    运算量有所改进(用指针维护循环队列,不实际移动数据),占用内存问题不变 

    简洁高效算法

    初始化:A=初始值,S=A*N

    S = S - A + C

    A = S / N

    就这么简单,三个变量(N可以是常数),只要 S 的量程足够,N可以任意调整。

    可以看出,此算法是从队列平均值算法演变而来,因没有了队列,每次计算时不知道该丢弃的最老的一个采样值是多少,这里用了个替代的办法,丢弃上次计算出的平均值。去掉了缓存维护,节省内存空间,同时也将运算量压缩到了最小,执行效率非常高。调试时容易修改采样数。

    在该基础上,我们再演变出一种带死区和限幅控制的队列平均值实用算法:

    ① 主滤波程序 AveFilter

     入口参数:
     EN  : 调用使能位
     bType :采样值类型,'W'=整型、'F'=浮点型、'D'(或其它)=长整型,参数类型:字节
     wHi : 采样值高位字(采样值为整型是,实参必须为0),参数类型,2字节
     wLo : 采样值低位字,参数类型,2字节
     rDie : 滤波死区,参数类型:浮点数
     rMaxErr : 最大允许偏差,参数类型:浮点数
     rLen :滤波队列长度,参数类型:浮点数
    出/入口参数:
     rSum :累加和,参数类型:浮点数
     rAve :滤波输出平均值,参数类型:浮点数
    注意:本程序采样值是参数类型可适应的,用 wHi/wLo 的组合来适应整型、长整型、浮点型的参数类型输入,避免使用多个相同的子程序来适应不同类型的输入参数。由 bType 来指定输入的参数类型。
    滤波器初始化程序 InitFilter
    入口参数:
     EN  : 调用使能位
     rInit :初始值(一般为0),参数类型:浮点数
     rLen : 滤波队列长度,参数类型:浮点数
    出/入口参数:
     rSum :累加和,参数类型:浮点数
     rAve :滤波输出平均值,参数类型:浮点数

    展开全文
  • 均值滤波

    千次阅读 2020-05-17 18:21:19
    几种常见的均值滤波算法, 移动平均,加权平均和指数平均

    介绍

    均值滤波是低低通数字滤波的一种。对信号x滤波,滤波输出为y。
    均值滤波

    代码实现

    文中出现的均值滤波算法的c++模板类实现可点击此处查看

    滤波算法

    • 最简单的均值滤波(simple moving average ,SMA)具有如下形式:
      yi=j=in+1ixiny_i=\frac{\sum_{j=i-n+1}^{i}{x_i}}{n}
      从时间复杂度上看,上边的公式复杂度是O(n),但这是可以优化的,如下式,
      yi=yi1+xixinny_i=y_{i-1}+\frac{x_i-x_{i-n}}{n}
    • 加权平均滤波(weighted moving average, WMA)
      yi=nxi+(n1)xi1+...+xin+1n+(n1)+...+1y_i=\frac{nx_i+(n-1)x_{i-1}+...+x_{i-n+1}}{n+(n-1)+...+1}

    从上边的公式可以看出,与SMA不同,随着时间变老输入数据的权值逐渐变小,即老的输入数据渐渐被“遗忘”,而SMA中每个数据具有相同相同的权值。

    • 指数平均滤波(exponential moving average,EMA)
      yi=(1α)yi1+αxiy_i=(1-\alpha)y_{i-1}+\alpha x_i

    指数平均滤波本质上也是一种加权滤波,不过与上边的加权平均滤波不同,WMA的权值随时间的变老是线性减小的,而指数平均滤波的权值是以指数式递减的,另外还有一个区别,指数移动平均无论多旧的数据其总会被给予一定的权值,而上边的加权平均则真的是“遗忘了”。

    伯德图

    以上三种滤波的伯德图如下图。
    在这里插入图片描述

    展开全文
  • 平均值滤波之鬼斧神工算法

    万次阅读 2008-04-17 11:40:00
    在十种经典软件滤波算法中,可以看到很多算法都是平均值滤波算法变种,事实上最常用的也还是平均值滤波算法。但传统的平均值滤波算法很占内存,每次运算都要求累加和,再求平均值,导致运算效率不高。今天介绍一种超...
    十种经典软件滤波算法中,可以看到很多算法都是平均值滤波算法变种,事实上最常用的也还是平均值滤波算法。但传统的平均值滤波算法很占内存,每次运算都要求累加和,再求平均值,导致运算效率不高。
    今天介绍一种超简洁超高效的平均滤波算法,此算法是以前搞单片机时一老师所创(单片机上的内存简直是寸土寸金),仅仅用三个变量,就完成了平均值滤波的计算。刚开始看到这个算法是只觉得很佩服,后来用了各种各样的算法后,才感到此算法简直到了鬼斧神工的地步(别以为看完后觉得太简单没啥大不了的,正是因为太简单才突出了它的了不起,最开始能想到将一个复杂的算法简化到无法再简的地步非一般功力所能做到的)。
     
    在该基础上,我们再演变出一种带死区和限幅控制的队列平均值实用算法。
    采样值 C、累加器 S,平均值 A,采样次数 N
     
    传统的平均值滤波算法
    S = C(1) + C(2) + ... + C(N)
    A = S / N
    需要用循环来计算累加和,比较耗时,C(1~N)是缓存,随采样数N增大,所需内存量也增大
     
    向队列平均值算法推进
    S = C(1) + C(2) + ... + C(N) (第一次)
    C(x) = C(x + 1) (队列前移)
    C(N) = C
    S = S - C(1) + C(N)
    A = S / N
    运算量有所改进(用指针维护循环队列,不实际移动数据),占用内存问题不变
     
    鬼斧神工算法
    初始化:A=初始值,S=A*N
    S = S - A + C
    A = S / N
    就这么简单,三个变量(N可以是常数),只要 S 的量程足够,N可以任意调整。
    可以看出,此算法是从队列平均值算法演变而来,因没有了队列,每次计算时不知道该丢弃的最老的一个采样值是多少,这里用了个替代的办法,丢弃上次计算出的平均值。
    去掉了缓存维护,节省内存空间,同时也将运算量压缩到了最小,执行效率非常高。调试时容易修改采样数。
     
    优化算法
    此算法的核心思想还是平均值滤波,虽然改进了运算量和内存占用,但同样继承了平均值滤波法 N 值较大时平滑度好,反应迟钝的特点。
    为此,对算法引入 S7-200 系统滤波程序中死区的概念:采样值偏差在死区范围内时,进行滤波计算,采样值偏差在死区范围以外时直接使用采样值,达到快速反应的效果。
    再溶合限幅滤波法去掉偶然的干扰脉冲:采样值偏差在限幅范围内时,进行滤波计算,采样值偏差在限幅范围以外时直接丢弃,使用上次滤波输出值。显然,限幅值应该大于死区值。
     
    将此算法写成两个子函数(也可以做成库)
    主滤波程序 AveFilter
     入口参数:
     EN  : 调用使能位
     bType :采样值类型,'W'=整型、'F'=浮点型、'D'(或其它)=长整型,参数类型:字节
     wHi : 采样值高位字(采样值为整型是,实参必须为0),参数类型,2字节
     wLo : 采样值低位字,参数类型,2字节
     rDie : 滤波死区,参数类型:浮点数
     rMaxErr : 最大允许偏差,参数类型:浮点数
     rLen :滤波队列长度,参数类型:浮点数
    出/入口参数:
     rSum :累加和,参数类型:浮点数
     rAve :滤波输出平均值,参数类型:浮点数
    命令行:CALL   AveFilter, 'W', 0, SMW28, 640.0, 32000.0, 4.0, VD0, VD4
     
    注意:本程序采样值是参数类型可适应的,用 wHi/wLo 的组合来适应整型、长整型、浮点型的参数类型输入,避免使用多个相同的子程序来适应不同类型的输入参数。由 bType 来指定输入的参数类型。
     
    滤波器初始化程序 InitFilter
     
    入口参数:
     EN  : 调用使能位
     rInit :初始值(一般为0),参数类型:浮点数
     rLen : 滤波队列长度,参数类型:浮点数
    出/入口参数:
     rSum :累加和,参数类型:浮点数
     rAve :滤波输出平均值,参数类型:浮点数
     命令行:CALL   InitFilter, 0.0, 4.0, VD0, VD4
    展开全文
  • 十大平均滤波算法

    千次阅读 2018-09-30 14:02:59
    1、限幅滤波法   *函数名称:AmplitudeLimiterFilter()-限幅滤波法 *优点:能有效克服因偶然因素引起的脉冲干扰 *缺点:无法抑制那种周期性的干扰,且平滑度差 *说明:  1、调用函数  GetAD(),该函数用来取得...
  • 用labview做的简单的平均值滤波程序,仅供参考,谢谢谢谢谢谢谢
  •  最简单的滤波器是移动平均或方框滤波器,他将K*K窗口中像素值的平均值作为输出。这种滤波器等价于图像与全部元素值为1的核函数先进性卷积再进行尺度缩放。对于尺寸较大的核函数,一个有效的实现策略如下:在扫描行...
  • 均值滤波和中值滤波

    万次阅读 多人点赞 2018-02-05 20:19:58
    均值滤波采用线性的方法,平均整个窗口范围内的像素,均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。均值滤波...
  • 转自:https://blog.csdn.net/zaishuiyifangxym/article/details/89788020 目录 1 图像增强——图像平滑        1.1 图像增强简介   ...2 均值滤...
  • 图像处理:中值滤波&均值滤波

    万次阅读 多人点赞 2018-08-16 20:06:58
    转自:openCV之中值滤波&amp;均值滤波(及代码实现):https://blog.csdn.net/weixin_37720172/article/details/72627543  在开始我们今天的博客之前,我们需要先了解一下什么是滤波: openCV之中值滤波&...
  • 中位值平均滤波

    千次阅读 2018-09-02 01:50:01
    中值平均滤波就是在采集的N个数据中去掉一个最大值和一个最小值,然后对剩下的数据求平均值。所以这个算法**不需要对数据排序**,关键是计算最大值,最小值,和。算法实现如下: unsigned short AD_Filter(un
  • 各种滤波算法的比较

    万次阅读 2016-06-20 15:43:49
    数字滤波(digital filtering):数字滤波(digital filtering):用数字设备,通过一定的算法,对信号进行处理,将某个频段的信号进行滤除,得到新的信号的这一过程叫做数字滤波。数字滤波器可以分为两大部分:即经典...
  • 算法学习笔记之滑动平均滤波算法

    万次阅读 2019-08-10 13:51:35
    滑动平均滤波算法只采样一次,将一次采样和过去的若干次采样一起求平均,得到的有效采样即可投入使用。如果取N个采样平均,存储区中必须开辟N个数据的暂存区。每新采集一个数据便存入暂存区中,同时去掉一...
  • 平滑滤波笔记

    万次阅读 2020-05-01 13:34:57
    因此可以求平均值的办法来消除随机误差,这就是所谓平滑滤波。平滑滤波有以下几种: 1. 算术平均滤波法 算术平均滤波法适用于对一般的具有随机干扰的信号进行滤波。这种信号的特点是信号本身在某一数值范围附近...
  • 各种滤波算法介绍及比较

    千次阅读 2018-04-03 11:21:32
    原文地址:...中值滤波法2、抑制小幅度高频噪声的平均滤波法(一).算数平均;(二).滑动平均;(三).加权滑动平均;(四)一阶滞后滤波法3、复合滤波法下面介绍常用的8种...
  • A、名称:递推平均滤波法(又称滑动平均滤波法) B、方法: 把连续取得的N个采样看成一个队列,队列的长度固定为N, 每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出原则), 把队列中的N...
  • 10种常用ADC滤波算法

    万次阅读 2016-03-09 11:02:37
    1、限幅滤波法(又称程序判断滤波法) A、方法: 根据经验判断,确定两次采样允许的最大偏差值(设为A) 每次检测到新值时判断: 如果本次值与上次值之差,则本次值有效 ...2、中位值滤波法 A、方法: 连续采
  • 技术积累 — 加权平均值滤波算法

    千次阅读 2018-09-12 10:45:10
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  XX 作 者:ZHS(文化人)  XX 联系方式:文章末尾Chat快问  XX 版权声明:原创文章,欢迎评论和转载~转载时能告诉我一声...
  • 数字滤波的定义和常用方法

    千次阅读 2017-06-15 20:42:06
    1.算数平均值滤波  对某一被测参数在第 k 个采样时刻连续采样 n 次得到 n 个采样数据 xki ( i=1,2,…,n ),计算这n个数据的算数平均值作为本次滤波器的输出yk。   式中 yk 是第 k 次滤波器的输出; xki
  • 几种时域滤波的比较

    千次阅读 2013-05-02 18:34:37
    1 平均值滤波  1)算术平均滤波  方法:连续取N个采样值进行算术平均运算。N值较大时,信号平滑度较高,但灵敏度较低;N值较小时,信号平滑度较低,但灵敏度较高。N值的选取一般规则为:流量N取12;...
1 2 3 4 5 ... 20
收藏数 19,624
精华内容 7,849
关键字:

平均值滤波