効率的なスペクトル分析2
高速フーリエ変換対(FFT および IFFT)の実装方法を理解し,
その性能を検証してみよう.
教科書の該当範囲:第4章
サンプルプログラム
- 作業用ディレクトリ:以前の通り ~/sp/pcm/ 等
- 改造元ソースファイル:以前に作成した dft.c
- ソースコード断片(画像):
- スクランブル関連:
- バタフライ演算(再帰版):
再帰的定義では,コードが単純明快ではあるが...
分割・整理先バッファのメモリ消費や再帰関数の呼出コストが気になる.
- バタフライ演算(反復版):
反復的定義では,入力(波形)配列の分割・整理の結果が,
そのまま,最終的な出力(スペクトル)配列と見なされる.
しかし,入力データは後々の再利用のために保全しておきたいので...
初期設定として,入力配列を出力配列にコピーしておき,
分割・整理としては,入力配列ではなく,出力配列を対象とする.
なお,入力データの再利用不要の場合,教科書のコード例のように,
入出力配列を一体化してしまえば,コピーの手間は削減可能.
反復的定義では,in-place(余計なメモリ領域を消費せず)かつ関数呼出も少ないが...
配列の領域分割やループの多重化などのため,コードは少々トリッキー.
- FFT&IFFT:
- メイン:
FFT の実装完成と利用
レポート提出不要ではあるが,本日の課題として,必ず取り組もう.
FFT の高性能化
もし余裕があれば,本日の課題の工夫点として取り組もう.
- 処理時間短縮:
- 例えば,関数 BtfR() および BtfI() 内の反復計算に漸化式を適用し,
計算コストを削減.
- その他
- メモリ消費抑制:
- 例えば,配列 x[],X[],xs[],Xs[] を一体・共用化し,
必要メモリ領域を節約.
- その他
(c) 2023, yanagawa@kushiro-ct.ac.jp