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)

aidiary.hatenablog.com

ローパスフィルタをかけます。パラメータは

  • 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)

watlab-blog.com

参考にしました。

PythonでFFT実装!SciPyのフーリエ変換まとめ | WATLAB -Python, 信号処理, AI-

周波数解析 — Mechanical Design Lab. of TUMSAT 1.0 documentation

Python:ScipyのFFT(scipy.fftpack)をやってみる。 - がれすたさんのDIY日記

デシベルとは?

電圧や電力の『デシベル(dB)』とは?計算方法や変換方法について - Electrical Information

Pythonで音圧のデシベル(dB)変換式と逆変換式! | WATLAB -Python, 信号処理, AI-