淺談動平均濾波器(作者:黃俊傑) | Moving average filter

動平均濾波器(moving average filter) 可說是世界上使用最廣泛的一種濾波器了; 在股市裡面,每天都可以看到動平均濾波器的應用,股價趨勢圖裡面的週線、月線與年線, ...程式人雜誌--2013年12月號(開放公益出版品)淺談動平均濾波器(作者:黃俊傑)淺談動平均濾波器(作者:黃俊傑)簡介動平均濾波器(movingaveragefilter)可說是世界上使用最廣泛的一種濾波器了;在股市裡面,每天都可以看到動平均濾波器的應用,股價趨勢圖裡面的週線、月線與年線,都是長度不等的動平均輸出圖形。

我們在實作訊號處理的時候,也很常應用這個簡單又有效率的動平均濾波器。

由於它應用廣泛,許多程式設計師也許沒有修過數位訊號處理的課程,不熟悉數位訊號處理分析方式,但是又需要寫這樣的程式。

因此,在這一篇文章中,筆者將會儘量以實例來介紹動平均濾波器的概念,幾種不同的實作方式以及優缺點。

最直觀的動平均濾波器,當屬於simplemovingaverage(SMA)了,也是應用在股市以及很多統計上面的動平均。

SMA的定義就是取目前輸入之前的N個取樣的非權重平均。

用數學式表示的話,就是或是在訊號處理上我們慣用以下的時域表示式其中,y(n)代表目前輸出值,而x(n)代表目前輸入值。

這個濾波器應用在股市裡,就是我們在股票市場裡常常看到的曲線圖,如週線、月線與年線,分別是N=7,N=30,N=365的每日收盤價格的動平均輸出圖形。

使用濾波器來形塑(shape)你的資料的目的,通常都是為了要讓資料的重點能夠呈現出來,比方說,股市的波動常常有一個快速變動的部份,與慢速變動的部份,而所謂的慢速變動的部份,我們認為那是長期的趨勢,是我們想要觀察的重點,所以將濾波器應用在每日收盤價格上,將「快速變動的部份濾掉」,保留慢速變動的部份,就成了週線、月線與年線了。

以數位訊號處理理論來說,那些慢速變動就是指低頻的部份,快速變動的部份就是高頻的部份,因此以數位訊號處理的術語來說,動平均濾波器就是一個低通濾波器(lowpassfilter),意思就是低頻能夠通過的濾波器,而高頻的部份就被過濾掉了。

又比方心跳表顯示每分鐘心跳率是用一個數值,而我們知道心跳每幾秒鐘記錄一次的話,一分鐘裡面會有上上下下的變化,不是一直維持在某一個數值,每分鐘心跳率就是一分鐘裡面心跳的平均數值,以方便我們在心跳表上顯示出來,但是以每分鐘的平均數值顯示出來的時候,如果你沒有很大的運動變化,每分鐘心跳率是維持在一個定值的。

常用動平均濾波器在本節中,我們會介紹四種常見的動平均濾波器,前兩種動平均濾波器直接實作了上一節所描述的SMA動平均濾波器,這兩種只有小部分的差異。

而第三種是SMA的變形,引進了回授的概念來簡化實作的複雜度,因此前三種廣義上都是SMA動平均濾波器的實作。

第四種我們要介紹的是指數平均濾波器,與前三種不太一樣,但是有著實作簡單的好處。

在定點訊號處理裡,我們有兩種直接實作SMA的方法,第一種就如上一節中方程式2描述的式子,先做加總,再除以N來得到結果。

我們以N=4為例子說明這個濾波器,其方程式會是:假設我們觀察的是餐廳每半小時的顧客人數,如表1中的「輸入」欄位所示,「輸出」欄位所示的就是這個N=4的動平均濾波器的輸出序列,計算方式就是依照方程式3,以x(n)為目前輸入,y(n)為目前輸出值,以輸入為20那一欄為例,這時候表1:餐廳每半小時顧客人數以及其動平均值輸出0.000.000.000.002.507.5015.0023.7526.2523.7517.508.753.751.250.00圖1:N=4的動平均輸出入關係圖圖1則是把這個輸出入關係繪製成圖形表示,我們可以看出來,當輸入發生變化的時候,輸出值會以延遲而且比較平緩的趨勢呈現,延遲是因為動平均濾波器是計算前N個輸入,而比較平緩的趨勢就是動平均濾波器對這個輸入值重塑後的結果。

觀察方程式3可以發現,有兩個輸入數列特別有趣,分別是+1,-1,+1,-1,+1,-1,...這種正負交互出現而且絕對值是一樣的數列。

把這個數列輸入到上述的方程式,我們會得到全為零的輸出。

另一個有趣的數入數列是0,+1,0,-1,0,+1,0,-1,...也就是將上一個數列任兩個數值間都插入一個零值。

於是這個數列就變成任意相鄰四個數字加總起來為零,使得輸出值皆為零的數列。

觀察這個兩個數列,第一個數列週期為2,第二個數列週期為4。

而第一


常見投資理財問答


延伸文章資訊