高速フーリエ変換
出典: フリー百科事典『ウィキペディア(Wikipedia)』
高速フーリエ変換(こうそくふーりえへんかん, Fast Fourier Transform, FFT)とは、離散フーリエ変換 (Discrete Fourier Transform, DFT) を計算機上で高速に計算するアルゴリズム。逆変換をIFFT (Inverse FFT) という。
高速フーリエ変換といえば一般的には1965年、ジェイムズ・クーリー (J. W. Cooley) とジョン・テューキー (J. W. Tukey) が発見した[1]とされているCooley-Tukey型FFTアルゴリズムを呼ぶ。しかし、1805年ごろにガウスが同様のアルゴリズムを独立に発見していた[2]。
目次 |
[編集] 概要
離散フーリエ変換 (DFT) は以下の級数で定義される。
- .
これを直接計算したときの時間計算量は O ( N2 ) である(Oはランダウの記号)。
高速フーリエ変換は、この結果を、次数 N が2の累乗のときに O ( N log N ) の計算量で得るアルゴリズムである。より一般的には、次数が と素因数分解できるとき、 の計算量となる。次数が2の累乗のときが最も高速に計算でき、アルゴリズムも単純になるので、0詰めで次数を調整することもある。
逆変換 (IFFT) は正変換 (FFT) と同じと考えて良いが、指数の符号が逆であり、係数 1 / N が掛かる。高速フーリエ変換のアルゴリズムはこれらの変更点を簡単に適用できるため、逆変換も同じアルゴリズムを使って計算できる。
高速フーリエ変換を使って、畳み込み積分などの計算を高速に求めることができる。これも計算量をO ( N2 ) → O ( N log N ) に落とせる。
現在は、初期の手法[1]をより高速化したアルゴリズムが使用されている。
[編集] Cooley-Tukey型FFTアルゴリズム
Cooley-Tukey型アルゴリズムは、代表的な高速フーリエ変換 (FFT) アルゴリズムである。
分割統治法 (divide and conquer) を使ったアルゴリズムで、再帰的に N = N1 N2 のサイズの変換を、ガウス平面における回転因子である1の冪根を N 程度のオーダーかけて、より小さいサイズである N1, N2 のサイズの変換にしていくことで高速化を図っている。
最もよく知られたCooley-Tukey型アルゴリズムは、ステップごとに変換のサイズをサイズ N / 2 の2つの変換に分割すので、2の累乗次数に限定される。しかし、一般的には次数は2の累乗にはならないので、素因数が偶数と奇数とで別々のアルゴリズムに分岐する。
伝統的なFFTの処理実装の多くは、再帰的な処理を、系統だった再帰をしないアルゴリズムにより実現している。
Cooley-Tukey型アルゴリズムは変換をより小さい変換に分解していくので、後述のような他の離散フーリエ係数のアルゴリズムと任意に組み合わせることができる。とりわけ、N ≤ 8 あたりまで分解すると、固定次数の高速なアルゴリズムに切り替えることが多い。
[編集] 原理の簡単な説明
離散フーリエ係数は、1の原始 N 乗根の1つ WN ≡ exp( -2 π i / N ) を使うと、次のように表せる。
- .
例えば、N = 4 のとき、離散フーリエ係数は行列を用いて表現すると(W ≡ W4 と略記)
- .
入力列 xk を添字の偶奇で分けて、以下のように変形する。
すると、サイズ2のFFTの演算結果を用いて表現でき、サイズの分割ができる。
- .
また、この分割手順を図にすると蝶のような図になることから、バタフライ演算とも呼ばれる。
バタフライ演算は、計算機上ではビット反転で実現される。DSPの中には、このバタフライ演算のプログラムを容易にするため、ビット反転アドレッシングを備えているものがある。
[編集] その他のアルゴリズム
- Prime Factor Algorithm (PFA)
- Bruun's FFT algorithm
- Rader's FFT algorithm
- Bluestein's FFT algorithm
[編集] 実数および対称的な入力への最適化
多くの実用面において、FFTへの入力は実数のみの列(実入力)であり、このとき出力の列は次の対称性を満たす (*は複素共役):
- .
そして、多くの効率的なFFTアルゴリズム(例えば[3])はこの条件を前堤に設計されている。
実入力への効率化には、次のような手段がある。
- Cooley-Tukey型アルゴリズムなど典型的なアルゴリズムを利用して、時間とメモリーの両方の浪費を低減する。
- 偶数区分数のフーリエ係数はその半分の長さの複素フーリエ係数として表現することできる(出力の実数/虚数成分は、それぞれ入力の偶関数/奇関数成分に対応する)ことを利用する。
かつては実入力に対するフーリエ係数は離散的ハートリー変換 (Discrete Hartley transform,DHT) でより効率的に計算できると思われていた。しかし、その後最適化された離散的フーリエ変換アルゴリズム (FFT) が、離散的ハートリー変換アルゴリズムよりも必要とする演算回数を下まわることがわかった。また、Bruun's FFTアルゴリズムははじめこそ実入力に対して有利といわれていたが、今ではそういわれてはいない。
さらに偶奇の対称性を持つ実入力の場合にはさらに最適化ができ、FFTはDCTやDSTになり、時間とメモリーの(ほとんど)2つに関して最適化が得られる。この場合には直接FFTのアルゴリズムを応用しないでも、DCTやDSTの計算によってフーリエ係数を求めることができる。
[編集] 応用
- スペクトラムアナライザ
- OFDM変復調器
- 日本および欧州で地上デジタルテレビジョン放送に用いられる変調方式であるOFDMの実装は、LSI化されたFFTおよびIFFT(逆変換)をそれぞれ復調器および変調器を用いて行われている。
- 受像素子を360度回転させながら連続撮影した映像をフーリエ変換する事により、回転面の透過画像を合成する。
- 多倍精度の乗除算
[編集] 参考文献
- [1] J. W. Cooley and J. W. Tukey: Math. of Comput. 19 (1965) 297.
- [2] Carl Friedrich Gauss, "Nachlass: Theoria interpolationis methodo nova tractata," Werke band 3, 265?327 (Konigliche Gesellschaft der Wissenschaften, Gottingen, 1866). See also M. T. Heideman, D. H. Johnson, and C. S. Burrus, "Gauss and the history of the fast Fourier transform," IEEE ASSP Magazine 1 (4), 14?21 (1984).
- [3] H. V. Sorensen, D. L. Jones, M. T. Heideman, and C. S. Burrus, "Real-valued fast Fourier transform algorithms," IEEE Trans. Acoust. Speech Sig. Processing ASSP-35, 849–863 (1987).