algorithms of scientific computingfast real dft computation of a real-valued dft using complex fft...
TRANSCRIPT
Algorithms of Scientific Computing
FFT on Real Data
Michael BaderTechnical University of Munich
Summer 2016
DFT and Symmetry – Outlook
INPUT TRANSFORM
real symmetry fn ∈ R → Real DFT (RDFT)
even symmetry fn = f−n → Discrete Cosine Transform (DCT)
odd symmetry fn = −f−n → Discrete Sine Transform (DST)
“QUARTER-WAVE” INPUT TRANSFORM
even symmetry fn = f−n−1 → QW-DCT
odd symmetry fn = −f−n−1 → QW-DST
Michael Bader | Algorithms of Scientific Computing | FFT on Real Data | Summer 2016 2
Real-valued DFT (RDFT)Consider real-valued input data fn ∈ R, i.e.: f ∗n := fn = fn, then:
Fk =1N
N2∑
n=− N2 +1
fne−i2πnk/N =1N
N2∑
n=− N2 +1
fn
(cos
(2πnk
N
)− i sin
(2πnk
N
)).
Properties:
• Re {Fk} = 1N
N2∑
n=− N2 +1
fn cos( 2πnk
N
), Im {Fk} = − 1
N
N2∑
n=− N2 +1
fn sin( 2πnk
N
)• only N independent, real coefficients necessary, since:
F ∗k =1N
∑f ∗n{ω−nk
N
}∗=
1N
∑fnω−n(−k)N = F−k
Recall:{ω−nk
N
}∗={
e−i2πnk/N}∗ = cos(−2πnk/N)− i sin(−2πnk/N)
= cos(2πnk/N) + i sin(2πnk/N) = · · · = ωnkN
Michael Bader | Algorithms of Scientific Computing | FFT on Real Data | Summer 2016 3
Real DFT (2)
Map N values to N coefficients (and vice versa):{f− N
2 +1, . . . , f0, . . . , f N2
}DFT ⇓ ⇑ IDFT
{F0,Re{F1}, Im{F1}, . . . , Re{F N
2−1}, Im{F N2−1},F N
2
}Note: real and imaginary parts of F−k correspond to those of Fk
Michael Bader | Algorithms of Scientific Computing | FFT on Real Data | Summer 2016 4
Real DFT (3)
Situation:• only N real input values (as all N imaginary parts are 0)• only N independent, real output values (coefficient components)
due to symmetry F−k = F ∗k
Wanted→ new transformation:
N real input values→ N distinct real coefficient components
Hence: Insert symmetry F−k = F ∗k in IDFT!
Michael Bader | Algorithms of Scientific Computing | FFT on Real Data | Summer 2016 5
Real DFT (4)Definition of “Real discrete Fourier transform” (RDFT)
• formulation 1
Fk =1N
N2∑
n=− N2 +1
fn
(cos
(2πnk
N
)− i sin
(2πnk
N
)), k = 0, . . . ,
N2
• formulation 2
Re{Fk} =1N
N2∑
n=− N2 +1
fn cos(
2πnkN
), k = 0, . . . ,
N2
Im{Fk} = − 1N
N2∑
n=− N2 +1
fn sin(
2πnkN
), k = 1, . . . ,
N2− 1
Michael Bader | Algorithms of Scientific Computing | FFT on Real Data | Summer 2016 6
Inverse Real DFTGoal: compute a real representation of the DFT (i.e., no e−i2πnk/N ).
We start with an input vector (Fourier coefficients) of length 2N, then:
fn =N∑
k=−N+1
Fk ei2πnk/2N
= F0 +N−1∑k=1
(Fk ei2πnk/2N + F−k e−i2πnk/2N
)+ FNei2πnN/2N
= F0 +N−1∑k=1
(Fk ei2πnk/2N +
{Fk ei2πnk/2N
}∗)+ FNeiπn
= F0 + 2N−1∑k=1
Re{
Fk ei2πnk/2N}+ FNeiπn
= F0 + 2N−1∑k=1
(Re{Fk} cos
(πnkN
)− Im{Fk} sin
(πnkN
))+ FN cos (πn)
Michael Bader | Algorithms of Scientific Computing | FFT on Real Data | Summer 2016 7
Inverse Real DFT (2)
Set ak := 2 Re{Fk} and bk := −2 Im{Fk} (but a0 := Re{F0} andaN := Re{FN}) to get :
fn = a0 +N−1∑k=1
(ak cos
(πnkN
)+ bk sin
(πnkN
))+ aN cos (πn)
“Real inverse discrete Fourier transform”
Using the (real-valued) formula for Fk :
ak =1N
N∑n=−N+1
fn cos(πnkN
), bk =
1N
N∑n=−N+1
fn sin(πnkN
)
but: a0 = 12N
∑. . . and aN = 1
2N
∑. . .
Michael Bader | Algorithms of Scientific Computing | FFT on Real Data | Summer 2016 8
Inverse Real DFT – Compare with Textbooks
Alternate (probably more frequent) notation in textbooks:Set ak := 2 Re{Fk} and bk := −2 Im{Fk} to get
fn =12
a0 +N−1∑k=1
(ak cos
(πnkN
)+ bk sin
(πnkN
))+
12
aN cos (πn)
Using the (real-valued) formula for Fk :
ak =1N
N∑n=−N+1
fn cos(πnkN
), bk =
1N
N∑n=−N+1
fn sin(πnkN
)Differences:• no extra definition of a0 and aN
• but factors 12 in formula for fn → not as nicely related to interpolation
Michael Bader | Algorithms of Scientific Computing | FFT on Real Data | Summer 2016 9
Real-valued Trigonometric Interpolation
Interpretation of the real DFT as an interpolation problem:• 2N ansatz functions:
gk (x) := cos(kx) k = 0, . . . ,Nhk (x) := sin(kx) k = 1, . . . ,N − 1
• 2N supporting points: xn :=2πn2N
=πnN
n = −N + 1, . . . ,N
• 2N interpolation conditions:
fn = a0 +N−1∑k=1
(ak cos
(πnkN
)+ bk sin
(πnkN
))+ aN cos (πn)
(cmp. exercises)
Michael Bader | Algorithms of Scientific Computing | FFT on Real Data | Summer 2016 10
Fast Real DFT
Computation of a real-valued DFT using complex FFT is inefficient:
• N redundant components computed (symmetry)• complex arithmetics with lots of real/imaginary parts being 0
Possibilities to improve the efficiency:1. compute two real DFTs from one complex FFT2. compute a real DFT of length 2N from one complex FFT of length N3. “compact” real FFT – use symmetry of the data directly in the algorithm
Michael Bader | Algorithms of Scientific Computing | FFT on Real Data | Summer 2016 11
Two Real DFTs from one complex FFT
Idea: for real-valued gn and hn, compute DFT of fn := gn + ihn:
Fk =1N
∑n
(gn + ihn)ω−nkN
Comparison with coefficients Gk and Hk of the two real DFTs:
Gk =1N
∑n
gnω−nkN Hk =
1N
∑n
hnω−nkN
Due to linearity of the Fourier transform:
Fk = Gk + iHk
Michael Bader | Algorithms of Scientific Computing | FFT on Real Data | Summer 2016 12
Two Real DFTs from one complex FFT (2)
Since gn and hn are real data, we have the following symmetry:
Gk = G∗−k Hk = H∗−k .
Hence, we get for F ∗−k :
F ∗−k = (G−k + iH−k )∗ =
(G∗−k + i∗H∗−k
)= Gk − iHk .
Together with Fk = Gk + iHk , we obtain
Gk =12(Fk + F ∗−k
)and Hk = − i
2(Fk − F ∗−k
).
Michael Bader | Algorithms of Scientific Computing | FFT on Real Data | Summer 2016 13
Two real DFTs from one complex FFT – Algorithm
Algorithm to compute two real DFTs:(1) set fn := gn + ihn
(2) compute Fk from FFT (using a library, e.g.)(3) compute Gk and Hk according to
Gk =12(Fk + F ∗−k
)and Hk = − i
2(Fk − F ∗−k
)⇒ “half” the costs compared to using complex FFT
but: additional operations for pre- and postprocessing
Michael Bader | Algorithms of Scientific Computing | FFT on Real Data | Summer 2016 14
Real DFT of length 2N from complex FFT oflength N
Compute DFT of a real-valued vector (f−N+1, . . . , fN):
Fk =1
2N
N∑−N+1
fnω−nk2N for k = −N
2+ 1, . . . ,
N2
Split up in gn := f2n and hn := f2n−1; leads to butterfly scheme:
Fk = 12
(Gk + ωk
2NHk
),
Fk±N = 12
(Gk − ωk
2NHk
)for k = −N
2 + 1, . . . , N2 , respectively.
Michael Bader | Algorithms of Scientific Computing | FFT on Real Data | Summer 2016 15
Real 2N-DFT from complex N-FFT
Now: compute Gk and Hk (two real DFTs) from one complex FFT→ applied to zn := gn + ihn = f2n + i f2n−1:
Gk = 12
(Zk + Z ∗−k
)and Hk = − i
2
(Zk − Z ∗−k
)Combine both schemes to:
Fk = 14 Zk
(1− iωk
2N
)+ 1
4 Z ∗−k
(1 + iωk
2N
), k = 0, . . . , N
2
Fk+N = 14 Zk
(1 + iωk
2N
)+ 1
4 Z ∗−k
(1− iωk
2N
), k = −N
2 + 1, . . . ,0
Michael Bader | Algorithms of Scientific Computing | FFT on Real Data | Summer 2016 16
Real 2N-DFT from complex N-FFT – Algorithm
Algorithm for a real 2N-DFT:(1) set zn := f2n + i f2n−1
(2) compute Zk from FFT applied on zn (using a library, e.g.)(3) compute Fk according to
Fk = 14 Zk
(1− iωk
2N
)+ 1
4 Z ∗−k
(1 + iωk
2N
), k = 0, . . . , N
2
Fk+N = 14 Zk
(1 + iωk
2N
)+ 1
4 Z ∗−k
(1− iωk
2N
), k = −N
2 + 1, . . . ,0
⇒ Complexity determined by complex N-FFT
plus: additional operations for pre- and postprocessing
Michael Bader | Algorithms of Scientific Computing | FFT on Real Data | Summer 2016 17
Compact Real FFT
Compute DFT of a real-valued vector (f−N+1, . . . , fN):
Fk =1
2N
N∑−N+1
fnω−nk2N for k = 0, . . . ,N
Split up in gn := f2n and hn := f2n−1; leads to butterfly scheme:
Fk = 12
(Gk + ωk
2NHk
)for k = 0, . . . , N
2 ,
Fk+N = 12
(Gk − ωk
2NHk
)for k = −N
2 + 1, . . . ,0 .
Gk and Hk are coefficients of a real-valued DFT of length N; hence:
Gk = G∗−k and Hk = H∗−k for k = 0, . . . , N2 − 1
Michael Bader | Algorithms of Scientific Computing | FFT on Real Data | Summer 2016 18
Compact Real-valued FFT (2)
Use symmetry of Gk and Hk for the computation of Fk :
Fk = 12
(Gk + ωk
2NHk
)fur k = 0, . . . , N
2 ,
FN−k = 12
(G−k − ω−k
2N H−k
)= 1
2
(Gk − ωk
2NHk
)∗for k = 0, . . . , N
2 − 1
⇒ Computation of Fk (for k = 0, . . . ,N) reduced to the computation of Gkand Hk (for k = 0, . . . , N
2 , respectively).
“Edson’s algorithm” (1968)
Michael Bader | Algorithms of Scientific Computing | FFT on Real Data | Summer 2016 19