Jump to content

FFTW

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by 188.152.142.246 (talk) at 13:32, 5 April 2010 (→‎References: Category:FFT algorithms). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

FFTW
Developer(s)Matteo Frigo and Steven G. Johnson
Initial releaseMarch 24, 1997 (1997-03-24)
Stable release
3.2.2 / July 14, 2009; 14 years ago (2009-07-14)
Preview release
3.3-alpha1 / November 15, 2008; 15 years ago (2008-11-15)
Repository
Available inC
TypeNumerical software
LicenseGPL, commercial
Websitewww.fftw.org

FFTW, for "Fastest Fourier Transform in the West", is a software library for computing discrete Fourier transforms (DFTs), developed by Matteo Frigo and Steven G. Johnson at the Massachusetts Institute of Technology.[1][2][3]

FFTW is known as the fastest free software implementation of the Fast Fourier transform (FFT) algorithm (upheld by regular benchmarks [4]). It can compute transforms of real- and complex-valued arrays of arbitrary size and dimension in O(n log n) time.

It does this by supporting a variety of algorithms: it chooses the one (a particular decomposition of the transform into smaller transforms) it estimates or measures to be preferable in the particular circumstances. It works best on arrays of sizes with small prime factors, with powers of two being the optimal sizes and a (large) prime size being the worst case [but still O(n log n)]. To decompose transforms of composite sizes into smaller transforms, it chooses among several variants of the Cooley–Tukey FFT algorithm (corresponding to different factorizations and/or different memory-access patterns), while for prime sizes it uses either Rader's or Bluestein's FFT algorithm.[1] Once the transform has been broken up into subtransforms of sufficiently small sizes, FFTW uses hard-coded unrolled FFTs for these small sizes that were produced (ahead of time, not at runtime) by code generation; these routines use a variety of algorithms including Cooley–Tukey variants, Rader's algorithm, and prime-factor FFT algorithms.[1]

For a sufficiently large number of repeated transforms it is advantageous to use FFTW's ability to choose the fastest algorithm by actually measuring the performance of (some or all of) the supported algorithms on the given array size and platform. These measurements, which the authors call wisdom can be stored in a file or string for later use.

FFTW has a guru interface, that intends to expose as much as possible of the flexibility in the underlying FFTW architecture. This allows among other things multi-dimensional transforms and multiple transforms in a single call (e.g. where the data is interleaved in memory).

FFTW has limited support for out-of-order transforms (using the MPI version). The data reordering incurs an overhead, which for in-place transforms of arbitrary size and dimension is non-trivial to avoid. It is undocumented for which transforms this overhead is significant.

FFTW is licensed under the GNU General Public License. It is also licensed commercially by MIT [3] and is used in the commercial Matlab [5] matrix package for calculating Fast Fourier Transforms (FFTs) - that is, the Matlab functions which compute FFTs are actually based on FFTW. FFTW is written in the C language, but Fortran and Ada interfaces exist, as well as interfaces for a few other languages. While the library itself is C, the code is actually generated from a program called 'genfft', which is written in Objective Caml.[6]

In 1999, FFTW won the J. H. Wilkinson Prize for Numerical Software.

External links

References

  1. ^ a b c Frigo M, Johnson SG (2005). "The design and implementation of FFTW3" (PDF). Proceedings of the IEEE. 93 (2): 216–231. doi:10.1109/JPROC.2004.840301. {{cite journal}}: Unknown parameter |month= ignored (help)
  2. ^ Frigo M, Johnson SG (1998). "FFTW: an adaptive software architecture for the FFT". Proceedings of the 1998 IEEE International Conference on Acoustics, Speech and Signal Processing. 3: 1381–1384. doi:10.1109/ICASSP.1998.681704.
  3. ^ S. G. Johnson and M. Frigo, “Implementing FFTs in practice,” in Fast Fourier Transforms (C. S. Burrus, ed.), ch. 11, Rice University, Houston TX: Connexions, September 2008.
  4. ^ Homepage, second paragraph [1], and benchmarks page [2]
  5. ^ Faster Finite Fourier Transforms: MATLAB 6 incorporates FFTW
  6. ^ "FFTW FAQ"