Direct Computation 2. Radix-2 FFT 3. Decimation-In-Time FFT 4. Flowgraphs 5. Bit Reversal Permutation 6. Complexity 7. Decimation-In-Frequency FFT
Direct Computation 2. Radix-2 FFT 3. Decimation-In-Time FFT 4. Flowgraphs 5. Bit Reversal Permutation 6. Complexity 7. Decimation-In-Frequency FFT
Direct Computation 2. Radix-2 FFT 3. Decimation-In-Time FFT 4. Flowgraphs 5. Bit Reversal Permutation 6. Complexity 7. Decimation-In-Frequency FFT
1. DIRECT COMPUTATION
2. RADIX-2 FFT
3. DECIMATION-IN-TIME FFT
4. FLOWGRAPHS
6. COMPLEXITY
7. DECIMATION-IN-FREQUENCY FFT
{x[n], 0 n N 1}
is defined as
N
X 1
X[k] = x[n] WNkn , 0k N 1
n=0
where
j 2 2 2
WN = e = cos N + j sin
N N
is the principal N -th root of unity.
N (N 1) complex additions
The radix-2 FFT algorithms are used for data vectors of lengths
N = 2K . They proceed by dividing the DFT into two DFTs of
length N/2 each, and iterating. There are several types of radix-
2 FFT algorithms, the most common being the decimation-in-time
(DIT) and the decimation-in-frequency (DIF). This terminology will
become clear in the next sections.
Preliminaries
which is derived as
2
WN2 = ej N 2
2
= ej N/2
= WN/2 .
WN2nk = WN/2
nk
.
x0 [n] = x[2n]
x1 [n] = x[2n + 1]
N
where we used the first identity above. Recognizing that the 2 -pont
ans =
492
-58.083 - 49.657i
94 + 2i
38.083 + 38.343i
>>
>> X0-W.^(-k).*X1
ans =
16
38.083 - 38.343i
94 - 2i
-58.083 + 49.657i
ans =
492
-58.083 - 49.657i
The flowgraph for the sum and difference operation is called the
butterfly. This unit will be used as a shorthand notation for the
sum and difference, to simplify the flowgraphs for the FFT.
a a+b
b ab
3. butterflies
x[0] X[0]
x[2] X[1]
4PT DFT
x[4] X[2]
x[6] X[3]
x[1] X[4]
W1
8
x[3] X[5]
4PT DFT
W2
8
x[5] X[6]
W3
8
x[7] X[7]
N
The decomposition of the N -point DFT into two 2 -point DFTs
can be repeated (provided N is divisible by 4).
x[0] X[0]
2PT DFT
x[4] X[1]
x[2] X[2]
2PT DFT
W1
4
x[6] X[3]
x[1] X[4]
2PT DFT
W1
8
x[5] X[5]
W2
8
x[3] X[6]
2PT DFT
W1
4
W3
8
x[7] X[7]
x[4] X[1]
x[2] X[2]
W1
4
x[6] X[3]
x[1] X[4]
W1
8
x[5] X[5]
W2
8
x[3] X[6]
W1
4
W3
8
x[7] X[7]
Remarks
Notice that the input for the full DIT radix-2 FFT flowgraph is
permuted.
n binary bit-rev n
0 000 000 0
1 001 100 4
2 010 010 2
3 011 110 6
4 100 001 1
5 101 101 5
6 110 011 3
7 111 111 7
Ac (N ) = 2 Ac (N/2) + N
N
Mc (N ) = 2 Mc (N/2) + 1
2
N
as N complex additions and 2 1 complex multiplications are
required to put the two N/2-point DFTs together. Note that a
2-point DFT is simply a sum and difference:
Mr (N ) = 4 Mc (N )
Ar (N ) = 2 Mc (N ) + 2 Ac (N )
Mr (N ) = 2 N log2 N 4N + 4
Ar (N ) = 3N log2 N 2N + 2
Splitting this sum into the first N/2 and second N/2 terms gives
N
2 1
X N
X 1
kn kn
X[2k] = x[n] WN/2 + x[n] WN/2
n=0 n= N2
N N
2 1 2 1
X
kn
X N k(n+ N )
= x[n] WN/2 + x[n + ] WN/2 2
n=0 n=0
2
N N
2 1 2 1
X
kn
X N kn
= x[n] WN/2 + x[n + ] WN/2
n=0 n=0
2
N
X 2 1
N kn
= x[n] + x[n + ] WN/2
n=0
2
N
= DFT N x[n] + x[n + ] .
2 2
That is, the even DFT values X[2k] for 0 2 k N 1 are given
N N
by the 2 -point DFT of the 2 -point signal x[n] + x[n + N/2].
Splitting this sum into the first N/2 and second N/2 terms gives
N
2 1
X N
X 1
X[2k + 1] = x[n] WNn WN/2
kn
+ x[n] WNn WN/2
kn
n=0 n= N2
N N
2 1 2 1
X X N (n+ N2 ) k(n+ N )
= x[n] WNn WN/2
kn
+ x[n + ] WN WN/2 2
n=0 n=0
2
N N
2 1 2 1
X X N
= x[n] WNn WN/2
kn
x[n + ] WNn WN/2
kn
n=0 n=0
2
N
2 1
X
N
= x[n] x[n + ] WNn WN/2
kn
n=0
2
N
= DFT N WNn x[n] x[n + ] .
2 2
That is, the odd DFT values X[2k + 1] for 0 2 k + 1 N 1 are
given by the N
2 -point DFT of the N
2 -point signal WNn (x[n] x[n + N/2]).
x[0] X[0]
x[1] X[2]
4PT DFT
x[2] X[4]
x[3] X[6]
x[4] X[1]
W1
8
x[5] X[3]
4PT DFT
W2
8
x[6] X[5]
W3
8
x[7] X[7]
x[0] X[0]
2PT DFT
x[1] X[4]
x[2] X[2]
2PT DFT
W1
4
x[3] X[6]
x[4] X[1]
2PT DFT
W1
8
x[5] X[5]
W2
8
x[6] X[3]
2PT DFT
W3
8
W1
4
x[7] X[7]
x[0] X[0]
x[1] X[4]
x[2] X[2]
W1
4
x[3] X[6]
x[4] X[1]
W1
8
x[5] X[5]
W2
8
x[6] X[3]
W3
8
W1
4
x[7] X[7]
The DIT and DIF radix-2 FFT algorithms are very similar.
1. The DIT and DIF radix-2 FFT algorithms have the same com-
plexity.
6 Flops
x 10
2.5
1.5
0.5
0
0 50 100 150 200 250 300 350 400 450 500
N
4 Flops
x 10
2
1.8
1.6
1.4
1.2
0.8
0.6
0.4
0.2
0
0 5 10 15 20 25 30 35 40 45 50
N
figure(1), clf
plot(1:512,f,.)
xlabel(N)
title(Flops)
axis([0 512 0 2.5e6])
print -deps fftflops_a
figure(2), clf
plot(1:512,f,.)
xlabel(N)
title(Flops)
axis([0 50 0 2.0e4])
print -deps fftflops_b