Numerisches Programmieren (IN0019) 7. Fourier Transformation C

Werbung
C-Vektorräume
Fourier Transformation
Fourier-Reihe
FFT
Faltung
Numerisches Programmieren
(IN0019)
7. Fourier Transformation
Frank R. Schmidt
Winter Semester 2016/2017
Komplexe Zahlen
C-Vektorräume
Fourier Transformation
Fourier-Reihe
FFT
C-Vektorräume
Faltung
Fourier Transformation
Fourier-Reihe
FFT
Faltung
Die komplexen Zahlen C sind die reellen Zahlen R, die um die imaginäre Einheit
i adjungiert sind, wobei i eine Nullstelle von x2 ` 1 ist.
Jede komplexe Zahl z P C lässt sich als z “ a ` ib darstellen, wobei wir mit
a “: ℜpzq den Realteil und mit b “: ℑpzq den Imaginärteil bezeichnen.
Mit z̄ :“
? a ´ ib bezeichnen wir die komplex konjugierte Zahl und mit
|z| :“ a2 ` b2 den Betrag von z.
C-Vektorräume
Die komplexen Zahlen sind wie die reellen Zahlen ein Körper zusammen mit den
folgenden Operationen:
pa ` ibq ` pc ` idq “pa ` cq ` ipb ` dq
pa ` ibq ¨ pc ` diq “pac ´ bdq ` ipad ` bcq
´pa ` ibq “p´aq ` ip´bq
a ´ ib
pa ` ibq´1 “ 2
a ` b2
IN0019 - Numerisches Programmieren
Eulersche Formel
C-Vektorräume
Fourier Transformation
Polarkoordinaten
Fourier-Reihe
FFT
C-Vektorräume
Faltung
Da C ein Körper ist, kann man zu jedem z P C die Reihe
exppzq “
Fourier Transformation
p´1qn
n“0
z̄ “ |z| ¨ expp´iϕq
z1 ¨ z2 “ |z1 | |z2 | ¨ exppipϕ1 ` ϕ2 qq
z z̄ “ |z|2
8
ÿ
b2n
b2n`1
`i
“ cospbq ` i sinpbq
p´1qn
p2nq!
p2n
` 1q!
n“0
z n “ |z|n ¨ exppipnϕqq
Insbesondere sind die n-ten Einheitswurzeln, d.h. die n Lösungen von xn “ 1:
˙
ˆ
2π
1 “ ωn0 , ωn1 , . . . , ωnn´1
ωn :“ exp i
n
exppa ` ibq “ exppaq ¨ pcospbq ` i sinpbqq
IN0019 - Numerisches Programmieren
7. Fourier Transformation – 5 / 34
IN0019 - Numerisches Programmieren
ω31
ℑ
ℑ
ω52
ω30
ℜ
ω53
ℑ
ω73
ℜ
ω75
ℜ
ω42
ω40
ω43
IN0019 - Numerisches Programmieren
ω83
ℜ
ℑ
ω82
ω84
ω85
ω76
ℜ
Fourier-Reihe
FFT
Faltung
ω87
Jeder C-Vektorraum W ist automatisch auch ein R-Vektorraum, denn jede
C-Skalarmultiplikation λ ¨ w definiert auch eine R-Skalarmultiplikation (Wähle
λ P R Ă C). Allerdings gilt
dimR W “ 2 ¨ dimC W
Interessanterweise kann man aber auch jeden R-Vektorraum V in einen
C-Vektorraum W verwandeln:
ω81
ω80
ω86
Fourier Transformation
Da C ein Körper ist, können wir C-Vektorräume W betrachten.
ω71
ω70
ω74
ω54
C-Vektorräume
Faltung
ℑ
ω72
ℑ
ω41
ω20
FFT
ω51
ω50
ω32
ω21
Fourier-Reihe
7. Fourier Transformation – 6 / 34
C-Vektorraum
Einheitswurzeln (Beispiele)
Fourier Transformation
Faltung
Damit erhalten wir
erhalten wir
C-Vektorräume
FFT
z “ |z| ¨ pcospϕq ` i sinpϕqq “ |z| ¨ exppiϕq
zn
n!
n“0
Zusammen mit der Eulerschen Formel
8
ÿ
Fourier-Reihe
Jede komplexe Zahl z P C besitzt eine Polardarstellung
8
ÿ
berechnen und das Ergebnis in seinen Real- und Imaginärteil zerlegen.
exppibq “
7. Fourier Transformation – 4 / 34
V “ spanR pv1 , . . . , vn q
ℜ
7. Fourier Transformation – 7 / 34
ñ
W :“ spanC pv1 , . . . , vn q.
mit dimC W “ dimR V .
Man schreibt hierfür üblicherweise W :“ V b C.
IN0019 - Numerisches Programmieren
7. Fourier Transformation – 8 / 34
Skalarprodukt
C-Vektorräume
Fourier Transformation
Fourier-Reihe
FFT
C-Vektorräume
Faltung
Fourier Transformation
Fourier-Reihe
FFT
Faltung
Für C-Vektorräume W erfüllt ein Skalarprodukt x¨, ¨y : W ˆ W Ñ C folgende
Eigenschaften:
xαx ` βy, zy “ᾱ xx, zy ` β̄ xy, zy
(Semilinear in der ersten Komponente)
xx, αy ` βzy “α xx, yy ` β xx, zy
(Linear in der zweiten Komponente)
xx, yy “xy, xy
Fourier Transformation
(Hermitesch)
xx, xy PR`
0
xx, xy “ 0 ô x “ 0
(Positiv-Definit)
Ist V “ spanpv1 , . . . , vn q ein R-Vektorraum mit aij “ xvi , vj y so wird dadurch ein
Skalarprodukt auf W :“ V b C definiert.
ř
ř
Sei w1 “ ni“1 αi vi und w2 “ ni“1 βi vi , dann ist dieses W -Skalarprodukt
xw1 , w2 y “ xᾱ, Aβy “ ᾱJ Aβ
IN0019 - Numerisches Programmieren
7. Fourier Transformation – 9 / 34
Polynom-Interpolation
C-Vektorräume
Fourier Transformation
Fourier-Reihe
Diskrete Fourier Transformation
FFT
Im Folgenden betrachten wir das Interpolationsproblem für ein Polynom
ppzq “
n´1
ÿ
j“0
C-Vektorräume
Faltung
pV ˚ V qjk “
j
FFT
Faltung
n´1
ÿ
m“0
˚
vjm
vmk “
n´1
ÿ
m“0
ωn´pjmq`mk “
n´1
ÿ
m“0
´
¯m
“ n ¨ Ijk
ωnk´j
Das heißt wir haben V ´1 “ n1 V ˚ und es gilt
mit den n Einheitswurzeln als Stützstellen:
j “ 0, . . . , n ´ 1
ak “
Das führt zum linearen Gleichungssystem mit der Vandermonde-Matrix V :
V P Cnˆn , a, y P Cn
V ¨ a “y
Fourier-Reihe
Bezeichnen wir mit V ˚ :“ V̄ J die adjungierte Matrix bzgl. V , so gilt
aj z P Πn´1
ppωnj q “ yj
Fourier Transformation
n´1
1 ÿ
yj ω̄njk
n j“0
yk “
n´1
ÿ
aj ωnjk
j“0
Die erste Operation ist die Diskrete Fourier Transformation (DFT) und die
zweite ist die inverse DFT (IDFT).
In der Literatur werden manchmal andere Faktoren benutzt, d.h. 1 und
vertauscht oder in beiden Fällen wird ?1n benutzt.
mit vjk “ ωnj¨k für j, k “ 0, . . . , n ´ 1.
IN0019 - Numerisches Programmieren
7. Fourier Transformation – 11 / 34
IN0019 - Numerisches Programmieren
1
n
sind
7. Fourier Transformation – 12 / 34
Trigonometrische Orthonormalbasis
C-Vektorräume
Fourier Transformation
Fourier-Reihe
FFT
C-Vektorräume
Faltung
Fourier Transformation
Fourier-Reihe
FFT
Faltung
Die Name der Fourier-Transformation hat seinen Ursprung in der Fourier-Reihe,
die auf folgendem Skalarprodukt beruht:
ż
1 π
xf, gy :“
f pxqgpxq dx .
π ´π
Fourier-Reihe
Dieses Skalarprodukt kann zur Approximation von Funktionen benutzt werden. Man
projiziert dann eine Funktion f auf den Vektorraum, der von endlich vielen
Funktionen fi aufgespannt ist.
Man kann zeigen, dass bzgl. des obigen Skalarprodukts die folgenden Funktionen
eine Orthonormalbasis bilden:
"
*
1
? , cospxq, sinpxq, . . . , cospnxq, sinpnxq
2
ř
Damit erhalten wir also f pxq « a0 ` nk“1 ak cospkxq ` bk sinpkxq.
IN0019 - Numerisches Programmieren
Koeffizienten der Fourier-Reihe
C-Vektorräume
Fourier Transformation
Fourier-Reihe
FFT
Komplexe Orthonormalbasis
fn pxq “ a0 `
k“1
C-Vektorräume
Faltung
Die Koeffizienten dieser Fourier-Reihe
n
ÿ
xf, gy :“
ak cospkxq ` bk sinpkxq
Fourier-Reihe
FFT
Faltung
1
2π
żπ
´π
f pxqḡpxq dx,
so bilden folgenden Funktionen eine Orthonormalbasis:
texpp´inxq, . . . , expp´ixq, 1, exppixq, . . . , exppinxqu
Die Fourier-Koeffizienten sind also
xf pxq, sinpkxqy “bk
a0
xf pxq, 1y “
2
Damit erhalten wir also
f pxq «
Diese Darstellung wird benutzt, um hohe Frequenzen in Signalen zu entfernen. Das
ist der wesentliche Unterschied zwischen WAV- und MP3-Dateien.
Setzt man ck :“ ak ` ibk , so kann man die Notationen vereinfachen. Dazu
verwandelt man den R-Vektorraum C 0 pr´π, πs, Rq in den C-Vektorraum
C 0 pr´π, πs, Cq.
IN0019 - Numerisches Programmieren
Fourier Transformation
Betrachten wir nun das Skalarprodukt
erhält man, indem man f mit den Basisfunktionen multipliziert.
xf pxq, cospkxqy “ak
7. Fourier Transformation – 14 / 34
7. Fourier Transformation – 15 / 34
n
ÿ
ak exppikxq
k“´n
mit
ak “ xf, exppikxqy “
IN0019 - Numerisches Programmieren
1
2π
żπ
´π
f pxq expp´ikxq dx .
7. Fourier Transformation – 16 / 34
Kontinuierliche Fourier-Transformation
C-Vektorräume
Fourier Transformation
Fourier-Reihe
FFT
Faltung
C-Vektorräume
Fourier Transformation
Motiviert durch diese Beobachtung, definiert man die kontinuierliche, zyklische
Fourier-Transformation als
ż
1 π
fˆpαq “
f pxqe´iαx dx
2π ´π
Fourier-Reihe
FFT
Faltung
FFT
Faltung
FFT
Benutzt man die Trapezregel als
so erhält man mit der Notation
` 2πDiskretisierung,
˘
xj “ ´π ` 2π
n j und ωn “ exp n i gerade
ˆ
˙
n´1
2π
2π
1 ÿ
fˆ
f pxj qω̄nj ¨
j «
n
2π j“0
n
Dies entspricht genau der diskreten Fourier-Transformation.
IN0019 - Numerisches Programmieren
7. Fourier Transformation – 17 / 34
Motivation der FFT
C-Vektorräume
Fourier Transformation
Zerlegung der IDFT
Fourier-Reihe
FFT
Faltung
Die IDFT
C-Vektorräume
Fourier Transformation
Fourier-Reihe
Es sei n “ 2m. Dann gilt:
yk “
n´1
ÿ
aj ωnjk
yk “
j“0
lässt sich als Matrix-Vektor-Multiplikation darstellen, d.h. sie kann in Opn2 q
berechnet werden. Das Ziel der schnellen Fourier-Transformation (FFT)
besteht darin, diese Berechnung in Opn logpnqq durchzuführen.
Idee Zerlege die Summen geschickt in zwei Teilsummen halber Länge, aus denen
sich die ursprünglichen Summen leicht gewinnen lassen.
Voraussetzung Es wird also in jedem Schritt benötigt, dass n gerade ist, d.h.
insgesamt n “ 2N .
IN0019 - Numerisches Programmieren
7. Fourier Transformation – 19 / 34
“
“
2m´1
ÿ
m´1
ÿ
j“0
m´1
ÿ
j“0
Fourier Transformation
Fourier-Reihe
â2k “
jk
a2j ωm
â2k`1 “
j“0
yk`m “
m´1
ÿ
j“0
j“0
jk
a2j ωm
` ωnk ¨
jpk`mq
a2j ωm
` ωnk`m ¨
m´1
ÿ
j“0
m´1
ÿ
j“0
FFT
Faltung
m´1
ÿ
jk
a2j`1 ωm
C-Vektorräume
Fourier Transformation
7. Fourier Transformation – 21 / 34
FFT
Faltung
a0
a4
Id
Binär
Bit-Reversal
Dezimal
IN0019 - Numerisches Programmieren
a2
0
000
000
0
pa1 , a5 q
a6
4
100
001
1
2
010
010
2
a1
a5
6
110
011
3
1
001
100
4
´ n ¯2
2
1
` n “ n2 ` n
2
2k
´ n ¯2
2k
`k¨n“
1 2
n `k¨n
2k
Ist n “ 2N , ist die Anzahl der Operationen (bei N Rekursionen)
2N
´ n ¯2
` N ¨ n “ n ` logpnq ¨ n
2N
IN0019 - Numerisches Programmieren
7. Fourier Transformation – 22 / 34
C-Vektorräume
Fourier Transformation
Fourier-Reihe
FFT
Faltung
Um die rekursive IFFT-Berechnung in eine iterative IFFT-Berechnung zu
verwandeln, zerlegen wir die Berechnung in drei Phasen.
In der ersten Phase (Sortierung) permutieren wir die Einträge ai derart, dass sie
bzgl. ihres Bit-Reversals πpiq sortiert sind.
pa1 , a3 , a5 , a7 q
pa2 , a6 q
Faltung
Iterative IFFT
pa0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 q
pa0 , a4 q
FFT
Wird die Rekursion k-mal benutzt, ist die Anzahl der Operationen
Aufrufabfolge der Rekursion
Fourier-Reihe
Fourier-Reihe
Wird die Rekursion einmal benutzt, ist die Anzahl der Operationen
jk
a2j`1 ωm
“â2k ` ωnk ¨ â2k`1
IN0019 - Numerisches Programmieren
pa0 , a2 , a4 , a6 q
jk
a2j`1 ωm
j“0
7. Fourier Transformation – 20 / 34
j“0
jpk`mq
a2pk`mq`1 ωm
“â2k ´ ωnk ¨ â2k`1
Fourier Transformation
m´1
ÿ
Ohne Rekursion benötigen wir jeweils n2 Operationen (` sowie ¨).
Diese Operation wird auch Butterfly-Schritt genannt.
Falls die IDFT für die beiden m-elementigen Vektoren berechnet wurde, benötigen
wir lediglich Opnq für den Kombinationsschritt.
C-Vektorräume
jk
a2j ωm
` ωnk ¨
IN0019 - Numerisches Programmieren
2
m´1
ÿ
a2j`1 ωnp2j`1qk
j“0
Die zweite Summe ist die m-elementige IDFT der ungeraden Koeffizienten.
Dann gilt für k ă m
yk “
m´1
ÿ
Laufzeit IFFT
Angenommen, dass n “ 2m und wir haben die IDFT bzgl. m berechnet:
m´1
ÿ
a2j ωn2jk `
Die erste Summe ist die m-elementige IDFT der geraden Koeffizienten.
Rekursive IDFT
C-Vektorräume
aj ωnjk
j“0
In der zweiten Phase (Kombinationsphase) werden genau logpnq
Kombinationsschritte durchgeführt.
pa3 , a7 q
a3
5
101
101
5
In der dritten Phase (Inverse Sortierung) permutieren wir die Einträge ai , so dass
sie wieder bzgl. i sortiert sind.
a7
3
011
110
6
7
111
111
7
7. Fourier Transformation – 23 / 34
Da beim Bit-Reversal lediglich paarweise die Einträge ausgetauscht werden, ist die
erste Phase mit der dritten Phase identisch.
Das Bit-Reversal kann in Linearzeit berechnet werden. Hierfür iterieren wir über
alle Einträge i und führen einen Austausch zwischen i und πpiq durch genau wenn
πpiq ą i.
IN0019 - Numerisches Programmieren
7. Fourier Transformation – 24 / 34
Polynom-Multiplikation
C-Vektorräume
Fourier Transformation
Fourier-Reihe
FFT
Faltung
C-Vektorräume
Fourier Transformation
Fourier-Reihe
FFT
Faltung
Man kann die diskrete Fourier-Transformation auch benutzen, um zwei Polynome
effizient zu multiplizieren. Sei hierzu
ppxq “
Faltung
n
ÿ
ak xk
k“0
qpxq “
n
ÿ
bk xk
k“0
Dann gilt für das Produkt r :“ p ¨ q P Π2n gerade
rpxq “
2n
ÿ
c k xk
ck “
k“0
k
ÿ
aj bk´j
j“0
Diese Berechnung benötigt Opn2 q Operationen.
Allerdings wird r eindeutig durch 2n verschiedene Stützstellen definiert. Das ist
die Kernidee, um das Produkt mit Hilfe der FFT zu berechnen.
IN0019 - Numerisches Programmieren
7. Fourier Transformation – 26 / 34
Polynom-Multiplikation mittels FFT
C-Vektorräume
Fourier Transformation
Fourier-Reihe
FFT
Faltung
Faltung
Es seien die Koeffizientenvektoren a, b P Rn gegeben, die die Polynome p und q
beschreiben. Nun möchte man den Koeffizientenvektor c P R2n finden, der das
Polynom r “ p ¨ q beschreibt.
1
2
3
4
5
6
7
8
9
10
// Füllen mit Nullen
for ( j =0; j < n ; j ++) { a [ n + j ] = 0; b [ n + j ] = 0; }
// IFFT
A = ifft ( a ); B = ifft ( b );
// Punktweise Multiplikation
for ( j =0; j <2* n ; j ++) {
C [ j ] = A [ j ]* B [ j ]; // Komplexe Multiplikation
}
// FFT
c = fft ( C );
C-Vektorräume
@k P Z
gpx ` 2kπq “gpxq
f ˚ g : r´π, πs ÑR
żπ
f pyqgpx ´ yq dy
x ÞÑ
und es gilt f ˚ g “ g ˚ f .
7. Fourier Transformation – 27 / 34
IN0019 - Numerisches Programmieren
Faltung (Beispiel)
Fourier Transformation
y
Fourier-Reihe
FFT
Faltung
y
*
x
y
=
x
y
y
*
x
=
x
ş
Sei g : R Ñ R eine positive C 8 -Funktion mit gpxq dx “ 1, so ist f ˚ g eine
8
C -Approximation von f . Die Operation nennt man auch Glättung.
IN0019 - Numerisches Programmieren
7. Fourier Transformation – 29 / 34
C-Vektorräume
Fourier-Reihe
Fourier Transformation
Fourier-Reihe
FFT
Faltung
Für die Fourier-Transformation der Faltung erhalten wir
ż
1 π
fz
˚ gpαq “
f ˚ gpxqe´iαx dx
2π ´π
ż ż
1 π π
“
f pyqgpx ´ yqe´iαy e´iαpx´yq dx dy
2π ´π ´π
ż ż
1 π π
f pyqgpxqe´iαy e´iαx dx dy
“
2π ´π ´π

 „ż π
„ż π
1
“
f pyqe´iαy dy
gpxqe´iαx dx
2π ´π
´π
“2π fˆpαq ¨ ĝpαq
Insgesamt verhält sich die Fourier-Transformation der Faltung ähnlich zur
diskreten Fourier-Transformation der Polynom-Multiplikation.
IN0019 - Numerisches Programmieren
Verallgemeinerungen
Fourier Transformation
7. Fourier Transformation – 28 / 34
Fourier-Transformation der Faltung
y
C-Vektorräume
Faltung
´π
IN0019 - Numerisches Programmieren
x
FFT
Wir schreiben die Faltung von f und g als
2n ` 4n ¨ logp2nq ` 2n ` 2n ¨ logp2nq “ Opn ¨ logpnqq
x
Fourier-Reihe
Ähnlich wie die Fourier-Transformation hat auch diese Operation ein
kontinuierliches Analogon, die sogenannte Faltung. Hierzu seien zwei stetige
Funktionen f, g : r´π, πs Ñ R gegeben, die periodisch fortgesetzt werden, d.h.
f px ` 2kπq “f pxq
Die Anzahl der Flops ist
C-Vektorräume
Fourier Transformation
7. Fourier Transformation – 30 / 34
Bildglättung (Beispiel)
FFT
Faltung
C-Vektorräume
Fourier Transformation
Fourier-Reihe
Das Konzept der Fourier-Transformation und der Faltung kann man auch für höhere
Dimension verallgemeinern. Z.B. gilt für die Dimension d “ 2 und Funktionen
f, g : r´π, πs ˆ r´π, πs Ñ R gerade
FFT
Faltung
*
f ˚ g : r´π, πs ˆ r´π, πs ÑR
żπ żπ
px1 , x2 q ÞÑ
f py1 , y2 qgpx1 ´ y1 , x2 ´ y2 q dy1 dy2
´π
´π
sowie
fˆpα1 , α2 q “
1
p2πq2
żπ żπ
´π
´π
f py1 , y2 qe´xα,yy dy1 dy2
und es gilt
IN0019 - Numerisches Programmieren
fz
˚ gpαq “ p2πq2 ¨ fˆpαq ¨ ĝpαq
=
Laufzeit: 1.94 Sekunden (ohne FFT)
Laufzeit: 0.17 Sekunden (mit FFT)
7. Fourier Transformation – 31 / 34
IN0019 - Numerisches Programmieren
7. Fourier Transformation – 32 / 34
Suche in Bildern
C-Vektorräume
Fourier Transformation
Fourier-Reihe
Bildsuche mittels FFT
FFT
Faltung
C-Vektorräume
Fourier Transformation
P : Ω0 Ñ R3
P : Ω0 Ñ R3
Wir suchen nach dem Pixelort x P Ω Ă R2 im Bild I : Ω Ñ R3 , in dem sich das
Zentrum des Bildausschnitts P : Ω0 Ñ R3 befindet, d.h. wir sind auf der Suche
nach dem Minimum von:
ż
ż
‰2
“
rP pyq ´ Ipx ` yqs2 dy “
Epxq “
P pyq ´ Ipx ´ yq dy
Ω0
Ω0
ż
“
P pyq2 ´ 2P pyqIpx ´ yq ` Ipx ´ yq2 dy
Ω0
“
‰
“ const ` ´2pP ˚ Iq ` I 2 ˚ 1 pxq
IN0019 - Numerisches Programmieren
7. Fourier Transformation – 33 / 34
FFT
Faltung
Ø
Eingabe:
I : Ω Ñ R3
Fourier-Reihe
I
P und P
P ˚I
I2 ˚ 1
2 ¨ P ˚ I ´ I2 ˚ 1
Ergebnis
FFT:
Ausgabe:
IN0019 - Numerisches Programmieren
7. Fourier Transformation – 34 / 34
Herunterladen