Jump to content

Butterfly diagram: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Line 41: Line 41:


:<math>x_0 = \frac{1}{2} (y_0 + y_1)</math>
:<math>x_0 = \frac{1}{2} (y_0 + y_1)</math>
:<math>x_1 = \frac{\omega^{-i}} (y_0 - y_1)</math>
:<math>x_1 = \frac{\omega^{-i}}{2} (y_0 - y_1)</math>


Recently, it was noticed by Joris van der Hoeven that the pair <math>(x_0,y_1)</math>
Recently, it was noticed by Joris van der Hoeven that the pair <math>(x_0,y_1)</math>

Revision as of 14:54, 8 March 2007

Data-flow diagram connecting the inputs x (left) to the outputs y that depend on them (right) for a "butterfly" step of a radix-2 Cooley-Tukey FFT. This diagram resembles a butterfly (as in the Morpho butterfly shown for comparison), hence the name.

In the context of fast Fourier transform algorithms, a butterfly is a portion of the computation that combines the results of smaller discrete Fourier transforms (DFTs) into a larger DFT, or vice versa (breaking a larger DFT up into subtransforms). The name "butterfly" comes from the shape of the data-flow diagram in the radix-2 case, as described below. The same structure can also be found in the Viterbi algorithm, used for finding the most likely sequence of hidden states.

Most commonly, the term "butterfly" appears in the context of the Cooley-Tukey FFT algorithm, which recursively breaks down a DFT of composite size into smaller transforms of size where is the "radix" of the transform. These smaller DFTs are then combined with a size- butterflies, which themselves are DFTs of size (performed times on corresponding outputs of the sub-transforms) pre-multiplied by roots of unity (known as twiddle factors). (This is the "decimation in time" case; one can also perform the steps in reverse, known as "decimation in frequency", where the butterflies comes first and are post-multiplied by twiddle factors. See also the Cooley-Tukey FFT article.)

Radix-2 butterfly diagram

In the case of the radix-2 Cooley-Tukey algorithm, the butterfly is simply a DFT of size 2 that takes two inputs (corresponding outputs of the two sub-transforms) and gives two outputs by the formula (not including twiddle factors):

If one draws the data-flow diagram for this pair of operations, the to lines cross and resemble the wings of a butterfly, hence the name. (See also the illustration at right.)

More generally, a DFT on inputs with respect to a primitive -th root of unity relies on butterflies of the form:

Whereas the inverse transform with respect can mathematically be interpreted as a direct transform with respect to , one may also directly invert the butterflies:

Recently, it was noticed by Joris van der Hoeven that the pair is also related to the pair by simple formulas:

and

These "flip"-relations are at the basis of a truncated version of the DFT.