FFTW

FFTW ("Fastest Fourier Transform in the West") は離散フーリエ変換 (DFT) を計算するためのライブラリで、マサチューセッツ工科大学 (MIT) のマテオ・フリゴ (Matteo Frigo) とスティーブン・ジョンソン (Steven G. Johnson) によって開発された。オープンソース化されたFFTライブラリの中では、デファクトスタンダード的に用いられている。多くのUNIX系OSのパッケージ管理システムでも提供されている。

名称中の「West（西、西洋）」は「東洋の秘術」（アセンブラを使ったアクロバティックなテクニックのようなもの）を使わずにもっとも高速で実行できるコードを目指していることを表わしている。公式サイトのFAQでは、「西? MITは東部にあると思うけど」との質問に対して「イタリア人（開発者のフリゴはイタリア出身）にとってはそうではない」と回答されている。

FFTWは、高速フーリエ変換 (FFT) を実装したフリーソフトウェアの中ではもっとも高速である、とされている（ベンチマークテストによる）。任意のサイズの実数および複素数のデータ配列を、O(n log n) のオーダーの時間で計算することができる。

FFTWの特徴は、ヒューリスティックな方法または状況に合わせた最適な尺度で、適切なアルゴリズムを選ぶことで、高速な演算を実現していることである。他の多くの任意長データに対するFFTアルゴリズムと同様に、データ配列の長さが小さな素数の積となっているときに高速で、2のべき乗の時が最高速であり、大きな素数となっているときにもっとも遅くなるという性質がある。

同じサイズのデータのFFTを何度も繰り返しするとき、そのデータサイズと実行中のプラットフォームの種類からFFTWはもっとも適したアルゴリズムを選ぶことで、もっとも高速な演算が行える。どのアルゴリズムを選択したかをファイルに保存して、それ以降に利用することもできる。

FFTWはguruと呼ばれるインターフェイスを持ち、これにより、そのインターフェイスの後ろにあるFFTWの柔軟性をいかんなく発揮できるようにしている。これを使うとデータをメモリ上に置く順序を調整することで、多次元データや複数のデータセットのFFTを1回の関数呼び出しで行うことができる。

FFTWはMPI (Message Passing Interface) を使った「非順序変換」を部分的にサポートしている。クーリーとテューキーのFFTアルゴリズムでのデータ配置では、任意サイズのデータに対するin-place変換のときに、オーバーヘッドを避けるのは簡単なことではない。

FFTWはGNU General Public Licenseにしたがった利用と配布ができる。商用ソフトウェアであるMATLABにも組み込まれている（つまりMATLABでFFTを計算するときにはFFTWが使われる）。FFTWはANSI Cで書かれているが、FORTRANやC++、その他の言語のインターフェイスもある。FFTWのライブラリ自体の C言語のコードは 'genfft' というプログラムで生成されており（FFTW の配布パッケージに含まれている）、このツールはObjective Camlで書かれている。

FFTWは1999年にJ. H. Wilkinson Prize for Numerical Softwareを受賞した。

脚注

関連記事 
 FFTPACK
 フーリエ変換
 離散フーリエ変換 (DFT)
 スペクトラムアナライザ

数値解析ソフトウェア
数値計算ライブラリー
オープンソースソフトウェア
数学に関する記事