Content deleted Content added
changed notation (f,j,k,n) -> (X,k,n,N) for consistency with discrete Fourier transform |
m sp: an real→a real; Compact wikilink; unicodify |
||
Line 1:
'''Bruun's algorithm''' is a [[fast Fourier transform]] (FFT) algorithm based on an unusual recursive [[polynomial]]-factorization approach, proposed for powers of two by G. Bruun in 1978 and generalized to arbitrary even composite sizes by H. Murakami in 1996. Because its operations involve only real coefficients until the last computation stage, it was initially proposed as a way to efficiently compute the [[discrete Fourier transform]] (DFT) of real data. Bruun's algorithm has not seen widespread use, however, as approaches based on the ordinary [[
Nevertheless, Bruun's algorithm illustrates an alternative algorithmic framework that can express both itself and the Cooley-Tukey algorithm, and thus provides an interesting perspective on FFTs that permits mixtures of the two algorithms and other generalizations.
Line 11:
k = 0,\dots,N-1. </math>
For convenience, let us denote the ''N'' [[root of unity|roots of unity]] by
:<math>\omega_N^n = e^{-\frac{2\pi i}{N} n }</math>
Line 29:
In order to compute the DFT, we need to evaluate the remainder of ''x''(''z'') modulo ''N'' [[monomial|monomials]] as described above. Evaluating these remainders one by one is equivalent to the evaluating the usual DFT formula directly, and requires O(''N''<sup>2</sup>) operations. However, one can ''combine'' these remainders recursively to reduce the cost, using the following trick: if we want to evaluate ''x''(''z'') modulo two polynomials ''U''(''z'') and ''V''(''z''), we can first take the remainder modulo their product ''U''(''z'') ''V''(''z''), which reduces the [[degree (mathematics)|degree]] of the polynomial ''x''(''z'') and makes subsequent modulo operations less computationally expensive.
The product of all of the monomials (''z'' -
More explicitly, suppose for example that ''z''<sup>''N''</sup>-1 = ''F''<sub>1</sub>(''z'') ''F''<sub>2</sub>(''z'') ''F''<sub>3</sub>(''z''), and that ''F''<sub>''k''</sub>(''z'') = ''F''<sub>''k'',1</sub>(''z'') ''F''<sub>''k'',2</sub>(''z''), and so on. The corresponding FFT algorithm would consist of first computing ''x''<sub>''k''</sub>(''z'') = ''x''(''z'') mod
Line 39:
====Cooley-Tukey as polynomial factorization====
The standard decimation-in-frequency (DIF) radix-''r'' Cooley-Tukey algorithm corresponds closely to a recursive factorization. For example, radix-2 DIF Cooley-Tukey factors ''z''<sup>''N''</sup>-1 into ''F''<sub>1</sub> = (''z''<sup>''N''/2</sup>-1) and ''F''<sub>2</sub> = (''z''<sup>''N''/2</sup>+1). These modulo operations reduce the degree of ''x''(''z'') by 2, which corresponds to dividing the problem size by 2. Instead of recursively factorizing ''F''<sub>2</sub> directly, though, Cooley-Tukey instead first computes ''x''<sub>2</sub>(''z''
== The Bruun factorization ==
Line 48:
:<math>z^{4M} + az^{2M} + 1 = (z^{2M} + \sqrt{2-a}z^M+1) (z^{2M} - \sqrt{2-a}z^M + 1)</math>
where ''a'' is
Moreover, since all of these polynomials have purely real coefficients (until the very last stage), they automatically exploit the special case where the inputs ''x''<sub>''n''</sub> are purely real to save roughly a factor of two in computation and storage. One can also take straightforward advantage of the case of real-symmetric data for computing the [[discrete cosine transform]] (Chen and Sorensen, 1992).
Line 54:
==== Generalization to arbitrary radices ====
The Bruun factorization, and thus the Bruun FFT algorithm, was generalized to handle arbitrary ''even'' composite lengths, i.e. dividing the polynomial degree by an arbitrary ''radix'' (factor), as follows. First, we define a set of polynomials
:<math>\phi_{N, \alpha}(z) =
|