2010年7月23日金曜日

FIR filtering using scipy

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!

0 件のコメント:

コメントを投稿