Savitzky-Golay 濾波器

原文地址:http://blog.csdn.net/liyuanbhu/article/details/9094945


分類: 數據結構與算法 數字信號處理
3314人閱讀 評論(0) 收藏 舉報

Savitzky-Golay濾波器(通常簡稱爲S-G濾波器)最初由SavitzkyGolay1964年提出,發表於Analytical Chemistry 雜誌。之後被廣泛地運用於數據流平滑除噪,是一種在時域內基於局域多項式最小二乘法擬合的濾波方法。這種濾波器最大的特點在於在濾除噪聲的同時可以確保信號的形狀、寬度不變。

信號的最小二乘平滑

信號的最小二乘平滑的基本思想可以通過圖1來說明。


圖 1 信號的最小二乘平滑的示例

一列數據x[n] 在圖中用實心的圓點來表示。考慮一組以n=0爲中心的2M+1個數據。我們可以用如下的多項式來擬合它。

所以我們只需要獲得擬合多項式的常數項。SavitzkyGolay 發現計算a0相當於對原始數據進行一次FIR 濾波。也就是說可以利用卷積運算來實現。

也可以說是對輸入數據進行了加權平均。圖1表示的就是加權係數。下面就來說說如何獲得a0

由基本的微積分知識可知,若要ε最小,ε對各個參數的偏導數都應爲0,也就是:




我們引入一個(2M+1)行(N+1)列的輔助矩陣A


載設一個輔助矩陣B,使得:

的第一行行向量就是我們要求的卷積係數。從上面的推導可知,是與x無關的,只由NM來決定。比如N=4M=5時。用下面的Maxima 代碼可以獲得ABH


可以看到,用Maxima來計算SG 濾波器的係數是非常方便的。還有另外一種方法只計算的第一行,其基本思想如下。首先選取一個特殊的x=x’,利用 可以算出a’,這一步就是普通的多項式擬合,各種數學軟件都能計算,不需要從矩陣開始構造。然後用a來計算H的第一行。具體的說就是取x’ 爲單位衝擊序列。

*號部分是我們無法確定,這一部分我們也不需要確定。我們再將的表達式寫出來。


下面仍然以N=4M=5爲例,給出Matlab 代碼:

  1. x=[zeros(1,5),1,zeros(1,5)]  
  2. a=polyfit([-5:5],x,4)  
  3. polyval(a,[-5:5])  

當然,利用Maxima 同樣可以計算,下面給出代碼:

至此,SG Filter 的構造問題就解決了,關於SG濾波器的性質,等我有空時再寫一篇博客詳細介紹。


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