python 数据、曲线平滑处理——基于Numpy.convolve实现滑动平均滤波——详解

文章目录

  • 1 基于Numpy.convolve实现滑动平均滤波
    • 1.1 滑动平均概念
    • 1.2 滑动平均的数学原理
    • 1.3 语法
    • 1.4 滑动平均滤波示例
  • 2 曲线平滑处理——Savitzky-Golay 滤波器——详解
  • 3 基于Numpy.convolve实现滑动平均滤波——详解

1 基于Numpy.convolve实现滑动平均滤波

1.1 滑动平均概念

滑动平均滤波法 (又称:递推平均滤波法),它把连续取N个采样值看成一个队列 ,队列的长度固定为N ,每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出原则) 。把队列中的N个数据进行算术平均运算,就可获得新的滤波结果。

N值的选取:流量,N=12;压力:N=4;液面,N=4 ~ 12;温度,N=1~4

滑动平均的优缺点:

优点: 对周期性干扰有良好的抑制作用,平滑度高,适用于高频振荡的系统。
缺点: 灵敏度低,对偶然出现的脉冲性干扰的抑制作用较差,不易消除由于脉冲干扰所引起的采样值偏差,不适用于脉冲干扰比较严重的场合,比较浪费RAM 。

1.2 滑动平均的数学原理

滑动平均滤波法计算类似一维卷积的工作原理,滑动平均的N就对应一维卷积核大小(长度)。 区别在于:

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

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

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

1.3 语法

通过Numpy库中的convolve()函数可以实现这些功能。

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

Numpy.convolve函数:(numpy.convolve函数官方文档)

参数说明:

  • a:(N,)输入的第一个一维数组
  • v:(M,)输入的第二个一维数组
  • mode:{‘full’, ‘valid’, ‘same’}参数可选,该参数指定np.convolve函数如何处理边缘。
mode可能的三种取值情况:
full’ 默认值,返回每一个卷积值,长度是N+M-1,在卷积的边缘处,信号不重叠,存在边际效应。
‘same’ 返回的数组长度为max(M, N),边际效应依旧存在。
‘valid’  返回的数组长度为max(M,N)-min(M,N)+1,此时返回的是完全重叠的点。边缘的点无效。

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

1.4 滑动平均滤波示例

np.convolve函数中通过mode参数指定如何处理边缘。

下面是一个说明模式不同取值之间差异的图:

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()

在这里插入图片描述
参考链接:
[开发技巧]·Python极简实现滑动平均滤波(基于Numpy.convolve)

numpy中的convolve的理解

典型范例:

# 实现数据可视化中的数据平滑
import numpy as np
import matplotlib.pylab as plt
 
'''
其它的一些知识点:
raise:当程序发生错误,python将自动引发异常,也可以通过raise显示的引发异常
一旦执行了raise语句,raise语句后面的语句将不能执行
'''
 
def moving_average(interval, windowsize):
    window = np.ones(int(windowsize)) / float(windowsize)
    re = np.convolve(interval, window, 'same')
    return re
 
def LabberRing():
    t = np.linspace(-4, 4, 100)   # np.linspace 等差数列,-44生成100个数
    print('t=', t)
 # np.random.randn 标准正态分布的随机数,np.random.rand 随机样本数值
    y = np.sin(t) + np.random.randn(len(t)) * 0.1   # 标准正态分布中返回1个,或者多个样本值
    print('y=', y)
    
    plt.plot(t, y, 'k')     # plot(横坐标,纵坐标, 颜色)
    
    y_av = moving_average(y, 10)
    plt.plot(t, y_av, 'b')
    plt.xlabel('Time')
    plt.ylabel('Value')
    # plt.grid()网格线设置
    plt.grid(True)
    plt.show()
    return
 
LabberRing()  # 调用函数

在这里插入图片描述

2 曲线平滑处理——Savitzky-Golay 滤波器——详解

曲线平滑处理——Savitzky-Golay 滤波器——详解

3 基于Numpy.convolve实现滑动平均滤波——详解

