pytonでfft・ローパスフィルタ
試験結果のデノイズのためにフーリエ解析に基づくローパスフィルタをかけます。 まずは、周波数解析。fftpackを使います。fsには周波数を入れます。
import scipy.fftpack as spfft X = spfft.fft(data) amp = [np.sqrt(c.real ** 2 + c.imag ** 2) for c in X] freq = spfft.fftfreq( len(amplitudeSpectrum) , d=1.0/fs) import matplotlib.pyplot as plt plt.plot(freq,amp)
ローパスフィルタをかけます。パラメータは
- fp:通過域端周波数[Hz]
- fs:阻止域端周波数[Hz]
- gpass:通過域端最大損失[dB]
- gstop:阻止域端最小損失[dB]
fnは規格化のための基準の周波数。
wp = fp / fn
ws = fs / fn
N, Wn = signal.buttord(wp, ws, gpass, gstop)
b, a = signal.butter(N, Wn, "low")
y = signal.filtfilt(b, a, x)
参考にしました。
PythonでFFT実装!SciPyのフーリエ変換まとめ | WATLAB -Python, 信号処理, AI-
周波数解析 — Mechanical Design Lab. of TUMSAT 1.0 documentation
Python:ScipyのFFT(scipy.fftpack)をやってみる。 - がれすたさんのDIY日記
デシベルとは?