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

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

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

はじめに

前回まででフーリエ変換のバリエーションの話が終わったところ。

実は似たような話は離散フーリエ変換(DFT)、逆離散フーリエ変換(IDFT)でも発生する。
よって、そこら辺の話をサクっとやっていく予定?

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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

離散フーリエ変換(DFT)、逆離散フーリエ変換(IDFT)の位置づけ

太郎くん
太郎くん

次はDFTとIDFTか・・・・。

フクさん
フクさん

まぁ基本はバリエーションの話をしたいだけなんで、
そんなに身構えなくても良いと思うよ。

太郎くん
太郎くん

こいつらもバリエーションがあるのか?!

太郎くん
太郎くん

まぁフーリエ変換の離散版だから、当然と言えば当然か・・・。

フクさん
フクさん

実はDFTってフーリエ変換の離散版と言えばそうなんだけど、
実際には「複素フーリエ係数の別表現」と言った方が適切だな。

太郎くん
太郎くん

え?そうなの?
名前的には、フーリエ変換からうまく変形してDFTにしていると思ってた!

フクさん
フクさん

まぁどちらも複素フーリエ級数、複素フーリエ係数を元にしてるからね。
扱うデータが連続か離散かの差はあれど、目的は時間領域と周波数領域の行き来なんで、
似てて当然ってことにはなるな。

逆離散フーリエ変換(IDFT)の大雑把な導出

太郎くん
太郎くん

これも・・・導出からやるの?

フクさん
フクさん

うーん、そこまではやらないかな?
まぁ流れとして以下で求まると思っておけば良いよ。

  • 複素フーリエ級数の式はこれ
    • \(\displaystyle f(x)=\sum^{\infty}_{n=-\infty}C_n e^{i\frac{n\pi x}{L}} \)
  • 逆変換を加味した上で、上記の式を離散化するには複素フーリエ級数展開後に正方行列になっていてほしい。
  • よって、サンプリング数と級数の数を同値にする。
    • \(L=N/2\)とし、サンプリング開始を0とする。
    • よって、以下を暫定的に逆離散フーリエ変換(IDFT)の式とする。
      • \(\displaystyle f(x)=\sum^{N-1}_{n=0}C_n e^{i\frac{2n\pi x}{N}} \)

離散フーリエ変換(DFT)の大雑把な導出

フクさん
フクさん

次に離散フーリエ変換(DFT)の大雑把な導出になるが、
先ほどの暫定的な逆離散フーリエ変換の式をベクトル、行列で表現し直す。

\(
\begin{bmatrix}
f_0 \\
f_1 \\
f_2 \\
\vdots \\
f_n
\end{bmatrix}
=
\begin{bmatrix}
1 & 1 & 1 & \dots & 1\\
1 & e^{i\frac{2\pi}{N}} & e^{i\frac{4\pi}{N}} & \dots &e^{i\frac{2\pi(N-1)}{N}}\\
1 & e^{i\frac{4\pi}{N}} & e^{i\frac{8\pi}{N}} & \dots&e^{i\frac{4\pi(N-1)}{N}}\\
\vdots & \vdots & \vdots & \ddots & \vdots\\
1 & e^{i\frac{2\pi(N-1)}{N}} & e^{i\frac{4\pi(N-1)}{N}} & \dots & e^{i\frac{2\pi(N-1)(N-1)}{N}}\\
\end{bmatrix}

\begin{bmatrix}
C_0 \\
C_1 \\
C_2 \\
\vdots \\
C_n
\end{bmatrix}

\)

フクさん
フクさん

これに対して両辺に右辺行列のエルミート転置を掛ける。

\(\scriptsize{
\begin{bmatrix}
1 & 1 & 1 & \dots & 1\\
1 & e^{-i\frac{2\pi}{N}} & e^{-i\frac{4\pi}{N}} & \dots &e^{-i\frac{2\pi(N-1)}{N}}\\
1 & e^{-i\frac{4\pi}{N}} & e^{-i\frac{8\pi}{N}} & \dots&e^{-i\frac{4\pi(N-1)}{N}}\\
\vdots & \vdots & \vdots & \ddots & \vdots\\
1 & e^{-i\frac{2\pi(N-1)}{N}} & e^{-i\frac{4\pi(N-1)}{N}} & \dots & e^{-i\frac{2\pi(N-1)(N-1)}{N}}\\
\end{bmatrix}

\begin{bmatrix}
1 & 1 & 1 & \dots & 1\\
1 & e^{i\frac{2\pi}{N}} & e^{i\frac{4\pi}{N}} & \dots &e^{i\frac{2\pi(N-1)}{N}}\\
1 & e^{i\frac{4\pi}{N}} & e^{i\frac{8\pi}{N}} & \dots&e^{i\frac{4\pi(N-1)}{N}}\\
\vdots & \vdots & \vdots & \ddots & \vdots\\
1 & e^{i\frac{2\pi(N-1)}{N}} & e^{i\frac{4\pi(N-1)}{N}} & \dots & e^{i\frac{2\pi(N-1)(N-1)}{N}}\\
\end{bmatrix}

\begin{bmatrix}
C_0 \\
C_1 \\
C_2 \\
\vdots \\
C_n
\end{bmatrix}
}\)
\(\scriptsize{
=
\begin{bmatrix}
1 & 1 & 1 & \dots & 1\\
1 & e^{-i\frac{2\pi}{N}} & e^{-i\frac{4\pi}{N}} & \dots &e^{-i\frac{2\pi(N-1)}{N}}\\
1 & e^{-i\frac{4\pi}{N}} & e^{-i\frac{8\pi}{N}} & \dots&e^{-i\frac{4\pi(N-1)}{N}}\\
\vdots & \vdots & \vdots & \ddots & \vdots\\
1 & e^{-i\frac{2\pi(N-1)}{N}} & e^{-i\frac{4\pi(N-1)}{N}} & \dots & e^{-i\frac{2\pi(N-1)(N-1)}{N}}\\
\end{bmatrix}

\begin{bmatrix}
f_0 \\
f_1 \\
f_2 \\
\vdots \\
f_n
\end{bmatrix}

}\)

