
Bailey's FFT (also known as a 4-step FFT) is a high-performance algorithm for computing the fast Fourier transform (FFT). This variation of the Cooley–Tukey FFT algorithm was originally designed for systems with hierarchical memory, as is common in modern computers, and was the first FFT algorithm in this "out of core" class. The algorithm treats the samples as a two dimensional matrix (thus another name, a matrix FFT algorithm) and executes short FFT operations on the columns and rows of the matrix, with multiplication by correction "twiddle factors" in between.
The algorithm is named after an article by David H. Bailey, FFTs in external or hierarchical memory, published in 1989. In this article, Bailey credits the algorithm to W. M. Gentleman and G. Sande, who published their paper, Fast Fourier Transforms: for fun and profit, in 1966, more than two decades earlier. The algorithm can be considered a radix- FFT decomposition.
Let be the transform size, and let the input data be represented as a matrix. Bailey's four-step FFT consists of the following steps:
When the component FFTs produce their outputs in natural order, the resulting transform is also in natural order and does not require a separate bit-reversal permutation. Bailey noted that and don't need to be equal, although on many systems the algorithm is the most efficient when they are chosen as close as possible to .
The algorithm resembles a 2-dimensional FFT; three-dimensional and higher dimensional extensions are known as 5-step FFT, 6-step FFT, etc.
The Bailey FFT is typically used for computing DFTs of large datasets, such as those used in scientific and engineering applications. It has been used to compute FFTs of datasets with billions of elements; when applied to the number-theoretic transform, datasets on the order of 1012 elements were processed in the mid-2000s.
The Bailey FFT's four step decomposition improves memory locality by replacing one large transform with groups of smaller transforms that can be performed on contiguous portions of data. If the component transforms fit within a faster level of a memory hierarchy, then the accesses during those transforms can be served from that level rather than from a slower level of memory.
Likewise, the matrix transpose rearranges the data so that the second set of component transforms can be performed with better access patterns. The original intention of Bailey was to develop a method for systems in which the complete dataset could not be held in fast memory, which allows the transform to be organized around transfers between levels of a hierarchical memory system.
{{cite journal}}: Cite uses deprecated parameter |citeseerx= (help)