scipy の filter design functionの使い方メモ
scipy.signal.firwin を使えば LPF (low pass filter, 低域通過フィルタ) の係数が一発で求まる。
この係数を変形すれば、 HPF (High pass filter, 高域通過フィルタ)や
BPF (band pass filter, 帯域通過フィルタ) も求まる。
まずは音声ファイルを読み込む
import wave
import numpy
wavobj = wave.open( "test.wav" )
wav = numpy.fromstring( wavobj.readframes( wavobj.getnframes() ),
numpy.int16)
次に LPF 係数を求める
import scipy.signal
N = 1024 # filter length
cutoff = 0.4
lpf = scipy.signal.firwin( N, cutoff )
フィルタをかける
result = scipy.signal.lfilter( lpf, 1, wav )
おしまい。
次はHPF への変換
hpf = -lpf
hpf[len(hpf)/2] += 1
おしまい。
BPFは、HPFとLPFを二回掛ければ良い。
result = scipy.signal.lfilter( lpf, 1, wav )
result = scipy.signal.lfilter( hpf, 1, result )
have a good dsp life!