Fast Fourier transform: Difference between revisions

Jump to navigation Jump to search
imported>Kvng
commas
 
imported>Kvng
lead: reorder for clarity. link first occ. consistent terminology.
 
Line 4: Line 4:
[[File:DIT-FFT-butterfly.svg|thumb|An example FFT algorithm structure, using a decomposition into half-size FFTs]]
[[File:DIT-FFT-butterfly.svg|thumb|An example FFT algorithm structure, using a decomposition into half-size FFTs]]
[[File:FFT of Cosine Summation Function.svg|thumb|A discrete Fourier analysis of a sum of cosine waves at 10, 20, 30, 40, and 50 Hz]]
[[File:FFT of Cosine Summation Function.svg|thumb|A discrete Fourier analysis of a sum of cosine waves at 10, 20, 30, 40, and 50 Hz]]
[[File:Simple time domain vs frequency domain.svg|thumb|Time-based representation (above) and frequency-based representation (below) of the same signal, where the lower representation can be obtained from the upper one by Fourier transformation]]


A '''fast Fourier transform''' ('''FFT''') is an [[algorithm]] that computes the [[discrete Fourier transform]] (DFT) of a sequence, or its inverse (IDFT). A [[Fourier transform]] converts a signal from its original domain (often time or space) to a representation in the [[frequency domain]] and vice versa.
A '''fast Fourier transform''' ('''FFT''') is an [[algorithm]] that computes the [[discrete Fourier transform]] (DFT), or its inverse (IDFT), of a [[sequence]]. A [[Fourier transform]] converts a signal from its original domain (often time or space) to a representation in the [[frequency domain]] and vice versa.


The DFT is obtained by decomposing a [[sequence]] of values into components of different frequencies.<ref name="Heideman_Johnson_Burrus_1984" /> This operation is useful in many fields, but computing it directly from the definition is often too slow to be practical. An FFT rapidly computes such transformations by [[Matrix decomposition|factorizing]] the [[DFT matrix]] into a product of [[Sparse matrix|sparse]] (mostly zero) factors.<ref name="Loan_1992" /> As a result, it manages to reduce the [[Computational complexity theory|complexity]] of computing the DFT from <math display="inline">O(n^2)</math>, which arises if one simply applies the definition of DFT, to <math display="inline">O(n \log n)</math>, where {{mvar|n}} is the data size. The difference in speed can be enormous, especially for long data sets where {{mvar|n}} may be in the thousands or millions.
The DFT is obtained by decomposing a sequence of values into components of different frequencies.<ref name="Heideman_Johnson_Burrus_1984" /> This operation is useful in many fields, but computing it directly from the definition is often too slow to be practical. An FFT rapidly computes such transformations by [[Matrix decomposition|factorizing]] the [[DFT matrix]] into a product of [[Sparse matrix|sparse]] (mostly zero) factors.<ref name="Loan_1992" /> As a result, it manages to reduce the [[Computational complexity theory|complexity]] of computing the DFT from <math display="inline">O(n^2)</math>, which arises if one simply applies the definition of DFT, to <math display="inline">O(n \log n)</math>, where {{mvar|n}} is the length of the sequence. The difference in speed can be enormous, especially for long sequences where {{mvar|n}} may be in the thousands or millions.


As the FFT is merely an algebraic refactoring of terms within the DFT, the DFT and the FFT both perform mathematically equivalent and interchangeable operations, assuming that all terms are computed with infinite precision.  However, in the presence of [[round-off error]], many FFT algorithms are much more accurate than evaluating the DFT definition directly or indirectly.
As the FFT is merely an algebraic refactoring of terms within the DFT, the DFT and the FFT both perform mathematically equivalent and interchangeable operations, assuming that all terms are computed with infinite precision.  However, in the presence of [[round-off error]], many FFT algorithms are much more accurate than evaluating the DFT definition directly or indirectly. There are many different FFT algorithms based on a wide range of published theories, from simple [[complex number|complex-number arithmetic]] to [[group theory]] and [[number theory]]. The best-known FFT algorithms depend upon the [[factorization]] of {{mvar|n}}, but there are FFTs with <math>O(n \log n)</math> complexity for all {{mvar|n}}, including [[prime]] values. Many FFT algorithms depend only on the fact that <math display="inline">e^{-2\pi i/n}</math> is an {{mvar|n}}th [[primitive root of unity]], and thus can be applied to analogous transforms over any [[finite field]], such as [[number-theoretic transform]]s. Since the inverse DFT is the same as the DFT, but with the opposite sign in the exponent and a {{math|1/''n''}} factor, any FFT algorithm can easily be adapted for it.


