FFT May 31, 2010 Auswertung und Interpolation von Polynomen Diskrete Fouriertransformation (DFT) Schnelle Fouriertransformation (FFT) Polynommultiplikation mittels Auswertung und Interpolation Auswertung von Polynomen I a(X ) = a0 + a1 X + a2 X 2 + · · · + an X n (reelles oder komplexes) Polynom vom Gard ≤ n I ξ eine komplexe Zahl I Auswertung von a(X ) an der Stelle ξ: a(ξ) = a0 + a1 ξ + a2 ξ 2 + · · · + an ξ n I Hornerschema a(ξ) = a0 + (a1 + · · · + (an−1 + (an−1 + an ξ) ξ) ξ . . .) ξ I benötigt n Multiplikationen und n Additionen von komplexen Zahlen. I Man kann zeigen, dass dies optimal ist! Simultane Auswertung von Polynomen I I I Gegeben: Polynom a(X ) = a0 + a1 X + a2 X 2 + · · · + an X n n + 1 verschiedenen Stellen ξ0 , ξ1 , . . . , ξn ∈ C Aufgabe: Polynom a(X ) diesen Stellen simultan auswerten Als Abbildung von Cn+1 in Cn+1 geschrieben: ha0 , a1 , . . . an i 7−→ ha(ξ0 ), a(ξ1 ), . . . a(ξn )i I mit a(ξ) = a0 + a1 ξ + a2 ξ 2 + · · · + an ξ n Dies ist eine lineare Transformation von Cn+1 : a0 2 3 n a(ξ0 ) 1 ξ0 ξ0 ξ0 . . . ξ 0 a 1 ξ1 ξ 2 ξ 3 . . . ξ n 1 a(ξ1 ) 1 1 1 1 ξ2 ξ 2 ξ 3 . . . ξ n a2 a(ξ2 ) 2 2 2 a = 3 .. .. .. .. .. . . .. . . . . .. . . . . 2 3 1 ξn ξn ξn . . . ξnn a(ξn ), an Vandermonde-Matrix und Determinante I Transformationsmatrix 1 ξ0 ξ02 ξ03 . . . ξ0n 1 ξ1 ξ 2 ξ 3 . . . ξ n 1 1 1 h i 1 ξ2 ξ 2 ξ 3 . . . ξ n j 2 2 2 = V (ξ0 , ξ1 , ξ2 , . . . , ξn ) = ξi .. .. 0≤i,j≤n .. .. . . .. . . . . . . 1 ξn ξn2 ξn3 . . . ξnn I Determinante det V (ξ0 , ξ1 , ξ2 , . . . , ξn ) = Y (ξj − ξi ) 6= 0 0≤i<j≤n I Konsequenz: die Abbildung ha0 , a1 , . . . an i 7−→ ha(ξ0 ), a(ξ1 ), . . . a(ξn )i ist umkehrbar: Interpolation Interpolation I Interpolation: Bestimme zu hη0 , η1 , . . . , ηn i das eindeutige Polynom a(X ) vom Grad ≤ n mit (0 ≤ i ≤ n) a(ξi ) = ηj I Interpolationsformel von Lagrange: Q X j6=i (X − ξj ) a(X ) = ηi · Q , j6=i (ξi − ξj ) 0≤i≤n I Beachte: die Polynome Q j6=i εi (X ) = Q (X − ξj ) j6=i (ξi − ξj ) (0 ≤ i ≤ n) haben die Eigenschaft ( 1 εi (ξj ) = 0 falls i = j falls i = 6 j (Komplexe) Einheitswurzeln I Für N ≥ 1 hat die Gleichung X N = 1 genau N komplexe Lösungen: N−1 0 2 3 1 = ωN , ωN , ωN , ωN , . . . , ωN wobei 2π 2π + i · sin N N Diese Menge RN nennt man die komplexen N-ten Einheitswurzeln ωN = e 2πi/N = cos I I Die komplexen N-ten Einheitswurzeln bilden eine (multiplikative) zyklische Gruppe der Ordnung N I RN ist Untergruppe von RM ⇐⇒ N | M, insbesondere ist RN is Untergruppe von R2N Diskrete Fouriertransformation I (Komplexe) Diskrete Fouriertransformation (DFT) der Ordnung N ist Auswertung und Interpolation mit RN als Menge der Auswertungs- und Interpolationspunkte I DFTN : CN → CN ist gegeben durch N−1 0 1 2 ha0 , a1 , . . . , aN−1 )i 7−→ ha(ωN ), a(ωN ), a(ωN ), . . . , a(ωN )i, wobei a(X ) = a0 + a1 X + · · · + aN−1 X N−1 I Mit DFTN wird auch die Matrixdarstellung dieser Transformation bezeichnet Diskrete Fouriertransformation I Matrixdarstellung (mit ω = ωN = e 2πi/N ) 1 1 1 .. . 1 | a0 ... 1 a(1) a1 a(ω) . . . ω N−1 2(N−1) a2 2 ... ω a3 = a(ω ) .. .. .. . . . . .. 2 N−1 N−1 2(N−1) 4(N−1) (N−1) a(ω ) ω ω ω ... ω {z } aN−1 DFTN = V (ω 0 , ω 1 , ω 2 , . . . , ω N−1 ) 1 ω ω2 .. . 1 ω2 ω4 .. . 1 ω3 ω6 .. . wobei also DFTN = V (ω 0 , ω 1 , ω 2 , . . . , ω N−1 ) = ω i·j 0≤i,j<N . Orthogonalität I I Je zwei verschiedene Zeilen der Matrix DFTN = V (ω 0 , ω 1 , ω 2 , . . . , ω N−1 ) sind orthogonal Beweis: I betrachte das (komplexe!) Skalarprodukt der (j + 1)ten mit der (k + 1)-ten Zeile: ( N−1 N−1 X j` X (j−k)` N falls j = k −k·` ωN · ωN = ωN = 0 falls j 6= k `=0 `=0 Der erste Fall (j = k) ist klar wegen ωN0 = 1, der zweite ergibt sich aus der endlichen geometrische Reihe: N−1 X `=0 (j−k)N (j−k)` ωN = 1 − ωN 1 − ωNj−k = 1 − (ωNN )j−k 1 − ωNj−k =0 Unitäre Transformationen I A = [ ai,j ]1≤i,j≤n sei eine Matrix mit komplexen Koeffizienten I Die Matrix A† = [ aj,i ]1≤i,j≤n , die aus A durch Transposition und komplexe Konjugation hervorgeht, wird als die zu A adjungierte Matrix bezeichnet. I Die Matrix A heisst unitär, wenn ihre adjungierte Matrix auch ihre inverse Matrix ist, d.h. A† = A−1 . DFT ist unitär I Die DFT-Matrizen (Transformationen) 1 1 √ · DFTN = √ · V (ω 0 , ω 1 , ω 2 , . . . , ω N−1 ) N N sind unitäre Matrizen (Transformationen) DFT ist unitär – Inverse DFT I Da DFTN eine symmetrische Matrix ist, gilt DFTN† = V (ω −0 , ω −1 , ω −2 , . . . , ω −(N−1) ) = I ω −i·j 0≤i,j<N Aus der Orthogonalität folgt DFTN · DFTN† = N · IN . I Somit gilt † 1 √ · DFTN = IN , d.h. N 1 · DFTN† . DFTN−1 = N 1 √ · DFTN · N I Die zur Transformation DFTN inverse Transformation DFTN−1 ist ist (bis auf die Multiplikation mit der Konstanten 1/N und −1 ) wieder eine DFTN . dem Ersetzen von ωN durch ωN Unitäre Transformationen I Unitäre Matrizen sind im Bereich der Matrizen mit komplexen Koeffizienten genau das, was orthogonale Matrizen im Bereich der Matrizen mit reellen Koeffizienten sind. I Die unitären Matrizen sind genau diejenigen Matrizen, deren sämtliche Eigenwerte auf dem komplexen Einheitskreis liegen. I Eine besondere Bedeutung haben uniäre Matrizen in der Informatik für das Quantencomputing: unitäre Transformationen sind genau die Zustandstransformationen, die auf eine Quantencomputer möglich sind. I n=2 " DFT2 = I 1 1 # 1 −1 n=3 1 1 1 1 1 1 DFT3 = 1 ω3 ω32 = 1 ω3 ω32 1 ω32 ω34 1 ω32 ω3 mit ω3 = √ −1+i· 3 , ω32 2 = √ −1−i· 3 2 I n=4 1 1 1 i DFT4 = 1 i2 1 i3 1 1 1 i = 1 −1 1 −i 1 1 1 1 1 1 2 3 i2 i3 = 1 i i i i4 i6 1 i2 i0 i2 i6 i9 1 i3 i2 i1 1 1 −1 −i 1 −1 −1 i I n=5 DFT5 = 1 1 1 1 1 1 ω5 ω52 ω53 ω54 1 1 1 2 3 ω5 ω5 ω54 ω54 ω56 ω58 ω56 ω59 ω512 ω58 ω512 ω516 mit √ ω5 = = 1 1 1 1 1 1 ω5 ω52 ω53 ω54 √ p √ 5−1+i 2 5+ 5 4 1 ω52 ω54 ω5 ω53 1 ω53 ω5 ω54 ω53 1 ω54 ω53 ω52 ω5 I n=6 DFT6 = = 1 1 1 1 1 1 1 ω6 ω62 ω63 ω64 ω65 1 ω62 ω64 ω66 ω68 ω610 1 ω63 ω66 ω69 ω612 ω615 1 1 1 1 1 1 1 ω6 ω62 −1 ω64 ω65 1 ω62 ω64 1 ω62 ω64 1 −1 1 −1 1 1 1 ω64 ω68 ω612 ω616 ω620 1 ω64 ω62 1 ω64 ω62 1 ω65 ω610 ω615 ω620 ω625 1 ω65 ω64 −1 ω62 ω6 mit √ 1+i · 3 ω6 = 2 √ −1 − i· 3 ω64 = = −ω6 2 √ −1 + i · 3 = 2√ 1 − i · 3 ω65 = = −ω62 2 ω62 I n=8 DFT8 = 1 1 1 1 1 1 1 1 1 ω8 i ω83 −1 ω85 −i ω87 1 i −1 −i 1 i −1 −i 1 ω83 −i ω8 −1 ω87 i ω85 1 −1 1 −1 1 −1 1 −1 1 ω85 i ω87 −1 ω8 −i ω83 1 −i −1 i 1 −i −1 i 1 ω87 −i ω85 −1 ω83 i ω8 mit 1+i ω8 = √ 2 −1 − i ω85 = √ = −ω8 2 √ −1 + i √ = ω8 − 2 2 √ 1−i ω87 = √ = ω8 − i · 2 2 ω83 = Zur Geschichte I Von C. F. Gauss 1805 bemerkt (Tagebucheintrag), aber erst im Nachlass 1866 veröffentlicht und nicht weiter beachtet I Zu Beginn des 20. Jh. von Numerikern (Runge, König) erwähnt, aber nicht weiter beachtet I 1965 von J. W. Cooley und J. W. Tukey “neu entdeckt”: An algorithm for the machine calculation of complex Fourier series, Mathematics of Computation 19:297–301. Einer der folgenreichsten und meistzitierten Artikel der Mathematik überhaupt! Rekursionsschrit der FFT I P k Will man ein Polynom a(X ) = 2N−1 k=0 ak X vom Grad < 2N k an den 2N Interpolationsstellen ω2N (0 ≤ k < 2N) auswerten, so kann man a(X ) zerlegen: a(X ) = a0 + a2 X 2 + a4 X 4 + · · · + a2N−2 X 2N−2 | {z } 2 aeven (X ) + X a1 + a3 X 2 + a5 X 4 + · · · + a2N−1 X 2N−2 {z } | aodd (X 2 ) I Damit ist aber k 2k k 2k a(ω2N ) = aeven (ω2N ) + ω2N · aodd (ω2N ) Rekursionsschrit der FFT I Beachtet man nun noch die simplen Tatsachen 2k k ω2N = e 2π·(2k)/(2N) = e 2π·k/N = ωN und N+k N k k k ω2N = ω2N · ω2N = ω2 · ω2N = −ω2N , I so ergibt sich folgendes Rekursives Schema für die Berechnung von DFT2N : 0 – berechne aeven (ωNk ) 0≤k<N = (a00 , a10 . . . , aN−1 ) mittels DFTN k 00 00 00 – berechne aodd (ωN ) 0≤k<N = (a0 , a1 . . . , aN−1 ) mittels DFTN – berechne für 0 ≤ k < 2N k k a(ω2N ) = ak0 + ω2N · ak00 N+k k a(ω2N ) = ak0 − ω2N · ak00 Rekursionsschrit der FFT I Symbolisch geschrieben: DFT2N (a) = DFTN (aeven ) o nωk DFTN (aodd ) 2N wobei o nωk ist die sogenannte “butterfly-Operation” ist: 2N k ) k k) a(ω2N 1 ω2N aeven (ωN = N+k k k) 1 −ω2N aodd (ωN a(ω2N ) (0 ≤ k < N) a0 [0] a0 a1 [0] a1 a2 a3 [0] ak a2k [0] an−1 a2n−2 a2k+1 [1] a0 [1] a1 [0] α0 α0 [0] αk [0] αn−1 ! "ω 0 ! "ω 1 ! " k ω αk αn−1 α1 an−1 [1] αn−1 αn+k α2n−1 [1] DFT(n) [0] α1 [1] ak DFT(n) a2n−1 [1] α0 [1] α1 αk [1] ! "ωn−1 αn αn+1 Figure: FFT-Rekursionsschritt a0 a1 + • a2 a3 • α0 + + α1 • - + α2 • - + α3 • - α4 • - α5 • - α6 • - α7 ω40 - ω41 + ω20 • a6 a7 + + ω20 a4 a5 + ω20 + ω81 - + ω40 + ω20 • - ω80 ω41 • - • - Figure: FFT-Schaltkreis ω83 ω82 procedure FFT(A :: list, k :: integer ) N ← 2k if k = 0 then return(A) end if ωn ← exp(2πi/N) ω←1 aeven ← [A[0], A[2], ..., A[N − 2]] aodd ← [A[1], A[3], ..., A[N − 1]] yeven ← FFT (aeven , k − 1) yodd ← FFT (aodd , k − 1) for t = 0..(N/2) − 1 do y [t] ← yeven [t] + ω · yodd [t] y [t + (N/2)] ← yeven [t] − ω · yodd [t] ω ← ω · ωn end for return(y ) end procedure . FFT of order 2k . base case . recursive call . recursive call . butterfly operation Komplexität der FFT I Der Aufwand F (N) zur Berechnung von DFTN , gemessen in arithmetischen Operationen mit komplexen Zahlen, genügt also der Rekursionsgleichung F (2N) = 2 · F (N) + O(N) und das führt auf F (N) ∈ Θ(N · log N). I Die (komplexe) Diskrete Fouriertransformation DFTN der Ordnung N lässt sich mittels FFT mit O(N · log N) arithmetischen Operationen berechnen. Dies gilt auch für ihre Umkehrung DFTN−1 . Polynommultiplikation mittels Auswertung und Interpolation I I P Ein Polynom f (X ) = ni=0 fi X i vom Grad < n ist durch seine Werte an n “Interpolationsstellen” eindeutig bestimmt. Hat man zwei Polynome Pn−1vom iGrad < n: P j f (X ) = i=0 fi X , g (X ) = n−1 j=0 gj X zu multiplizieren, so hat das Produktpolynom einen Grad ≤ 2n − 2: 2n−2 X X fi · gj X k h(X ) = i+j=k k=0 | I {z hk } P k Das gesuchte Polynom h(X ) = 2n−2 k=0 hk X ist durch seine Werte an 2n − 1 Interpolationsstellen ξ0 , ξ1 , . . . , ξ2n−2 eindeutig bestimmt und für diese gilt h(ξk ) = f (ξk ) · g (ξk ) (0 ≤ k ≤ 2n − 2). Polynommultiplikation mittels Auswertung und Interpolation I Wähle 2n − 1 Interpolationspunkte ξ0 , ξ1 , . . . , , ξ2n−2 und werte die Polynome f (X ) und g (X ) an diesen Stellen aus: f (X ) 7→ hf (ξ0 ), f (ξ1 ), . . . , f (ξ2n−2 )i g (X ) 7→ hg (ξ0 ), g (ξ1 ), . . . , g (ξ2n−2 )i I Multipliziere paarweise die entsprechenden Auswertungen (f (ξk ), g (ξk )) 7→ f (ξk ) · g (ξk ) =: h(ξk ) I (0 ≤ k ≤ 2n − 2) Gewinne aus hh(ξ0 ), h(ξ1 ), . . . , h(ξ2n−2 )i die Koeffizienten des Polynoms 2n−2 X h(X ) = hk X k = f (X ) · g (X ) k=0 mittels Interpolation. Polynommultiplikation mittels Auswertung und Interpolation Koeffizientenbereich (f (X ), g (X )) ↓ Wertebereich Auswertung −→ ↓ Faltung h(X ) (hf (ξk )i0≤k≤2n−2 , hg (ξk )i0≤k≤2n−2 ) Interpolation ←− punktweise Multiplikation hh(ξk )i0≤k≤2n−2 = hf (ξk ) · g (ξk )i0≤k≤2n−2 Kostenbilanz I I Die direkte Berechnung der 2n − 1 Koeffizienten von h(X ) mittels der üblichen “Faltungsformel” benötigt n2 Multiplikationen und etwa genausoviele Additionen im Koeffizientenbereich. Für den alternativen Weg: I I I I Die Auswertung von f (X ) und g (X ) an 2n − 1 Interpolationsstellen kostet 2(2n − 1) · (n − 1) Multiplikationen und genausoviele Additionen im Koeffizientenbereich. Für die Berechnung der h(ξk ) = f (ξk ) · g (ξk ) benötigt man 2n − 1 Multiplikationen. Die Interpolationsaufgabe kann man bei geschickter Divide-and-Conquer-Aufteilung mit etwa 7 n2 Additionen und Multiplikationen lösen. Per saldo hat man also etwa 11n2 arithmetische Operationen zu veranschlagen. Das ist deutlich mehr als bei der “Schulmethode”! FFT für Auswertung und Interpolation I Auswertung und die Interpolation kann man mittels FFT machen I Dazu seien f (X ) und g (X ) Polynome vom Grad < N , wobei N eine Potenz von 2 ist. I Dann ist h(X ) = f (X ) · g (X ) ein Polynom vom Grad < 2N und man kann h(X ) durch Auswertung und Interpolation an k den 2N-ten Einheitswurzeln R2N = ω2N 0≤k<2N berechnen. Verfahren und Kostenbilanz I Polynommultiplikation mittels FFT – Die Auswertung von f (X )und g (X ) an 2N k Interpolationsstellen ω2N mittels FFT kostet 0≤k<2N 2 · Θ(2N · log(2N)) = Θ(N · log N) arithmetische Operationen k k k – Die Berechnung der h(ω2N ) = f (ω2N ) · g (ω2N ) für 0 ≤ k < 2N erfordert 2N Multiplikationen. – Die Interpolationsaufgabe ist eine FFT-Rücktransformation der Ordnung 2N, was noch einmal Θ(2N · log(2N)) = Θ(N · log N) arithmetische Operationen erfordert. – Per saldo hat man also ein Verfahren mit einer arithmetische Komplexität von Θ(N · log N), und das ist nicht nur klar besser als die “Schulmethode”, sondern auch noch deutlich besser als das Verfahren von Karatsuba. Multiplikation von ganzen Zahlen I I Die Idee, Multiplikation mittles Auswertung und Interpolation zu berechnen und dies mittels FFT zu realisieren, lässt sich auch auf die Aufgabe der Multiplikation ganzer Zahlen übertragen (es ist nur technisch etwas komplizierter) A. Schönhage und V. Strassen (1971) I I Es gibt einen FFT-basierten Algorithmus zur Multiplikation von N-bit-Zahlen, der einen asymptotischen Aufwand von O(N · log N · log log N) Bit-Operationen hat M. Fürer (2007) I I Es gibt einen FFT-basierten Algorithmus zur Multiplikation von N-bit-Zahlen, der einen asymptotischen Aufwand von ∗ O(N · log N · 2log N ) Bit-Operationen hat ∗ log n = min{i ≥ 0; log(i) n ≤ 1} mit log(0) n = n und log(i+1) n = log log(i) n Nachtrag: Faltung von Vektoren (Signalen) I Sind f = hf0 , f1 . . . , fn−1 i, g = hg0 , g1 . . . , gn−1 i ∈ Cn zwei komplexe Vektoren, so definiert man als deren Faltung f ? g = h den Vektor h = hh0 , h1 , . . . h2n−1 i mit X (∗) hk = fi · gj (0 ≤ k ≤ 2n − 1) i+j=k I Faltungsoperationen sind Basisoperationen jeglicher Signalverarbeitung (Filterung!) — es ist also wichtig, dies möglichst effizient zu machen I Auswerten der Definitionsgleichungen (∗) ist ein O(n2 )-Verfahren Effiziente Faltung von Vektoren (Signalen) I Faltungen kann man mittels DFT berechnen, denn es gilt das Faltungstheorem DFT2n (f ? g) = DFT2n f 0 • DFT2n g0 oder für die Faltungs-Anwendung geschrieben: −1 f ? g = DFT2n DFT2n f 0 • DFT2n g0 Dabei sind f 0 = hf0 , f1 . . . , fn−1 , 0, 0, . . . , 0i, g0 = hg0 , g1 . . . , gn−1 , 0, 0, . . . , 0i durch “padding” auf Länge 2n erweiterte Vektoren und • ist das komponentenweise Produkt von Vektoren I Realisiert man die DFT mittels FFT, so ergibt das ein O(n · log n)-Verfahren für die Faltung