3.2 Filter

本模組提供數種常見之濾波器,以濾除訊號中特定的資料內容。

  1. FIR Filter:基本的有限脈衝響應濾波器(Finite Impulse Response Filter)。

  2. Median Filter:對抑制脈衝雜訊效果顯著的中位數濾波器。

  3. Moving Average Filter:移動平均濾波器可消除隨機產生之雜訊。

  4. Iterative Gaussian Filter:此元件目的在於濾除訊號非週期之部份。

  5. Trend Estimater:為Iterative GaussianFilter之簡化版,可抓取非週期訊號。

3.2.1 FIR Filter

有限脈衝響應 (Finite Impulse Response) 濾波器,是訊號處理中基本 (Basis) 濾波器原型,可針對高頻、低頻或指定的頻段濾波。有限 (Finite) 是指此濾波器對於訊號的反應時間是有限的。

說明

假設有一訊號,為如下圖形:

傅立葉轉換後圖型如下,在此希望將其高頻部份濾除,只保留低頻部份:

(黑細線為原本訊號的傅立葉轉換,紅粗線為希望保留與濾除的頻率分界)

因此,在傅立葉空間定義出上述紅線的函數,並將此函數與原本訊號的傅立葉轉換相乘:

再做傅立葉逆轉換,就可得到濾除高頻部份的圖型 :

以上是為低通濾波器,若為高通則為:

帶通(BandPass):

反帶通(BandStop)

ByPass則為全通。

參數設定(Properties)

本模組接受實數(real number),單通道(single channel)或多通道(multi-channel),regular的訊號(signal)或聲音訊號(audio)輸入;輸出訊號格式與輸入訊號相同。

FIR Filter 的主要參數為FilterType,預設包括 LowPass、HighPass、BandPass、BandStop、ByPass 等五種型態。LowPass 表示過濾掉頻率 F1 以上的訊號,HighPass 則過濾頻率 F1 以下的訊號。BandPass 代表保留頻段 F1 至 F2 間的訊號,BandStop 則是濾掉頻段 F1 至 F2 間的訊號。ByPass 則為所有頻率皆可通 (即為原輸入訊號)。各參數定義與預設值如下表:

參數名稱

參數定義

預設值

FilterType

預設五種形態,包括 LowPass、HighPass、BandPass、BandStop、ByPass。

LowPass

F1

對於 LowPass 以及 HighPass 而言,F1 代表濾波器過濾頻段的分界點;對於 BandPass、BandStop,F1 代表濾波器過濾頻段的起始點,單位為 Hz。

10

NormalizedF1

顯示以輸入訊號之 Sampling frequency 為依據,正規化後的F1值。

應輸入訊號不同而異。

F2

對於 FilterType 選擇 BandPass 與 BandStop 者,會出現濾波器過濾頻段不終點 F2,單位為 Hz。

50

FilterOrder

濾波器轉換函數的離散點,N即為 N-order Filter。

範例(Example)

本範例將示範以三個頻率各為 10、51、193Hz 的 Sine Wave 加上振幅 0.1 的 WhiteNoise 當作輸入訊號,再用 FIR Filter 過濾不同頻率的訊號,步驟如下:

  1. Network 視窗下選擇 Source / Noise 產生一個白色雜訊,設定 Properties / Amplitude 為 0.3,再用 Source / Sine Wave 產生三個 Sine Wave,並改變其 Properties / SignalFreq 為 10、51、193Hz,最後以 Compute / Channel / Mixer將上述訊號混合(將各訊號源之Output 拉至 Mixer 的 Input),用 Viewer / Channel Viewer 繪出。