[[File:Simple time domain vs frequency domain.svg|thumb|Time-based representation (above) and frequency-based representation (below) of the same signal, where the lower representation can be obtained from the upper one by Fourier transformation]]
Fast Fourier transforms are widely used for [[discrete Fourier transform#Applications|applications]] in engineering, music, science, and mathematics. The basic ideas were popularized in 1965, but some algorithms had been derived as early as 1805.<ref name="Heideman_Johnson_Burrus_1984"/> In 1994, [[Gilbert Strang]] described the FFT as "the most important [[numerical algorithm]] of our lifetime",<ref name="Strang_1994"/><ref>{{Cite book |last1=Kent |first1=Raymond D. |url=https://archive.org/details/acousticanalysis0000kent_r5w4/page/61 |title=The Acoustic Analysis of Speech |last2=Read |first2=Charles |date=2002 |publisher=Singular/Thomson Learning |isbn=978-0-7693-0112-9 |edition=2nd |location= |pages=61}}</ref> and it was included in Top 10 Algorithms of 20th Century by the [[IEEE]] magazine ''Computing in Science & Engineering''.<ref name="Dongarra_Sullivan_2000"/>
 
Fast Fourier transforms are widely used for [[discrete Fourier transform#Applications|applications]] in engineering, music, science, and mathematics. The basic ideas were popularized in 1965, but some algorithms had been derived as early as 1805.<ref name="Heideman_Johnson_Burrus_1984"/> In 1994, [[Gilbert Strang]] described the FFT as "the most important [[numerical algorithm]] of our lifetime",<ref name="Strang_1994"/><ref name="Kent_2002"/> and it was included in Top 10 Algorithms of 20th Century by the [[IEEE]] magazine ''Computing in Science & Engineering''.<ref name="Dongarra_Sullivan_2000"/>
 
There are many different FFT algorithms based on a wide range of published theories, from simple [[complex number|complex-number arithmetic]] to [[group theory]] and [[number theory]]. The best-known FFT algorithms depend upon the [[factorization]] of {{mvar|n}}, but there are FFTs with <math>O(n \log n)</math> complexity for all, even [[prime]], {{mvar|n}}. Many FFT algorithms depend only on the fact that <math display="inline">e^{-2\pi i/n}</math> is an {{mvar|n}}th [[primitive root of unity]], and thus can be applied to analogous transforms over any [[finite field]], such as [[number-theoretic transform]]s. Since the inverse DFT is the same as the DFT, but with the opposite sign in the exponent and a {{math|1/''n''}} factor, any FFT algorithm can easily be adapted for it.


==History==
==History==
Line 22: Line 19:
Between 1805 and 1965, some versions of FFT were published by other authors. [[Frank Yates]] in 1932 published his version called ''interaction algorithm'', which provided [[Fast Walsh–Hadamard transform|efficient computation of Hadamard and Walsh transforms]].<ref name="Yates_1937"/> Yates' algorithm is still used in the field of statistical design and analysis of experiments. In 1942, [[G. C. Danielson]] and [[Cornelius Lanczos]] published their version to compute DFT for [[x-ray crystallography]], a field where calculation of Fourier transforms presented a formidable bottleneck.<ref name="Danielson_Lanczos_1942"/><ref name="Lanczos_1956"/> While many methods in the past had focused on reducing the constant factor for <math display="inline">O(n^2)</math> computation by taking advantage of symmetries, Danielson and Lanczos realized that one could use the periodicity and apply a doubling trick to "double [{{mvar|n}}] with only slightly more than double the labor", though like Gauss they did not do the analysis to discover that this led to <math display="inline">O(n \log n)</math> scaling.<ref name="Cooley_Lewis_Welch_1967"/> In 1958, [[I. J. Good]] published a paper establishing the [[prime-factor FFT algorithm]] that applies to discrete Fourier transforms of size <math display="inline">n=n_1 n_2</math>, where <math>n_1</math> and <math>n_2</math> are coprime.<ref>{{Cite journal |last=Good |first=I. J. |date=July 1958 |title=The Interaction Algorithm and Practical Fourier Analysis |url=https://academic.oup.com/jrsssb/article/20/2/361/7027226?login=false |journal=Journal of the Royal Statistical Society, Series B (Methodological) |volume=20 |issue=2 |pages=361–372 |doi=10.1111/j.2517-6161.1958.tb00300.x|url-access=subscription }}</ref>
Between 1805 and 1965, some versions of FFT were published by other authors. [[Frank Yates]] in 1932 published his version called ''interaction algorithm'', which provided [[Fast Walsh–Hadamard transform|efficient computation of Hadamard and Walsh transforms]].<ref name="Yates_1937"/> Yates' algorithm is still used in the field of statistical design and analysis of experiments. In 1942, [[G. C. Danielson]] and [[Cornelius Lanczos]] published their version to compute DFT for [[x-ray crystallography]], a field where calculation of Fourier transforms presented a formidable bottleneck.<ref name="Danielson_Lanczos_1942"/><ref name="Lanczos_1956"/> While many methods in the past had focused on reducing the constant factor for <math display="inline">O(n^2)</math> computation by taking advantage of symmetries, Danielson and Lanczos realized that one could use the periodicity and apply a doubling trick to "double [{{mvar|n}}] with only slightly more than double the labor", though like Gauss they did not do the analysis to discover that this led to <math display="inline">O(n \log n)</math> scaling.<ref name="Cooley_Lewis_Welch_1967"/> In 1958, [[I. J. Good]] published a paper establishing the [[prime-factor FFT algorithm]] that applies to discrete Fourier transforms of size <math display="inline">n=n_1 n_2</math>, where <math>n_1</math> and <math>n_2</math> are coprime.<ref>{{Cite journal |last=Good |first=I. J. |date=July 1958 |title=The Interaction Algorithm and Practical Fourier Analysis |url=https://academic.oup.com/jrsssb/article/20/2/361/7027226?login=false |journal=Journal of the Royal Statistical Society, Series B (Methodological) |volume=20 |issue=2 |pages=361–372 |doi=10.1111/j.2517-6161.1958.tb00300.x|url-access=subscription }}</ref>


James Cooley and John Tukey independently rediscovered these earlier algorithms<ref name="Heideman_Johnson_Burrus_1985"/> and published a [[Cooley–Tukey FFT algorithm|more general FFT]] in 1965 that is applicable when {{mvar|n}} is composite and not necessarily a power of 2, as well as analyzing the <math display="inline">O(n \log n)</math> scaling.<ref name="Cooley_Tukey_1965"/> Tukey came up with the idea during a meeting of [[President Kennedy]]'s Science Advisory Committee where a discussion topic involved detecting nuclear tests by the Soviet Union by setting up sensors to surround the country from outside. To analyze the output of these sensors, an FFT algorithm would be needed. In discussion with Tukey, [[Richard Garwin]] recognized the general applicability of the algorithm not just to national security problems, but also to a wide range of problems including one of immediate interest to him, determining the periodicities of the spin orientations in a 3-D crystal of Helium-3.<ref name="Cooley_1987"/> Garwin gave Tukey's idea to Cooley (both worked at [[Thomas J. Watson Research Center|IBM's Watson labs]]) for implementation.<ref name="Garwin_1969"/> Cooley and Tukey published the paper in a relatively short time of six months.<ref name="Rockmore_2000"/> As Tukey did not work at IBM, the patentability of the idea was doubted and the algorithm went into the public domain, which, through the computing revolution of the next decade, made FFT one of the indispensable algorithms in [[digital signal processing]].
James Cooley and John Tukey independently rediscovered these earlier algorithms<ref name="Heideman_Johnson_Burrus_1985"/> and published a [[Cooley–Tukey FFT algorithm|more general FFT]] in 1965 that is applicable when {{mvar|n}} is composite and not necessarily a power of 2, as well as analyzing the <math display="inline">O(n \log n)</math> scaling.<ref name="Cooley_Tukey_1965"/> Tukey came up with the idea during a meeting of [[President Kennedy]]'s Science Advisory Committee, where a discussion topic involved detecting nuclear tests by the Soviet Union by setting up sensors to surround the country from outside. To analyze the output of these sensors, an FFT algorithm would be needed. In discussion with Tukey, [[Richard Garwin]] recognized the general applicability of the algorithm not just to national security problems, but also to a wide range of problems including one of immediate interest to him, determining the periodicities of the spin orientations in a 3-D crystal of Helium-3.<ref name="Cooley_1987"/> Garwin gave Tukey's idea to Cooley (both worked at [[Thomas J. Watson Research Center|IBM's Watson labs]]) for implementation.<ref name="Garwin_1969"/> Cooley and Tukey published the paper in a relatively short time of six months.<ref name="Rockmore_2000"/> As Tukey did not work at IBM, the patentability of the idea was doubted and the algorithm went into the public domain, which, through the computing revolution of the next decade, made FFT one of the indispensable algorithms in [[digital signal processing]].


==Definition==
==Definition==
Line 33: Line 30:
Evaluating this definition directly requires <math display="inline">O(n^2)</math> operations: there are {{mvar|n}} outputs {{mvar|X{{sub|k}}}}{{hairsp}}, and each output requires a sum of {{mvar|n}} terms. An FFT is any method to compute the same results in <math display="inline">O(n \log n)</math> operations. All known FFT algorithms require <math display="inline">O(n \log n)</math> operations, although there is no known proof that lower complexity is impossible.<ref name="Frigo_Johnson_2007"/>
Evaluating this definition directly requires <math display="inline">O(n^2)</math> operations: there are {{mvar|n}} outputs {{mvar|X{{sub|k}}}}{{hairsp}}, and each output requires a sum of {{mvar|n}} terms. An FFT is any method to compute the same results in <math display="inline">O(n \log n)</math> operations. All known FFT algorithms require <math display="inline">O(n \log n)</math> operations, although there is no known proof that lower complexity is impossible.<ref name="Frigo_Johnson_2007"/>


To illustrate the savings of an FFT, consider the count of complex multiplications and additions for <math display="inline">n=4096</math> data points. Evaluating the DFT's sums directly involves <math display="inline">n^2</math> complex multiplications and <math display="inline">n(n-1)</math> complex additions, of which <math display="inline">O(n)</math> operations can be saved by eliminating trivial operations such as multiplications by 1, leaving about 30 million operations. In contrast, the radix-2 [[#Cooley–Tukey algorithm|Cooley–Tukey algorithm]], for {{mvar|n}} a power of 2, can compute the same result with only <math display="inline">(n/2)\log_2(n)</math> complex multiplications (again, ignoring simplifications of multiplications by 1 and similar) and <math display="inline">n\log_2(n)</math> complex additions, in total about 30,000 operations — a thousand times less than with direct evaluation. In practice, actual performance on modern computers is usually dominated by factors other than the speed of arithmetic operations and the analysis is a complicated subject (for example, see Frigo & [[Steven G. Johnson|Johnson]], 2005),<ref name="Frigo_Johnson_2005"/> but the overall improvement from <math display="inline">O(n^2)</math> to <math display="inline">O(n \log n)</math> remains.
To illustrate the savings of an FFT, consider the count of complex multiplications and additions for <math display="inline">n=4096</math> data points. Evaluating the DFT's sums directly involves <math display="inline">n^2</math> complex multiplications and <math display="inline">n(n-1)</math> complex additions, of which <math display="inline">O(n)</math> operations can be saved by eliminating trivial operations such as multiplications by 1, leaving about 30 million operations. In contrast, the radix-2 [[#Cooley–Tukey algorithm|Cooley–Tukey algorithm]], for {{mvar|n}} a power of 2, can compute the same result with only <math display="inline">(n/2)\log_2(n)</math> complex multiplications (again, ignoring simplifications of multiplications by 1 and similar) and <math display="inline">n\log_2(n)</math> complex additions, in total about 70,000 operations — more than four-hundred times less than with direct evaluation. In practice, actual performance on modern computers is usually dominated by factors other than the speed of arithmetic operations and the analysis is a complicated subject (for example, see Frigo & [[Steven G. Johnson|Johnson]], 2005),<ref name="Frigo_Johnson_2005"/> but the overall improvement from <math display="inline">O(n^2)</math> to <math display="inline">O(n \log n)</math> remains.


==Algorithms==
==Algorithms==
Line 64: Line 61:
:<math>X_{n-k} = X_k^*</math>
:<math>X_{n-k} = X_k^*</math>


and efficient FFT algorithms have been designed for this situation (see e.g., Sorensen, 1987).<ref name="Sorensen_Jones_Heideman_Burrus_1987_1"/><ref name="Sorensen_Jones_Heideman_Burrus_1987_2"/> One approach consists of taking an ordinary algorithm (e.g. Cooley–Tukey) and removing the redundant parts of the computation, saving roughly a factor of two in time and memory. Alternatively, it is possible to express an ''even''-length real-input DFT as a complex DFT of half the length (whose real and imaginary parts are the even/odd elements of the original real data), followed by <math>O(n)</math> post-processing operations.
and efficient FFT algorithms have been designed for this situation (see e.g., Sorensen, 1987).<ref name="Sorensen_Jones_Heideman_Burrus_1987_1"/><ref name="Sorensen_Jones_Heideman_Burrus_1987_2"/> One approach consists of taking an ordinary algorithm (e.g., Cooley–Tukey) and removing the redundant parts of the computation, saving roughly a factor of two in time and memory. Alternatively, it is possible to express an ''even''-length real-input DFT as a complex DFT of half the length (whose real and imaginary parts are the even/odd elements of the original real data), followed by <math>O(n)</math> post-processing operations.


It was once believed that real-input DFTs could be more efficiently computed by means of the [[discrete Hartley transform]] (DHT), but it was subsequently argued that a specialized real-input DFT algorithm (FFT) can typically be found that requires fewer operations than the corresponding DHT algorithm (FHT) for the same number of inputs.<ref name="Sorensen_Jones_Heideman_Burrus_1987_1"/> Bruun's algorithm (above) is another method that was initially proposed to take advantage of real inputs, but it has not proved popular.
It was once believed that real-input DFTs could be more efficiently computed by means of the [[discrete Hartley transform]] (DHT), but it was subsequently argued that a specialized real-input DFT algorithm (FFT) can typically be found that requires fewer operations than the corresponding DHT algorithm (FHT) for the same number of inputs.<ref name="Sorensen_Jones_Heideman_Burrus_1987_1"/> Bruun's algorithm (above) is another method that was initially proposed to take advantage of real inputs, but it has not proved popular.
Line 80: Line 77:
A tight lower bound is not known on the number of required additions, although lower bounds have been proved under some restrictive assumptions on the algorithms. In 1973, Morgenstern<ref name="Morgenstern_1973"/> proved an <math>\Omega(n \log n)</math> lower bound on the addition count for algorithms where the multiplicative constants have bounded magnitudes (which is true for most but not all FFT algorithms).  [[Victor Pan|Pan]] (1986)<ref name="Pan_1986"/> proved an <math>\Omega(n \log n)</math> lower bound assuming a bound on a measure of the FFT algorithm's ''asynchronicity'', but the generality of this assumption is unclear. For the case of power-of-two {{mvar|n}}, [[Christos Papadimitriou|Papadimitriou]] (1979)<ref name="Papadimitriou_1979"/> argued that the number <math display="inline">n \log_2 n</math> of complex-number additions achieved by Cooley–Tukey algorithms is ''optimal'' under certain assumptions on the [[Graph (discrete mathematics)|graph]] of the algorithm (his assumptions imply, among other things, that no additive identities in the roots of unity are exploited). (This argument would imply that at least <math display="inline">2N \log_2 N</math> real additions are required, although this is not a tight bound because extra additions are required as part of complex-number multiplications.) Thus far, no published FFT algorithm has achieved fewer than <math display="inline">n \log_2 n</math> complex-number additions (or their equivalent) for power-of-two {{mvar|n}}.
A tight lower bound is not known on the number of required additions, although lower bounds have been proved under some restrictive assumptions on the algorithms. In 1973, Morgenstern<ref name="Morgenstern_1973"/> proved an <math>\Omega(n \log n)</math> lower bound on the addition count for algorithms where the multiplicative constants have bounded magnitudes (which is true for most but not all FFT algorithms).  [[Victor Pan|Pan]] (1986)<ref name="Pan_1986"/> proved an <math>\Omega(n \log n)</math> lower bound assuming a bound on a measure of the FFT algorithm's ''asynchronicity'', but the generality of this assumption is unclear. For the case of power-of-two {{mvar|n}}, [[Christos Papadimitriou|Papadimitriou]] (1979)<ref name="Papadimitriou_1979"/> argued that the number <math display="inline">n \log_2 n</math> of complex-number additions achieved by Cooley–Tukey algorithms is ''optimal'' under certain assumptions on the [[Graph (discrete mathematics)|graph]] of the algorithm (his assumptions imply, among other things, that no additive identities in the roots of unity are exploited). (This argument would imply that at least <math display="inline">2N \log_2 N</math> real additions are required, although this is not a tight bound because extra additions are required as part of complex-number multiplications.) Thus far, no published FFT algorithm has achieved fewer than <math display="inline">n \log_2 n</math> complex-number additions (or their equivalent) for power-of-two {{mvar|n}}.


A third problem is to minimize the ''total'' number of real multiplications and additions, sometimes called the ''arithmetic complexity'' (although in this context it is the exact count and not the asymptotic complexity that is being considered).  Again, no tight lower bound has been proven. Since 1968, however, the lowest published count for power-of-two {{mvar|n}} was long achieved by the [[split-radix FFT algorithm]], which requires <math display="inline">4n\log_2(n) - 6n + 8</math> real multiplications and additions for {{Math|''n'' > 1}}. This was recently reduced to <math display="inline">\sim \frac{34}{9} n \log_2 n</math> (Johnson and Frigo, 2007;<ref name="Frigo_Johnson_2007"/> Lundy and Van Buskirk, 2007<ref name="Lundy_Buskirk_2007"/>). A slightly larger count (but still better than split radix for {{math|''n'' ≥ 256}}) was shown to be provably optimal for {{math|''n'' ≤ 512}} under additional restrictions on the possible algorithms (split-radix-like flowgraphs with unit-modulus multiplicative factors), by reduction to a [[satisfiability modulo theories]] problem solvable by [[Proof by exhaustion|brute force]] (Haynal & Haynal, 2011).<ref name="Haynal_2011"/>
A third problem is to minimize the ''total'' number of real multiplications and additions, sometimes called the ''arithmetic complexity'' (although in this context it is the exact count and not the asymptotic complexity that is being considered).  Again, no tight lower bound has been proven. Since 1968, however, the lowest published count for power-of-two {{mvar|n}} was long achieved by the [[split-radix FFT algorithm]], which requires <math display="inline">4n\log_2(n) - 6n + 8</math> real multiplications and additions for {{Math|''n'' > 1}}. This was further reduced to <math display="inline">\sim \frac{34}{9} n \log_2 n</math> (Johnson and Frigo, 2007;<ref name="Frigo_Johnson_2007"/> Lundy and Van Buskirk, 2007<ref name="Lundy_Buskirk_2007"/>). A slightly larger count (but still better than split radix for {{math|''n'' ≥ 256}}) was shown to be provably optimal for {{math|''n'' ≤ 512}} under additional restrictions on the possible algorithms (split-radix-like flowgraphs with unit-modulus multiplicative factors), by reduction to a [[satisfiability modulo theories]] problem solvable by [[Proof by exhaustion|brute force]] (Haynal & Haynal, 2011).<ref name="Haynal_2011"/>


Most of the attempts to lower or prove the complexity of FFT algorithms have focused on the ordinary complex-data case, because it is the simplest. However, complex-data FFTs are so closely related to algorithms for related problems such as real-data FFTs, [[discrete cosine transform]]s, [[discrete Hartley transform]]s, and so on, that any improvement in one of these would immediately lead to improvements in the others (Duhamel & Vetterli, 1990).<ref name="Duhamel_Vetterli_1990"/>
Most of the attempts to lower or prove the complexity of FFT algorithms have focused on the ordinary complex-data case, because it is the simplest. However, complex-data FFTs are so closely related to algorithms for related problems, such as real-data FFTs, [[discrete cosine transform]]s, [[discrete Hartley transform]]s, and so on, that any improvement in one of these would immediately lead to improvements in the others (Duhamel & Vetterli, 1990).<ref name="Duhamel_Vetterli_1990"/>


===Approximations===
===Approximations===
Line 88: Line 85:


===Accuracy===
===Accuracy===
FFT algorithms have errors when finite-precision floating-point arithmetic is used, but these errors are typically quite small; most FFT algorithms, e.g. Cooley–Tukey, have excellent numerical properties as a consequence of the [[pairwise summation]] structure of the algorithms.  The upper bound on the [[relative error]] for the Cooley–Tukey algorithm is <math display="inline">O(\varepsilon \log n)</math>, compared to <math display="inline">O(\varepsilon n^{3/2})</math> for the naïve DFT formula,<ref name="Gentleman_Sande_1966"/> where {{math|{{varepsilon}}}} is the machine floating-point relative precision. In fact, the [[root mean square]] (rms) errors are much better than these upper bounds, being only <math display="inline">O(\varepsilon \sqrt{\log n})</math> for Cooley–Tukey and <math display="inline">O(\varepsilon \sqrt{n})</math> for the naïve DFT (Schatzman, 1996).<ref name="Schatzman_1996"/> These results, however, are very sensitive to the accuracy of the twiddle factors used in the FFT (i.e. the [[trigonometric function]] values), and it is not unusual for incautious FFT implementations to have much worse accuracy, e.g. if they use inaccurate [[generating trigonometric tables|trigonometric recurrence]] formulas. Some FFTs other than Cooley–Tukey, such as the Rader–Brenner algorithm, are intrinsically less stable.
FFT algorithms have errors when finite-precision floating-point arithmetic is used, but these errors are typically quite small; most FFT algorithms, e.g., Cooley–Tukey, have excellent numerical properties as a consequence of the [[pairwise summation]] structure of the algorithms.  The upper bound on the [[relative error]] for the Cooley–Tukey algorithm is <math display="inline">O(\varepsilon \log n)</math>, compared to <math display="inline">O(\varepsilon n^{3/2})</math> for the naïve DFT formula,<ref name="Gentleman_Sande_1966"/> where {{math|{{varepsilon}}}} is the machine floating-point relative precision. In fact, the [[root mean square]] (rms) errors are much better than these upper bounds, being only <math display="inline">O(\varepsilon \sqrt{\log n})</math> for Cooley–Tukey and <math display="inline">O(\varepsilon \sqrt{n})</math> for the naïve DFT (Schatzman, 1996).<ref name="Schatzman_1996"/> These results, however, are very sensitive to the accuracy of the twiddle factors used in the FFT (i.e. the [[trigonometric function]] values), and it is not unusual for incautious FFT implementations to have much worse accuracy, e.g. if they use inaccurate [[generating trigonometric tables|trigonometric recurrence]] formulas. Some FFTs other than Cooley–Tukey, such as the Rader–Brenner algorithm, are intrinsically less stable.


In [[fixed-point arithmetic]], the finite-precision errors accumulated by FFT algorithms are worse, with rms errors growing as <math display="inline">O(\sqrt{n})</math> for the Cooley–Tukey algorithm (Welch, 1969).<ref name="Welch_1969"/> Achieving this accuracy requires careful attention to scaling to minimize loss of precision, and fixed-point FFT algorithms involve rescaling at each intermediate stage of decompositions like Cooley–Tukey.
In [[fixed-point arithmetic]], the finite-precision errors accumulated by FFT algorithms are worse, with rms errors growing as <math display="inline">O(\sqrt{n})</math> for the Cooley–Tukey algorithm (Welch, 1969).<ref name="Welch_1969"/> Achieving this accuracy requires careful attention to scaling to minimize loss of precision, and fixed-point FFT algorithms involve rescaling at each intermediate stage of decompositions like Cooley–Tukey.
Line 137: Line 134:
* solving [[Recurrence relation|difference equation]]s,
* solving [[Recurrence relation|difference equation]]s,
* computation of [[Mass spectrometry|isotopic distributions]].<ref name="Fernandez-de-Cossio_2012"/>
* computation of [[Mass spectrometry|isotopic distributions]].<ref name="Fernandez-de-Cossio_2012"/>
* modulation and demodulation of complex data symbols using [[orthogonal frequency-division multiplexing]] (OFDM) for 5G, LTE, Wi-Fi, DSL, and other modern communication systems.


An original application of the FFT in [[finance]] particularly in the [[Valuation of options]] was developed by Marcello Minenna.<ref name="MinennaJBF">{{cite journal |title=A revisited and stable Fourier transform method for affine jump diffusion models |author-first1=Marcello |author-last1=Minenna |date=October 2008 |journal=Journal of Banking and Finance |doi=10.1016/j.jbankfin.2007.05.019|volume=32 |issue=10 |pages=2064–2075}}</ref>
=== Telecommunications ===
In modern wireless communication standards, the FFT is a critical component for processing signals. Specifically, it is utilized in [[Orthogonal frequency-division multiplexing]] (OFDM) systems, such as [[4G LTE]] and [[5G NR]].<ref name="IEEE_FFT">"The Fast Fourier Transform and Its Applications," IEEE Signal Processing Magazine.</ref> The efficiency of the FFT allows for high-speed data transmission by dividing a wideband signal into multiple closely spaced orthogonal subcarriers.<ref name="Anwar_LTE">Anwar, K., et al. "Double FFT for LTE Standards," IEEE Xplore.</ref> This technology is essential for reducing interference and optimizing power consumption in mobile devices.<ref name="Anwar_LTE" />


== Alternatives ==
== Alternatives ==
Line 151: Line 148:
; Approximate FFTs: For applications such as MRI, it is necessary to compute DFTs for nonuniformly spaced grid points and/or frequencies. Multipole-based approaches can compute approximate quantities with factor of runtime increase.<ref name="Dutt_Rokhlin_1993"/>
; Approximate FFTs: For applications such as MRI, it is necessary to compute DFTs for nonuniformly spaced grid points and/or frequencies. Multipole-based approaches can compute approximate quantities with factor of runtime increase.<ref name="Dutt_Rokhlin_1993"/>
; [[Fourier transform on finite groups|Group FFTs]]: The FFT may also be explained and interpreted using [[group representation theory]], allowing for further generalization. A function on any compact group, including non-cyclic, has an expansion in terms of a basis of irreducible matrix elements. It remains an active area of research to find an efficient algorithm for performing this change of basis. Applications including efficient [[spherical harmonic]] expansion, analyzing certain [[Markov process]]es, robotics etc.<ref name="Rockmore_2004"/>
; [[Fourier transform on finite groups|Group FFTs]]: The FFT may also be explained and interpreted using [[group representation theory]], allowing for further generalization. A function on any compact group, including non-cyclic, has an expansion in terms of a basis of irreducible matrix elements. It remains an active area of research to find an efficient algorithm for performing this change of basis. Applications including efficient [[spherical harmonic]] expansion, analyzing certain [[Markov process]]es, robotics etc.<ref name="Rockmore_2004"/>
; [[Quantum Fourier transform|Quantum FFTs]]: Shor's fast algorithm for [[integer factorization]] on a quantum computer has a subroutine to compute DFT of a binary vector. This is implemented as a sequence of 1- or 2-bit quantum gates now known as quantum FFT, which is effectively the Cooley–Tukey FFT realized as a particular factorization of the Fourier matrix. Extension to these ideas is currently being explored.<ref>{{Cite journal |title=Quantum circuit for the fast Fourier transform |journal=Quantum Information Processing |volume=19 |issue=277 |year=2020 |first1=Asaka |last1=Ryo |first2=Sakai |last2=Kazumitsu |first3=Yahagi |last3=Ryoko |page=277 |doi=10.1007/s11128-020-02776-5 |arxiv=1911.03055 |bibcode=2020QuIP...19..277A |s2cid=207847474 |url=https://link.springer.com/article/10.1007/s11128-020-02776-5}}</ref>
; [[Quantum Fourier transform|Quantum FFTs]]: Shor's fast algorithm for [[integer factorization]] on a quantum computer has a subroutine to compute DFT of a binary vector. This is implemented as a sequence of 1- or 2-bit quantum gates now known as quantum FFT, which is effectively the Cooley–Tukey FFT realized as a particular factorization of the Fourier matrix. Extensions to these ideas are currently being explored.<ref>{{Cite journal |title=Quantum circuit for the fast Fourier transform |journal=Quantum Information Processing |volume=19 |issue=277 |year=2020 |first1=Asaka |last1=Ryo |first2=Sakai |last2=Kazumitsu |first3=Yahagi |last3=Ryoko |page=277 |doi=10.1007/s11128-020-02776-5 |arxiv=1911.03055 |bibcode=2020QuIP...19..277A |s2cid=207847474 |url=https://link.springer.com/article/10.1007/s11128-020-02776-5}}</ref>


==Language reference==
==Language reference==
Line 203: Line 200:


FFT implementations:
FFT implementations:
* [[Fastest Fourier Transform in the West|FFTW]] – a free software library developed by Matteo Frigo and Steven G. Johnson at MIT
* [[FFTReal]] – a highly optimized clean and concise implementation with support for scalar or a SIMD vector in C++ class by Dmitry Boldyrev hosted at GITHUB https://github.com/mewza/realfft/
* [[ALGLIB]] – a dual/GPL-licensed C++ and C# library (also supporting other languages), with real/complex FFT implementation
* [[ALGLIB]] – a dual/GPL-licensed C++ and C# library (also supporting other languages), with real/complex FFT implementation
* [[FFTPACK]] – another Fortran FFT library (public domain)
* [[FFTPACK]] – another Fortran FFT library (public domain)
Line 212: Line 211:


Other links:
Other links:
* [[Butterfly diagram]] – a diagram used to describe FFTs
* [[Fast Algorithms for Multidimensional Signals]]
* [[Fast Fourier Transform Telescope]]
* [[Fast Walsh–Hadamard transform]]
* [[Generalized distributive law]]
* [[Least-squares spectral analysis]]
* [[Multidimensional discrete convolution]]
* [[Multidimensional transform]]
* [[Odlyzko–Schönhage algorithm]] applies the FFT to finite [[Dirichlet series]]
* [[Odlyzko–Schönhage algorithm]] applies the FFT to finite [[Dirichlet series]]
* [[Schönhage–Strassen algorithm]] – asymptotically fast multiplication algorithm for large integers
* [[Schönhage–Strassen algorithm]] – asymptotically fast multiplication algorithm for large integers
* [[Butterfly diagram]] – a diagram used to describe FFTs
* [[Spectral music]] (involves application of DFT analysis to musical composition)
* [[Spectral music]] (involves application of DFT analysis to musical composition)
* [[Spectrum analyzer]] – any of several devices that perform spectrum analysis, often via a DFT
* [[Spectrum analyzer]] – any of several devices that perform spectrum analysis, often via a DFT
* [[Time series]]
* [[Time series]]
* [[Fast Walsh–Hadamard transform]]
* [[Generalized distributive law]]
* [[Least-squares spectral analysis]]
* [[Multidimensional transform]]
* [[Multidimensional discrete convolution]]
* [[Fast Fourier Transform Telescope]]


==References==
==References==
{{Reflist|refs=
{{Reflist|refs=
<ref name="Loan_1992">{{cite book |author-first=Charles |author-last=Van Loan |title=Computational Frameworks for the Fast Fourier Transform |publisher=[[SIAM]] |date=1992}}</ref>
<ref name="Loan_1992">{{cite book |author-first=Charles |author-last=Van Loan |title=Computational Frameworks for the Fast Fourier Transform |publisher=[[SIAM]] |date=1992}}</ref>
<ref name="Heideman_Johnson_Burrus_1984">{{cite journal |author-last1=Heideman |author-first1=Michael T. |author-first2=Don H. |author-last2=Johnson |author-first3=Charles Sidney |author-last3=Burrus |author-link3=Charles Sidney Burrus |doi=10.1109/MASSP.1984.1162257 |citeseerx=10.1.1.309.181 |title=Gauss and the history of the fast Fourier transform |journal=IEEE ASSP Magazine |volume=1 |issue=4 |pages=14–21 |date=1984 |s2cid=10032502 |url=http://www.cis.rit.edu/class/simg716/Gauss_History_FFT.pdf |archive-url=https://web.archive.org/web/20130319053449/http://www.cis.rit.edu/class/simg716/Gauss_History_FFT.pdf |archive-date=2013-03-19 |url-status=live}}</ref>
<ref name="Heideman_Johnson_Burrus_1984">{{cite journal |author-last1=Heideman |author-first1=Michael T. |author-first2=Don H. |author-last2=Johnson |author-first3=Charles Sidney |author-last3=Burrus |author-link3=Charles Sidney Burrus |doi=10.1109/MASSP.1984.1162257 |citeseerx=10.1.1.309.181 |title=Gauss and the history of the fast Fourier transform |journal=IEEE ASSP Magazine |volume=1 |issue=4 |pages=14–21 |date=1984 |bibcode=1984IASSP...1...14H |s2cid=10032502 |url=http://www.cis.rit.edu/class/simg716/Gauss_History_FFT.pdf |archive-url=https://web.archive.org/web/20130319053449/http://www.cis.rit.edu/class/simg716/Gauss_History_FFT.pdf |archive-date=2013-03-19 |url-status=live}}</ref>
<ref name="Heideman_Burrus_1986">{{cite journal |author-first1=Michael T. |author-last1=Heideman |author-first2=Charles Sidney |author-last2=Burrus |author-link2=Charles Sidney Burrus |date=1986 |doi=10.1109/TASSP.1986.1164785 |title=On the number of multiplications necessary to compute a length-2<sup>''n''</sup> DFT |journal=[[IEEE Transactions on Acoustics, Speech, and Signal Processing]] |volume=34 |issue=1 |pages=91–95}}</ref>
<ref name="Heideman_Burrus_1986">{{cite journal |author-first1=Michael T. |author-last1=Heideman |author-first2=Charles Sidney |author-last2=Burrus |author-link2=Charles Sidney Burrus |date=1986 |doi=10.1109/TASSP.1986.1164785 |title=On the number of multiplications necessary to compute a length-2<sup>''n''</sup> DFT |journal=[[IEEE Transactions on Acoustics, Speech, and Signal Processing]] |volume=34 |issue=1 |pages=91–95 |bibcode=1986ITASS..34...91H }}</ref>
<ref name="Dongarra_Sullivan_2000">{{cite journal |title=Guest Editors' Introduction to the top 10 algorithms |journal=  Computing in Science & Engineering|date=January 2000 |issn=1521-9615 |pages=22–23 |volume=2 |issue=1 |doi=10.1109/MCISE.2000.814652 |author-first1=Jack |author-last1=Dongarra |author-first2=Francis |author-last2=Sullivan|bibcode=2000CSE.....2a..22D }}</ref>
<ref name="Dongarra_Sullivan_2000">{{cite journal |title=Guest Editors' Introduction to the top 10 algorithms |journal=  Computing in Science & Engineering|date=January 2000 |issn=1521-9615 |pages=22–23 |volume=2 |issue=1 |doi=10.1109/MCISE.2000.814652 |author-first1=Jack |author-last1=Dongarra |author-first2=Francis |author-last2=Sullivan|bibcode=2000CSE.....2a..22D }}</ref>
<ref name="Brenner_Rader_1976">{{cite journal |author-first1=Norman M. |author-last1=Brenner |author-first2=Charles M. |author-last2=Rader |date=1976 |title=A New Principle for Fast Fourier Transformation |journal=[[IEEE Transactions on Acoustics, Speech, and Signal Processing]] |volume=24 |issue=3 |doi=10.1109/TASSP.1976.1162805 |pages=264–266}}</ref>
<ref name="Brenner_Rader_1976">{{cite journal |author-first1=Norman M. |author-last1=Brenner |author-first2=Charles M. |author-last2=Rader |date=1976 |title=A New Principle for Fast Fourier Transformation |journal=[[IEEE Transactions on Acoustics, Speech, and Signal Processing]] |volume=24 |issue=3 |doi=10.1109/TASSP.1976.1162805 |pages=264–266 |bibcode=1976ITASS..24..264R }}</ref>
<ref name="Kent_2002">{{cite book |author-last1=Kent |author-first1=Ray D. |author-last2=Read |author-first2=Charles |date=2002 |title=Acoustic Analysis of Speech |publisher=Singular/Thomson Learning |isbn=0-7693-0112-6 }}</ref>
<ref name="Strang_1994">{{cite journal |author-last=Strang |author-first=Gilbert |author-link=Gilbert Strang |date=May–June 1994 |title=Wavelets |journal=[[American Scientist]] |volume=82 |issue=3 |pages=250–255 |jstor=29775194|bibcode=1994AmSci..82..250S }}</ref>
<ref name="Strang_1994">{{cite journal |author-last=Strang |author-first=Gilbert |author-link=Gilbert Strang |date=May–June 1994 |title=Wavelets |journal=[[American Scientist]] |volume=82 |issue=3 |pages=250–255 |jstor=29775194|bibcode=1994AmSci..82..250S }}</ref>
<ref name="Ergün_1995">{{cite book |author-first=Funda |author-last=Ergün|author-link=Funda Ergun |title=Proceedings of the twenty-seventh annual ACM symposium on Theory of computing - STOC '95 |chapter=Testing multivariate linear functions |date=1995 |doi=10.1145/225058.225167 |location=Kyoto, Japan |pages=407–416 |isbn=978-0897917186|s2cid=15512806 }}</ref>
<ref name="Ergün_1995">{{cite book |author-first=Funda |author-last=Ergün|author-link=Funda Ergun |title=Proceedings of the twenty-seventh annual ACM symposium on Theory of computing - STOC '95 |chapter=Testing multivariate linear functions |date=1995 |doi=10.1145/225058.225167 |location=Kyoto, Japan |pages=407–416 |isbn=978-0897917186|s2cid=15512806 }}</ref>
Line 246: Line 245:
<ref name="Lundy_Buskirk_2007">{{cite journal |author-first1=Thomas J. |author-last1=Lundy |author-first2=James |author-last2=Van Buskirk |date=2007 |title=A new matrix approach to real FFTs and convolutions of length 2<sup>k</sup> |journal=[[Computing (journal)|Computing]] |volume=80 |issue=1 |pages=23–45 |doi=10.1007/s00607-007-0222-6|s2cid=27296044 }}</ref>
<ref name="Lundy_Buskirk_2007">{{cite journal |author-first1=Thomas J. |author-last1=Lundy |author-first2=James |author-last2=Van Buskirk |date=2007 |title=A new matrix approach to real FFTs and convolutions of length 2<sup>k</sup> |journal=[[Computing (journal)|Computing]] |volume=80 |issue=1 |pages=23–45 |doi=10.1007/s00607-007-0222-6|s2cid=27296044 }}</ref>
<ref name="Papadimitriou_1979">{{cite journal |author-first=Christos H. |author-last=Papadimitriou |date=1979 |doi=10.1145/322108.322118 |title=Optimality of the fast Fourier transform |journal=[[Journal of the ACM]] |volume=26 |issue=1 |pages=95–102|s2cid=850634 |doi-access=free }}</ref>
<ref name="Papadimitriou_1979">{{cite journal |author-first=Christos H. |author-last=Papadimitriou |date=1979 |doi=10.1145/322108.322118 |title=Optimality of the fast Fourier transform |journal=[[Journal of the ACM]] |volume=26 |issue=1 |pages=95–102|s2cid=850634 |doi-access=free }}</ref>
<ref name="Sorensen_Jones_Heideman_Burrus_1987_1">{{cite journal |author-first1=Henrik V. |author-last1=Sorensen |author-first2=Douglas L. |author-last2=Jones |author-link2=Douglas L. Jones |author-first3=Michael T. |author-last3=Heideman |author-first4=Charles Sidney |author-last4=Burrus |author-link4=Charles Sidney Burrus |date=1987 |doi=10.1109/TASSP.1987.1165220 |title=Real-valued fast Fourier transform algorithms |journal=[[IEEE Transactions on Acoustics, Speech, and Signal Processing]] |volume=35 |issue=6 |pages=849–863 |citeseerx=10.1.1.205.4523}}</ref>
<ref name="Sorensen_Jones_Heideman_Burrus_1987_1">{{cite journal |author-first1=Henrik V. |author-last1=Sorensen |author-first2=Douglas L. |author-last2=Jones |author-link2=Douglas L. Jones |author-first3=Michael T. |author-last3=Heideman |author-first4=Charles Sidney |author-last4=Burrus |author-link4=Charles Sidney Burrus |date=1987 |doi=10.1109/TASSP.1987.1165220 |title=Real-valued fast Fourier transform algorithms |journal=[[IEEE Transactions on Acoustics, Speech, and Signal Processing]] |volume=35 |issue=6 |pages=849–863 |bibcode=1987ITASS..35..849S |citeseerx=10.1.1.205.4523}}</ref>
<ref name="Sorensen_Jones_Heideman_Burrus_1987_2">{{cite journal |doi=10.1109/TASSP.1987.1165284 |author-last1=Sorensen |author-first1=Henrik V. |author-last2=Jones |author-first2=Douglas L. |author-link2=Douglas L. Jones |author-last3=Heideman |author-first3=Michael T. |author-last4=Burrus |author-first4=Charles Sidney |author-link4=Charles Sidney Burrus |date=1987 |pages=1353 |issue=9 |volume=35 |title=Corrections to "Real-valued fast Fourier transform algorithms" |journal=[[IEEE Transactions on Acoustics, Speech, and Signal Processing]]}}</ref>
<ref name="Sorensen_Jones_Heideman_Burrus_1987_2">{{cite journal |doi=10.1109/TASSP.1987.1165284 |author-last1=Sorensen |author-first1=Henrik V. |author-last2=Jones |author-first2=Douglas L. |author-link2=Douglas L. Jones |author-last3=Heideman |author-first3=Michael T. |author-last4=Burrus |author-first4=Charles Sidney |author-link4=Charles Sidney Burrus |date=1987 |pages=1353 |issue=9 |volume=35 |title=Corrections to "Real-valued fast Fourier transform algorithms" |journal=[[IEEE Transactions on Acoustics, Speech, and Signal Processing]] |bibcode=1987ITASS..35R1353S }}</ref>
<ref name="Winograd_1978">{{cite journal |author-first=Shmuel |author-last=Winograd |date=1978 |doi=10.1090/S0025-5718-1978-0468306-4 |title=On computing the discrete Fourier transform |journal=[[Mathematics of Computation]] |volume=32 |issue=141 |pages=175–199 |jstor=2006266 |pmc=430186 |pmid=16592303}}</ref>
<ref name="Winograd_1978">{{cite journal |author-first=Shmuel |author-last=Winograd |date=1978 |doi=10.1090/S0025-5718-1978-0468306-4 |title=On computing the discrete Fourier transform |journal=[[Mathematics of Computation]] |volume=32 |issue=141 |pages=175–199 |jstor=2006266 |pmc=430186 |pmid=16592303}}</ref>
<ref name="Winograd_1979">{{cite journal |author-first=Shmuel |author-last=Winograd |title=On the multiplicative complexity of the discrete Fourier transform |journal=[[Advances in Mathematics]] |volume=32 |issue=2 |date=1979 |pages=83–117 |doi=10.1016/0001-8708(79)90037-9 |doi-access= }}</ref>
<ref name="Winograd_1979">{{cite journal |author-first=Shmuel |author-last=Winograd |title=On the multiplicative complexity of the discrete Fourier transform |journal=[[Advances in Mathematics]] |volume=32 |issue=2 |date=1979 |pages=83–117 |doi=10.1016/0001-8708(79)90037-9 |doi-access=free }}</ref>
<ref name="Morgenstern_1973">{{cite journal |author-first1=Jacques |author-last1=Morgenstern |date=1973 |doi=10.1145/321752.321761 |title=Note on a lower bound of the linear complexity of the fast Fourier transform |journal=[[Journal of the ACM]] |volume=20 |issue=2 |pages=305–306|s2cid=2790142 |doi-access=free }}</ref>
<ref name="Morgenstern_1973">{{cite journal |author-first1=Jacques |author-last1=Morgenstern |date=1973 |doi=10.1145/321752.321761 |title=Note on a lower bound of the linear complexity of the fast Fourier transform |journal=[[Journal of the ACM]] |volume=20 |issue=2 |pages=305–306|s2cid=2790142 |doi-access=free }}</ref>
<ref name="Mohlenkamp_1999">{{cite journal |doi=10.1007/BF01261607 |author-first1=Martin J. |author-last1=Mohlenkamp |date=1999 |title=A Fast Transform for Spherical Harmonics |journal=Journal of Fourier Analysis and Applications<!-- J. Fourier Anal. Appl. --> |volume=5 |issue=2–3 |pages=159–184 |bibcode=1999JFAA....5..159M |url=http://www.ohiouniversityfaculty.com/mohlenka/research/MOHLEN1999P.pdf |archive-url=https://web.archive.org/web/20170506033135/http://ohiouniversityfaculty.com/mohlenka/research/MOHLEN1999P.pdf |archive-date=2017-05-06 |url-status=live |access-date=2018-01-11 |citeseerx=10.1.1.135.9830|s2cid=119482349 }}</ref>
<ref name="Mohlenkamp_1999">{{cite journal |doi=10.1007/BF01261607 |author-first1=Martin J. |author-last1=Mohlenkamp |date=1999 |title=A Fast Transform for Spherical Harmonics |journal=Journal of Fourier Analysis and Applications<!-- J. Fourier Anal. Appl. --> |volume=5 |issue=2–3 |pages=159–184 |bibcode=1999JFAA....5..159M |url=http://www.ohiouniversityfaculty.com/mohlenka/research/MOHLEN1999P.pdf |archive-url=https://web.archive.org/web/20170506033135/http://ohiouniversityfaculty.com/mohlenka/research/MOHLEN1999P.pdf |archive-date=2017-05-06 |url-status=live |access-date=2018-01-11 |citeseerx=10.1.1.135.9830|s2cid=119482349 }}</ref>
Line 257: Line 256:
<ref name="Potts_Steidl_Tasche_2001">{{cite book |author-first1=Daniel |author-last1=Potts |author-first2=Gabriele |author-last2=Steidl|author2-link= Gabriele Steidl |author-first3=Manfred |author-last3=Tasche |date=2001 |chapter-url=http://www.tu-chemnitz.de/~potts/paper/ndft.pdf |archive-url=https://web.archive.org/web/20070926222858/http://www.tu-chemnitz.de/~potts/paper/ndft.pdf |archive-date=2007-09-26 |url-status=live |chapter=Fast Fourier transforms for nonequispaced data: A tutorial |editor-first1=J. J. |editor-last1=Benedetto |editor-first2=P. |editor-last2=Ferreira |title=Modern Sampling Theory: Mathematics and Applications |publisher=[[Birkhäuser]]}}</ref>
<ref name="Potts_Steidl_Tasche_2001">{{cite book |author-first1=Daniel |author-last1=Potts |author-first2=Gabriele |author-last2=Steidl|author2-link= Gabriele Steidl |author-first3=Manfred |author-last3=Tasche |date=2001 |chapter-url=http://www.tu-chemnitz.de/~potts/paper/ndft.pdf |archive-url=https://web.archive.org/web/20070926222858/http://www.tu-chemnitz.de/~potts/paper/ndft.pdf |archive-date=2007-09-26 |url-status=live |chapter=Fast Fourier transforms for nonequispaced data: A tutorial |editor-first1=J. J. |editor-last1=Benedetto |editor-first2=P. |editor-last2=Ferreira |title=Modern Sampling Theory: Mathematics and Applications |publisher=[[Birkhäuser]]}}</ref>
<ref name="Rokhlin_Tygert_2006">{{cite journal |author-first1=Vladimir |author-last1=Rokhlin |author-first2=Mark |author-last2=Tygert |date=2006 |title=Fast Algorithms for Spherical Harmonic Expansions |journal=[[SIAM Journal on Scientific Computing]] |volume=27 |issue=6 |doi=10.1137/050623073 |pages=1903–1928 |bibcode=2006SJSC...27.1903R |url=http://tygert.com/sph2.pdf |archive-url=https://web.archive.org/web/20141217212000/http://tygert.com/sph2.pdf |archive-date=2014-12-17 |url-status=live |access-date=2014-09-18 |citeseerx=10.1.1.125.7415}} [http://www.cs.yale.edu/publications/techreports/tr1309.pdf]</ref>
<ref name="Rokhlin_Tygert_2006">{{cite journal |author-first1=Vladimir |author-last1=Rokhlin |author-first2=Mark |author-last2=Tygert |date=2006 |title=Fast Algorithms for Spherical Harmonic Expansions |journal=[[SIAM Journal on Scientific Computing]] |volume=27 |issue=6 |doi=10.1137/050623073 |pages=1903–1928 |bibcode=2006SJSC...27.1903R |url=http://tygert.com/sph2.pdf |archive-url=https://web.archive.org/web/20141217212000/http://tygert.com/sph2.pdf |archive-date=2014-12-17 |url-status=live |access-date=2014-09-18 |citeseerx=10.1.1.125.7415}} [http://www.cs.yale.edu/publications/techreports/tr1309.pdf]</ref>
<ref name="Welch_1969">{{cite journal |author-first1=Peter D. |author-last1=Welch |date=1969 |doi=10.1109/TAU.1969.1162035 |title=A fixed-point fast Fourier transform error analysis |journal=[[IEEE Transactions on Audio and Electroacoustics]] |volume=17 |issue=2 |pages=151–157}}</ref>
<ref name="Welch_1969">{{cite journal |author-first1=Peter D. |author-last1=Welch |date=1969 |doi=10.1109/TAU.1969.1162035 |title=A fixed-point fast Fourier transform error analysis |journal=[[IEEE Transactions on Audio and Electroacoustics]] |volume=17 |issue=2 |pages=151–157 |bibcode=1969ITAuE..17..151W }}</ref>
<ref name="Gauss_1866">{{cite book |author-first=Carl Friedrich |author-last=Gauss |author-link=Carl Friedrich Gauss |chapter-url=https://babel.hathitrust.org/cgi/pt?id=uc1.c2857678;view=1up;seq=279 |title=Nachlass |chapter=Theoria interpolationis methodo nova tractata |type=Unpublished manuscript |trans-chapter=Theory regarding a new method of interpolation |series=Werke |location=Göttingen, Germany |publisher=Königlichen Gesellschaft der Wissenschaften zu Göttingen |date=1866 |volume=3 |pages=265–303 |language=la, de}}</ref>
<ref name="Gauss_1866">{{cite book |author-first=Carl Friedrich |author-last=Gauss |author-link=Carl Friedrich Gauss |chapter-url=https://babel.hathitrust.org/cgi/pt?id=uc1.c2857678;view=1up;seq=279 |title=Nachlass |chapter=Theoria interpolationis methodo nova tractata |type=Unpublished manuscript |trans-chapter=Theory regarding a new method of interpolation |series=Werke |location=Göttingen, Germany |publisher=Königlichen Gesellschaft der Wissenschaften zu Göttingen |date=1866 |volume=3 |pages=265–303 |language=la, de}}</ref>
<ref name="Heideman_Johnson_Burrus_1985">{{cite journal |title=Gauss and the history of the fast Fourier transform |journal=Archive for History of Exact Sciences |date=1985-09-01 |issn=0003-9519 |pages=265–277 |volume=34 |issue=3 |doi=10.1007/BF00348431 |author-first1=Michael T. |author-last1=Heideman |author-first2=Don H. |author-last2=Johnson |author-first3=Charles Sidney |author-last3=Burrus |author-link3=Charles Sidney Burrus |citeseerx=10.1.1.309.181|s2cid=122847826 }}</ref>
<ref name="Heideman_Johnson_Burrus_1985">{{cite journal |title=Gauss and the history of the fast Fourier transform |journal=Archive for History of Exact Sciences |date=1985-09-01 |issn=0003-9519 |pages=265–277 |volume=34 |issue=3 |doi=10.1007/BF00348431 |author-first1=Michael T. |author-last1=Heideman |author-first2=Don H. |author-last2=Johnson |author-first3=Charles Sidney |author-last3=Burrus |author-link3=Charles Sidney Burrus |citeseerx=10.1.1.309.181|s2cid=122847826 }}</ref>
<ref name="Yates_1937">{{cite journal |title=The design and analysis of factorial experiments |author-last=Yates |author-first=Frank |author-link=Frank Yates |date=1937 |journal=Technical Communication No. 35 of the Commonwealth Bureau of Soils|volume=142 |issue=3585 |pages=90–92 |bibcode=1938Natur.142...90F |doi=10.1038/142090a0 |s2cid=23501205 }}</ref>
<ref name="Yates_1937">{{cite journal |title=The design and analysis of factorial experiments |author-last=Yates |author-first=Frank |author-link=Frank Yates |date=1937 |journal=Technical Communication No. 35 of the Commonwealth Bureau of Soils|volume=142 |issue=3585 |pages=90–92 |bibcode=1938Natur.142...90F |doi=10.1038/142090a0 |s2cid=23501205 }}</ref>
<ref name="Cooley_Lewis_Welch_1967">{{cite journal |title=Historical notes on the fast Fourier transform |journal=[[IEEE Transactions on Audio and Electroacoustics]] |date=June 1967 |issn=0018-9278 |pages=76–79 |volume=15 |issue=2 |doi=10.1109/TAU.1967.1161903 |author-first1=James W. |author-last1=Cooley |author-link1=James Cooley |author-first2=Peter A. W. |author-last2=Lewis |author-first3=Peter D. |author-last3=Welch |citeseerx=10.1.1.467.7209}}</ref>
<ref name="Cooley_Lewis_Welch_1967">{{cite journal |title=Historical notes on the fast Fourier transform |journal=[[IEEE Transactions on Audio and Electroacoustics]] |date=June 1967 |issn=0018-9278 |pages=76–79 |volume=15 |issue=2 |doi=10.1109/TAU.1967.1161903 |author-first1=James W. |author-last1=Cooley |author-link1=James Cooley |author-first2=Peter A. W. |author-last2=Lewis |author-first3=Peter D. |author-last3=Welch |bibcode=1967ITAuE..15...76C |citeseerx=10.1.1.467.7209}}</ref>
<ref name="Cooley_Tukey_1965">{{cite journal |title=An algorithm for the machine calculation of complex Fourier series |url=https://www.ams.org/mcom/1965-19-090/S0025-5718-1965-0178586-1/ |journal=[[Mathematics of Computation]] |date=1965 |issn=0025-5718 |pages=297–301 |volume=19 |issue=90 |doi=10.1090/S0025-5718-1965-0178586-1 |author-first1=James W. |author-last1=Cooley |author-link1=James Cooley |author-first2=John W. |author-last2=Tukey |author-link2=John Tukey|doi-access=free |url-access=subscription }}</ref>
<ref name="Cooley_Tukey_1965">{{cite journal |title=An algorithm for the machine calculation of complex Fourier series |url=https://www.ams.org/mcom/1965-19-090/S0025-5718-1965-0178586-1/ |journal=[[Mathematics of Computation]] |date=1965 |issn=0025-5718 |pages=297–301 |volume=19 |issue=90 |doi=10.1090/S0025-5718-1965-0178586-1 |author-first1=James W. |author-last1=Cooley |author-link1=James Cooley |author-first2=John W. |author-last2=Tukey |author-link2=John Tukey|doi-access=free |url-access=subscription }}</ref>
<ref name="Danielson_Lanczos_1942">{{cite journal |title=Some improvements in practical Fourier analysis and their application to x-ray scattering from liquids |author-first1=Gordon C. |author-last1=Danielson |author-link1=Gordon C. Danielson |author-first2=Cornelius |author-last2=Lanczos |author-link2=Cornelius Lanczos |date=1942 |journal=Journal of the Franklin Institute |doi=10.1016/S0016-0032(42)90767-1 |volume=233 |issue=4 |pages=365–380}}</ref>
<ref name="Danielson_Lanczos_1942">{{cite journal |title=Some improvements in practical Fourier analysis and their application to x-ray scattering from liquids |author-first1=Gordon C. |author-last1=Danielson |author-link1=Gordon C. Danielson |author-first2=Cornelius |author-last2=Lanczos |author-link2=Cornelius Lanczos |date=1942 |journal=Journal of the Franklin Institute |doi=10.1016/S0016-0032(42)90767-1 |volume=233 |issue=4 |pages=365–380}}</ref>
Line 334: Line 333:
  |last2=Sitton |first2=G.A.
  |last2=Sitton |first2=G.A.
  |last3=Burrus |first3=C.S. |author-link3=Charles Sidney Burrus
  |last3=Burrus |first3=C.S. |author-link3=Charles Sidney Burrus
|url=https://ieeexplore.ieee.org/document/389994
  |title=Proceedings of ICASSP '94. IEEE International Conference on Acoustics, Speech and Signal Processing
  |title=Proceedings of ICASSP '94. IEEE International Conference on Acoustics, Speech and Signal Processing
  |date=1994
  |date=1994
Line 384: Line 382:
  |date=June 1969
  |date=June 1969
  |title=A short bibliography on the fast Fourier transform
  |title=A short bibliography on the fast Fourier transform
|url=https://ieeexplore.ieee.org/document/1162040
  |journal=[[IEEE Transactions on Audio and Electroacoustics]]
  |journal=[[IEEE Transactions on Audio and Electroacoustics]]
  |volume=17 |issue=2 |pages=166–169
  |volume=17 |issue=2 |pages=166–169
  |doi=10.1109/TAU.1969.1162040 |issn=0018-9278
  |doi=10.1109/TAU.1969.1162040 |bibcode=1969ITAuE..17..166S
|url-access=subscription
|issn=0018-9278
}} (NB. Contains extensive bibliography.)
}} (NB. Contains extensive bibliography.)
* {{Cite book
* {{Cite book
  |last=Prestini |first=Elena
  |last=Prestini |first=Elena
Line 432: Line 429:
{{Authority control}}
{{Authority control}}


[[Category:FFT algorithms]]
[[Category:Fast Fourier transforms| ]]
[[Category:Digital signal processing]]
[[Category:Digital signal processing]]
[[Category:Discrete transforms]]
[[Category:Discrete transforms]]