\(\scriptsize{
\begin{bmatrix}
N & 0 & 0 &\dots & 0 \\
0 & N & 0 &\dots & 0 \\
0 & 0 & N &\dots & 0 \\
\vdots & \vdots & \vdots & \ddots & \vdots \\
0 & 0 & 0 &\dots & N \\
\end{bmatrix}

\begin{bmatrix}
C_0 \\
C_1 \\
C_2 \\
\vdots \\
C_n
\end{bmatrix}
=
\begin{bmatrix}
1 & 1 & 1 & \dots & 1\\
1 & e^{-i\frac{2\pi}{N}} & e^{-i\frac{4\pi}{N}} & \dots &e^{-i\frac{2\pi(N-1)}{N}}\\
1 & e^{-i\frac{4\pi}{N}} & e^{-i\frac{8\pi}{N}} & \dots&e^{-i\frac{4\pi(N-1)}{N}}\\
\vdots & \vdots & \vdots & \ddots & \vdots\\
1 & e^{-i\frac{2\pi(N-1)}{N}} & e^{-i\frac{4\pi(N-1)}{N}} & \dots & e^{-i\frac{2\pi(N-1)(N-1)}{N}}\\
\end{bmatrix}

\begin{bmatrix}
f_0 \\
f_1 \\
f_2 \\
\vdots \\
f_n
\end{bmatrix}
}\)

\(
\begin{bmatrix}
C_0 \\
C_1 \\
C_2 \\
\vdots \\
C_n
\end{bmatrix}
=
\displaystyle \frac{1}{N}
\begin{bmatrix}
1 & 1 & 1 & \dots & 1\\
1 & e^{-i\frac{2\pi}{N}} & e^{-i\frac{4\pi}{N}} & \dots &e^{-i\frac{2\pi(N-1)}{N}}\\
1 & e^{-i\frac{4\pi}{N}} & e^{-i\frac{8\pi}{N}} & \dots&e^{-i\frac{4\pi(N-1)}{N}}\\
\vdots & \vdots & \vdots & \ddots & \vdots\\
1 & e^{-i\frac{2\pi(N-1)}{N}} & e^{-i\frac{4\pi(N-1)}{N}} & \dots & e^{-i\frac{2\pi(N-1)(N-1)}{N}}\\
\end{bmatrix}
\begin{bmatrix}
f_0 \\
f_1 \\
f_2 \\
\vdots \\
f_n
\end{bmatrix}
\)


フクさん
フクさん

\(C_n\)を周波数領域関数の\(F(t)\)とし、
これを数式に戻すと以下。
これが離散フーリエ変換となる。

\( \displaystyle F(t)=\frac{1}{N} \sum^{N-1}_{x=0}f(x)e^{-i\frac{2\pi tx}{N}} \)

フクさん
フクさん

これで離散フーリエ変換、逆離散フーリエ変換が揃ったで書き並べると以下になる。

離散フーリエ変換

\( \displaystyle F(t)=\frac{1}{N} \sum^{N-1}_{x=0}f(x)e^{-i\frac{2\pi tx}{N}} \)

逆離散フーリエ変換

\( \displaystyle f(x)=\sum^{N-1}_{x=0}F(t)e^{i\frac{2\pi tx}{N}} \)

太郎くん
太郎くん

(なんだこの地獄は・・・。)

フクさん
フクさん

最初も言った通り、流れだけ把握しておけばOKだ。
そして次回はフーリエ変換、逆フーリエ変換の時のようなバリエーションの話になるな。

まとめ

フクさん
フクさん

まとめだよ。

  • 大雑把に逆離散フーリエ変換と離散フーリエ変換の導出を説明。
    • サンプリング都合で積分範囲をプラス側へ。
    • 逆変換を想定した逆行列都合でサンプリング数と級数の数を合わせて正方行列が作れる状態にしておく。
  • 逆離散フーリエ変換の行列演算形式に対してエルミート転置を利用して逆変換を求める。
    • これが離散フーリエ変換になる。

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

コメント

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