可以將 Mixer 的結果接上 Compute / Transform / Fourier Transform, 以觀察頻譜圖,以方便接下來的 FIR Filter 設計

  1. 於 Mixer 圖示選擇 Compute / Filter / FIR Filter,調整 Properties / F1 為 25Hz,FilterType 預設為 LowPass,用 Channel Viewer 顯示濾波結果。觀察結果,輸入訊號在頻率 25Hz 以上的部份皆被濾除,輸出訊號類似 10Hz 的 Sine Wave,不過因 FilterOrder 僅101,所以波形有所影響。

  1. 重覆步驟 2 新增一 FIR Filter,調整參數FilterType 等於 HighPass,F1 改為 100Hz,FilterOrder 為 500,結果如下圖所示,濾波器過濾掉頻率 100Hz 以下之訊號,結果為頻率 193Hz 的 Sine Wave加上 White Noise。

  1. 再重覆步驟 2 新增一 FIR Filter,調整參數 FilterType 為 BandPass,F1 改為 25Hz,再設定頻率下限 F2 為 100Hz,FilterOrder 設為 500,在頻段 25~100Hz 的訊號會通過,其它訊號則被濾掉,所以結果為 51Hz 的 Sine Wave。

相關指令

Noise、Sine、Mixer。

參考:

1.http://en.wikipedia.org/wiki/Finite_impulse_response

2.http://cnx.org/content/m11918/latest/

3.2.2 Median Filter

Median Filter 是一維的非線性濾波器,計算濾波範圍 (filter order) 內訊號之中位數作輸出結果,對於抑制脈衝雜訊 (Speckle noise) 效果顯著,同時能保持訊號波形邊緣的可辨度 (edge detection)。

說明

代表長度為 N 之輸入訊號,為濾波後的訊號,M 為作濾波計算時所取的訊號長度,則 Median filter 定義為:

上式表示,在第 i 個位置為中心,前後分別取個點成為一組數列,再找出該數列的中位數以取代訊號第 i 個位置的值;若點數不足時(如,或在),則將範圍內最邊界點的值複製,用以填補至足夠的點為址。程式預設 M 為奇數,若輸入為偶數,則自動將個數加一,以使成為為奇數。

參數設定(Properties)

本模組接受實數(real number),單通道(single channel)或多通道(multi-channel),regular的訊號(signal)或聲音訊號(audio)輸入;輸出訊號格式與輸入訊號相同。

參數名稱

參數定義

預設值

FilterOrder

作Median filter 所選取的數列長度,即為 M,設定為奇數,如輸入偶數,則程式自動加1變為奇數。

101

範例(Example)

本範例(Example)將示範以一個方波加上 Speckle Noise 當作輸入訊號,再用 Median filter 濾波的過程,步驟如下:

  1. 於 Network 視窗下按右鍵,選擇 Source / Noise 產生一個雜訊,設定 Properties / NoiseType 為 Speckle,Probability 設為 0.25,另外選擇 Source / SquareWave 產生一方波,以 Compute / Channel / Mixer 將兩訊號混合,用 Viewer / Channel Viewer 顯示於視窗。

  1. 另點選 Mixer 圖示選擇 Compute / Filter / Median Filter,調整Properties / FilterOrder 為 5,再用 Viewer / ChannelViewer 顯示濾波結果。

  1. 步驟 2 已可得到不錯的濾波效果,如再調整 Median Filter 的參數 FilterOrder 為 21,結果如下圖所示,FilterOrder 增加了約 4 倍,不但 speckle noise 已經完全濾掉,而且在波形邊緣仍維持良好的陡峭度。

  1. 最後回到 Noise 圖示,將 NoiseType 由 Speckle noise 改為 White noise 藉此測試 Median filter 的特性,結果如下,可觀察到 Median filter 無法完全過濾 White noise 造成的影響,但波型邊緣仍大部份維持著,此即為 Median filter 的主要功用。

相關指令

Noise、Square、Mixer、Moving AverageFilter。

參考

http://en.wikipedia.org/wiki/Median_filter

3.2.3 Moving Average Filter

Moving Average Filter 是藉由對濾波範圍內訊號取平均值,目的為降低離散時間訊號中的雜訊,增加峰值的可辨度。其特點為理論簡單,計算快速。

說明

