質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
フィルタ

フィルタとは、特定の条件に合わせてデータへのアクセスをブロックするプログラムやルーチンを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

6836閲覧

Pythonでの信号処理 (バンドパス、ノッチフィルターについて)(阻止域減衰量求め方なども)

Riri09020500

総合スコア6

フィルタ

フィルタとは、特定の条件に合わせてデータへのアクセスをブロックするプログラムやルーチンを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/11/21 08:32

編集2021/11/21 13:59

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1T2R3M4

2021/11/21 08:40

pythonならばインデントをつけていただけませんか。
jbpb0

2021/11/21 10:49

pythonのコードの一番最初の行のすぐ上に ```python だけの行を追加してください また、pythonのコードの一番最後の行のすぐ下に ``` だけの行を追加してください または、 https://teratail.storage.googleapis.com/uploads/contributed_images/56957fe805d9d7befa7dba6a98676d2b.gif を見て、そのようにしてみてください 現状、コードがとても読み辛いです 質問にコードを載せる際に上記をやってくれたら、他人がコードを読みやすくなり、コードの実行による現象確認もやりやすくなるので、回答されやすくなります
Riri09020500

2021/11/21 14:00

お二方回答ありがとうございます。大変申しわけございません。修正しました。
jbpb0

2021/11/22 00:55

バンドパスフィルタの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
Riri09020500

2021/11/23 09:23

買いありがとうございます。参考にさせていただきます。
guest

回答1

0

ベストアンサー

バンドパスフィルタのPythonコードは、下記が参考になると思います
PythonのSciPyでバンドパスフィルタをかける!

ノッチフィルタのPythonコードは、下記が参考になるかもしれません
PythonのSciPyでバンドストップフィルタをかける!

投稿2021/11/23 11:02

編集2021/11/23 11:04
jbpb0

総合スコア7651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問