插值法对折线平滑处理——详解

基于Numpy.convolve实现滑动平均滤波——详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/5951.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux 配置java环境

1、上传jdk包到/usr/local/java目录下 2、解压jdk的tar包 tar -zxvf jdk-8u291-linux-x64.tar.gz 3、添加配置(环境变量) 注意:JAVA_HOME值为实际jdk路径 打开配置文件 vi /etc/profile 最下面添加: #set java environment JAVA_HOME/usr/…

基于集成学习的用户流失预测并利用shap进行特征解释

基于集成学习的用户流失预测并利用shap进行特征解释 小P:小H,如果我只想尽可能的提高准确率,有什么好的办法吗? 小H:优化数据、调参侠、集成学习都可以啊 小P:什么是集成学习啊,听起来就很厉害的…

SSM—【笔记】1.2 SpringMVC

SpringMVC:用于表现层开发,同Servlet功能等同,但比Servlet技术使用更加简便,可以用更少代码量完成开发 项目结构: 后端采用的是三层架构模式: 数据层:先学的JDBC技术,后用MyBatis框架取代 表…

ThreeJS-缩放、旋转(四)

代码&#xff1a; <template> <div id"three_div"> </div> </template> <script> import * as THREE from "three"; import {OrbitControls } from three/examples/jsm/controls/OrbitControls export default { name: &quo…

在华为做了三年软件测试被裁了,我该怎么办

近年来&#xff0c;随着经济环境的变化和企业战略的调整&#xff0c;员工被裁员的情况变得越来越普遍。无论是因为企业经营困难还是因为业务调整&#xff0c;员工们都可能面临被裁员的风险。如果你也遇到了这样的情况&#xff0c;那么你应该怎么办呢&#xff1f; 首先&#xf…

centos7 SystemV 开机自启动脚本配置方法 redis集群三主三从

centos7 SystemV 开机自启动脚本配置方法 redis集群三主三从1、安装redis集群2、编写redis启动脚本2.1、建立启动脚本2.2、复制多份redis启动脚本给集群使用2.3、添加可执行权限3、配置开机自启动1、安装redis集群 参考: redis三主三从集群安装 2、编写redis启动脚本 2.1、建…

RabbitMQ 07 发布订阅模式

发布订阅模式 发布订阅模式结构图&#xff1a; 比如信用卡还款日临近了&#xff0c;那么就会给手机、邮箱发送消息&#xff0c;提示需要去还款了&#xff0c;但是手机短信和邮件发送并不一定是同一个业务提供的&#xff0c;但是现在又希望能够都去执行&#xff0c;就可以用到发…

HTTP协议发展历程-HTTP2【协议篇】

HTTP2.0 HTTP2为了解决HTTP1.1中存在的问题。其中慢启动和TCP连接竞争是TCP本身导致的&#xff0c;在H2中依赖的还是TCP协议&#xff0c;不过思路换了一下。 HTTP/2 的思路就是一个域名只使用一个 TCP 长连接来传输数据&#xff0c;这样整个页面资源的下载过程只需要一次慢启动…

【Elastic (ELK) Stack 实战教程】04、ElasticSearch 集群进阶及优化

目录 一、ES 集群故障转移 1.1 什么是故障转移 1.2 模拟节点故障 1.2.1 重新选举 1.2.2 主分片调整 1.2.3 副本分片调整 二、ES 文档路由原理 2.1 文档的创建流程 2.2 文档的读取流程 2.3 文档批量创建的流程 2.4 文档批量读取的流程 ​三、ES扩展集群节点 3.1 …

【目标检测论文阅读笔记】Multi-scene small object detection with modified YOLOv4

Abstract. 小目标检测的应用存在于我们日常生活中的许多不同场景中&#xff0c;该课题也是目标检测与识别研究中最难的问题之一。因此&#xff0c;提高小目标检测精度不仅在理论上具有重要意义&#xff0c;在实践中也具有重要意义。然而&#xff0c;当前的检测相关算法在这项任…

Node.js学习笔记——Express.js

