基于Numpy.convolve使用Python实现滑动平均滤波的思路详解


Posted in Python onMay 16, 2019

基于Numpy.convolve使用Python实现滑动平均滤波的思路详解基于Numpy.convolve使用Python实现滑动平均滤波的思路详解

1.滑动平均概念

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

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

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

2.解决思路

可以发现滑动平均滤波法计算很类似与一维卷积的工作原理,滑动平均的N就对应一维卷积核大小(长度)。

步长会有些区别,滑动平均滤波法滑动步长为1,而一维卷积步长可以自定义。还有区别就是一维卷积的核参数是需要更新迭代的,而滑动平均滤波法核参数都是一。

我们应该怎么利用这个相似性呢?其实也很简单,只需要把一维卷积核大小(长度)和N相等,步长设置为1,核参数都初始为1就可以了。由于一维卷积具备速度快,然后我们就可以使用一维卷积来实现这个功能了,快速高效。

使用深度学习框架实现这个功能是否有些大材小用了?是有些大材小用了,因为这里使用卷积的核参数不用更新,其实没必要使用复杂的深度学习框架,如果Numpy中可以实现这些功能就更简单方便了。

说干就干,经过查找发现Numpy.convolve可以实现我们想要的功能。

3.Numpy.convolve介绍

numpy.convolve(a, v, mode=‘full')

参数:

a:(N,)输入的一维数组

v:(M,)输入的第二个一维数组

mode:{‘full', ‘valid', ‘same'}参数可选

‘full' 默认值,返回每一个卷积值,长度是N+M-1,在卷积的边缘处,信号不重叠,存在边际效应。

‘same' 返回的数组长度为max(M, N),边际效应依旧存在。

‘valid'  返回的数组长度为max(M,N)-min(M,N)+1,此时返回的是完全重叠的点。边缘的点无效。

和一维卷积参数类似,a就是被卷积数据,v是卷积核大小。

4.算法实现

def np_move_avg(a,n,mode="same"):
  return(np.convolve(a, np.ones((n,))/n, mode=mode))

原理说明

运行平均值是卷积数学运算的一个例子。对于运行平均值,沿着输入滑动窗口并计算窗口内容的平均值。对于离散的1D信号,卷积是相同的,除了代替计算任意线性组合的平均值,即将每个元素乘以相应的系数并将结果相加。那些系数,一个用于窗口中的每个位置,有时称为卷积核。现在,N值的算术平均值是(x_1 + x_2 + ... + x_N) / N,所以相应的内核是(1/N, 1/N, ..., 1/N),这正是我们通过使用得到的np.ones((N,))/N。

边缘处理

该mode的参数np.convolve指定如何处理边缘。在这里选择了same模式,这样可以保证输出长度一种,但你可能还有其他优先事项。这是一个说明模式之间差异的图:

import numpy as np
import matplotlib.pyplot as plt
def np_move_avg(a,n,mode="same"):
  return(np.convolve(a, np.ones((n,))/n, mode=mode))
modes = ['full', 'same', 'valid']
for m in modes:
  plt.plot(np_move_avg(np.ones((200,)), 50, mode=m));
plt.axis([-10, 251, -.1, 1.1]);
plt.legend(modes, loc='lower center');
plt.show() ​

基于Numpy.convolve使用Python实现滑动平均滤波的思路详解基于Numpy.convolve使用Python实现滑动平均滤波的思路详解

5.参考

1. https://stackoverflow.com/questions/13728392/moving-average-or-running-mean

总结

以上所述是小编给大家介绍的Python实现滑动平均滤波的思路详解(基于Numpy.convolve),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Python 相关文章推荐
python操作 hbase 数据的方法
Dec 18 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
May 08 Python
python中类和实例如何绑定属性与方法示例详解
Aug 18 Python
使用python实现滑动验证码功能
Aug 05 Python
python批量图片处理简单示例
Aug 06 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
Jan 16 Python
python爬虫开发之urllib模块详细使用方法与实例全解
Mar 09 Python
使用Python将Exception异常错误堆栈信息写入日志文件
Apr 08 Python
Django websocket原理及功能实现代码
Nov 14 Python
通用的Django注册功能模块实现方法
Feb 05 Python
关于 Python json中load和loads区别
Nov 07 Python
Python标准库pathlib操作目录和文件
Nov 20 Python
Python实现Linux监控的方法
May 16 #Python
计算机二级python学习教程(3) python语言基本数据类型
May 16 #Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
May 16 #Python
Python实现的文轩网爬虫完整示例
May 16 #Python
计算机二级python学习教程(2) python语言基本语法元素
May 16 #Python
计算机二级python学习教程(1) 教大家如何学习python
May 16 #Python
详解Python传入参数的几种方法
May 16 #Python
You might like
php获取url字符串截取路径的文件名和扩展名的函数
2010/01/22 PHP
非常好用的Zend Framework分页类
2014/06/25 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
2015/09/25 PHP
PHP递归遍历多维数组实现无限分类的方法
2016/05/06 PHP
php parse_str() 函数的定义和用法
2016/05/23 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
利用PHP实现开心消消乐的算法示例
2017/10/12 PHP
PHP获取当前系统时间的方法小结
2018/10/03 PHP
javascript Select标记中options操作方法集合
2008/10/22 Javascript
发布一个基于javascript的动画类 Fx.js
2010/11/05 Javascript
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
jQuery性能优化28条建议你值得借鉴
2013/02/16 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
jquery.messager.js插件导致页面抖动的解决方法
2013/07/14 Javascript
javascript实现原生ajax的几种方法介绍
2013/09/21 Javascript
javascript点击按钮实现隐藏显示切换效果
2016/02/03 Javascript
nodejs6下使用koa2框架实例
2017/05/18 NodeJs
vue resource post请求时遇到的坑
2017/10/19 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
2019/07/19 Javascript
详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别
2020/08/12 Javascript
Python中%r和%s的详解及区别
2017/03/16 Python
Django实现自定义404,500页面教程
2017/03/26 Python
python 读取excel文件生成sql文件实例详解
2017/05/12 Python
Python 读取某个目录下所有的文件实例
2018/06/23 Python
一百行python代码将图片转成字符画
2021/02/19 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
Django返回HTML文件的实现方法
2020/09/17 Python
HTML5学习笔记之html5与传统html区别
2016/01/06 HTML / CSS
美国运动鞋类和服装零售连锁店:Shoe Palace
2019/08/13 全球购物
介绍一下Java中的static关键字
2012/05/12 面试题
会展策划与管理专业大学生职业生涯规划
2014/02/07 职场文书
建筑工地宣传标语
2014/06/18 职场文书
初三化学教学反思
2016/02/22 职场文书
SqlServer 垂直分表(减少程序改动)
2021/04/16 SQL Server
浅谈如何提高PHP代码的质量
2021/05/28 PHP
我收到了德劲DE1107
2022/04/05 无线电