代表長度為 N 之輸入訊號,為濾波結果,若濾波範圍為 (Average Length)為 M 個訊號,則其輸出為:

上式的意義為:總面積為1,時間軸上長度為 M 的長方形濾波器對輸入訊號做折積(convolution)。

參數設定(Properties)

本模組接受實數(real number),單通道(single channel)或多通道(multi-channel),regular的訊號(signal)或聲音訊號(audio)輸入;輸出訊號格式與輸入訊號相同。

Moving Average Filter 包括兩個參數:FilterType 與 AverageLength,AverageLength 代表求平均所取的訊號個數 M,單位為時間。FilterType 為設定濾波器高、低頻段的過濾,內有三個選項分別為 LowPass、HighPass 及 ByPass,LowPass 即為執行上述理論的計算值;HighPass 則為輸入訊號減去 LowPass 之計算結果;而 ByPass 的輸出,即等於輸入訊號(因為 HighPass + LowPass = 原訊號),參數預設值詳見下表。

參數名稱

參數定義

預設值

FilterType

為設定濾波器對訊號高、低頻段的過濾,選項為 LowPass、HighPass 及 ByPass。

LowPass

AverageLength

作平均所設定的訊號長度,單位為時間。

0.05

AverageCount

顯示 AverageLength 所對應的訊號個數。

依 AverageLength 而自動調整。

範例(Example)

本例將混合一個頻率為 2Hz、振幅為 1、長度 2 秒的方波與一個振幅為 0.5,長度為 2秒的 White Noise,以 Moving Average Filter 濾波,並設定不同的 AerageLength 觀察對原訊號所造成的影響。

  1. 按右鍵選用 Source / Square Wave 創造方波,改變 Properties / TimeLength 欄位為 2,SignalFreq 欄位改為 2。接著再按右鍵點選 Source / Noise/White Noise 創造 White Noise,TimeLength設為 2,Amplitude 設為 0.5。最後按右鍵選 Compute / Channel / Mixer 將兩訊號相加,再用 Viewer 繪出。

  1. 於 Mixer 按右鍵選擇 Compute / Filter / Moving Average,對輸入訊號作 Moving Average,可於 Properties / AverageLength 欄位看到預設值等於 0.1s,AverageCount 欄位顯示共 101 個資料,代表 MA 輸出的每一點為其輸入訊號前後共 101 個資料點的平均,FilterType / LowPass 表示輸出為 Moving Average 的計算值,最後用 Viewer / Channel Viewer 將結果繪出。

  1. 按照步驟 2 對 Mixer 再做一次 Moving Average,產生名為 MA2 圖示,但改變其 AverageLength 為 0.2,並將結果用 Viewer 繪出。

  1. 比較步驟 1、2、3 的結果,可發現調高 Average Length 可明顯降低輸入訊號的雜訊,但是此濾波器之缺點為:原始方波訊號陡峭的邊界隨著 Average Length 提高而變的越來越平緩。

  2. 再對 Mixer 做 Moving Average,將 FilterType 修改為 HighPass,可看到結果等於輸入訊號減去 MA2 的輸出訊號。

相關指令

Square,Noise,Mixer。

參考

http://www.dspguide.com/ch15.htm

3.2.4 Iterative Gaussian Filter

各種訊號大部分可視為一周期性訊號加上非週期性訊號。透過 Iterative Gaussian Filter (Smoothing) 得到其周期性部分或非周期性部分的訊號。

產生一個 Sine 波 (Sine wave),經由 Fourier Transform 會產生如下圖所示的一個單一峰值的頻譜。由此可知 Sine 波的頻率為 3Hz。

