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

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