FFT

Werbung
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
Zugehörige Unterlagen
Herunterladen