11-2 Filter Design (濾波器設計)
文章推薦指數: 80 %
我們可以使用butter 指令來設計一個Butterworth 濾波器,範例如下: ... plot(w/pi*fs/2, abs(allH)); title('Frequency response of a low-pass utterworth filter'); ...
11-2FilterDesign(濾波器設計)
在上一節中,我們介紹了幾種基本的濾波器,並說明其應用。
本節將介紹如何以簡單的MATLAB指令來設計濾波器,並顯示其效果。
我們可以使用butter指令來設計一個Butterworth濾波器,範例如下:
Example1:butter01.mfs=8000; %Samplingrate
filterOrder=5; %Orderoffilter
cutOffFreq=1000; %Cutofffrequency
[b,a]=butter(filterOrder,cutOffFreq/(fs/2),'low');
%===Plotfrequencyresponse
[h,w]=freqz(b,a);
plot(w/pi*fs/2,abs(h),'.-');title('Magnitudefrequencyresponse');
gridon
在上述範例中,我們使用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軸使用對數刻度,所以造成不同的效果。
這些圖都稱為濾波器的「頻率響應」(FrequencyResponse),顯示不同頻率的訊號經過此濾波器時,所乘上的衰減率。
上述範例中,我們是要設計一個截止頻率為1000Hz的濾波器,由頻率響應可以看出,這果然是一個低通濾波器。
當濾波器的階數越高時,,因為濾波器參數a和b的長度變長,濾波的效果越明顯,但是計算量也會跟著提高;反之,若階數越低,濾波器參數a和b的長度變短,計算量降低,但是濾波的效果也會變差,請見下列範例:
Example2:butter02.mfs=8000; %Samplingrate
cutOffFreq=1000; %Cutofffrequency
allH=[];
forfilterOrder=1:8;
[b,a]=butter(filterOrder,cutOffFreq/(fs/2),'low');
%===Plotfrequencyresponse
[h,w]=freqz(b,a);
allH=[allH,h];
end
plot(w/pi*fs/2,abs(allH));title('Frequencyresponseofalow-passutterworthfilter');
legend('order=1','order=2','order=3','order=4','order=5','order=6','order=7','order=8');
在上述範例中,可以很明顯地看出,當階數由1慢慢增大成8時,濾波器的效果也會越來越明顯。
我們可以將音訊通過截止頻率為1000Hz的低通濾波器,看是否能夠把過濾高音,範例如下:
Example3:butter03.mcutOffFreq=1000; %Cutofffrequency
filterOrder=5; %Orderoffilter
au=myAudioRead('wubai_solicitude.wav');
[b,a]=butter(filterOrder,cutOffFreq/(au.fs/2),'low');
au.signal=au.signal(60*au.fs:90*au.fs); %30-secondsignal
y=filter(b,a,au.signal);
%======Plottheresult
time=(1:length(au.signal))/au.fs;
subplot(2,1,1);
plot(time,au.signal);
subplot(2,1,2);
plot(time,y);
%======Saveoutputfiles
myAudioWrite(au,'wubai_solicitude_orig.wav');
au.signal=y;
myAudioWrite(au,sprintf('wubai_solicitude_%d.wav',cutOffFreq));
[Warning:Dataclippedwhenwritingfile.]
[>Inaudiowrite>clipInputData(line396)
Inaudiowrite(line176)
InmyAudioWrite(line29)
Inbutter03(line16)
IngoWriteOutputFile>dummyFunction(line85)
IngoWriteOutputFile(line55)]
我們可以聽看看原訊號和濾波器輸出訊號的差異:
原訊號x[n]:example/wubai_solicitude_orig.wav
濾波器輸出訊號y[n]:example/wubai_solicitude_1000.wav
可以很明顯地聽到,高音部分都幾乎被刪除了。
如果我們將截止頻率設定成100Hz,此時濾波器的訊號,就幾乎只能聽到低音鼓的聲音,範例如下:
Example4:butter04.mcutOffFreq=100; %Cutofffreq(截止頻率)
filterOrder=5; %Orderoffilter(濾波器的階數)
au=myAudioRead('wubai_solicitude.wav');
[b,a]=butter(filterOrder,cutOffFreq/(au.fs/2),'low');
au.signal=au.signal(60*au.fs:90*au.fs); %30secondsofsinging(30秒歌聲)
y=filter(b,a,au.signal);
%======Plotting(畫圖)
time=(1:length(au.signal))/au.fs;
subplot(2,1,1);
plot(time,au.signal);
subplot(2,1,2);
plot(time,y);
%======Savewavfiles(存檔)
myAudioWrite(au,'wubai_solicitude_orig.wav');
au.signal=y;
myAudioWrite(au,sprintf('wubai_solicitude_%d.wav',cutOffFreq));
[Warning:Dataclippedwhenwritingfile.]
[>Inaudiowrite>clipInputData(line396)
Inaudiowrite(line176)
InmyAudioWrite(line29)
Inbutter04(line16)
IngoWriteOutputFile>dummyFunction(line85)
IngoWriteOutputFile(line55)]
原訊號x[n]:example/wubai_solicitude_orig.wav
濾波器輸出訊號y[n]:example/wubai_solicitude_100.wav
很明顯地,經過了濾波器的作用,只留下低音鼓的聲音,而且由這些規律出現的低音鼓聲音,我們就可以進行節拍追蹤,找出這一段音樂的節拍。
(當然,這只是一個開始,若要進行節拍追蹤,還有很多細節要處理。
)
如果你還是聽不出來低音鼓在原來音樂的位置,可以嘗試逐次聽聽下列檔案(最好使用CoolEdit來聽,可以同步顯示播放進度),就應該可以慢慢抓到低音鼓的位置:
截止頻率=100Hz:example/wubai_solicitude_100.wav
截止頻率=200Hz:example/wubai_solicitude_200.wav
截止頻率=300Hz:example/wubai_solicitude_300.wav
截止頻率=400Hz:example/wubai_solicitude_400.wav
截止頻率=500Hz:example/wubai_solicitude_500.wav
截止頻率=1000Hz:example/wubai_solicitude_1000.wav
原訊號:example/wubai_solicitude_orig.wav
AudioSignalProcessingandRecognition(音訊處理與辨識)
延伸文章資訊
- 1低通濾波器- 維基百科,自由的百科全書
低通濾波器(英語:Low-pass filter)容許低頻訊號通過,但減弱(或減少)頻率高於截止頻率的訊號的通過。對於不同濾波器而言,每個頻率的訊號的減弱程度不同。
- 2一阶低通滤波(LPF)的原理及应用(以APM/PX4飞控为例)
一阶低通滤波器(Low Pass Filter,LPF),顾名思义就是当输入信号的频率在LPF设定的频率(截止频率)以内时,该信号可以通过(无衰减),而当该信号的频率高于该频率 ...
- 3一階RC濾波器的演算法實現(低通和高通)3102 - 程式人生
本文的優勢是比較詳細,引數配置都有公式依據。 ... @brief implement 1 order RC low pass filter * raw data filtered by a s...
- 4網路上關於low pass filter公式-在PTT/MOBILE01/Dcard上的 ...
2022low pass filter公式討論資訊,在PTT/MOBILE01/Dcard上的升學考試資訊整理,找low pass filter計算,low pass filter,二階低通濾波...
- 511-2 Filter Design (濾波器設計)
我們可以使用butter 指令來設計一個Butterworth 濾波器,範例如下: ... plot(w/pi*fs/2, abs(allH)); title('Frequency respon...