Wie genau berechnen Sie die Fast-Fourier-Transformations-Stack-Überlauf
Ich habe viel über Fast-Fourier-Lesen-Transformation und ich versuche, den Low-Level-Aspekt davon zu verstehen. Leider, Google und Wikipedia sind nicht viel überhaupt zu helfen. und ich habe wie 5 verschiedene Algorithmus Bücher öffnen, die nicht viel entweder zu helfen.
Ich versuche, die FFT von etwas Einfaches wie ein Vektor [1,0,0,0] zu finden. Sicher könnte ich es in Matlab schließen Sie einfach, aber das wird mir nicht helfen zu verstehen, was sich darunter vor sich geht. Auch wenn ich sage, ich mag die FFT eines Vektors zu finden, ist, dass das gleiche wie sagen, dass ich die DFT eines Vektors nur mit einem effizienteren Algorithmus finden will?
fragte 11. Juli '10 um 22:17 Uhr
Du hast Recht „die“ Fast-Fourier-Transformation ist nur ein Name für jeden Algorithmus, der die diskrete Fourier in O-Transformation berechnet Zeit (n log n), und es gibt mehr solche Algorithmen.
Diskrete Fourier-Transformation
Gegeben N Zahlen f0. f1. f2. ..., f N-1. die DFT gibt einen anderen Satz von N Zahlen.
Genauer gesagt: Es sei ω te Wurzel von 1 ein primitiven N sein (entweder in den komplexen Zahlen oder in einem endlichen Feld), was bedeutet, dass ω N = 1, aber nicht kleine Leistung 1. Sie ist von der fk ‚s als Koeffizienten einfällt ein Polynom P (x) = x k Σfk. Die N neue Nummern F0. F1. ..., FN-1, die die DFT gibt die Ergebnisse für das Polynom bei Potenzen von ω auswertet. Das heißt, für jeden n im Bereich von 0 bis N-1, die neue Nummer Fn ist P (ω n) = Σ0≤k≤N-1 fk ω nk.
[Der Grund ω für die Wahl ist, dass die inverse DFT eine schöne Form hat, sehr ähnlich wie die DFT selbst.]
Beachten Sie, dass diese F zu finden, ist naiv nimmt O (N 2) Operationen. Aber wir können die spezielle Struktur nutzen, die von den ω der kommt, die wir gewählt haben, und das erlaubt uns, es in O zu tun (N log N). Ein solcher Algorithmus wird aufgerufen, die schnelle Fourier-Transformation.
Schnelle Fourier-Transformation
Also hier ist ein Weg, um die FFT zu tun. Ich werde N mit 2N ersetzen Notation zu vereinfachen. Wir haben f0. f1. f2. ..., F2N-1. und wir wollen, berechnen P (ω 0), P (ω 1), ... P (ω 2 n-1), wo können wir schreiben
P (x) = Q (x) + ω N R (x) mit
Jetzt ist hier die Schönheit der Sache. Beachten Sie, dass der Wert bei ω k + N sehr einfach auf den Wert bei ω k bezogen ist:
P (ω k + N) = ω N (Q (ω k) + ω N R (ω k)) = R (ω k) + ω N Q (ω k). So Die Bewertungen von Q und R bei ω 0 bis ω n-1 sind genug.
Dies bedeutet, dass das ursprüngliche Problem - das 2N Zeit Polynom P bei 2N 0 ω Punkten Auswertung zu ω 2N-1 - ist an die beiden Probleme reduziert an den N Punkten ω die N-term Polynome Q und R des Auswertens 0 bis ω N-1. So ist die Laufzeit T (2N) = 2T (N) + O (N) und all das, was T (N) = O (N log N) gibt.
Beispiele für DFT
Beachten Sie, dass andere Definitionen Faktoren von 1 / N oder 1 / √ N setzen.
Für N = 2, ω = -1 und die Fourier-Transformation von (a, b) ist, (a + b, a-b).
Für N = 3, ist die Komplex ω Kubikwurzel von 1, und die Fourier-Transformation von (a, b, c) ist (a + b + c, a + bω + cω 2. a + 2 + bω cω). (Da ω = ω 4).
Für N = 4 und ω = i, und die Fourier-Transformation von (a, b, c, d) ist, (a + b + c + d, a + bi-c-di, a-b + CD, a-bi c + di). Insbesondere das Beispiel in Frage: die DFT auf (1,0,0,0) gibt (1,1,1,1), vielleicht nicht sehr aufschlussreich.
Die FFT ist nur eine effiziente Implementierung der DFT. Die Ergebnisse sollten die FFT werden viel schneller für beide, aber im Allgemeinen identisch sein. Stellen Sie sicher, dass Sie verstehen, wie die DFT arbeitet zuerst, da es viel einfacher und viel einfacher zu erreichen.
Ein gutes praktisches Buch über das Thema zu lesen ist schnelle Fourier-Transformation und ihre Anwendungen von E. Brigham.