基于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可变参数函数用法实例
Jul 07 Python
python文件与目录操作实例详解
Feb 22 Python
利用python批量给云主机配置安全组的方法教程
Jun 21 Python
详解 Python 读写XML文件的实例
Aug 02 Python
Bottle框架中的装饰器类和描述符应用详解
Oct 28 Python
Python实现定时精度可调节的定时器
Apr 15 Python
Python定义一个跨越多行的字符串的多种方法小结
Jul 19 Python
使用PyOpenGL绘制三维坐标系实例
Dec 24 Python
tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详解
Jun 03 Python
python分布式爬虫中消息队列知识点详解
Nov 26 Python
python 三种方法提取pdf中的图片
Feb 07 Python
Python字符串对齐方法使用(ljust()、rjust()和center())
Apr 26 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
文件上传的实现
2006/10/09 PHP
PhpStorm terminal无法输入命令的解决方法
2016/10/09 PHP
php Session无效分析资料整理
2016/11/29 PHP
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
2007/03/06 Javascript
自己动手制作jquery插件之自动添加删除行功能介绍
2011/10/14 Javascript
让图片旋转任意角度及JQuery插件使用介绍
2013/03/20 Javascript
浅谈javascript中call()、apply()、bind()的用法
2015/04/20 Javascript
AngularJS入门教程之路由与多视图详解
2016/08/19 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
2016/11/10 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
2017/02/28 Javascript
简单好用的nodejs 爬虫框架分享
2017/03/26 NodeJs
谈谈我在vue-cli3中用预渲染遇到的坑
2020/04/22 Javascript
举例讲解如何在Python编程中进行迭代和遍历
2016/01/19 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
Python之pandas读写文件乱码的解决方法
2018/04/20 Python
python 格式化输出百分号的方法
2019/01/20 Python
Python GUI编程 文本弹窗的实例
2019/06/11 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
2019/07/11 Python
Django Rest framework三种分页方式详解
2019/07/26 Python
Django中的FBV和CBV用法详解
2019/09/15 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
详解Html5原生拖拽操作
2018/01/12 HTML / CSS
前端canvas水印快速制作(附完整代码)
2019/09/19 HTML / CSS
瑞士灯具购物网站:Lampenwelt.ch
2018/07/08 全球购物
美国相机和电子产品零售商:Beach Camera
2020/11/26 全球购物
斯福泰克软件测试面试题
2015/02/16 面试题
自荐信格式技巧有哪些呢
2013/11/19 职场文书
实习教师自我鉴定
2013/12/09 职场文书
运动会入场词50字
2014/02/20 职场文书
团队口号大全
2014/06/06 职场文书
检讨书范文2000字
2015/01/28 职场文书
2016年寒假社会实践活动总结
2015/03/27 职场文书
2015年技术员工作总结
2015/04/10 职场文书
电影小兵张嘎观后感
2015/06/03 职场文书
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
2021/05/17 Python
Vue中Object.assign清空数据报错的解决方案
2022/03/03 Vue.js