分類: 數據結構與算法 數字信號處理 2013-06-14 15:17 3314人閱讀 評論(0) 收藏 舉報
Savitzky-Golay濾波器(通常簡稱爲S-G濾波器)最初由Savitzky和Golay於1964年提出,發表於Analytical Chemistry 雜誌。之後被廣泛地運用於數據流平滑除噪,是一種在時域內基於局域多項式最小二乘法擬合的濾波方法。這種濾波器最大的特點在於在濾除噪聲的同時可以確保信號的形狀、寬度不變。
信號的最小二乘平滑
信號的最小二乘平滑的基本思想可以通過圖1來說明。
圖 1 信號的最小二乘平滑的示例
一列數據x[n] 在圖中用實心的圓點來表示。考慮一組以n=0爲中心的2M+1個數據。我們可以用如下的多項式來擬合它。
所以我們只需要獲得擬合多項式的常數項。Savitzky和Golay 發現計算a0相當於對原始數據進行一次FIR 濾波。也就是說可以利用卷積運算來實現。
也可以說是對輸入數據進行了加權平均。圖1中x 表示的就是加權係數。下面就來說說如何獲得a0。
由基本的微積分知識可知,若要ε最小,ε對各個參數的偏導數都應爲0,也就是:
我們引入一個(2M+1)行(N+1)列的輔助矩陣A。
載設一個輔助矩陣B,使得:
H 的第一行行向量就是我們要求的卷積係數。從上面的推導可知,H 是與x無關的,只由N和M來決定。比如N=4,M=5時。用下面的Maxima 代碼可以獲得A,B和H。
可以看到,用Maxima來計算SG 濾波器的係數是非常方便的。還有另外一種方法只計算H 的第一行,其基本思想如下。首先選取一個特殊的x=x’,利用 x 可以算出a’,這一步就是普通的多項式擬合,各種數學軟件都能計算,不需要從矩陣A 開始構造。然後用a’來計算H的第一行。具體的說就是取x’ 爲單位衝擊序列。
*號部分是我們無法確定,這一部分我們也不需要確定。我們再將H 的表達式寫出來。
下面仍然以N=4,M=5爲例,給出Matlab 代碼:
- x=[zeros(1,5),1,zeros(1,5)]
- a=polyfit([-5:5],x,4)
- polyval(a,[-5:5])
當然,利用Maxima 同樣可以計算,下面給出代碼:
至此,SG Filter 的構造問題就解決了,關於SG濾波器的性質,等我有空時再寫一篇博客詳細介紹。