本節將介紹在數位訊號處理常用到的濾波器(Filters),並簡單介紹其應用。一般人大概都聽過濾波器,但是對於相關的數學分析,可能都覺得很複雜,敬而遠之。本節將從應用面來著手,並說明相關的 MATLAB 指令,所以並不會牽涉到複雜的分析。簡單的說,一個濾波器可以用兩個向量 a 和 b 來代表,其中 a 的長度是 p,b 的長度是 q,而且 a 的第一個元素 a1 永遠是 1,如下:
a = [1, a2, ... ap] 當我們把具有參數 a 和 b 的濾波器應用到一段離散時間訊號 x[n],所得到的結果是 y[n],可以表示如下:
b = [b1, b2, ... bq]y[n] = b1x[n] + b2x[n-1] + ... + bqx[n-q+1] 這個式子看起來有點複雜,下面我們來看起個特例,就會比較清楚。
-a2y[n-1] - a3y[n-2] - ... - apx[n-p+1]首先,如果
a = [1] 那麼濾波器的輸出就是
b = [1/5, 1/5, 1/5, 1/5, 1/5]y[n] = (x[n] + x[n-1] + x[n-2] + x[n-3] + x[n-4])/5 這就是一個簡單的濾波器,換句話說,濾波器的輸出值,等於原訊號在過去五點的平均值,因此這個濾波器就有「低通」(Low Pass)的效果,換句話說,比較尖銳的訊號(高頻的部分),經過了五點求平均,會變的比較平滑,因此整個訊號的高頻部分會被壓低,而低頻部分則比較不受到影響,所以這一類濾波器就稱為「低通濾波器」(Low Pass Filter)。低通濾波器的效果,就好像用紙杯罩著嘴巴講話,只剩下低沈、模糊、悶悶的聲音。以下是一個範例:
在上述範例中,y = filter(b, a, x) 即是由原始訊號 x 及濾波器參數 a 和 b,來產生濾波器的輸出訊號 y。由上述範例圖形可以看出,在高頻的部分(尤其是氣音的部分),訊號震幅明顯降低,這就是低通濾波器的效果。我們也可以直接聽看看訊號的差異:我們在看另一組濾波器:
- 原訊號 x[n]:example/whatMovies.wav
- 濾波器輸出訊號 y[n]:example/lpf01.wav
a = [1] 那麼濾波器的輸出就是
b = [1, -1]y[n] = x[n] - x[n-1] 換句話說,濾波器的輸出值,等於原訊號目前的值減掉原訊號在前一個時間點的值,因此變化劇烈的訊號(即高頻訊號),其差異會被突顯出來,而變化不劇烈的訊號(即低頻訊號),其差異會被壓抑,所以這一類的濾波器就稱為「高通濾波器」(High Pass Filter),請見下列範例:
由上述範例圖形可以看出,在高頻的部分(尤其是氣音的部分),訊號震幅相對明顯變大,這就是高通濾波器的效果。我們也可以直接聽看看訊號的差異:經過了高通濾波器之後,訊號聽起來的感覺,好像就是小型收音機(沒有重低音喇叭)的播放效果,比較尖銳刺耳。
- 原訊號 x[n]:example/whatMovies.wav
- 濾波器輸出訊號 y[n]:example/hpf01.wav
除了高通和低通濾波器外,濾波器也可以產生各種不同的音效,例如
a = [1] 那麼濾波器的輸出就是
b = [1, 0, 0, 0, ..., 0, 0.8] (中間夾雜了3199個零)y[n] = x[n] + 0.8*x[n-3200] 換句話說,這個濾波器的功能就是「單次迴音器」,會產生一次迴音,若取樣頻率 fs = 16kHz,則迴音和原音的時間差是 3200/fs = 3200/16000 = 0.2 秒。請見下列範例:
在上述範例中,gain = 0.8 代表迴音的衰減比值,而 delay = 0.2 則是迴音的時間差。我們可以聽看看原訊號和濾波器輸出的差異:上述濾波器只能產生一個迴音,比較不像一般多重迴音。若要產生多重迴音,可用下列濾波器:
- 原訊號 x[n]:example/whatMovies.wav
- 濾波器輸出訊號 y[n]:example/echo01.wav
a = [1, 0, 0, 0, ..., 0, -0.8] (中間夾雜了3199個零) 那麼濾波器的輸出就是
b = [1]y[n] = x[n] + 0.8*y[n-3200] 這個濾波器的功能就是「多重迴音器」,會產生多重迴音,若取樣頻率 fs = 16kHz,則迴音之間的時間差是 3200/fs = 3200/16000 = 0.2 秒。請見下列範例:
我們可以聽看看原訊號和濾波器輸出的差異:
- 原訊號 x[n]:example/whatMovies.wav
- 濾波器輸出訊號 y[n]:example/echo02.wav(是否有「魔音傳腦」的感覺?)
Audio Signal Processing and Recognition (音訊處理與辨識)