首页 > 其他分享 >19. Savitzky-Golay 滤波器

19. Savitzky-Golay 滤波器

时间:2024-11-16 18:50:08浏览次数:3  
标签:滤波器 Savitzky 19 Golay polyorder length window reward data

Savitzky-Golay 滤波器

通过 Savitzky-Golay 滤波器来平滑数据。

1. Savitzky-Golay 滤波器的工作原理

Savitzky-Golay 滤波器是一种数字滤波技术,用于平滑数据并减少噪声。它的主要优点是可以保留数据的形状和宽度特征,同时减少高频噪声。具体步骤如下:

1 ) 滑动窗口:在数据序列上滑动一个固定大小的窗口(由 window_length 定义)。
2 ) 多项式拟合:在每个窗口内,使用最小二乘法拟合一个多项式(由 polyorder 定义)。
3 ) 平滑值:用多项式在窗口中心点的值 替换原始数据点,从而达到平滑效果。

2. 示例

假设我们有一个包含噪声的数据序列,使用 Savitzky-Golay 滤波器可以有效减少噪声,同时保留数据的主要特征。

import numpy as np
import pandas as pd
from scipy.signal import savgol_filter
import matplotlib.pyplot as plt

# 生成带有噪声的数据
np.random.seed(0)
x = np.linspace(0, 10, 1000)
y = np.sin(x) + np.random.normal(0, 0.1, x.shape)

# 创建 DataFrame
data = pd.DataFrame({'reward': y})

# 检查数据结构
print(data.head())

# 数据清洗 - 使用Savitzky-Golay滤波器去除噪声
window_length = 51  # 滤波窗口大小,必须为奇数
polyorder = 3       # 多项式阶数
filtered_reward = savgol_filter(data['reward'], window_length, polyorder)

# 将清洗后的数据添加回 DataFrame
data['filtered_reward'] = filtered_reward

# 绘制原始数据和清洗后的数据对比图
plt.figure(figsize=(10, 6))
plt.plot(data.index, data['reward'], label='Original Reward', alpha=0.5)
plt.plot(data.index, data['filtered_reward'], label='Filtered Reward', color='r')
plt.legend()
plt.title('Reward Before and After Filtering')
plt.xlabel('Index')
plt.ylabel('Reward')
plt.show()

在这段代码中,我们生成了一个带有噪声的正弦波数据,然后使用 Savitzky-Golay 滤波器对其进行平滑处理,并绘制了原始数据和清洗后的数据对比图。

2.1 代码解释

window_length = 51  # 滤波窗口大小,必须为奇数
polyorder = 3       # 多项式阶数
filtered_reward = savgol_filter(data['reward'], window_length, polyorder)

1 ) window_length = 51

  • 含义window_length 定义了滤波器的窗口大小,即每次滤波时要考虑的数据点的数量。
  • 要求:窗口大小必须是奇数。这是因为滤波器需要一个中心点,奇数窗口大小可以确保有一个明确的中心点。
  • 选择:窗口大小的选择取决于数据的特征。较大的窗口大小会使滤波效果更强,但可能会过度平滑数据,丢失一些细节;较小的窗口大小则相反。通常,窗口大小的选择需要根据数据的具体情况进行调整。

2 ) polyorder = 3

  • 含义polyorder 定义了在窗口内使用的多项式的阶数。
  • 选择:多项式阶数的选择也取决于数据的特征。较低的阶数(如1或2)适用于数据变化较为平缓的情况,而较高的阶数(如3或4)适用于数据变化较为剧烈的情况。
  • 限制polyorder 必须小于 window_length

3 ) filtered_reward = savgol_filter(data['reward'], window_length, polyorder)

  • 函数savgol_filterscipy.signal 模块中的一个函数,用于应用 Savitzky-Golay 滤波器。
  • 参数
    • data['reward']:要滤波的数据序列,这里是从 DataFrame 中提取的奖励值。
    • window_length:滤波窗口大小,前面定义为51。
    • polyorder:多项式阶数,前面定义为3。
  • 返回值filtered_reward 是经过滤波处理后的数据序列。

2.2 结果展示

在这里插入图片描述

标签:滤波器,Savitzky,19,Golay,polyorder,length,window,reward,data
From: https://blog.csdn.net/u014217137/article/details/143818822

