【NumPy】高速フーリエ変換 (FFT)

この記事では、Python言語とNumPyを用いた高速フーリエ変換(FFT)の使い方をソースコード付きで解説します。

高速フーリエ変換

高速フーリエ変換(Fast Fourier Transform:FFT)とは、フーリエ変換を高速化したものです。
フーリエ変換とは、デジタル信号を周波数解析するのに用いる処理です。
PythonモジュールNumpyでは「numpy.fft.fft」を用いることで高速フーリエ変換を実装できます。

書式

numpy.fft.fft(ndarray)

■引数
ndarray:1次元のNumpy配列

■返り値
フーリエ変換の結果(複素数)

ソースコード

サンプルプログラムのソースコードです。

# -*- coding: utf-8
import numpy as np
import matplotlib.pyplot as plt

def main():
    # CSVのロード
    data = np.genfromtxt("nikkei.csv",delimiter=",", skip_header=1, dtype='float')
    # 5行目を抽出(日経平均株価の終値)
    f = data[:,4]/1000

    # 高速フーリエ変換
    F = np.fft.fft(f)

    # グラフ作成
    plt.figure(1)
    
    # サンプル(日経平均株価)
    plt.subplot(221)
    plt.plot(f)
    plt.xlabel("Time")
    plt.ylabel("f")

    # 振幅
    plt.subplot(222)
    plt.plot(np.abs(F))
    plt.ylim(0, 20)
    plt.xlabel("Data number")    
    plt.ylabel("Amplitude")
    
    # 位相
    plt.subplot(223)
    plt.plot(np.degrees(np.angle(F)))
    plt.xlabel("Data number")
    plt.ylabel("Phase[deg]")
    
    # グラフ表示
    plt.show()
    
if __name__ == "__main__":
    main()

■使用したデータ:nikkei.csv
(2016年の日経平均株価のデータ)

実行結果

サンプルプログラム実行結果は下記の通りです。
2016年の1年分の日経平均株価の終値をサンプルとしています。

左上のグラフは、サンプルデータ(日経平均株価の終値)です。(単位は千円)
右上のグラフは、FFT処理されたサンプルデータ(複素数)の大きさ(絶対値)です。
左下のグラフは、FFT処理されたサンプルデータ(複素数)の位相です。
見てやると、FFT処理されたサンプルデータは、対称性があることがわかります。

この対称性は、エイリアシング現象と呼ばれるものです。
この現象を考慮したFFTによる解析については下記事で解説しています。
【NumPy】高速フーリエ変換でパワースペクトル解析

おすすめ記事

Python入門 サンプル集
NumPy入門 サンプル集

シェア&フォローお願いします!