Python曲线平滑的实现示例

在编写测试程序的时候,由于数据帧数多的原因,导致生成的曲线图比较难看,如下图:

由于高频某些点的波动导致高频曲线非常难看,因此需要对曲线做平滑处理,让曲线过渡更平滑。对曲线进行平滑处理,这里推荐使用Savitzky-Golay 滤波器,可以在scipy库里直接调用,不需要再定义函数。

Python中 Savitzky-Golay 滤波器调用如下:

tmp_smooth = scipy.signal.savgol_filter(tmp,53,3)

scipy函数解释:
scipy.signal.savgol_filter(x, window_length, polyorder, deriv=0, delta=1.0, axis=-1, mode=‘interp’, cval=0.0)[source]
Apply a Savitzky-Golay filter to an array.
This is a 1-d filter. If x has dimension greater than 1, axis determines the axis along which the filter is applied.

在scipy函数解释中,x为原始数据,即上面代码中的tmp数据。window_length是窗口长度,该值需为正奇整数。polyorder为对窗口内的数据点进行k阶多项式拟合,k的值需要小于window_length。

现在看一下window_length和k这两个值对曲线的影响。

(1) 首先是window_length对曲线的平滑作用,代码如下:

tmp_smooth1 = scipy.signal.savgol_filter(tmp,21,3)
tmp_smooth2 = scipy.signal.savgol_filter(tmp,53,3)

plt.semilogx(f,tmp*0.5,label = 'mic'+str(num+1))
plt.semilogx(f,tmp_smooth1*0.5,label = 'mic'+str(num+1)+'拟合曲线-21',color = 'red')
plt.semilogx(f,tmp_smooth2*0.5,label = 'mic'+str(num+1)+'拟合曲线-53',color = 'green')

可以看到,window_length的值越小,曲线越贴近真实曲线;window_length值越大,平滑效果越厉害。

(2) 再看k值对曲线的影响,代码如下:

tmp_smooth1 = scipy.signal.savgol_filter(tmp,21,3)
tmp_smooth2 = scipy.signal.savgol_filter(tmp,53,3)

plt.semilogx(f,tmp*0.5,label = 'mic'+str(num+1))
plt.semilogx(f,tmp_smooth1*0.5,label = 'mic'+str(num+1)+'拟合曲线-21',color = 'red')
plt.semilogx(f,tmp_smooth2*0.5,label = 'mic'+str(num+1)+'拟合曲线-53',color = 'green')

生成曲线图如下:

可以看到,k值越大,曲线越贴近真实曲线;k值越小,曲线平滑越厉害。另外,当k值较大时,受窗口长度限制,拟合会出现问题,高频曲线会变成直线,如下图所示:

参考资源

[1]python 平滑_Python 生成曲线进行快速平滑处理
[2]Savitzky-Golay平滑滤波的python实现

