閲覧いただきありがとうございます.
Python上での信号処理について疑問が生じたので,質問させていただきます.
下記のコードで実行すると信号処理により図のようなグラフが得られます.
このとき一般にフィルタを通すと位相のずれが生じるのですが,このプログラムでは位相のずれは生じているのか,それともゼロ位相ずれフィルタになっているのか教えていただきたく存じます.よろしくお願いします.
※フィルタはバターワースフィルタを使用しております.
import numpy as np from scipy import signal import matplotlib.pyplot as plt # 時系列のサンプルデータ作成 n = 512 # データ数 dt = 0.01 # サンプリング間隔 f = 1 # 周波数 fn = 1/(2*dt) # ナイキスト周波数 t = np.linspace(1, n, n)*dt-dt y = np.sin(2*np.pi*f*t)+0.5*np.random.randn(t.size) # パラメータ設定 fp = 2 # 通過域端周波数[Hz] fs = 3 # 阻止域端周波数[Hz] gpass = 1 # 通過域最大損失量[dB] gstop = 40 # 阻止域最小減衰量[dB] # 正規化 Wp = fp/fn Ws = fs/fn # ローパスフィルタで波形整形 # バターワースフィルタ N, Wn = signal.buttord(Wp, Ws, gpass, gstop) b1, a1 = signal.butter(N, Wn, "low") y1 = signal.filtfilt(b1, a1, y) # プロット plt.figure() plt.plot(t, y, "b") plt.plot(t, y1, "r", linewidth=2, label="butter") plt.xlim(0, 4) plt.legend(loc="upper right") plt.xlabel("Time [s]") plt.ylabel("Amplitude") # plt.show()

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。