Diskrete Fourier-Transformation Stefanie Dourvos Institut für Informatik FU Berlin 28.04.09
Übersicht Einleitung Problem: polynomiale Multiplikation Crashkurs Diskrete Fourier-Transformation DFT mit FFT DFT -1 Iterativer FFT-Algorithmus (effizienter) Paralleler FFT-Schaltkreis DFT in der Bearbeitung von Signalen Anmerkungen Quellen Seminar über Algorithmen - Diskrete Fourier-Transformation 2
Was macht die Fourier-Transformation Und was macht die DFT? [1] Seminar über Algorithmen - Diskrete Fourier-Transformation 3
Wozu braucht man die DFT? Digitale Signalverarbeitungsalgorithmen: Korrelation von Signalen Spektrum eines Nachrichtensignals Polynomiale Multiplikation Rauschunterdrückung Seminar über Algorithmen - Diskrete Fourier-Transformation 4
Rauschunterdrückung [6] Seminar über Algorithmen - Diskrete Fourier-Transformation 5
Problem: polynomiale Multiplikation FMCW Radar: Verfahren zur Störungsunterdrückung [3] [2] Seminar über Algorithmen - Diskrete Fourier-Transformation 6
Polynome Koeffizientendarstellung n 1 A x = j=0 a j x j Koeffizientenvektor a=(a 0, a 1,..., a n-1 ) Grad: n-1 Gradschranke: n Addition: C(x) = A(x) + B(x) mit c = a + b Aufwand Θ(n) Auswertung an der Stelle x 0 : (mit Horner-Schema) A(x 0 ) = a 0 + x 0 (a 1 + x 0 (a 2 +... + x 0 (a n-2 + x 0 (a n-1 ))...) Aufwand Θ(n) Seminar über Algorithmen - Diskrete Fourier-Transformation 7
Polynome Koeffizientendarstellung 2 Multiplikation: 2n 2 C x = j=0 j mit c j = k=0 c j x j a k b j k Aufwand: Θ(n²) resultierender Koeffizientenvektor c entspricht der Faltung: c = a b Seminar über Algorithmen - Diskrete Fourier-Transformation 8
Polynome Stützstellendarstellung {(x 0, y 0 ), (x 1, y 1 ),..., (x n-1, y n-1 )} Menge von n Stützstellenpaaren, so dass: alle x k verschieden y k = A(x k ) für alle k = 0, 1,..., n-1 Gradschranke: n Addition: C(x) = A(x) + B(x) mit A(x) : {(x 0, y 0 ), (x 1, y 1 ),..., (x n-1, y n-1 )} B(x) : {(x 0, y' 0 ), (x 1, y' 1 ),..., (x n-1, y' n-1 )} C(x) : {(x 0,y 0 +y' 0 ), (x 1,y 1 +y' 1 ),..., (x n-1,y n-1 +y' n-1 )} Aufwand Θ(n) Seminar über Algorithmen - Diskrete Fourier-Transformation 9
Polynome Stützstellendarstellung 2 Multiplikation: C(x) = A(x)B(x), wobei für jeden Punkt x k gilt: C(x k ) = A(x k )B(x k ) Aufwand: Θ(n) ACHTUNG! Gradschranke n, wo Gradschranke 2n-1 benötigt wird! Auswertung an einem neuen Punkt: ungeeignet Seminar über Algorithmen - Diskrete Fourier-Transformation 10
Umrechnung Koeffizientendarstellung -> Stützstellendarstellung simpel: (1) Auswahl von n verschiedenen Punkten (2) an diesen Punkten auswerten Aufwand: Θ(n²) für n Punkte Stützstellendarstellung -> Koeffizientendarstellung Interpolation: wohldefiniert für Interpolationspolynome mit n als Gradschranke Aufwand: Θ(n³) mit LU Zerlegung, Θ(n²) mit Lagrange-Formel Seminar über Algorithmen - Diskrete Fourier-Transformation 11
Umrechnung 2 Theorem: Für eine beliebige Menge {(x 0, y 0 ), (x 1, y 1 ),..., (x n-1, y n-1 )} von n Stützstellenpaaren mit paarweise verschiedenen x k gibt es ein eindeutiges Polynom A(x) der Gradschranke n, sodass für k = 0, 1,..., n-1 die Gleichung y k = A(x k ) gilt. Beweis: (Ansatz) 1 2 x0 x0 x 0 n 1 2 1 x 1 x 1 x 1 a0 y0 a 1 y 1 2 1 x n 1 x n 1 x n 1 a Vandermonde Matrix. :V x 0, x 1,, x n 1 n 1 = y n 1 det V = x k x j 0 j k n 1 => Matrix invertierbar, wenn die x k paarweise verschieden sind => a = V -1 y Seminar über Algorithmen - Diskrete Fourier-Transformation 12
Schneller geht es mit der DFT Mit Hilfe der DFT (und der FFT): Erzeugung der Stützstellendarstellung in Θ(n lg n) Mit Hilfe der inversen DFT (und der FFT): Interpolation in Θ(n lg n) komplexe Einheitswurzeln als Auswertungspunkte Seminar über Algorithmen - Diskrete Fourier-Transformation 13
DFT Seminar über Algorithmen - Diskrete Fourier-Transformation 14
Crashkurs: Einheitswurzeln Komplexe n-te Einheitswurzel: ω n = 1, w C Es gibt genau n komplexe n-te Einheitswurzeln: e 2πik/n, k = 0, 1,..., n-1 ω n = e 2πi/n primitive n-te Einheitswurzel Seminar über Algorithmen - Diskrete Fourier-Transformation 15
Eigenschaften der Einheitswurzeln Kürzungslemma: Für beliebige ganze Zahlen n 0, k 0 und d > 0 gilt: dk k dn = n Korollar: Für jede beliebige gerade ganze Zahl n > 0 gilt: n/ 2 n = 2 = 1 Halbierungslemma: Wenn n> 0 gradzahlig ist, dann sind die Quadrate der n komplexen n-ten Einheitswurzel die n/2 komplexen (n/2)-ten Einheitswurzeln. Seminar über Algorithmen - Diskrete Fourier-Transformation 16
Eigenschaften der Einheitswurzeln 2 Summationslemma Für jede beliebige ganze Zahl n 1 und jede von Null verschiedene ganze Zahl k, die nicht durch n teilbar ist, gilt: n 1 j=0 n k j =0. Seminar über Algorithmen - Diskrete Fourier-Transformation 17
Diskrete Fourier-Transformation Auswertung des Polynoms an den Stellen ω 0 n, ω 1 n-1 n,..., ω n entspricht der DFT n 1 n 1 y k = A k kj n = a j n = a j e 2 ijk / n j=0 j =0 Interpolation der inversen DFT n 1 a j = 1 n k=0 y k n k j Seminar über Algorithmen - Diskrete Fourier-Transformation 18
Diskrete Fourier-Transformation DFT als Matrixprodukt y = V n a y0 y 1 y 2 y 3 1 1 1 1 2 3 n 1 1 n n n n 2 4 6 2 n 1 1 n n n n 3 6 9 3 n 1 1 n n n n y n 1 = 1 n 1 2 n 1 3 n 1 n 1 n 1 1 n n n n a0 a 1 a 2 a 3 a n 1 Inverse Operation: a = DFT n -1 (y) => y mit V n -1 multiplizieren Theorem: Für j, k = 0, 1,..., n-1 ist ω n -kj /n das Element (j,k) von V n -1. Seminar über Algorithmen - Diskrete Fourier-Transformation 19
Faltungstheorem Für zwei beliebige Vektoren a und b, deren Länge n eine Potenz von 2 ist, gilt: a b = DFT 2n -1 (DFT 2n (a) DFT 2n (b)), wobei die Vektoren a und b mit Nullen auf die Länge 2n aufgefüllt werden. Seminar über Algorithmen - Diskrete Fourier-Transformation 20
Vorgehen (1) Doppelte Gradschranke: Θ(n) A(x) und B(x) auf Gradschranke 2n bringen (2) Auswerten: Θ(n lg n) Stützstellendarstellung von A(x) und B(x) der Länge 2n durch zweimaliges Anwenden der FFT der Ordnung 2n (3) Punktweises Multiplizieren: Θ(n) C(x) = A(x)B(x) (4) Interpolieren: Θ(n lg n) Koeffizientendarstellung durch einmalige Anwendung der FFT, um die inverse DFT zu berechnen Seminar über Algorithmen - Diskrete Fourier-Transformation 21
DFT mit FFT Nutzung der Einheitswurzeln Divide-and-Conquer: Koeffizienten aufgeteilt in 2 neue Polynome Es gilt: wobei A(x) = A [0] (x²) + x*a [1] (x²), A [0] alle gradzahligen und A [1] alle ungradzahligen Seminar über Algorithmen - Diskrete Fourier-Transformation 22
FFT Algorithmus (rekursiv) Recursive-FFT(a) 1 n <- länge[a] 2 if n = 1 3 then return a 4 w n <- e 2πi/n 5 w n <- 1 6 a [0] <- (a 0, a 2,..., a n-2 ) 7 a [1] <- (a 1, a 3,..., a n-1 ) 8 y <- Recursive-FFT(a [1] ) 9 y <- Recursive-FFT(a [1] ) 10 for k <- 0 to n/2-1 11 do y k [0] <- y k [1] + wy k 12 y k+(n/2) <- y k [0] - wy k [1] 13 w <- ww n 14 return y Seminar über Algorithmen - Diskrete Fourier-Transformation 23
Bearbeitung der Elemente a 0, a 1, a 2, a 3, a 4, a 5, a 6, a 7 a 0, a 2, a 4, a 6 a 1, a 3, a 5, a 7 a 0, a 4 a 2, a 6 a 1, a 5 a 3, a 7 a 0 a 4 a 2 a 6 a 1 a 5 a 3 a 7 Seminar über Algorithmen - Diskrete Fourier-Transformation 24
Laufzeit c*n a 0, a 1, a 2, a 3, a 4, a 5, a 6, a 7 c*n a 0, a 2, a 4, a 6 a 1, a 3, a 5, a 7 lg n c*n a 0, a 4 a 2, a 6 a 1, a 5 a 3, a 7 c*n a 0 a 4 a 2 a 6 a 1 a 5 a 3 a 7 Zusammen: cn lg(n) + cn -> Laufzeit: Θ(n lg n) Seminar über Algorithmen - Diskrete Fourier-Transformation 25
Inverse DFT mit FFT n 1 a j = 1 n k=0 y k n k j Modifikation des Algoritmus: (1) a und y tauschen Rollen (2) w n wird durch w -1 n ersetzt (3) jedes Element des Ergebnisses wird durch n geteilt Aufwand: Θ(n lg n) Seminar über Algorithmen - Diskrete Fourier-Transformation 26
Iterativer FFT-Algorithmus (effizienter) wy k [1] nicht zweimal berechnen, stattdessen in temporärer Variable t speichern Elemente des Ausgangsvektors a in die Reihenfolge wie in den Blättern bringen Elementpaare bilden, DFT jedes Paares mit Hilfe einer Überkreuz-Operation berechnen, Paar durch seine DFT ersetzen Seminar über Algorithmen - Diskrete Fourier-Transformation 27
Iterativer FFT-Algorithmus Iterative-FFT(a) 1 BIT-REVERSE-COPY(a, A) 2 n <- länge[a] 3 for s <- 1 to lg n 4 do m <- 2 s 5 w m <- e 2πi/m 6 for k <- 0 to n-1 step m 7 do w <- 1 8 for j <- 0 to m/2-1 9 do t <- wa[k+j+m/2] 10 u <- A[k+j] 11 A[k+j] <- u+t 12 A[k+j+m/2] <- u-t 13 w <- ww m 14 return A Seminar über Algorithmen - Diskrete Fourier-Transformation 28
Paralleler FFT-Schaltkreis [4] y k [0] w n k y k [1] y k [0] +w nk y k [1] y k [0] -w n k y k [1] Butterfly Operation Seminar über Algorithmen - Diskrete Fourier-Transformation 29
DFT in der Bearbeitung von Signalen [5] Wichtiges Hilfsmittel Leicht veränderte Formel Wichtige Eigenschaften: Linearität, Periodizität, zirkulare Verschiebung und Dualität Genutzt bei Faltung und Korrelation Seminar über Algorithmen - Diskrete Fourier-Transformation 30
Anwendungsbeispiele Bild- und Audioverarbeitung Digitale Modulationsverfahren Mustererkennung (z.b. Sprache) Kompressionsalgorithmen Radar-, Nachrichten- und Schalltechnik Seminar über Algorithmen - Diskrete Fourier-Transformation 31
Anmerkungen Unterschiede bei verschiedenen Autoren: Hin- und Rücktransformation ω n = e -2πi/n j statt i Seminar über Algorithmen - Diskrete Fourier-Transformation 32
Vielen Dank! Seminar über Algorithmen - Diskrete Fourier-Transformation 33
Quellen [1] http://www.statistics4u.com/fundstat_germ/cc_time_and_freq.html [2] http://www.ausairpower.net/clamshell.html [3] http://www.etl.noaa.gov/technology/archive/fmcw/ [4] http://www.personal.kent.edu/~mlu3/cscourses/advalgorithms/clr-book/bo [5] Universität Koblenz-Landau, Institut für integrierte Naturwissenschaften, Seminar Digitale Signalverarbeitung [6] http://www.mathematik.uni-trier.de/~schulz/prosem-0405/arenz.pdf allgemein: Th. H. Cormen/C.E. Leiserson/R. Rivest/C. Stein: Algorithmen Eine Einführung, 2. Auflage, Oldenbourg Verlag München Wien http://www.statistics4u.com/fundstat_germ/wrapnt_index445.html Folienvorlage: https://www.inf.fu-berlin.de/w/se/seminarregeln Seminar über Algorithmen - Diskrete Fourier-Transformation 34