我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python中savgol_filter的详细解释

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python中savgol_filter的详细解释

目录

savgol_filter简介

Savitzky-Golay滤波器最初由Savitzky和Golay于1964年提出,是光谱预处理中常用滤波方法,它的核心思想是对一定长度窗口内的数据点进行k阶多项式拟合,从而得到拟合后的结果。对它进行离散化处理后后,S-G 滤波其实是一种移动窗口的加权平均算法,但是其加权系数不是简单的常数窗口,而是通过在滑动窗口内对给定高阶多项式的最小二乘拟合得出。这种滤波器最大的特点在于在滤除噪声的同时可以确保信号的形状、宽度不变。

它对信号的操作是在时域内对window_length内的数据进行多项式拟合。而从频域上看,这种拟合实际就是通过了低频数据,而滤掉了高频数据。

这种滤波其实是一种移动窗口的加权平均算法,但是其加权系数不是简单的常数窗口,而是通过在滑动窗口内对给定高阶多项式的最小二乘拟合得出。

总之,平滑滤波是光谱分析中常用的预处理方法之一。用Savitzky-Golay方法进行平滑滤波,可以提高光谱的平滑性,并降低噪音的干扰。S-G平滑滤波的效果,随着选取窗宽不同而不同,可以满足多种不同场合的需求。

savgol_filter原理

表达式为:
scipy.signal.savgol_filter(x, window_length, polyorder)

详细表达式和定义可以查看下面链接:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.savgol_filter.html

参数的含义:

x为要滤波的信号;

window_length即窗口长度;取值为奇数且不能超过len(x)。它越大,则平滑效果越明显;越小,则更贴近原始曲线。

polyorder为多项式拟合的阶数。它越小,则平滑效果越明显;越大,则更贴近原始曲线。

参数window_length对平滑的效果

import osimport matplotlib.pyplot as pltimport scipy.signalimport numpy as npdef main():    # 项目目录    dir = "D:\\a_user_file\\8_data"    filename = '1.csv'    path = os.path.join(dir, filename)    with open(path, "r") as fname:        data = fname.read()        lines = data.split("\n")        lines = lines[1:5000]        raw_data = []        for i in range(len(lines)):            line_i = lines[i].split(",")            raw_data.append(int(line_i[4]))    #sig = denoise(raw_data)    sig = raw_data    tmp_smooth1 = scipy.signal.savgol_filter(sig, 21, 3)    tmp_smooth2 = scipy.signal.savgol_filter(sig, 53, 3)    plt.subplot(3,1,1)    plt.plot(sig)    # plt.semilogx(sig, label='mic')    plt.subplot(3,1,2)    plt.plot(tmp_smooth1 * 0.5, label='mic'  + '拟合曲线-21', color='red')    plt.subplot(3,1,3)    plt.plot(tmp_smooth2 * 0.5, label='mic'  + '拟合曲线-53', color='green')    plt.show()main()

结果显示为:
在这里插入图片描述
可以看到,window_length的值越小,曲线越贴近真实曲线;window_length值越大,平滑效果越厉害。

参数polyorder的平滑效果

代码如下:

import osimport matplotlib.pyplot as pltimport scipy.signalimport numpy as npdef main():    # 项目目录    dir = "D:\\a_user_file\\8_data"    filename = '1.csv'    path = os.path.join(dir, filename)    with open(path, "r") as fname:        data = fname.read()        lines = data.split("\n")        lines = lines[1:5000]        raw_data = []        for i in range(len(lines)):            line_i = lines[i].split(",")            raw_data.append(int(line_i[4]))    #sig = denoise(raw_data)    sig = raw_data    tmp_smooth1 = scipy.signal.savgol_filter(sig, 53, 9)    tmp_smooth2 = scipy.signal.savgol_filter(sig, 53, 3)    plt.subplot(3,1,1)    plt.plot(sig)    # plt.semilogx(sig, label='mic')    plt.subplot(3,1,2)    plt.plot(tmp_smooth1 * 0.5, label='mic'  + '拟合曲线-21', color='red')    plt.subplot(3,1,3)    plt.plot(tmp_smooth2 * 0.5, label='mic'  + '拟合曲线-53', color='green')    plt.show()main()

显示的效果如下:
在这里插入图片描述
可以看出参数polyorder(多项式阶数)越大,曲线越贴近真实曲线;polyorder值越小,曲线平滑越厉害。

注:当polyorder值较大时,受窗口长度限制,拟合会出现问题,高频曲线会变成直线,

参考:
https://blog.csdn.net/sinat_21258931/article/details/79298478
https://blog.csdn.net/weixin_43821212/article/details/100016021
https://blog.csdn.net/kaever/article/details/105520941

来源地址:https://blog.csdn.net/ximu__l/article/details/129179388

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python中savgol_filter的详细解释

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python委托模式详细解释

收集了网上的三个例子,然后做了些注释:#!/usr/bin/env python3# -*- coding: utf-8 -*-class Wrapper: def __init__(self, obj): self.w
2023-01-31

getRealPath详细解释

getRealPath是一个方法,用于获取指定文件路径的真实路径。在Java中,当我们使用相对路径来访问文件时,有时候可能会遇到问题,因为相对路径是相对于当前工作目录的,而当前工作目录可能因为各种原因而发生变化。而getRealPath方法
2023-09-13

IP地址的详细解释

  今天这篇文章主要给大家介绍的是关于IP地址十进制和二进制之间的转换、IP地址的分类、IP子网划分、子网掩码以及公有地址和私有地址等CCNA基础知识。对cnna基础知识感兴趣的小伙伴们可以看一下。  (一)二进制和十进制之间的转换  如果IPv4地址使用32位二进制数格式,要使用点分十进制数来表示,例如202.101
IP地址的详细解释
2024-04-17

PyCharm中配置解释器的详细步骤解析

详解在PyCharm中配置解释器的步骤,需要具体代码示例在使用PyCharm进行Python开发时,正确配置解释器是非常重要的一步。解释器是执行Python代码的环境,PyCharm需要知道要使用哪个解释器来运行项目代码。本文将详细介绍在
PyCharm中配置解释器的详细步骤解析
2024-02-03

Linux内核宏Container_Of的详细解释

目录1. 结构体在内存中是如何存储的2. container_of宏3. typeof4. (((type *)0)->member)5. const typeof(((type * )0) ->member)*__mptr = (ptr)
2022-06-04

MySQL EXPLAIN输出列的详细解释

1. 简介EXPLAIN语句提供有关 MySQL 如何执行语句的信息。 EXPLAIN与SELECT、DELETE、INSERT、REPLACE和UPDATE语句一起使用。mysql> EXPLAIN SELECT * FROM emplo
2022-05-30

linux下的tar命令详细解释

tar命令 [root@Linux ~]# tar [-cxtzjvfpPN] 文件与目录 ....参数: -c :建立一个压缩文件的参数指令(create 的意思); -x :解开一个压缩文件的参数指令! -t :查看 tarfile 里
2022-06-04

Python注释详解

注释用于说明代码实现的功能、采用的算法、代码的编写者以及创建和修改的时间等信息。 注释是代码的一部分,注释起到了对代码补充说明的作用。 Python注释 Python单行注释以#开头,单行注释可以作为单独的一行放在被注释的代码行之上,也可以
2022-06-04

在VScode里面添加Python解释器的详细步骤

VScode编辑器在安装好Python插件之后会自动选择环境变量中排序最高的那一个解释器作为默认解释器,而想要额外添加新的Python解释器就需要自己设置,接下来通过本文给大家分享VScode添加Python解释器的方法,感兴趣的朋友一起看看吧
2023-02-27

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录