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
pythonならばインデントをつけていただけませんか。
pythonのコードの一番最初の行のすぐ上に
```python
だけの行を追加してください
また、pythonのコードの一番最後の行のすぐ下に
```
だけの行を追加してください
または、
https://teratail.storage.googleapis.com/uploads/contributed_images/56957fe805d9d7befa7dba6a98676d2b.gif
を見て、そのようにしてみてください
現状、コードがとても読み辛いです
質問にコードを載せる際に上記をやってくれたら、他人がコードを読みやすくなり、コードの実行による現象確認もやりやすくなるので、回答されやすくなります
お二方回答ありがとうございます。大変申しわけございません。修正しました。
バンドパスフィルタのPythonコードは、下記が参考になると思います
https://watlab-blog.com/2019/05/01/scipy-bandpass/
ノッチフィルタのPythonコードは、下記が参考になるかもしれません
https://watlab-blog.com/2019/05/01/scipy-bandstop/
「scipy.signal.buttord」のパラメータは、下記が分かりやすいと思います
MATLABの「buttord」の解説ですが、たしかパラメータの意味は同じだったと思うので
https://jp.mathworks.com/help/signal/ref/buttord.html
買いありがとうございます。参考にさせていただきます。
回答1件
あなたの回答
tips
プレビュー