The split-radix FFT is a fast Fourier transform (FFT) algorithm for computing the discrete Fourier transform (DFT), and was first described in an initially little-appreciated paper by R. Yavne (1968)https://dl.acm.org/profile/81387609872 and subsequently rediscovered simultaneously by various authors in 1984. (The name "split radix" was coined by two of these reinventors, P. Duhamel and H. Hollmann.) In particular, split radix is a variant of the Cooley–Tukey FFT algorithm that uses a blend of radices 2 and 4: it recursively expresses a DFT of length N in terms of one smaller DFT of length N/2 and two smaller DFTs of length N/4.
The split-radix FFT, along with its variations, long had the distinction of achieving the lowest published arithmetic operation count (total exact number of required real additions and multiplications) to compute a DFT of power-of-two sizes N. The arithmetic count of the original split-radix algorithm was improved upon in 2004 (with the initial gains made in unpublished work by J. Van Buskirk via hand optimization for N=64 http://groups.google.com/group/comp.dsp/msg/9e002292accb8a8b https://web.archive.org/web/20061130110013/http://home.comcast.net/~kmbtib/), but it turns out that one can still achieve the new lowest count by a modification of split radix (Johnson and Frigo, 2007). Although the number of arithmetic operations is not the sole factor (or even necessarily the dominant factor) in determining the time required to compute a DFT on a computer, the question of the minimum possible count is of longstanding theoretical interest. (No tight lower bound on the operation count has currently been proven.)
The split-radix algorithm can only be applied when N is a multiple of 4, but since it breaks a DFT into smaller DFTs it can be combined with any other FFT algorithm as desired.
Recall that the DFT is defined by the formula:
Xk=
N-1 | |
\sum | |
n=0 |
xn
nk | |
\omega | |
N |
k
0
N-1
\omegaN
\omegaN=
| ||||
e |
,
N | |
\omega | |
N |
=1
The split-radix algorithm works by expressing this summation in terms of three smaller summations. (Here, we give the "decimation in time" version of the split-radix FFT; the dual decimation in frequency version is essentially just the reverse of these steps.)
First, a summation over the even indices
x | |
2n2 |
x | |
4n4+1 |
x | |
4n4+3 |
nm
N/m-1
Xk=
N/2-1 | |
\sum | |
n2=0 |
x | |
2n2 |
n2k | |
\omega | |
N/2 |
+
k | |
\omega | |
N |
N/4-1 | |
\sum | |
n4=0 |
x | |
4n4+1 |
n4k | |
\omega | |
N/4 |
+
3k | |
\omega | |
N |
N/4-1 | |
\sum | |
n4=0 |
x | |
4n4+3 |
n4k | |
\omega | |
N/4 |
where we have used the fact that
mnk | |
\omega | |
N |
=
nk | |
\omega | |
N/m |
These smaller summations are now exactly DFTs of length N/2 and N/4, which can be performed recursively and then recombined.
More specifically, let
Uk
k=0,\ldots,N/2-1
Zk
Z'k
k=0,\ldots,N/4-1
Xk
Xk=Uk+
k | |
\omega | |
N |
Zk+
3k | |
\omega | |
N |
Z'k.
This, however, performs unnecessary calculations, since
k\geqN/4
k<N/4
k | |
\omega | |
N |
3k | |
\omega | |
N |
k+N/4 | |
\omega | |
N |
=-i
k | |
\omega | |
N |
3(k+N/4) | |
\omega | |
N |
=i
3k | |
\omega | |
N |
Xk=Uk+\left(
k | |
\omega | |
N |
Zk+
3k | |
\omega | |
N |
Z'k\right),
Xk+N/2=Uk-\left(
k | |
\omega | |
N |
Zk+
3k | |
\omega | |
N |
Z'k\right),
Xk+N/4=Uk+N/4-i\left(
k | |
\omega | |
N |
Zk-
3k | |
\omega | |
N |
Z'k\right),
Xk+3N/4=Uk+N/4+i\left(
k | |
\omega | |
N |
Zk-
3k | |
\omega | |
N |
Z'k\right),
Xk
k
0
N/4-1
Notice that these expressions are arranged so that we need to combine the various DFT outputs by pairs of additions and subtractions, which are known as butterflies. In order to obtain the minimal operation count for this algorithm, one needs to take into account special cases for
k=0
k=N/8
(1\pmi)/\sqrt{2}
\pm1
\pmi
This decomposition is performed recursively when N is a power of two. The base cases of the recursion are N=1, where the DFT is just a copy
X0=x0
X0=x0+x1
X1=x0-x1
These considerations result in a count:
4Nlog2N-6N+8