更新:
この質問に基づいたScipyレシピを見つけました!したがって、興味のある方は、次のサイトに直接アクセスしてください。目次»信号処理»バターワースバンドパス
1次元のnumpy配列(時系列)にバターワースバンドパスフィルターを実装するという、最初は単純なタスクのように見えたものを実現するのに苦労しています。
私が含めなければならないパラメーターは、sample_rate、ヘルツ単位のカットオフ周波数、そして場合によっては次数です(減衰、固有振動数などの他のパラメーターは私にはわかりにくいので、「デフォルト」値ならどれでもかまいません)。
私が今持っているのはこれです。これはハイパスフィルターとして機能しているようですが、正しく実行しているかどうかはわかりません。
def butter_highpass(interval, sampling_rate, cutoff, order=5):
nyq = sampling_rate * 0.5
stopfreq = float(cutoff)
cornerfreq = 0.4 * stopfreq # (?)
ws = cornerfreq/nyq
wp = stopfreq/nyq
# for bandpass:
# wp = [0.2, 0.5], ws = [0.1, 0.6]
N, wn = scipy.signal.buttord(wp, ws, 3, 16) # (?)
# for hardcoded order:
# N = order
b, a = scipy.signal.butter(N, wn, btype='high') # should 'high' be here for bandpass?
sf = scipy.signal.lfilter(b, a, interval)
return sf
ドキュメントと例は紛らわしくてわかりにくいですが、「バンドパス用」とマークされた表彰で提示されたフォームを実装したいと思います。コメントの疑問符は、何が起こっているのかを理解せずに、いくつかの例をコピーして貼り付けたところを示しています。
私は電気工学や科学者ではなく、EMG信号に対してかなり単純なバンドパスフィルタリングを実行する必要がある医療機器設計者です。