但如下圖所示的訊號 ( Sine + Exponential term);其頻率或週期為何 ? 將此訊號透過Fourier Transform 則得到如下圖所示的頻譜:訊號多分佈在低頻處,它掩蓋了Sine 波的頻率特徵而不是我們希望得到的答案 ( 3Hz )。為解決此問題,我們可把此訊號拆成一個 Sine 波加上一個指數函數;換言之我們希望把一個訊號拆解成一個周期性訊號 ( periodic signal ) 加上一個非周期性訊號 ( non-periodic signal )。如此對此訊號我們希望同時回答兩件事:(1) 訊號的周期性部分為何?或其頻譜為何?(2)其趨勢( trend ) 為何?

說明

但訊號也可能是因為量測時間不夠長(小於一個周期),使得此訊號看起來含有非周期性訊號。那訊號的趨勢究竟為何?我們可以平均的概念描述之。對訊號 每一點而言,其高斯平均 ( Guassian Average ):

此數學式說明 點的值乃由其鄰近的點的平均值來代表,離 j 點愈遠其權重愈小。 所組成的新訊號較平滑,也就是其高頻部分被平滑化後消失了。再將做高斯平均,疊代(反覆此步骤)若干次後得到的 ,( m 為疊代次數 ) 的總和即為周期性訊號趨勢訊號。原訊號減去周期性訊號即為其較低頻的趨勢訊號。數學上可證明 Gaussian Filter 相當於如下圖的濾波器。

以趨勢訊號(low pass filter) 為例,會將小於的部分完全通過,而濾除(絕大部分)大於而中間的部分則為高斯分佈。疊代次數 m 與參數可由以及 b ( Attenuation Factor ) 求得。b 為很小的值,較常用的值為 0.01 或 0.001,可選定為 2 至 10。

參數設定(Properties)

本模組接受實數(real number),單通道(single channel)或多通道(multi-channel),regular的訊號(signal)或聲音訊號(audio)輸入;輸出訊號格式與輸入訊號相同。各參數定義如下。

參數名稱

參數定義

預設值

Filter Type

此 Iterative Gaussian Filter 的濾波形式

LowPass:低頻部分可通過,濾除高頻。

HighPass:低頻部分可通過,濾除高頻。

ByPass:無任何頻段訊號被濾除。

LowPass

Attenuation

濾波中 Gaussian 曲線的參數值

0.01

FH

過濾頻段中的較高值。

10

FL

過濾頻段中的較低值。

2

範例(Example)

範例為將一個形式的訊號(即如一開始圖型的訊號),以 Iterative Gaussian Filter 濾除掉部份。

  1. 建立一個 Sine Wave,設定時間長度為 10秒,頻率為 3 Hz;再建立一個 Custom Wave,在 expression 內輸入 exp ( t / 3.2 ),同樣時間長度設為 10 秒。之後將此兩訊號以 Mixer 混合,並接上Channel Viewer 繪製圖形。

(可將此訊號接上傅立葉轉換以觀察其特性)

  1. 之後由 Mixer 處,連結上 Iterative Gaussian Filter,並設定 Filter Type 為 HighPass、FH 為 0.5,FL 為 0.1 (因為已知 Sine 的頻率為 3Hz,是故只要設定 FH 為一低於3 Hz ,以讓 Sine Wave 通過)。

  1. 濾除後結果接上 Channel Viewer,可發現結果還算接近原本的 Sine Wave。而在訊號尾端,濾除結果與原本 Sine 訊號有差異,是濾除不夠乾淨,而需調整參數以獲得更佳結果。

(細黑線 : 為原本的Sine;粗紅線 : 為經濾波後還原的結果。)

  1. 可將 Iterative Gaussian Filter 裡的 FH 設為 2.5、L 設為 0.01,再重新計算一次。在此可發現濾波效果更佳、更接近原本的 Sine。

相關指令

Trend Estimater,CustomWave,Fourier Transform。

參考

1. Yih Nen Jeng, "Diffusive and Fast Filter Using Iterative Gaussian Smoothing", Department of Aeronautics and Astronautics, National Cheng Kung University

2.http://www.ancad.com/blog/AnCADSupport/wp-content/uploads/2008/05/it-gauss-2008-7.pdf

3.2.5 Trend Estimater

