Pythonでの信号処理(ノイズ除去)について
scipyかnumpyを用いてバンドパスフィルターの設計とノッチフィルターの設計を行いたいのですが、阻止域減衰量、減衰量(db)の決め方(計算の仕方)がわかりません。
調べているのですがなかなか出て来ず、どなたか教えていただけると幸いです。
ちなみにバンドパスで1-50Hzの信号を取り出し、さらにノッチで60Hzを除去します。
ピンポイントで抜き出したいのですが、そのやり方もいまいち分からず下のようなコードとなっています。
コードなどもできたら教えていただきたいです。
#コード例
df2にデータが入っています。
Python
1バターワースフィルタ(バンドパス) 2def bandpass(x, samplerate, fp, fs, gpass, gstop): 3 fn = samplerate / 2 4 wp = fp / fn 5 ws = fs / fn 6 N, Wn = signal.buttord(wp, ws, gpass, gstop) 7 b, a = signal.butter(N, Wn, "band") 8 y = signal.filtfilt(b, a, x) 9 return y 10 11#バターワースフィルタ(バンドストップ) 12def bandstop(x, samplerate, fp, fs, gpass, gstop): 13 fn = samplerate / 2 14 wp = fp / fn 15 ws = fs / fn 16 N, Wn = signal.buttord(wp, ws, gpass, gstop) 17 b, a = signal.butter(N, Wn, "bandstop") 18 y = signal.filtfilt(b, a, x) 19 return y 20 21 22 23 24gpass = 3 25gstop = 10 26samplerate = 250 27x = np.arange(0, len(df2[" EXG Channel 4"])) / samplerate # 波形生成のための時間軸の作成 28 29for z in df2.columns: 30 fp = np.array([1, 50]) 31 fs = np.array([0.5, 60]) 32 data_bandfilt = bandpass(result[0], samplerate, fp, fs, gpass, gstop) 33 34 35 fp = np.array([40, 60]) 36 fs = np.array([45,55]) 37 df3[z] = bandstop(data_bandfilt, samplerate, fp, fs, gpass, gstop) 38
回答1件
あなたの回答
tips
プレビュー