一、express介绍 express是一个基于Node.js平台的极简、灵活的WEB应用开发框架&#xff0c;官方网址&#xff1a;https://www.expressjs.com.cn/ 二、express使用 2.1express下载 express本身是一个npm包&#xff0c;所以可以通过npm安装。 npm init npm i express 2.2expr…

Java接口

目录 抽象类 抽象类的概述 如何使用抽象类 抽象类的使用 抽象特征 关于抽象需要注意的几个事情 接口(interface) 常量 如何实现接口 接口与接口多继承 接口的注意事项 抽象类 抽象类的概述 父类中的方法&#xff0c;被它的子类们重写&#xff0c;子类各自的实现都不…

《花雕学AI》02:人工智能挺麻利,十分钟就为我写了一篇长长的故事

ChatGPT最近火爆全网&#xff0c;上线短短两个多月&#xff0c;活跃用户就过亿了&#xff0c;刷新了历史最火应用记录&#xff0c;网上几乎每天也都是ChatGPT各种消息。国内用户由于无法直接访问ChatGPT&#xff0c;所以大部分用户都无缘体验。不过呢&#xff0c;前段时间微软正…

Vulnhub:DC-3靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.250 信息收集 端口扫描 nmap -A -v -sV -T5 -p- --scripthttp-enum 192.168.111.250 通过nmap得知目标CMS为Joomla 3.7.0 漏洞利用 搜索发现该版本存在sql注入 利用sqlmap获取目标后台用户密码 sqlmap -u &…

测试行业3年经验,面试想拿 17K,HR说你只值 8K,该如何回答或者反驳?

面试最尴尬的不是被拒绝&#xff0c;而是直接说你不值那个价格... 最近朋友在面试的时候&#xff0c;HR 突然来了句&#xff1a;你只值 7K。朋友后面和我说了这个事。我想如果是我处在这种情况下&#xff0c;自己并不能很好地回答或者反驳。不知道大家会怎么回答或者反驳&…

基于vivado(语言Verilog)的FPGA学习(4)——FPGA选择题总结(针对华为逻辑岗实习笔试)

基于vivado&#xff08;语言Verilog&#xff09;的FPGA学习&#xff08;4&#xff09;——FPGA选择题总结 文章目录基于vivado&#xff08;语言Verilog&#xff09;的FPGA学习&#xff08;4&#xff09;——FPGA选择题总结1. 消除险象2. 建立时间和保持时间3.ISE4.DMA5.仿真器6…

【Linux】-- 权限和Shell运行原理

目录 Shell的运行原理 用户切换 su - / su sudo 权限 chmod chown chgrp 八进制方法修改文件属性 目录权限 粘滞位 umask 自定义默认权限 Shell的运行原理 广义上&#xff0c;Linux发行版 Linux内核 外壳程序 Linux 从广义上来理解它是一个操作系统 而从狭义上…

关于Map类的使用小结

目录 1. 常用Map类和区别 2. HashMap工作原理 2.1 Put()执行过程 2.2 扩容机制 3. ConcurrentHashMap 3.1 工作原理 3.2 JDK7分段锁的优缺点 1. 常用Map类和区别 Map类包含&#xff1a;HashMap、HashTable、LinkedHashMap、TreeMap。 1) 从功能上区分。 HashMap&…

多线程进阶学习11------CountDownLatch、CyclicBarrier、Semaphore详解

CountDownLatch ①. CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这些线程会阻塞 ②. 其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞) ③. 计数器的值变为0时,因await方法阻塞的线程会被唤醒,继续执行 public static void m…

SpringBoot学习笔记上

文章目录1 SpringBoot1.1 SpringBoot介绍1.2 SpringBoot创建的三种方式1.3SpringBootApplication注解1.4 SpringBoot的配置文件1.5多环境配置1.6 使用jsp1.7 ComnandLineRunner 接口 &#xff0c; ApplcationRunner接口2 Web组件2.1 拦截器2.2 Servlet2.3 过滤器Filter2.4 字符…