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=5filter的階數,預設是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)orderbutterworth 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