バックナンバーはこちら。
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だ。
そして次回はフーリエ変換、逆フーリエ変換の時のようなバリエーションの話になるな。
まとめ

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