相关文章

  • (附论文)小程序基于SSM的宿舍管理系统(119)
    获取源码请滑到最底部访问官网项目配套调试视频和相对应的软件安装包1、项目描述本宿舍管理系统小程序有管理员和学生两个角色。管理员功能有个人中心,公告信息管理,班级管理,学生管理,宿舍信息管理,宿舍安排管理,离宿申请管理,宿舍评分管理,晚归登记管理,报修信息管理,报修处理管理,系......
  • 【SSM框架-毕业程序设计】-196-基于ssm驾校预约管理系统
    系列文章【SSM框架-毕业程序设计】196-基于ssm驾校预约管理系统文章目录系列文章【SSM框架-毕业程序设计】一、项目描述二、运行环境三、项目技术四、主要功能五、项目截图六、获取源码一、项目描述驾校预约管理系统是基于java编程语言,ssm框架,mysql数据库开发,本......
  • [Tricks-00003]CF1989F 套路叠加,高级分治
    先说一个简单问题:给定一个\(n\timesm\)的黑白网格图,每次可以将一行或者一列染成同一种色,判断是否能到达?经典做法:倒过来考虑,每次将颜色全相同或为*的一行全染成*,判断是否可以将这张图染成全*。经典网格图转二分图,如果\(s_{i,j}='W'\)则将\(i\)向\(j'\)连一条有向边,否......
  • CF1909F1 Small Permutation Problem (Easy Version) 题解
    CF1909F1SmallPermutationProblem(EasyVersion)题解直接莽做显然不好统计。考虑统计每一次\(i\)的变化有多少种方案数来匹配,也就是对\(a\)数组差分。考虑到对于\(a_i\),只有\([1,i]\)里的数会对\(a_i\)有影响。注意到\(p\)形成一个排列,于是我们不妨考虑此时\(p......
  • [USACO19DEC] Moortal Cowmbat G
    前言很可惜,离场切不远多练练\(\rm{dp}\)吧算法简化题意给定一长为\(n\)的字符串\(S\),由前\(m\)个小写字母构成,现在要求将这个字符串变换成一个由至少连续\(k\)个相同字符构成的字符串组成的字符串(下称为合法字符串),其中,字符\(a\tob\)的花费为\(......
  • [题解]P5687 [CSP-S2019 江西] 网格图
    P5687[CSP-S2019江西]网格图简单来说题目就是给定一个\(n\timesm\)的网格图,同行边权相同,同列边权相同,求该网格图的最小生成树。根据Kruskal算法的贪心思想,我们要优先选择权值尽可能小的行,并将这条边应用于尽可能多的列。列方向同理。为了保证最终生成树的连通性,我们显然要......
  • 19.选课系统之ORM查询操作
    1.asnyc和await实现异步查询所有2.asnyc和await实现异步条件查询_filter3.asnyc和await实现异步条件查询确定结果只有一个可以用_get4.asnyc和await实现异步条件查询确定结果_模糊查询5.asnyc和await实现异步条件查询确定结果_values查询6.查询的对象做响应Ⅰ6.查询的对象做......
  • 物理学基础精解【195】
    文章目录物理数学微分方程的解微分方程解的分类微分方程解的形式1.**常微分方程的解**2.**偏微分方程的解**特例:经典微分方程的解1.**一阶常微分方程**2.**二阶常微分方程**3.**热传导方程**4.**波动方程**总结积分曲线积分曲线的定义积分曲线的求法1.**一阶微......
  • asp.net程序设计1946婚庆策划网站的设计与实现(源码)婚礼策划网站
    项目包含:源码、讲解视频、说明文档,部署录像请查看博主个人简介开发环境开发工具:VisualStudio2010或以上版本数据库:SQLServer2005或以上版本开发语言:c#操作系统:windows7或以上浏览器:GoogleChrome(推荐)、Edge、360浏览器系统用户分为:管理员、普通用户界面设计......
  • [RoarCTF 2019]Easy Java 1
    [RoarCTF2019]EasyJava1打开实例发现登录框,尝试万能密码admin'or1=1#后无果注意到登录框下有个help,点击发现文件读取显示文件notfound,文件未找到,怀疑是请求方法问题,尝试POST请求发现能成功下载,确定这道题为任意文件下载打开help.docx,显示看来文件不在这里,根据题目......