我們可以使用 butter 指令來設計一個 Butterworth 濾波器,範例如下:
- fs=8000; % Sampling rate
- filterOrder=5; % Order of filter
- cutOffFreq=1000; % Cutoff frequency
- [b, a]=butter(filterOrder, cutOffFreq/(fs/2), 'low');
- % === Plot frequency response
- [h, w]=freqz(b, a);
- plot(w/pi*fs/2, abs(h), '.-'); title('Magnitude frequency response');
- grid on
在上述範例中,我們使用 butter 指令來設計一個 Butterworth 低通濾波器,其格式如下:
[b, a] = butter(order, Wn, function)
對於輸入參數,我們可以說明如下:
order 是濾波器的階數,階數越大,濾波效果越好,但是計算量也會跟著變大。所產生的濾波器參數 a 和 b 的長度,等於 order+1。
Wn 是正規化的截止頻率,介於 0 和 1 之間,當取樣頻率是 fs 時,所能處理的最高頻率是 fs/2,所以如果實際的截止頻率是 f = 1000,那麼 Wn = f/(fs/2)。
function 是一個字串,function = 'low' 代表是低通濾波器,function = 'high' 代表是高通濾波器。
上述範例所產生的四個圖形,事實上是同一個圖,只是分別在x軸或y軸使用對數刻度,所以造成不同的效果。這些圖都稱為濾波器的「頻率響應」(Frequency Response),顯示不同頻率的訊號經過此濾波器時,所乘上的衰減率。上述範例中,我們是要設計一個截止頻率為 1000 Hz 的濾波器,由頻率響應可以看出,這果然是一個低通濾波器。
當濾波器的階數越高時,,因為濾波器參數 a 和 b 的長度變長,濾波的效果越明顯,但是計算量也會跟著提高;反之,若階數越低,濾波器參數 a 和 b 的長度變短,計算量降低,但是濾波的效果也會變差,請見
|