Trend Estimater 是 Iterative Gaussian Filter 的簡易參數版,詳細可參閱 Iterative Gaussian Filter。在對訊號特性掌握較不完全時,無需詳細設定,即可用 Trend Estimater 算出其趨勢。

說明

演算法請參閱 Iterative Gaussian Filter 章節。

參數設定(Properties)

本模組接受實數(real number),單通道(single channel)或多通道(multi-channel),regular的訊號(signal)或聲音訊號(audio)輸入;輸出訊號格式與輸入訊號相同。各參數定義如下。

參數名稱

參數定義

預設值

Filter Type

與 Iterative Gaussian Filter 的相同。

LowPass:( 低通 ) 萃取出低頻部分。

HighPass:( 高通 ) 萃取出高頻部分。

ByPass:無任何頻段訊號被濾除。

LowPass

Trend Basis

以 ( Period ) 周期為參考設定參數或 ( Frequency ) 頻率為參考設定參數

Frequency

若是Trend Basis 設定為 Period,其參數定義如下表。

參數名稱

參數定義

預設值

Trend Period

週期高於此值者,則視為趨勢訊號。與 Iterative Gaussian Filter 對應則為:

FL ( = 2 /TrendPeriod)

FH ( = 4 / TrendPeriod)

0

Time Unit

設定 TrendPeriod 的單位。

Default

Default Time Unit

輸入訊號的原始時間單位。

sec

若是Trend Basis 設定為 Frequency,其參數定義如下表。

參數名稱

參數定義

預設值

Trend Frequency

頻率低於此值者,則視為趨勢訊號。與 Iterative Gaussian Filter 對應則為:

FL ( = 2 * TrendFrequency)

FH ( = 4 * TrendFrequency)

0

Frequency Unit

設定 TrendFrequency 的單位。

Default

Default Frequency Unit

輸入訊號經傅立葉轉換後的原始單位。

Hz

範例(Example)

  1. 先從 Yahoo Finance : Yahoo Finance Link 下載一筆 2330.TW ( 台積電 ) 2005-01-01 到 2010-03-17 的開盤價,另存 CSV 檔案,由於星期六、日或假期沒有開盤,所以暫且不將日期資料加入,利用 Text Importer 開啟檔案,Data Range / Specify Time Column 為 Unchecked和 Columns: 2 to end,Date Axis / Auto 為 Unchecked,Time Coordinate / Time Unit 為 day 以及 Sampling Frequency 為 1,讓讀取進來訊號屬於 regular,時間單位為day。最後連接至 Viewer / Channel Viewer 顯示。

  1. 將訊號源接上 Trend Estimater,其中參數皆為預設值,最後將結果接至同一個 Channel Viewer 顯示其結果,黑線為原始股價變化,藍線為股價趨勢。

  1. 最後要將日期資訊取代現有的時間軸,將 regular 訊號轉成 Indexed 訊號,利用 Text Importer 再開啟 CSV 檔案,Data Range / Specify Time Column 為 Checked,和 Columns: 2 to end,讀取進來訊號屬於 Indexed,時間單位為 day。

    最後將 Trend 運算結果連接 Conversion / Convert to Indexed,接下來將剛才讀取進來的 Source (2330.TW2) 也連接至 Convert to Indexed,最後將 Convert to Indexed 連至 Viewer / Channel Viewer 展示,可以看見有日期的資訊出現在 X 軸,並可以根據當時發生的事件去推斷股價趨勢變化。

也利用 Trend Estimater 可以幫助找出地層下陷、大氣溫度、股票等訊號的長時間趨勢。

相關指令

Iterative Gaussian Filter。

參考

1.Diffusive and Fast Filter Using Iterative Gaussian Smoothing, Yih Nen Jeng, Department of Aeronautics and Astronautics, National Cheng Kung University

2.http://www.ancad.com/blog/AnCADSupport/wp-connent/uploads/2008/05/it-gauss-2008-7.pdf