Kapitel 1 Fourier-Transformation 1.1 Einleitung Die Fourier-Transformation (FT) ist wahrscheinlich das wichtigste Instrument aus der mathematischen Trick-Kiste schlechthin. Ihre Bedeutung liegt einmal darin, daß sich mit ihrer Hilfe einige der am häufigsten vorkommenden Operationen an mathematischen Funktionen, wie z.B. Integration und Differentiation sowie Faltungs- und Filteroperationen, formal sehr leicht durchführen lassen. Für die numerische Praxis ist jedoch vor allem der vor ein paar Jahrzehnten wiederentdeckte Algorithmus der Schnellen“ Fourier-Transformation wichtig, durch den ” bei vielen Problemen tatsächlich Größenordnungen an Rechenzeit eingespart werden können. Je nach der Anzahl der zu transformierenden Funktionswerte bzw. dem Definitionsgebiet der Funktionen unterscheidet man zwischen Diskreter Fourier-Transformation, Fourier-Reihen und Fourier-Integralen. Da wir in der Folge laufend von den Eigenschaften der Fourier-Transformation Gebrauch machen, werden in diesem Kapitel sowohl die grundlegenden Transformationsformeln als auch die wesentlichsten Eigenschaften (heuristisch) abgeleitet. Anschließend wird ein Algorithmus für die Schnelle Fourier-Transformation besprochen. 1.2 Die Diskrete Fourier-Transformation Es seien N beliebige (i.a. komplexe) Zahlenwerte f− N , f− N +1 , . . . , f N −1 gegeben, wobei der Ein2 2 2 fachheit halber angenommen wird, daß N gerade ist. (Die Überlegungen lassen sich jedoch auch für ungerades N durchführen.) Bei den fj handelt es sich meist, aber nicht notwendigerweise, um die Werte einer Funktion f an einer diskreten Menge von Stützpunkten xj . Den fj werden eine gleiche Anzahl N transformierter Werte fen zugeordnet durch die Vorschrift 1 fen = N N 2 −1 X e− 2πinj N fj , (1.1) j=− N 2 1 2 KAPITEL 1. FOURIER-TRANSFORMATION wobei n ebenfalls die Werte − N2 , − N2 + 1, . . . , N2 − 1 durchläuft. Die Menge der fen heißt FourierTransformierte oder Fourier-Koeffizienten der fj . Die fen enhalten genau dieselbe Information wie die fj , denn es gilt die Umkehrformel (Inverse Fourier-Transformation) N 2 −1 X fj = e 2πinj N fen . (1.2) n=− N 2 Da in beiden Formeln die Indizes nur endlich viele diskrete Werte durchlaufen, heißen Gl. (1.1) und (1.2) zusammen auch Diskrete Fourier-Transformation (DFT). Die Gültigkeit von Gl. (1.2) kann man leicht durch Einsetzen verifizieren: N 2 −1 X e 2πinj N N 2 fe = n n=− N 2 −1 X −1 1 2X − 2πinj0 e N fj 0 N j 0 =− N N e 2πinj N n=− N 2 N 2 2 −1 N 2 X = (1.3) fj 0 j 0 =− N 2 −1 1 X 2πin(j−j0 ) e N N n=− N (1.4) 2 = fj . (1.5) Die letzte Zeile ergibt sich aus der vorletzten, da die Summe über n nur für j = j 0 nicht verschwindet, N 2 −1 X e 2πin(j−j 0 ) N N 2 = n=− N 2 −1 X 1 = N. (1.6) n=− N 2 0 Im Fall j6=j 0 setzt man e2πi(j−j )/N = z, summiert die auftretende geometrische Reihe und findet N 2 −1 X zn = z− 2 N N −1 X zn = z− 2 n=0 n=− N 2 N zN − 1 = 0, z−1 (1.7) da z N = 1. 1.2.1 Eigenschaften der DFT Mittelwert Für n = 0 ist e−2πinj/N = 1, also −1 1 2X e f0 = fj . N j=− N N 2 Das ist einfach der Mittelwert der fj . (1.8) 1.3. FOURIER-REIHEN 3 Periodizität Die Fourier-Koeffizienten wurden zunächst nur für − N2 ≤ n ≤ N2 − 1 definiert. Man kann sie aber auch für beliebige n außerhalb dieses Bereiches berechnen, z.B. gilt −1 −1 −1 1 2X − 2πinj − 2πiN j 1 2X − 2πinj 1 2X − 2πi(n+N )j N = e fj = e N e N fj = e N fj , N j=− N N j=− N N j=− N N fe n+N N 2 N 2 (1.9) 2 d.h. fen+N = fen . (1.10) Also ist fen periodisch mit der Periode N . Analog kann man bei der Rücktransformation den Index j beliebig wählen und findet fj+N = fj . (1.11) h i Damit können die fj außerhalb des Definitionsbereiches − N2 , N2 − 1 periodisch fortgesetzt werden. DFT rein reeller Werte Sind die Zahlen fj alle reell, so werden N reelle in N komplexe (= 2N reelle) Werte transformiert. Zwischen den fen muß es daher eine Beziehung geben: fen ∗ −1 −1 1 2X − 2πinj ∗ 1 2X − 2πi(−n)j N N e e = fj = fj . N j=− N N j=− N N N 2 (1.12) 2 Also fen ∗ = fe−n , (1.13) d.h. die fen treten in komplex konjugierten Paaren auf. Insbesondere sind fe0 und fe− N rein reell. 2 1.3 Fourier-Reihen h i Es sei f (x) eine (i.a. komplexwertige) Funktion über dem endlichen reellen Intervall − L2 , L2 . Wir betrachten zunächst nur die Werte von f an N diskreten, äquidistanten Stützpunkten xj , fj = f (xj ), (1.14) mit ∆x = L N (1.15) 4 KAPITEL 1. FOURIER-TRANSFORMATION als Abstand zwischen den Stützpunkten und L j N xj = j∆x = (1.16) für j = − N2 , . . . , N2 − 1. Da die f (xj ) einfach N Zahlen sind, können wir jedenfalls ihre DFT bilden, N 2 N −1 X 1 fen = e− 2πinj N f (xj ), (1.17) j=− N 2 mit der Umkehrformel N 2 −1 X f (xj ) = e 2πinj N fen . (1.18) n=− N 2 Wir setzen nun ∆k = 2π L (1.19) und verwenden statt des Index n die N äquidistanten, diskreten k-Werte kn = n∆k = 2π n, L (1.20) wobei wieder n = − N2 , . . . , N2 − 1. Damit läßt sich der Phasenfaktor schreiben als e±i L n N j = e±ikn xj , 2π L und aus den Fourier-Koeffizienten wird (mit N (1.21) 1 N → ∆x ) L −1 1 2X fen = ∆x e−ikn xj f (xj ). L j=− N (1.22) 2 Im Limes N → ∞ geht ∆x→0, und aus der Riemannsumme auf der rechten Seite wird ein Integral. Wir bezeichnen die so erhaltenen Fourier-Koeffizienten der kontinuierlichen Funktion f (x) mit fe(kn ): 1 fe(kn ) = L Z L 2 −L 2 dx e−ikn x f (x). (1.23) Der zu x konjugierte“ Parameter kn kann hier in Schritten von ∆k eine abzählbare Menge von ” Werten von −∞ bis +∞ auf der reellen Achse annehmen.1 1 Wenn x die Bedeutung einer Ortsvariablen hat, nennt man die kn gern Wellenzahlen. 1.3. FOURIER-REIHEN 5 h i Umgekehrt liegen für N → ∞ die xj dicht in − L2 , L2 , und es ist naheliegend, daß schließlich für jedes beliebige x im Intervall gelten wird f (x) = ∞ X eikn x fe(kn ). (1.24) n=−∞ Diese Darstellung von f (x) nennt man Entwicklung in eine Fourier-Reihe. fe(kn ) f (x) −L/2 L/2 ∆k Abbildung 1.1: Fourier-Reihe. Originaldaten kontinuierlich, Fourier-Transformierte diskret. 1.3.1 Eigenschaften von Fourier-Reihen Konvergenz Im Gegensatz zum diskreten Fall, wo man für jeden endlichen Satz von Zahlen die DFT berechnen und diese Transformation auch wieder eindeutig umkehren kann, läßt sich nicht jede beliebige Funktion einer kontinuierlichen Variablen über einem endlichen Intervall in eine Fourier-Reihe entwickeln. Schließlich kann eine überabzählbare Mannigfaltigkeit von Funktionswerten nicht ohne weiteres auf eine abzählbare Menge von Fourier-Koeffizienten reduziert werden. Ob (vorausgesetzt, die Fourier-Koeffizienten existieren überhaupt) und in welchem Sinn die Fourier-Reihe konvergiert, hängt von den Annahmen ab, die über f gemacht werden. Ganz allgemein gilt, wenn f nur hinreichend glatt ist, daß dann die Darstellung punktweise gegen f (x) konvergiert und sogar gliedweise differenziert werden darf. Ist f wenigstens stückweise stetig mit nur endlich vielen Sprungstellen im betrachteten Intervall, so konvergiert die Fourier-Reihe ebenfalls punktweise, nimmt aber an den Unstetigkeitsstellen den Mittelwert von rechtem und linkem Grenzwert an. Andererseits lassen sich z.B. verallgemeinerten Funktionen (Distributionen) immer Fourierentwickeln, wenn man nur den Konvergenz- bzw. Gleichheitsbegriff entsprechend weit faßt. Periodizität Bisher iwurde nichts über das Verhalten der Funktion f (x) außerhalb des Grundintervalls h L L − 2 , 2 ausgesagt, ja f muß dort überhaupt nicht definiert sein. Wir können aber in die Fourier- 6 KAPITEL 1. FOURIER-TRANSFORMATION Entwicklung von f natürlich beliebige x-Werte einsetzen. Da die k-Werte so gewählt sind, daß kn L = 2πn ist, gilt, ähnlich wie bei der inversen DFT, f (x + L) = f (x). (1.25) Mit anderen Worten, die Fourier-Reihe definiert eine periodische Fortsetzung von f (x). Deshalb wird oft von vornherein angenommen, daß f eine periodische Funktion mit Periode L ist. Im Gegensatz zur DFT sind die Entwicklungskoeffizienten fe(kn ) aber i.a. nicht periodisch in k. 1.3.2 Diskrete Zeitreihen und die Nyquist-Frequenz Bei Fourier-Reihen besteht eine gewisse Asymmetrie zwischen Original und Transformierter, die zu zwei verschiedenen Betrachtungsweisen führt.hWir haben bisher angenommen, daß eine i L L Funktion f (x) über dem kontinuierlichen Intervall − 2 , 2 gegeben ist, und ihr als Fourier- Transformierte die abzählbare Menge der Fourier-Koeffizienten fe(kn ) zugeordnet (Abb. 1.1). Diese Stützpunkte“ im k-Raum sind äquidistant und überdecken die ganze reelle Achse. ” fe(ω) f (tn) ∆t −Ω/2 Ω/2 Abbildung 1.2: Fourier-Reihe. Originaldaten diskret, Fourier-Transformierte kontinuierlich. In der Praxis tritt häufig auch der umgekehrte Fall auf, bei dem die Rollen von Original und Transformierter vertauscht sind (Abb. 1.2). Bei den Originaldaten handelt es sich meist um die Werte einer zeitabhängigen Funktion, die nur zu diskreten Zeitpunkten tn = n∆t gemessen wird . . . , f (t−2 ), f (t−1 ), f (t0 ), f (t1 ), f (t2 ), . . . (1.26) Dabei ist 1/∆t die Abtastrate (Sampling Rate). Wir können durch Anwendung unseres Wissens über Fourier-Reihen sofort sagen, daß sich die Zeitreihe an den diskreten Zeitpunkten tn durch eine Superposition (Integral) h i von Schwingungen mit Frequenzen in einem kontinuierlichen, aber Ω Ω endlichen Intervall − 2 , 2 darstellen läßt, 1Z 2 dω e−iωtn fe(ω), Ω − Ω2 Ω f (tn ) = (1.27) 1.4. FOURIER-INTEGRALE 7 mit dem Spektrum“ ” ∞ X fe(ω) = eiωtn f (tn ). (1.28) n=−∞ Zwischen der Frequenz Ω und der Abtastrate 1/∆t besteht ein analoger Zusammenhang wie früher zwischen L und ∆k, ∆t = 2π . Ω (1.29) Zur Darstellung einer mit endlicher Abtastrate gemessenen Zeitreihe genügt also ein endlicher Frequenzbereich. Man nennt daher das Spektrum bandlimitiert (band-limited) und bezeichnet die obere bzw. untere Grenzfrequenz auch als Nyquist-Frequenz, ωNyquist = Ω π = . 2 ∆t (1.30) D.h. die höchste zur Darstellung der f (tn ) benötigte Frequenz entspricht genau der halben Abtastrate. 1.4 Fourier-Integrale Es sei nun f (x) eine (komplexwertige) Funktion, die auf hder ganzen reellen Achse definiert ist. i L L Dann können wir zunächst f auf ein beliebiges Intervall − 2 , 2 einschränken und dort in eine Fourier-Reihe entwickeln, fe(kn ) = f (x) = Z L 2 −L 2 dx e−ikn x f (x), (1.31) ∞ 1 X eikn x fe(kn ), L n=−∞ (1.32) wobei wir diesmal den Normierungsfaktor 1/L bei der Rücktransformation angebracht haben. Es sei ferner k beliebig reell und fest. Dann können wir eine Folge von Intervallen mit L → ∞ so wählen, daß k immer gleich einem der diskreten kn ist, und erhalten im Limes als FourierTransformierte von f (x) fe(k) = Z ∞ −∞ dx e−ikx f (x). Umgekehrt gilt für ein beliebiges x, wenn L einmal so groß ist, daß |x| ≤ f (x) = 1 X ∆k eikx fe(k), 2π {kn } (1.33) L 2 (mit 1 L → ∆k ), 2π (1.34) 8 KAPITEL 1. FOURIER-TRANSFORMATION wobei über alle diskreten k-Werte summiert wird, die mit der momentanen Intervallänge L kompatibel sind. Im Limes L → ∞ erhalten wir schließlich die Inverse Fourier-Transformation f (x) = 1 2π Z ∞ −∞ dk eikx fe(k). (1.35) An den Fourier-Integralen ist bemerkenswert, daß sowohl f (x) als auch fe(k) über der ganzen reellen Achse definierte Funktionen sind und in den Transformationsformeln—bis auf den Normierungsfaktor 1/2π—vollkommen symmetrisch behandelt werden. Hinsichtlich der Konvergenz gilt ähnliches wie bei den Fourier-Reihen: Ist f stetig und absolut integrierbar, dann konvergiert die Rücktransformation punktweise gegen f (x). Will man hingegen unter dem Integral differenzieren, müssen stärkere Voraussetzungen gemacht werden. Ebenso haben Distributionen stets eine Fourier-Transformierte. 1.5 Rechnen mit Fourier-Transformierten Der große Vorteil der Fourier-Transformation besteht darin, daß einige der wichtigsten mathematischen Operationen mit Funktionen sich im Fourier-Raum formal sehr einfach durchführen lassen. Das sind vor allem Differentiation und Integration sowie Faltungsoperationen. Ersteres erklärt die Bedeutung der FT bei der Lösung von (gewöhnlichen und partiellen) linearen Differentialgleichungen. Die Entfaltung“ wird vor allem für die Korrektur experimenteller Meßdaten ” gebraucht. Alle Operationen können, mit entsprechenden Änderungen, auf DFT, Fourier-Reihen und Fourier-Integrale angewandt werden. Wir leiten der Einfachheit halber die Beziehungen nur für Fourier-Integrale ab; im Fall von Fourier-Reihen und der DFT sind Integrale durch Summen zu ersetzen bzw. bei der Faltung Komplikationen durch endliche Intervallgrenzen zu berücksichtigen. 1.5.1 Differentiation und Integration Es sei f (x) eine Funktion über der reellen Achse mit der Fourier-Darstellung f (x) = 1 Z∞ dk eikx fe(k). 2π −∞ (1.36) Wir differenzieren beide Seiten der Gleichung und erhalten, vorausgesetzt daß Differentiation und Integration vertauscht werden dürfen, ! 1 Z∞ 1 Z∞ d ikx e f (k) = dk e dk eikx (ik)fe(k). f (x) = 2π −∞ dx 2π −∞ 0 (1.37) Also ist offenbar (ik)fe(k) die Fourier-Transformierte von f 0 (x), ff0 (k) = ik fe(k). (1.38) 1.5. RECHNEN MIT FOURIER-TRANSFORMIERTEN 9 D.h. Differentiation geht im Fourier-Raum in Multiplikation mit dem Faktor ik über; aus einem linearen Differentialoperator wird so ein Polynom in ik. Analog entspricht—mit gewissen Einschränkungen—der Integration beim Übergang in den Fourier-Raum die Division durch ik. Beispiel: Lösung der Poisson-Gleichung in 1D Es sei eine eindimensionale Ladungsverteilung ρ(x) gegeben. Das zugehörige Potential φ(x) ist durch die Poisson-Gleichung, φ00 (x) = −2ρ(x), (1.39) bestimmt. Durch Transformation in den Fourier-Raum wird daraus e e = −2ρ(k). −k 2 φ(k) (1.40) Die Lösung des Problems ergibt sich also sofort aus 2 e ρ(k). (1.41) k2 In der Praxis scheitert man allerdings oft daran, daß die Rücktransformation in den x-Raum nicht geschlossen angegeben werden kann. e φ(k) = 1.5.2 Faltungsintegrale Es seien f (x) und g(x) zwei über der ganzen reellen Achse definierte komplexwertige Funktionen. Unter der Faltung von f und g versteht man das Integral Z h(x) = ∞ −∞ dy f (x − y) g ∗ (y). (1.42) Dafür schreibt man auch h(x) = (f ∗g)(x). (1.43) Die Fourier-Transformierte von h(x) ist e h(k) = Z Z = = ∞ −∞ ∞ −∞ Z ∞ −∞ dx e −ikx Z dx ∞ −∞ Z −∞ dy f (x − y) g ∗ (y) (1.44) h i∗ dy e−ik(x−y) f (x − y) e−i(−k)y g(y) 0 −ikx0 dx e ∞ 0 f (x ) = fe(k) [ge(−k)]∗ . Z ∞ −∞ 0 −i(−k)y 0 dy e 0 (1.45) ∗ g(y ) (1.46) (1.47) Dabei haben wir die Variablentransformation x0 = x − y und y 0 = y durchgeführt. Wir lesen daraus ab fg ∗g (k) = fe(k) [ge(−k)]∗ . (1.48) 10 KAPITEL 1. FOURIER-TRANSFORMATION Sind f und g beide reell, so ergibt sich wegen Gl. (1.13) fg ∗g (k) = fe(k) ge(k), (1.49) d.h. die Faltung geht im Fourier-Raum in ein einfaches Produkt über. In der Praxis wird diese Beziehung oft zur Entfaltung“ experimenteller Messungen benützt. ” Dabei ist h(x) das Meßsignal, f (x) die eigentlich interessierende physikalische Observable und g(x) die sogenannte Instrumentenfunktion“, ein Artefakt, das die Meßergebnisse verfälscht. ” Wenn g(x) bekannt ist, kann f (x) im Prinzip aus der Messung bestimmt werden, indem im e Fourier-Raum h(k) durch ge(k) dividiert und dann rücktransformiert wird. 1.5.3 Korrelationsfunktionen Wenn f und g zeitabhängige Funktionen sind, wird oft die Korrelationsfunktion betrachtet, Z h(t) = ∞ −∞ ds f (s + t) g ∗ (s), (1.50) d.h. die Werte von g zum Zeitpunkt s werden mit den Werten von f zum Zeitpunkt s + t verknüpft. Beim Übergang in den Fourier-Raum ergibt sich, ähnlich wie bei der Faltung zweier Funktionen, e h(ω) = fe(ω) [ge(ω)]∗ . (1.51) Also ist auch die Fourier-Transformierte einer Korrelationsfunktion im wesentlichen ein Produkt. Sind f und g verschieden, nennt man h die Kreuzkorrelation von f und g; ist f = g, heißt h die Autokorrelationsfunktion von f . In diesem Spezialfall gilt e h(ω) = |fe(ω)|2 ≥ 0. (1.52) Dieser Sachverhalt wird auch als Wiener–Khinchin Theorem bezeichnet. Die Größe |fe(ω)|2 nennt man das Powerspektrum von f . Offenbar zeichnen sich Autokorrelationsfunktionen durch nichtnegative Spektren aus. 1.6 Die Schnelle Fourier-Transformation (FFT) Wie sich im vorigen Abschnitt gezeigt hat, gehen bei der Transformation in den Fourier-Raum die für die Behandlung linearer Differential- und Integralgleichungen wesentlichen Manipulationen, wie Differentiation, Integration und Faltung, sowie Filteroperationen in einfache algebraische Operationen über. Dadurch lassen sich diese Probleme oft formal recht einfach lösen. In der Praxis ist damit aber meist nicht viel gewonnen, weil man die entsprechenden Transformationen nur in den seltensten Fällen analytisch durchführen kann. Numerische Methoden können 1.6. DIE SCHNELLE FOURIER-TRANSFORMATION (FFT) 11 andererseits bei größerem Datenumfang oder höherdimensionalen Problemen leicht zu einem unvertretbar hohen Rechenaufwand führen. Glücklicherweise gibt es für die Diskrete FourierTransformation, auf die ja die numerischen Verfahren letztlich hinauslaufen, einen schnellen“ ” Algorithmus, eben die FFT (Fast Fourier-Transform), der wirklich um Größenordnungen effizienter sein kann als die gewöhnliche DFT. Somit bildet die FFT, in Verbindung mit den Rechenregeln im Fourier-Raum, eines der leistungsfähigsten numerischen Verfahren schlechthin. 1.6.1 Alternative Indexkonvention Wir haben im Abschnitt 1.2 die DFT von N Zahlen (N sei wieder gerade), f− N , . . . , f−1 , f0 , . . . , f N −1 , 2 (1.53) 2 definiert als 1 fen = N N 2 −1 X e− 2πinj N fj . (1.54) j=− N 2 Genau dieselben Fourier-Koeffizienten erhalten wir aber auch, wenn wir die Zahlen in der Reihenfolge f0 , . . . , f N −1 , f− N , . . . , f−1 2 (1.55) 2 anordnen (also die linke Hälfte der Folge nach rechts schreiben) und umbenennen in f0 , . . . , fN −1 . (1.56) (Das ist einfach die periodische Fortsetzung der fj für j ≥ N .) 2 Es gilt nämlich −1 −1 −1 2πinj 1 NX 1 2X − 2πinj 1 NX − 2πinj N e fj = e N fj + e− N fj−N N j=0 N j=0 N j= N N (1.57) 2 N 2 = −1 −1 2πin(j+N ) 1 X − 2πinj 1 X e− N fj e N fj + N j=0 N j=− N (1.58) 2 N 2 = −1 1 X − 2πinj e N fj N j=− N (1.59) 2 = fen . (1.60) Wir hätten also die Fourier-Koeffizienten auch definieren können als fen = −1 2πinj 1 NX e− N fj , N j=0 n = 0, . . . , N − 1. (1.61) 12 KAPITEL 1. FOURIER-TRANSFORMATION Wenn man, wie angedeutet, hier n von 0 bis N − 1 laufen läßt, erhält man nach Abschnitt 1.2.1 automatisch die ursprünglichen Fourier-Koeffizienten in der Reihenfolge fe0 , . . . , feN −1 , fe− N , . . . , fe−1 , 2 (1.62) 2 die aber jetzt mit fe0 , . . . , feN −1 (1.63) bezeichnet werden. Ähnlich wie vorhin kann man nun zeigen, daß die Formel für die Rücktransformation N −1 X fj = e 2πinj N fen , j = 0, . . . , N − 1 (1.64) n=0 ist. Die Transformationsformeln Gl. (1.61) und (1.64) sind vollkommen äquivalent zu Gl. (1.1) und (1.2) und liefern, bis auf die Anordnung, auch genau dieselben Werte. Sie sind aber für das Programmieren bequemer, weil die Indizes j und n von 0 bis N − 1 laufen, und werden deshalb gern bei der Diskussion von Algorithmen verwendet. 1.6.2 Rekursionsformel Die der FFT zugrunde liegende Idee läßt sich am einfachsten rekursiv erklären. Jede halbwegs effiziente Implementation sollte aber den umgekehrten Weg, von unten nach oben“, gehen ” (s. Abschnitt 1.6.4). Es sei fbn = N −1 X e− 2πinj N fj , (1.65) j=0 d.h. die fbn sind bis auf den Vorfaktor Einheitswurzel 1 N identisch mit den fen . Außerdem sei ωN die N -te ωN = e− N . 2πi (1.66) Wir zerlegen die Summe in Gl. (1.65) in die Beiträge der Terme mit geradem (j = 2j 0 ) bzw. ungeradem (j = 2j 0 + 1) Index fb n N 2 = −1 X 2πin(2j 0 ) − N e N 2 f2j 0 + j 0 =0 N 2 = −1 X j 0 =0 −1 X e− 2πin(2j 0 +1) N f2j 0 +1 (1.67) j 0 =0 − 2πinj N/2 e 0 f 2j 0 +e − 2πin N N 2 −1 X j 0 =0 e− 2πinj 0 N/2 f2j 0 +1 , (1.68) 1.6. DIE SCHNELLE FOURIER-TRANSFORMATION (FFT) 13 also (mit j 0 →j) fbn = N 2 −1 X e − 2πinj N/2 N 2 f2j + −1 X n ωN j=0 e− 2πinj N/2 f2j+1 . (1.69) j=0 Das ist die gewünschte Rekursionsformel. Die erste Summe in Gl. (1.69) sieht—bis auf einen Faktor N2 —aus wie die DFT der N2 Zahlen f0 , f2 , . . . , fN −2 , die zweite wie die DFT der Zahlen f1 , f3 , . . . , fN −1 . Wir haben also offenbar eine DFT von N Zahlen auf zwei DFTs mit je N2 Zahlen zurückgeführt, die aus den Punkten mit geradem bzw. ungeradem Index bestehen. Das stimmt noch nicht ganz, denn der FourierIndex n darf alle Werte von 0 bis N − 1 durchlaufen, während die DFTs auf der rechten Seite von Gl. (1.69) zunächst nur für die Indizes 0, . . . , N2 − 1 erklärt sind. Hier können wir allerdings benützen, daß eine DFT von N2 Zahlen periodisch mit Periode N2 ist, und für n ≥ N2 einfach die Fourier-Koeffizienten mit dem Index n − N2 verwenden. Außerdem gilt für N2 ≤ n ≤ N − 1 N n− N 2 n ωN = ωN2 ωN n− N 2 = −ωN , (1.70) N/2 da ωN = −1. D.h. daß man für n ≥ N2 in Gl. (1.69) einfach die entsprechenden Ausdrücke für n − N2 einsetzt und die zweite Summe von der ersten subtrahiert statt addiert. Damit ist das Problem der Berechnung einer DFT vom Umfang N vollständig auf FourierTransformierte vom Umfang N2 zurückgeführt. Falls N auch durch 4 teilbar ist, kann man die Rekursion neuerlich anwenden und die beiden DFTs vom Umfang N2 auf je zwei FourierTransformierte vom Umfang N4 zurückführen usw. In dem praktisch allein wichtigen Spezialfall, daß N eine reine Potenz von 2 ist, also N = 2m , läßt sich somit eine DFT von N Zahlen in genau m = log2 N Schritten auf N Fourier-Transformierte vom Umfang 1 reduzieren. Damit kommt die Rekursion zu einem trivialen Ende, denn die Fourier-Transformierte einer einzelnen Zahl f0 ist, wie aus Gl. (1.1) für N = 1 unmittelbar folgt, die Zahl selbst fe0 = f0 , falls N = 1. (1.71) Falls N keine reine Zweierpotenz ist, kann man eine Primfaktorenzerlegung von N durchführen und zu Gl. (1.69) analoge Rekursionen verwenden, die Zerlegungen in drei und mehr Teilsummen entsprechen. Sofern aber N frei wählbar ist, beschränkt man sich in der Praxis in der Regel auf den Fall N = 2m . 1.6.3 Beschleunigung gegenüber DFT Numerische Fourier-Transformationen sind häufig Bestandteil iterativer Verfahren oder werden in identischer Weise auf eine große Anzahl von Datensätzen angewendet. Daher beschränkt man sich bei der Abschätzung des Rechenzeitaufwandes auf die eigentlichen Transformationsformeln n , da diese in und vernachlässigt die Berechnung von Hilfsgrößen, wie z.B. der Phasenfaktoren ωN einer Tabelle gespeichert werden können und bei wiederholter Ausführung der Transformation 14 KAPITEL 1. FOURIER-TRANSFORMATION nur aus dem Speicher ausgelesen werden müssen. Außerdem werden meist nur Floating Point (Gleitkomma) Operationen betrachtet, die den Hauptteil der Rechenzeit ausmachen, Speicherzugriffe und Indexberechnungen aber ignoriert. Damit berechnet sich der Aufwand für eine gewöhnliche (langsame) DFT folgendermaßen: Laut Gl. (1.1) müssen, wenn ein Datensatz vom Umfang N gegeben ist, N Fourier-Koeffizienten berechnet werden, die jeweils aus einer Summe von N komplexen Termen bestehen. Also ist der Rechenaufwand jedenfalls proportional zu N 2 . Zur Berechnung jedes Summanden ist eine komplexe Multiplikation notwendig und, um den Term zur Summe zu addieren, eine komplexe Addition. Eine komplexe Addition entspricht zwei reellen Additionen, eine komplexe Multiplikation vier reellen Multiplikationen und zwei reellen Additionen. Nimmt man der Einfachheit halber an, daß Additionen und Multiplikationen gleich lang dauern, dann sind das acht Floating Point Operationen pro Summand. Das ergibt für eine DFT also insgesamt ZDFT = 8N 2 (1.72) Operationen. Im Fall einer FFT vom Umfang N = 2m muß laut Gl. (1.69) im ersten Rekursionsschritt für jedes 0 ≤ n ≤ N2 − 1 ein Fourier-Koeffizient der Datenpunkte mit ungeradem Index n mit ωN multipliziert und zum entsprechenden Fourier-Koeffizienten der Punkte mit geradem Index addiert werden. Das sind N2 komplexe Additionen und Multiplikationen. Für N2 ≤ n ≤ N − 1 müssen nur die gerade gebildeten Produkte von den Fourier-Koeffizienten der Punkte mit geradem Index subtrahiert werden, was weiteren N2 komplexen Additionen entspricht. Rechnet man wieder komplexe in reelle Operationen um, so ergeben sich für den ersten Rekursionsschritt insgesamt 5N reelle Operationen. Im zweiten Rekursionsschritt, der Reduktion von 2 DFTs von je N2 Datenpunkten in 4 DFTs vom Umfang N4 , sind demnach 2 × 5 N2 Operationen notwendig, im dritten 4 × 5 N4 ,. . . , d.h. immer 5N . Da genau m = log2 N Rekursionsschritte erforderlich sind, kostet also eine FFT von N Datenpunkten insgesamt ZFFT = 5N log2 N (1.73) Floating Point Operationen. Die Beschleunigung, die mit der FFT gegenüber einer konventionellen DFT erreicht werden kann, ist demnach S= ZDFT 8N = . ZFFT 5 log2 N (1.74) Tabelle 1.1 zeigt einige typische Werte. m N ZDFT ZFFT 5 10 15 20 32 1024 32768 1048576 10 160 3495 83886 Tabelle 1.1: Beschleunigung durch FFT gegenüber DFT. 1.6. DIE SCHNELLE FOURIER-TRANSFORMATION (FFT) 15 Es ist offensichtlich, daß bei allen Problemen, bei denen eine numerische Fourier-Transformation der zeitbestimmende Faktor ist, mit der FFT gewaltige Leistungssteigerungen erreicht werden können. 1.6.4 Implementation Wie schon erwähnt, wäre eine rekursive Implementation der FFT wegen des zusätzlichen Speicher- und Verwaltungsaufwandes in der Praxis sehr ineffizient. Wir können jedoch die Rekursionsgleichung (1.69) benützen, um ein Daten-Flußdiagramm zu konstruieren, aus dem sich unmittelbar ablesen läßt, wie die FFT programmiert werden kann. Diese Implementation hat außerdem den Vorzug, daß sie in place“ arbeitet, also die Transformierte die Originaldaten ” überschreibt und somit kein zusätzlicher Speicherplatz benötigt wird. Das ist vor allem bei großen Datenmengen oder mehrdimensionalen FFTs ein Vorteil. Daneben gibt es aber auch noch eine Reihe von anderen (und effizienteren) Verfahren, insbesondere solche, die spezielle Datenstrukturen berücksichtigen, wie z.B. die kompakte Speicherung einer FFT rein reeller Werte. Wir illustrieren die Vorgangsweise am Beispiel N = 23 = 8. Eine graphische Darstellung von Gl. (1.69) sieht dann folgendermaßen aus: ω3 7 7 − ω2 5 6 − ω1 3 5 − ω0 1 4 − 3 + 2 + 1 + 0 + 6 4 2 0 Abbildung 1.3: Erster Rekursionsschritt bei einer 8-Punkt FFT. Dabei ist ω ≡ ω8 = e−2πi/8 . Die linke Spalte von Kästchen mit der Beschriftung 0, . . . , 7 symbolisiert die Speicherzellen, in denen das gewünschte Endresultat steht, nämlich (bis auf den Vorfaktor N1 ) die Fourier-Koeffizienten der Werte f0 , f1 , . . . , f7 , also fb0 , fb1 , . . . , fb7 . In der unteren Hälfte der rechten Spalte stehen die Fourier-Koeffizienten der Werte f0 , f2 , f4 , f6 , in 16 KAPITEL 1. FOURIER-TRANSFORMATION der oberen Hälfte die der Werte f1 , f3 , f5 , f7 . (Als Fourier-Koeffzienten zweier DFTs von nur vier Punkten sollten sie eigentlich jeweils mit 0, 1, 2, 3 durchnumeriert werden, wir wollen hier aber deutlich machen, welcher Teilmenge der Ausgangswerte sie entsprechen.) Laut Gl. (1.69) erhalten wir für n = 0, 1, 2, 3 die n-te Komponente der 8-Punkt DFT der Werte f0 , . . . , f7 , indem wir die n-te Komponente der 4-Punkt DFT der Werte f1 , f3 , f5 , f7 mit ω8n multiplizieren und zur n-ten Komponente der 4-Punkt DFT der Werte f0 , f2 , f4 , f6 addieren. Für n = 4, 5, 6, 7 müssen wir statt addieren nur subtrahieren und das Ergebnis an der entsprechenden Stelle der oberen Hälfte der linken Spalte eintragen. Die Zahlen ω80 , . . . , ω83 sind in einem Hilfsfeld gespeichert. Analog können wir nun z.B. die 4-Punkt DFT der Ausgangswerte f0 , f2 , f4 , f6 auf die 2Punkt DFTs der Wertepaare f0 , f4 und f2 , f6 zurückführen. Die dabei auftretenden Faktoren ω40 und ω41 sind nichts anderes als ω80 und ω82 von vorhin. Nun kann nochmals z.B. die 2-Punkt DFT der Ausgangswerte f0 , f4 auf die 1-Punkt DFTs der Werte f0 und f4 reduziert werden, wobei ein trivialer Faktor ω20 = ω80 = 1 auftritt. Die 1-Punkt DFT jedes Ausgangswertes ist der Wert selbst. Schreibt man alle Rekursionen für den Fall N = 8 explizit aus, so ergibt sich folgendes Bild: 7 − ω3 7 − ω2 7 − ω0 7 6 − ω2 5 − ω0 3 + 3 5 − ω1 3 + 5 − ω0 5 4 − ω0 1 + 1 + 1 3 + 6 − ω2 6 − ω0 6 2 + 4 − ω0 2 + 2 1 + 2 + 4 − ω0 4 0 + 0 + 0 + 0 Abbildung 1.4: Datenfluß bei einer 8-Punkt FFT. Von rechts nach links gelesen, zeigt dieses Daten-Flußdiagramm, wie man die FFT nichtrekursiv implementieren kann. Man beginnt mit einer permutierten Anordnung der acht 1-Punkt DFTs (d.h. der Ausgangswerte), wie in der vierten Spalte ganz rechts angegeben. Durch Addition bzw. Subtraktion von je zwei Werten (die Multiplikation mit ω20 = ω80 = 1 kann entfallen) erhält man die vier 2-Punkt DFTs in der dritten Spalte. Nun wird jede zweite Zweiergruppe mit den Potenzen von ω4 = ω82 multipliziert und zur darunter stehenden Zweiergruppe addiert bzw. von ihr subtrahiert. Von den dabei entstehenden 4-Punkt DFTs in der zweiten Spalte wird wieder die obere mit ω80 , . . . , ω83 multipliziert; Addition bzw. Subtraktion dieser Vierergruppen 1.6. DIE SCHNELLE FOURIER-TRANSFORMATION (FFT) 17 ergibt die gewünschte 8-Punkt DFT, die zum Abschluß nur noch mit N1 multipliziert werden muß. (Bei einer inversen FFT entfällt diese Multiplikation.) Da der Grundschritt der FFT jeweils darin besteht, ein Wertepaar durch eine Linearkombination der es bildenden Zahlen zu ersetzen, womit das Wertepaar sofort überschrieben werden n kann, ist auch klar, daß außer den ωN keine Hilfsfelder benötigt werden: Die vier Spalten von Abb. 1.4 sind in diesem Fall einfach als Belegung ein- und desselben Speicherplatzes zu vier verschiedenen Zeitpunkten zu interpretieren. Zu Beginn der FFT ist dort eine Permutation der Originalwerte gespeichert, am Ende die fertige DFT. Um die zu Beginn notwendige Permutation der Ausgangswerte zu charakterisieren, betrachten wir die Binärdarstellung der Indizes von Abb. 1.4. 1. Spalte 2. Spalte dezimal binär 7 111 111 6 110 101 5 101 011 4 100 001 3 011 110 2 010 100 1 001 010 0 000 000 3. Spalte 111 011 101 001 110 010 100 000 4. Spalte binär dezimal 111 7 011 3 101 5 001 1 110 6 010 2 100 4 000 0 Tabelle 1.2: Binäre Indexvektoren bei einer 8-Punkt FFT. In der ersten Spalte stehen hier die Indizes 0, . . . , 7 in der natürlichen Anordnung (von unten nach oben), d.h. daß in der Binärdarstellung das rechte Bit schneller variiert als das mittlere und dieses schneller als das linke. Beim Übergang von der ersten zur zweiten Spalte wandern alle Indizes, die das rechte Bit gesetzt haben, in die obere Hälfte, beim Übergang von der zweiten in die dritte Spalte innerhalb jeder Vierergruppe jene Indizes, die das mittlere Bit gesetzt haben. Damit ist in der dritten und vierten Spalte erreicht, daß am schnellsten das linke Bit variiert, dann das mittlere und am langsamsten das rechte. Die entstehende Anordnung zeichnet sich also dadurch aus, daß in der Binärdarstellung das Bitmuster jedes Index gerade das Spiegelbild des Bitmusters in der natürlichen Anordnung ist ( Bitspiegelung“). ” Da die Programmierung der Bitspiegelung ebenfalls relativ aufwendig ist, wird man, wie n , den Permutationsvektor möglichst nur einmal berechnen und im Fall der Phasenfaktoren ωN dann wiederverwerten. Computer bzw. Prozessoren, die auf FFT spezialisiert sind, haben üblicherweise für die Bitspiegelung eine eigene Hardware-Instruktion zur Verfügung. 18 KAPITEL 1. FOURIER-TRANSFORMATION