python:savgol_filter的简单使用

引入

在做数字信号处理时,有时采集到的信号有较大的噪声,比如下图。因此想要尽量将信号平滑化,而且信号的形状保持不变。
在这里插入图片描述

savgol_filter简介

什么是savgol_filter

  • Savitzky-Golay滤波器最初由Savitzky和Golay于1964年提出。广泛地运用于数据流平滑除噪,是一种在时域内基于局域多项式最小二乘法拟合的滤波方法。这种滤波器最大的特点在于在滤除噪声的同时可以确保信号的形状、宽度不变。
  • 它对信号的操作是在时域内对window_lwngth内的数据进行多项式拟合。而从频域上看,这种拟合实际就是通过了低频数据,而滤掉了高频数据。
  • 这种滤波其实是一种移动窗口的加权平均算法,但是其加权系数不是简单的常数窗口,而是通过在滑动窗口内对给定高阶多项式的最小二乘拟合得出。

怎么使用

简单使用:
scipy.signal.savgol_filter(x, window_length, polyorder)

  • x为要滤波的信号
  • window_length即窗口长度
    取值为奇数且不能超过len(x)。它越大,则平滑效果越明显;越小,则更贴近原始曲线。
  • polyorder为多项式拟合的阶数。
    它越小,则平滑效果越明显;越大,则更贴近原始曲线。

完整接口:官方文档

实例

对上面的数据用savgol_filter进行滤波,从而平滑化。结果如下。其中w指window_length,k指polyorder

  • w=41,k=2的平滑效果最明显。即window_length越大,polyorder越小,则平滑效果越强
  • w=21,k=4最接近原曲线。即window_length越小,polyorder越大,则结果越接近原始曲线。
    在这里插入图片描述

参考

链接1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章