引入
在做數字信號處理時,有時採集到的信號有較大的噪聲,比如下圖。因此想要儘量將信號平滑化,而且信號的形狀保持不變。
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越大,則結果越接近原始曲線。