Python曲线平滑的实现示例

 更新时间:2022年05月27日 11:25:01   作者:半月夏微凉  
本文主要介绍了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曲线平滑内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python 使用ctypes调用C/C++ dll详情

    python 使用ctypes调用C/C++ dll详情

    这篇文章主要介绍了python 使用ctypes调用C/C++ dll详情,文章首先通过导入ctypes模块,加载C/C++ dll到python进程空间展开主题相关内容,需要的小伙伴可以参考一下
    2022-04-04
  • 一文带你探寻Python中的迭代器

    一文带你探寻Python中的迭代器

    你知道for...in是底层原理是什么样的么?这篇文章就来和大家详细讲一讲Python中迭代器的的相关知识,文中的示例代码讲解详细,感兴趣的可以了解一下
    2023-04-04
  • Python下线程之间的共享和释放示例

    Python下线程之间的共享和释放示例

    这篇文章主要用示例简单介绍了Python下线程之间的共享和释放,线程一直是Python开发者中的热点问题,需要的朋友可以参考下
    2015-05-05
  • Keras在训练期间可视化训练误差和测试误差实例

    Keras在训练期间可视化训练误差和测试误差实例

    这篇文章主要介绍了Keras在训练期间可视化训练误差和测试误差实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python Flask自定义URL路由参数过滤器的方法详解

    Python Flask自定义URL路由参数过滤器的方法详解

    Flask是一个轻量级的Python Web应用框架,它允许开发者以一种简洁明了的方式来构建Web应用,Flask自定义URL的主要功能在于使得开发者能够通过简单的路由规则来自定义应用程序的URL结构,本文给大家介绍了Python Flask自定义URL路由参数过滤器的方法,需要的朋友可以参考下
    2024-07-07
  • conda使用清华源设置channel的镜像

    conda使用清华源设置channel的镜像

    今天在下载OpenCV的时候发现清华的conda channel镜像已经不能用了,conda需要设置的源是anaconda的源,本来就来介绍一下在conda使用清华源设置channel的镜像的方法,感兴趣的可以了解一下
    2021-05-05
  • ChatGPT 帮我自动编写 Python 爬虫脚本的详细过程

    ChatGPT 帮我自动编写 Python 爬虫脚本的详细过程

    ChatGPT是一种基于大语言模型的生成式AI,换句话说它可以自动生成类似人类语言的文本,把梳理好的有逻辑的答案呈现在你面前,这完全不同于传统搜索工具,这篇文章主要介绍了ChatGPT 帮我自动编写 Python 爬虫脚本,需要的朋友可以参考下
    2023-02-02
  • Python PySpider爬虫框架安装使用教程

    Python PySpider爬虫框架安装使用教程

    PySpider是一个Python编写的分布式网络爬虫框架,它可以帮助开发者快速构建和部署爬虫,并支持爬虫任务的分布式运行,PySpider基于Twisted网络框架和MongoDB数据库,具有高效、稳定、易用等特点,同时还提供了一套Web界面,可以方便地查看爬虫任务的运行状态和结果
    2023-11-11
  • pycharm配置Qt Designer工具的图文教程

    pycharm配置Qt Designer工具的图文教程

    本文主要介绍了pycharm配置Qt Designer工具的图文教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • python自动生成model文件过程详解

    python自动生成model文件过程详解

    这篇文章主要介绍了python自动生成model文件过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
    2019-11-11

最新评论