【FFTへ】MATLAB、Pythonで株価予測 その11【至る道⑨】

【FFTへ】MATLAB、Pythonで株価予測 その11【至る道⑨】 株価予測
【FFTへ】MATLAB、Pythonで株価予測 その11【至る道⑨】

バックナンバーはこちら。
https://www.simulationroom999.com/blog/stock-predict-matlabpython-backnumber/

はじめに

前回は、離散フーリエ変換、逆離散フーリエ変換のバリエーションについて説明。
1/Nに伴う数式対称性によるバリエーションがある点に注意が必要。

そして今回からが本命のFFT、IFFTへ。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

技術者太郎

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

FFT、IFFTのバリエーション

フクさん
フクさん

まず最初に言っておくと、FFT、IFFTのバリエーションは

離散フーリエ変換(DFT)、逆離散フーリエ変換(IDFT)と同一だ。
よってバリエーションの話は終了。

太郎くん
太郎くん

まさかの一言で終了?!

太郎くん
太郎くん

ん?
ってことはDFTとFFTは同一のもの?
あれ?そうだっけ?

フクさん
フクさん

FFT、IFFTはDFT、IDFTを
とあるアルゴリズムを元に高速化したものだ。
よって、ベースとなる数式は同一なんだよね。

太郎くん
太郎くん

なるほど。
数式は同一なんだけど、演算方法が違うってだけなのか。

フクさん
フクさん

まぁその演算方法の都合、入力する時間領域の「サンプリングデータは2のべき乗」じゃないと使えないんだけどね。

太郎くん
太郎くん

そういえばそういう話は良く聞くなぁ?
なんで2のべき乗じゃないとダメなんだ?

フクさん
フクさん

バタフライ演算ってのをやってるから。

太郎くん
太郎くん

そのバタフライ演算ってのは・・・?

回転因子

フクさん
フクさん

バタフライ演算の前に回転因子について説明しよう。

太郎くん
太郎くん

回転因子?

フクさん
フクさん

オイラーの公式を覚えてる?

太郎くん
太郎くん

たしかこんなのだったよね?
\(e^{i\theta}=cos(\theta)+i sin(\theta)\)

フクさん
フクさん

そうそう。
そして、離散フーリエ変換、逆離散フーリエ変換で使用される指数関数はこんな感じだ。

\(\displaystyle e^{-i\frac{2\pi tx}{N}}\)

\(\displaystyle e^{i\frac{2\pi tx}{N}}\)

フクさん
フクさん

ポイント\(2\pi\)が入っている点で、

ここだけに着目すると、cos、sinの三角関数は必ず1周以上する。

太郎くん
太郎くん

うん。
単位がラジアンで考えると\(2\pi[rad]\)は\(360^{\circ}\)だもんね。

フクさん
フクさん

そして、サンプリング数、周波数数を決定する\(N\)で割ってる。

太郎くん
太郎くん

ということは、1周がN分割されてる????

フクさん
フクさん

この性質を利用したものが回転因子だ。
表現方法は以下になる。

\(W_N^n=\displaystyle e^{-i\frac{2\pi n}{N}}\)

フクさん
フクさん

イメージし易いよう\(N=8\)の場合の複素平面上の配置も出しておこう。

回転因子の複素平面上の配置、実数、虚数、W_8、e^{-i\frac{2\pi}{8}N}、sqrt(2)、i
太郎くん
太郎くん

おー!
そうか、三角関数で表現し直せるから、こういう位置関係になるのか!

太郎くん
太郎くん

これはオイラーの公式様様って感じだね。

フクさん
フクさん

この回転因子のイメージがあるとこの先の説明が分かりやすくなると思うよ。

まとめ

フクさん
フクさん

まとめだよ。

  • FFT、IFFTの数式上のバリエーションはDFT、IDFTと一緒。
    • 元にしている数式自体は同一。
    • FFT、IFFTはバタフライ変換による高速化を行ってる点で異なるのみ。
  • バタフライ変換を理解するためには回転因子のイメージが重要。
    • オイラーの公式のおかげで複素指数関数と三角関数が紐づく。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました