FFTs
- Overview
- EECS 360 Notes
- Methods descriptions
- Hardware Implementations
- Direct Implementation
- Goertzel
- Re-indexing
- Chirp-z
- Rader
FFTs Overview EECS 360 Notes Methods descriptions Hardware - - PowerPoint PPT Presentation
FFTs Overview EECS 360 Notes Methods descriptions Hardware Implementations Direct Implementation Goertzel Re-indexing Chirp-z Rader Fourier Methods Time Domain Frequency Domain Frequency Time Domain Transfer
Time Domain (continuous/discrete ) Time Domain Periodicity Transform Method (Tables) Frequency Domain (continuous/discrete ) Frequency Domain Periodicity Transfer Function s or z translation Continuous (t) Periodic (T=1/Ξf)
CTFS (6.1, 6.2) π¦ π’ = Οπ=ββ
β
ππ¦ π ππ2π
Ξ€ π π π’
ππ¦ π =
1 π Χ¬ π π¦ π’ πβπ2π Ξ€ π π π’ππ’
Discrete (k, Ξf=1/T, f=kβΞf) Aperiodic s = jβ2Οβk/T or jβ2ΟβkβΞf Continuous (t) Aperiodic
CTFT (6.3-6.6) π¦ π’ = Χ¬
ββ β π π ππ2πππ’ππ
π π = Χ¬
ββ β π¦ π’ πβπ2πππ’ππ’
Continuous (f) Aperiodic s = jβ2Οβf Discrete (n, Ξt=1/BW, t=nβΞt) Periodic (N, T=NβΞt)
DTFS π¦ π = Οπ=0
πβ1 ππ¦ π ππ2πππ/π
ππ¦ π =
1 π Οπ=0 πβ1 π¦ π πβπ2πππ/π
Discrete (k, Ξf=1/T, f=kβΞf) Periodic (N, BW=NβΞf) z = ejβ2Οβk/T or ejβ2ΟβkβΞf Discrete (n, t=nβΞt) Aperiodic
DTFT π¦ π = Χ¬
πΆπ π π ππ2ππ πββπ’ ππ
π π =
1 πΆπ Οπ=ββ β
π¦ π πβπ2ππ πββπ’
Continuous (f) Periodic (BW=1/Ξt) z = ejβ2Οβf
*unless noted otherwise, Ξt is assumed to be 1.
Time Domain (continuous/discrete ) Time Domain Periodicity Transform Method (Tables) Frequency Domain (continuous/discrete ) Frequency Domain Periodicity Transfer Function s or z translation Discrete (n, Ξt=1/BW, t=nβΞt) Periodic (N, T=NβΞt)
DTFS π¦ π = Οπ=0
πβ1 ππ¦ π ππ2πππ/π
ππ¦ π =
1 π Οπ=0 πβ1 π¦ π πβπ2πππ/π
Discrete (k, Ξf=1/T, f=kβΞf) Periodic (N, BW=NβΞf) z = ejβ2Οβk/T or ejβ2ΟβkβΞf Discrete (n, Ξt=1/BW, t=nβΞt) Periodic (N, T=NβΞt)
DFT (MATLAB: FFT and IFFT) IFFT: π¦ π =
1 π Οπ=0 πβ1 π π ππ2πππ/π
FFT: π π = Οπ=0
πβ1 π¦ π πβπ2πππ/π
Discrete (k, Ξf=1/T, f=kβΞf) Periodic (N, BW=NβΞf) z = ejβ2Οβk/T or ejβ2ΟβkβΞf
*unless noted otherwise, Ξt is assumed to be 1.
X[k] = WN
0kx[0] + WN 1kx[1] + WN 2kx[2] + ... + WN (N-2)kx[N-2] + WN (N-1)kx[N-1]
X[k] = (WN
0kx[0] + WN 1kx[1] + WN 2kx[2] + ... + WN (N-2)kx[N-2] + WN (N-1)kx[N-1])
X[k] = (WN
X[k] = (WN
X[k] = (...((WN
X[k] = ((...(((x[0])WN
X[k] = ((...(((x[0])WN
X[k] = ((...(((x[0])WN
X[k] = ((...(((x[0])WN
X[k] = ((...(((x[0])WN
X[k] = ((...(((x[0])WN
X[k] = ((...(((x[0])WN
z-1
X[k] = ((...(((x[0])WN
z-1
WN
X[k] = ((...(((x[0])WN
z-1
WN
Adders: 1+2 = 3. Multipliers: 4.
n-counter
wrap rst
z-1
0.7071+j0.7071
z-1 z-1
1
z-1
X[0] X[4] X[1],conj(X[7]) X[3],conj(X[5])
z-1
j1 X[2],conj(X[6]) Adders: 11. Multipliers: 14. Delays: 5.
z-1
WN
1
z-1 z-1
1
z-1
WN
N/2-1
X[0] X[N/2] X[1],conj(X[7]) X[3],conj(X[5])
z-1
WN
2
X[2],conj(X[6]) In Parallel Adders: 2+(N/2-1)*3. Multipliers: 2+(N/2-1)*4. Registers: N. Latency: N.
z-1
WN
0: (from ROM)
X[0] In Parallel Adders: N*4. Multipliers: N*4. Registers: N. Latency: N.
z-1
WN
1
X[1]
z-1
WN
N-1
X[N-1] ...
n-counter
rst rst rst
Data In Memory Data Out Memory
??? ena ???
z-1
In Series Adders: 3. Multipliers: 4. Registers: 2. Latency: N*N/2. Excludes CORDIC and storage. At 100 MHz, 1024 pt DFT in 1024*512/100e6 = 5.12ms
CORDIC
k-counter n-counter Data In Memory concat I&Q Dual Port Data Out Memory
WN
rst done
z-1
In Series Adders: 4. Multipliers: 4. Registers: 2. Latency: N*N. Excludes CORDIC and storage. At 100 MHz, 1024 pt DFT in 1024*1024/100e6 = 10.24ms
CORDIC
Sin ROM k-counter n-counter Concat I&Q Data In Memory concat I&Q Data Out Memory
WN
done rst ena addr
In Series Adders: 4. Multipliers: 4. Registers: 2. Latency: N*N. Excludes CORDIC and storage. At 100 MHz, 1024 pt DFT in 1024*1024/100e6 = 10.24ms In Parallel Adders: N*4. Multipliers: N*4. Registers: N. Latency: N. Direct Trade: 1024x Resources, 1024x Faster.
z-1
Partially Parallel Adders: 4*2. Multipliers: 4*2. Registers: 2*2. Latency: N*N/2. Excludes CORDIC and storage. At 100 MHz, 1024 pt DFT in 1024*512/100e6 = 5.12ms
CORDIC
Sin ROM k-counter n-counter Data In Memory concat I&Q Data Out Memory
WN
done rst ena addr
z-1 concat I&Q Data Out Memory
rst ena addr WN
In Series Adders: 4. Multipliers: 4. Registers: 2. Latency: N*N. Excludes CORDIC and storage. At 100 MHz, 1024 pt DFT in 1024*1024/100e6 = 10.24ms In Parallel Adders: N*4. Multipliers: N*4. Registers: N. Latency: N. Direct Trade: 1024x Resources, 1024x Faster. Partially Parallel Adders: 4*2. Multipliers: 4*2. Registers: 2*2. Latency: N*N/2. Excludes CORDIC and storage. At 100 MHz, 1024 pt DFT in 1024*512/100e6 = 5.12ms
What level of parallelization should we use? Depends on:
fashion) (??? Problem above)
z-1 k-counter n-counter
WN
done rst wea addr
z-1
rst web addr+1 WN
Partially Parallel Adders: 4*2. Multipliers: 4*2. Registers: 2*2. Latency: N*N/2. Excludes CORDIC and storage. At 100 MHz, 1024 pt DFT in 1024*512/100e6 = 5.12ms WN
WN
k-counter 0 to 512 n-counter 0 to 2048
done Partially Parallel Adders: 4*4. Multipliers: 4*4. Registers: 2*4. Latency: N*N/4. Excludes CORDIC and storage. At 100 MHz, 1024 pt DFT in 2048*512/100e6 = 10.24ms WN
WN
WN
WN
z-1
In Series Adders: 4. Multipliers: 4. Registers: 2. Latency: N*N. Excludes CORDIC and storage. At 100 MHz, 1024 pt DFT in 1024*1024/100e6 = 10.24ms
CORDIC
Sin ROM k-counter n-counter Data In Memory concat I&Q Data Out Memory
WN
done rst ena addr
real(WN
z-1 z-1
imag(WN
real(WN
z-1
We need two of these for real and imaginary parts. 4x DSP Slices
We need two of these for real and imaginary parts. 2x DSP Slices
Keeping track of BP. B-input is 18 bits (use BP=17)
real(WN
imag(WN
real(WN
Implementation with 6 DSP Slices.
48-bit accum is a bit excessive. Can be configured as 2x 24-bit adders using inputs (A:B) and C.
real(WN
imag(WN
real(WN
Implementation with 5 DSP slices.
k-counter n-counter
done wea addr web addr+1 Partially Parallel 10 DSP Blocks. 3x 36kb Block rams 2 counters Latency: N*N/2. At 100 MHz, 1024 pt DFT in 1024*512/100e6 = 5.12ms WN
WN
z-1
WN
WN
count[19:0]=k_count[9:0],n_count[9:0] done n_count[9:0] k_count[9:0] k_count[9:0] 6 DSP Blocks 3 RAMS