離散フーリエ変換を心の底からわかりたい

前提
かなり個人メモの位置付けが強いので、省略したりすることも多くなります。自信がついたり、ニーズを感じれば整理して記事にします。
出発点
離散フーリエ変換を通常の(連続)フーリエ変換の離散化バージョンというなんとなくの理解はあった。ただし、関数空間などの数学的な位置付けはわかっていないし、それどころか久々にやると計算もままならない。
個人的なゴール
- 離散フーリエ変換を三角関数を習ったことのある人に熱量を持って30分くらい語れるようになる
構想
- まずは具体的な計算や大枠を捉える
- その次に可視化などを踏まえて直観的な理解を目指す
- ある程度把握してきたら、数学的な部分もできるだけ整理したい

用語
(連続)フーリエ変換をFT(Fourier Transform)とし、離散フーリエ変換をDFT(Discrete Fourier Transform)と呼ぶことにする。
MATHEMATICS OF THE DISCRETE FOURIER TRANSFORM (DFT) WITH AUDIO APPLICATIONS
MATHEMATICS OF THE DISCRETE FOURIER TRANSFORM (DFT) WITH AUDIO APPLICATIONS から大枠を把握したい
定義
厳密ではないが、FTを出発点としてDFTの定義を与える。
FT は以下のように定義されている。
これを離散化した以下がDFTと定義する。
大事なポイントは、積分 -> 総和という変換が起きていること。これはリーマン積分 の考えからすると違和感はない。
変数の整理を以下にしておく。
変数 | 説明 |
---|---|
サンプリングの間隔の時間 ( |
|
サンプル数 | |
= |
|
|
|
|
-
書籍では
radian-frequency sampling interval
とあり、直訳するとサンプリング間隔の角周波数ということだが、意味がわかりやすいように表現を変えている。離散フーリエ変換では、サンプリング間隔に対応するこの角周波数が最小の角周波数単位で、 が最大の角周波数として扱うと考えることができそう。最小の方は自然だし、最大の方も"サンプリングしている範囲以上の周期性なんてわかりっこない"と思うと自然に感じられる。 ↩︎\omega_N = \frac{2 \pi}{N T}

今振り返ってみるとそれほど難しく考えなくても良さそうに見える。結局は 関数解析(黒田) にお世話になった。離散バージョンの方は明確な記述は見つけられなかったけど、以下であっているはず。
連続フーリエ変換:
離散時間フーリエ変換(DTFT, 周波数は連続):
離散フーリエ変換(DFT):
と理解すると割とすっきりする。
注意点・ポイントとしては、
- 連続フーリエ変換は
で定義できるが、逆変換が収束するようにL^1(\mathbf{R}^n) で定義している。L^2(\mathbf{R}^n) であってL^2(\mathbf{R}^n) でないケースでは、フーリエ変換が収束しない。その場合は、定数L^1(\mathbf{R}^n) を導入して、積分の範囲をL (> 0) して確実に収束させたのち、|x| \leq L とすることで定義できる。ちなみに、L \rightarrow \infty の場合だと、L^1(\mathbf{R}^n) になる。L^1(\mathbf{R}^n) \rightarrow C^0(\mathbf{R}) - DFT の方は離散化しているので、有限列でかつ各値も有限になると考えることができる。

残った問題は

以下のようになればハッピーだけど、そんなわけもなく...
L²(ℝⁿ) ---FT---> L²(ℝⁿ)
| |
sampling sampling
↓ ↓
ℂᴺ ----DFT----> ℂᴺ
単純な対応づけは難しそう。実際には帯域制限や各種適切な前処理で近づけていくというのが実践的な話っぽい。

ここは、完全にはすっきりしないが、どういうモヤモヤが残るかが明確になったので、次に高速フーリエ変換のアルゴリズムを理解しよう

まず、離散フーリエ変換は定義として、
を用いて、次のようにかける。
行列形式で書くと、
のようになる。 (
行列の要素は
さらに、ここで高速フーリエ変換の条件として、
ざっくり感覚的な話をすると、

例を見ていけばもっとしっくりくる。
であり、これは
と展開できる。

さらに、右辺を先ほどのグルーピングを意識すると、
となる。実は、
通分して整理すると次のようになる。
掛け算は足し算よりも計算量が大きいことを踏まえて、掛け算の回数を考えると、
また、
この構造を意識して、再度整理をすると、
となる。これはつまり、