DSP en FFT Notes
DSP en FFT Notes
Spring 2018
Outline
Applications of DFT
FFT algorithms
Implementation of FIR systems
Consider an LTI system with impulse response h(n) of finite length
P. Give input x(n) of finite length L, the output will be
x(n) DFT
IDFT y (n)
h(n) DFT
input
x1 (n)
x2 (n)
(P − 1) point
x3 (n)
output y1 (n)
+
y2 (n)
+
y3 (n)
+
Overlap-save method
input
x1 (n)
(P − 1) zeros
x2 (n)
x3 (n)
output y1 (n)
y2 (n)
y3 (n)
Discard
Frequency analysis of real-time signals
Main idea: As signal is segmented into blocks (usually
overlapped), FFT is implemented for each block, with window
functions.
Steps:
1. Sampling x(t) → x(n), consider one block of N samples
2. Multiplying with a window function xd (n) = x(n)w (n)
3. Implement M-point FFT on xd (n), where M ≥ N (zero
padding does not change the spectrum!).
4. Normalization of frequency and magnitude for |X (k)|
Notes:
! Windowing effect: power leakage
! Frequency resolution
! Overlapped blocks
Outline
Applications of DFT
FFT algorithms
Computational complexity of DFT
!
N−1
X (k) = x(n)WNkn , 0≤k ≤N −1
n=0
where, WN = e −j2π/N .
!
N−1
X (k) = x(n)WNkn , k = 0, 1, · · · , (N − 1)
n=0
!
N/2−1
!
N/2−1
k(2m+1)
k2m
= x(2m)WN + x(2m + 1)WN
m=0 m=0
For k = 0, 1, . . . , N/2:
!
N/2−1
!
N/2−1
km
X (k) = x(2m)WN/2 + WNk km
x(2m + 1)WN/2
m=0 m=0
k
= F1 (k) + WN F2 (k)
DIT Radix-2 FFT: Computational complexity
Note that:
F1 (k + N/2) = F1 (k)
F2 (k + N/2) = F2 (k)
k+N/2
WN = −WNk
then,
N
X (k + ) = F1 (k) − WNk F2 (k)
2
k
X (k) = F1 (k) + WN F2 (k)
2(N/2)2 + N/2
DIT Radix-2 FFT: Divide
F1 (0)
x(0) X (0)
WN0
F1 (1)
x(2) X (1)
N/2 - point
WN1
DFT F1 (2)
x(4) X (2)
WN2
F1 (3)
x(6) X (3)
WN3
F2 (0)
x(1) X (4)
−WN0
F2 (1)
x(3) X (5)
N/2 - point −WN1
DFT F2 (2)
x(5) X (6)
−WN2
F2 (3)
x(7) X (7)
−WN3
DIT Radix-2 FFT: Reduced form
x(0) X (0)
x(2) X (1)
N/2 - point
DFT
x(4) X (2)
x(6) X (3)
WN0
x(1) X (4)
−1
WN1
x(3) X (5)
N/2 - point −1
DFT WN2
x(5) X (6)
−1
WN3
x(7) X (7)
−1
DIT Radix-2 FFT: Continue to divide
x(0) X (0)
N/4 - point
DFT
x(4) X (1)
WN0
x(2) X (2)
N/4 - point −1
DFT WN2
x(6) X (3)
−1
WN0
x(1) X (4)
N/4 - point −1
DFT WN1
x(5) X (5)
−1
WN0 WN2
x(3) X (6)
N/4 - point −1 −1
DFT WN2 WN3
x(7) X (7)
−1 −1
DIT Radix-2 FFT: Complete signal flowgraph
x(0) X (0)
WN0
x(4) X (1)
−1
WN0
x(2) X (2)
−1
WN0 WN2
x(6) X (3)
−1 −1
WN0
x(1) X (4)
−1
WN0 WN1
x(5) X (5)
−1 −1
WN0 WN2
x(3) X (6)
−1 −1
WN0 WN2 WN3
x(7) X (7)
−1 −1 −1
DIT Radix-2 FFT: Butterfly computations
r
Xm (p) = Xm−1 (p) + WN Xm−1 (q)
r
Xm (q) = Xm−1 (p) − WN Xm−1 (q)
!
N−1
X (k) = x(n)WNkn , k = 0, 1, · · · , (N − 1)
n=0
!
N/2−1
!
N−1
= x(n)WNkn + x(n)WNkn
m=0 n=N/2
!
N/2−1
!
N/2−1
kN/2
= x(n)WNkn + x(n + N/2)WN WNkn
m=0 n=0
!
N/2−1
= [x(n) + (−1)k x(n + N/2)]WNkn
m=0
DIF Radix-2 FFT: Computational complexity
Divide X (k) into even-index and odd-index sequences:
!
N/2−1
kn
X (2k) = [x(n) + x(n + N/2)]WN/2
m=0
!
N/2−1
X (2k + 1) = [x(n) − x(n + N/2)]WNn WN/2
kn
m=0
x(0) X (0)
WN0
x(1) X (4)
−1
WN0
x(2) X (2)
−1
WN2 WN0
x(3) X (6)
−1 −1
WN0
x(4) X (1)
−1
WN1 WN0
x(5) X (5)
−1 −1
WN2 WN0
x(6) X (3)
−1 −1
WN3 WN2 WN0
x(7) X (7)
−1 −1 −1