LoginSignup
11
12

More than 1 year has passed since last update.

Pythonで高速フーリエ変換(FFT)

Last updated at Posted at 2021-05-11

はじめに

  • ある系に地震波を与えたときの加速度(下の図)から、加速度応答スペクトル(ピリオドグラム)を求める
  • 最終的にはスペクトルのピークを知りたい
  • fftは複雑なことが多く理解しにくいため、最低限必要なところだけ説明する

qiita_acc.png

補足

  • fft(高速フーリエ変換)をするなら、scipy.fftnumpy.fftが主流
  • 公式によるとscipy.fftpackはLegacyとなっており、推奨されていない
  • scipyはドキュメントが非常にわかりやすかった

モジュールのインポート

numpyscipyも違いはありません。

# numpyを使うとき
from numpy.fft import fft, fftfreq

# scipyを使う時
from scipy.fft import fft, fftfreq

高速フーリエ変換

yは分析したい時系列データです

# サンプル数
N = len(y)
# サンプリング間隔
T = 0.01
# フーリエ変換する
yf = fft(y)
# 周波数軸の作成
xf = fftfreq(N, T)[:N//2]

描画

plt.plot(xf, 2.0/N * np.abs(yf[0:N//2]))

qiita_amp.png

  • 2つの山が見て取れる
  • T=0.01としたので、サンプリング周波数はその逆数で $f_s=100Hz$となる。つまりナイキスト周波数は50Hzなので、描画したグラフは周波数が0から50の範囲となっている。
11
12
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
12