到此这篇关于Python曲线平滑的实现示例的文章就介绍到这了,更多相关Python曲线平滑内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python用插值法绘制平滑曲线

    本文实例为大家分享了python用插值法绘制平滑曲线的具体代码,供大家参考,具体内容如下 原图: 平滑处理后: 代码实现如下: # 1. 随机构造数据 import numpy as np x = range(10) y = np.random.randint(10,size=10) # 2. 绘制原图 import matplotlib as mpl import matplotlib.pyplot as plt %matplotlib inline # jupyter notebook显示绘

  • python使用插值法画出平滑曲线

    本文实例为大家分享了python使用插值法画出平滑曲线的具体代码,供大家参考,具体内容如下 实现所需的库 numpy.scipy.matplotlib 实现所需的方法 插值 nearest:最邻近插值法 zero:阶梯插值 slinear:线性插值 quadratic.cubic:2.3阶B样条曲线插值 拟合和插值的区别 简单来说,插值就是根据原有数据进行填充,最后生成的曲线一定过原有点. 拟合是通过原有数据,调整曲线系数,使得曲线与已知点集的差别(最小二乘)最小,最后生成的曲线不一定经过原有点

  • python基于三阶贝塞尔曲线的数据平滑算法

    前言 很多文章在谈及曲线平滑的时候,习惯使用拟合的概念,我认为这是不恰当的.平滑后的曲线,一定经过原始的数据点,而拟合曲线,则不一定要经过原始数据点. 一般而言,需要平滑的数据分为两种:时间序列的单值数据.时间序列的二维数据.对于前者,并非一定要用贝塞尔算法,仅用样条插值就可以轻松实现平滑:而对于后者,不管是 numpy 还是 scipy 提供的那些插值算法,就都不适用了. 本文基于三阶贝塞尔曲线,实现了时间序列的单值数据和时间序列的二维数据的平滑算法,可满足大多数的平滑需求. 贝塞尔曲线 关于

  • python利用插值法对折线进行平滑曲线处理

    在用python绘图的时候,经常由于数据的原因导致画出来的图折线分界过于明显,因此需要对原数据绘制的折线进行平滑处理,本文介绍利用插值法进行平滑曲线处理: 实现所需的库 numpy.scipy.matplotlib 插值法实现 nearest:最邻近插值法 zero:阶梯插值 slinear:线性插值 quadratic.cubic:2.3阶B样条曲线插值 - 拟合和插值的区别 1.插值:简单来说,插值就是根据原有数据进行填充,最后生成的曲线一定过原有点. 2拟合:拟合是通过原有数据,调整曲线系

  • Python曲线平滑的实现示例

    在编写测试程序的时候,由于数据帧数多的原因,导致生成的曲线图比较难看,如下图: 由于高频某些点的波动导致高频曲线非常难看,因此需要对曲线做平滑处理,让曲线过渡更平滑.对曲线进行平滑处理,这里推荐使用Savitzky-Golay 滤波器,可以在scipy库里直接调用,不需要再定义函数. Python中 Savitzky-Golay 滤波器调用如下: tmp_smooth = scipy.signal.savgol_filter(tmp,53,3) scipy函数解释:scipy.signal.sa

  • python opencv之SIFT算法示例

    本文介绍了python opencv之SIFT算法示例,分享给大家,具体如下: 目标: 学习SIFT算法的概念 学习在图像中查找SIFT关键的和描述符 原理: (原理部分自己找了不少文章,内容中有不少自己理解和整理的东西,为了方便快速理解内容和能够快速理解原理,本文尽量不使用数学公式,仅仅使用文字来描述.本文中有很多引用别人文章的内容,仅供个人记录使用,若有错误,请指正出来,万分感谢) 之前的harris算法和Shi-Tomasi 算法,由于算法原理所致,具有旋转不变性,在目标图片发生旋转时依然

  • Python求离散序列导数的示例

    有一组4096长度的数据,需要找到一阶导数从正到负的点,和三阶导数从负到正的点,截取了一小段. 394.0 388.0 389.0 388.0 388.0 392.0 393.0 395.0 395.0 394.0 394.0 390.0 392.0 按照之前所了解的,对离散值求导其实就是求差分,例如第i点的导数(差分)为: 即在一个宽度为2m+1的窗口内通过计算前后m个值加权后的和得到.但是在实际使用过程中效果不是很好.于是想到了同样在一个宽度为2k+1的窗口内,将这2k+1个点拟合成一个函数

  • 基于python图像处理API的使用示例

    1.图像处理库 import cv2 as cv from PIL import * 常用的图像处理技术有图像读取,写入,绘图,图像色彩空间转换,图像几何变换,图像形态学,图像梯度,图像边缘检测,图像轮廓,图像分割,图像去噪,图像加水印以及修复水印等 2.opencv常用的接口 cv.imread() 读取图片,返回numpy cv.imwrite() 写入图片 cv.cvtColor() 图像色彩空间转换 cv.add() cv.subtract() cv.multiply() cv.divi

  • Python+Turtle绘制幸运草的示例代码

    目录 一.效果展示 二.代码详解 1.导入库 2.播放音乐 3.定义画四叶草的函数 4.调用函数绘制四叶草 5.设置写文字的函数 幸运草又名四叶草,一般指四叶的苜蓿.或车轴草. 在十万株苜蓿草中,你可能只会发现一株是四叶草,机会率大约是十万分之一. 因此四叶草是国际公认的幸运象征. 本文主要介绍运用turtle库控制函数绘制四叶草,希望见者皆好运,祝福大家的生活都能幸福安康. 一.效果展示 在介绍代码之前,先来看下本文的实现效果. 可以把视频中的名字替换成你所想的名字,并参考下面步骤把Pytho

  • Python+Turtle绘制蜘蛛侠的示例代码

    目录 一.效果展示 二.代码详解 1.导入库 2.播放音乐 3.定义画蜘蛛侠上半身的函数 4.定义画左手和右手的函数 5.定义画蜘蛛的函数 6.调用函数绘制图形 蜘蛛侠(Spider-Man)即彼得·帕克(Peter Parker),是美国漫威漫画旗下超级英雄. 由编剧斯坦·李和画家史蒂夫·迪特科联合创造,初次登场于<惊奇幻想>(Amazing Fantasy)第15期(1962年8月). 因为广受欢迎,几个月后,便开始拥有以自己为主角的单行本漫画. 网易云中关于蜘蛛侠主题曲热评过万的评论说到

  • Python实现计算AUC的示例代码

    目录 为什么这样一个指标可以衡量分类效果 auc理解 AUC计算 方法一 方法二 实现及验证 AUC(Area under curve)是机器学习常用的二分类评测手段,直接含义是ROC曲线下的面积,如下图: 要理解这张图的含义,得先理解下面这个表: 表中列代表预测分类,行代表实际分类: 实际1,预测1:真正类(tp) 实际1,预测0:假负类(fn) 实际0,预测1:假正类(fp) 实际0,预测0:真负类(tn) 真实负样本总数=n=fp+tn 真实正样本总数=p=tp+fn 在第一张图中, 横坐

  • Python实现登录接口的示例代码

    之前写了Python实现登录接口的示例代码,最近需要回顾,就顺便发到随笔上了 要求: 1.输入用户名和密码 2.认证成功,显示欢迎信息 3.用户名3次输入错误后,退出程序 4.密码3次输入错误后,锁定用户名 Readme: 1.UserList.txt 是存放用户名和密码的文件,格式为:username: password,每行存放一条用户信息 2.LockList.txt 是存放已被锁定用户名的文件,默认为空 3.用户输入用户名,程序首先查询锁定名单 LockList.txt,如果用户名在里面

  • jQuery实现锚点向下平滑滚动特效示例

    实现效果: 实现原理: 使用jQuery animate()方法实现页面平滑滚动特效 $('html, body').animate({ scrollTop: $(hash).offset().top }, 800, function(){ window.location.hash = hash; }); 简单实例代码: <!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.

  • python中hashlib模块用法示例

    我们以前介绍过一篇Python加密的文章:Python 加密的实例详解.今天我们看看python中hashlib模块用法示例,具体如下. hashlib hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, sha512等算法 具体应用 #!/usr/bin/env python # -*- coding: UTF-8 -*- #pyversion:python3.5 #owner:fuzj import h

随机推荐