Butterworth Band-pass Filter
scipy.signal.lfilter
函數可用來建立Butterworth Band-pass Filter。[0]
圖1 Frequency response of band-pass filter for human speech (low cut frequency=300, high cut frequency=3000)
圖1是Butterworth Band-pass Filter的頻率響應。
圖1呈現butterworth band-pass fitler的頻率響應,低截止頻率為300Hz,高截止頻率為3000Hz,Order代表在截止頻率附近頻率響曲線的陡峭程度,order越小(3),響應曲線越平滑,order越大(9),響應曲線越陡峭。
021 def butter_bandpass(lowcut, highcut, fs, order=5):
022 nyq = 0.5 * fs
023 low = lowcut / nyq
024 high = highcut / nyq
025 b, a = butter(order, [low, high], btype='band')
026 return b, a
027
028
029 def butter_bandpass_filter(data, lowcut, highcut, fs, order=5):
030 b, a = butter_bandpass(lowcut, highcut, fs, order=order)
031 y = lfilter(b, a, data)
032 return y
程式A區塊 Butterworth Band-pass Filter的程式碼
行21定義函數butter_bandpass
,輸入的參數有
lowcut
低截止頻率(Hz)highcut
高截止頻率(Hz)fs
音頻採樣頻率(Hz)order=5
filter的階數,預設是5
行22是計算Nyquist frequency nyq
,等於。
行23把低截止頻率轉成以Nyquist frequecy為單位表示。
行24把高截止頻率轉成以Nyquist frequecy為單位表示。
行25呼叫spicy.signal.butter
函數,產生butterworth band-pass filter的Infinite Impulse Response(IIR) coefficients 。
IIR函數形式如公式1所示。
(公式1)
在scipy.signal.butter
裡面,。
btype='band'
指將採用bandpass filter,[low high]
指頻帶的範圍。
由行26,b,a
為函數butter_bandpass
的輸出。
行29定義函數butter_bandpass_fitler
,輸入的參數有
data
實際音頻訊號lowcut
低截止頻率(Hz)highcut
高截止頻率(Hz)fs
音頻採樣頻率 (Hz)order
butterworth band-pass filter的階數
行30透過函數butter_bandpass
產生butterworth bandpass Infinite Impulse Response(IIR) coefficients
行31把IIR係數跟data
輸入scipy.signal.lfilter
,y
為lfiter
的輸出,即是經過帶通濾波後的結果。
行32把y
輸出到函數butter_bandpass_fitler
外,在transcribe_file_with_word_offset.py
裡是返回函數batch_transcribe_speechFile
(行135)。
。
[1]
https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.signal.lfilter.html