python / scipy / numpyでバンドパスまたはハイパスフィルターを実装するためのドキュメントを見つけるのに苦労しています。
ただし、ローパスフィルターを簡単に作成して適用できるので、次のように質問します。
信号をローパスフィルター処理し、元の信号から結果を差し引くことで、高周波のみを取得することは概念的に正しいでしょうか?
また、Pythonの単純なバンドパスフィルターの単純な例(できればnumpyおよびscipyライブラリーを使用している人)がいるなら、私は非常に感謝します。
私が探しているのは次のようなものです:
filtered_signal = band_pass(original_signal, rate, low=20, high=500)
助けてくれてありがとう!
編集:scipyでは、これをローパスとして使用していますが、良い結果が得られます。
import numpy, scipy.signal
def firfilt(interval, freq, sampling_rate):
nfreq = freq/(0.5*sampling_rate)
taps = sampling_rate + 1
a = 1
b = scipy.signal.firwin(taps, cutoff=nfreq)
firstpass = scipy.signal.lfilter(b, a, interval)
## second pass to compensate phase delay
secondpass = scipy.signal.lfilter(b, a, firstpass[::-1])[::-1]
return secondpass
scipy.signal.firwin
は、ローパス、ハイパス、バンドパス、バンドストップ、およびマルチバンドフィルターの作成方法が記載されています。やってみましたfirwin(taps, cutoff=nfreq, pass_zero=False)
か?