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