HarmonyFidelisHarmonyFidelis
Anmelden
NachrichtenGroßprojekteAkteureAkademie

1965: Die FFT machte Fourier-Analysen im großen Maßstab praktikabel

Der im April 1965 veröffentlichte, fünfseitige Aufsatz von James Cooley und John Tukey half dabei, eine aufwendige Rechnung zum Routineverfahren zu machen: die Frequenzbestandteile einer Folge zu bestimmen. Ihre schnelle Fourier-Transformation ordnete die Arbeit in kleinere, mehrfach nutzbare Rechnungen um. Bei einer Länge, die eine Zweierpotenz ist, wächst der Rechenaufwand ungefähr mit der Punktzahl mal deren Logarithmus statt mit deren Quadrat. Frühere Mathematiker hatten verwandte Verfahren entdeckt. Die dauerhafte Veränderung lag in der wirksamen Implementierung und Verbreitung im elektronischen Rechnen. Höhere Geschwindigkeit macht größere Rechnungen erschwinglich; sie verbessert weder die zugrunde liegenden Messungen noch beseitigt sie numerische Grenzen oder Grenzen der Abtastung.

Source: Cooley and Tukey — Mathematics of Computation, April 1965

1965: Die FFT machte Fourier-Analysen im großen Maßstab praktikabel

Titelbild: KI-generierte konzeptionelle Illustration eines synthetischen Signals und seiner Frequenzbestandteile. Sie zeigt weder den ursprünglichen Computer noch experimentelle Daten.

Die Bestandteile eines Signals hörbar machen

Stellen Sie sich vor, Sie nehmen einen musikalischen Akkord auf. Das Mikrofon liefert eine Folge von Amplituden, während Ihre Frage den darin enthaltenen Tönen gilt. Die Fourier-Analyse stellt eine mathematische Verbindung zwischen diesen Beschreibungen her. Ähnliche Fragen entstehen bei der Untersuchung von Schwingungen oder Mustern in einem Bild.

Die diskrete Fourier-Transformation, kurz DFT, zerlegt eine endliche Folge in diskrete Frequenzbestandteile. Eine schnelle Fourier-Transformation, kurz FFT, ist ein effizientes Verfahren zur Berechnung derselben Transformation. Sie erzeugt keine neue Art von Spektrum. Die technische Dokumentation von NumPy beschreibt die Eingabe als Signal im Zeitbereich und die Ausgabe als dessen Darstellung im Frequenzbereich. Dokumentation zur DFT

Die praktische Schwierigkeit liegt in der Wiederholung. Eine direkte Rechnung kombiniert jeden Eingabepunkt mit jeder Ausgabefrequenz. Verdoppelt man die Punktzahl, vervierfacht sich der führende Anteil des Rechenaufwands. Benötigt eine wissenschaftliche Fragestellung Tausende von Punkten, kann eine mathematisch einfache Formel dadurch zum rechnerischen Hindernis werden.

Cooley und Tukey stellten eine allgemeine Faktorisierung und eine zweckmäßige Implementierung für Zweierpotenzen vor, einschließlich eines Verfahrens zur Wiederverwendung des Speicherplatzes des Eingabefelds. Ihr Aufsatz berichtet über ein Programm für den IBM 7094 und über Laufzeiten; er enthält also mehr als einen abstrakten Vorschlag. Das Manuskript ging am 17. August 1964 ein und erschien in der April-Ausgabe 1965 von Mathematics of Computation. Der genaue Veröffentlichungstag ist hier nicht belegt. Originalaufsatz, Universitätskopie

Ein Durchbruch mit langer Vorgeschichte

Die Idee entstand 1965 nicht aus dem Nichts. Die historischen Forscher Michael Heideman, Don Johnson und Sidney Burrus untersuchten frühere Texte und identifizierten eine gleichwertige Zerlegung in den Arbeiten von Gauß. Sie erschlossen eine Entstehungszeit um 1805; das Manuskript selbst war nicht ausdrücklich datiert und wurde 1866 posthum veröffentlicht. Ihre Studie behandelt auch spätere Verfahren, darunter die Arbeit von Danielson und Lanczos aus dem Jahr 1942 sowie Goods Primfaktorverfahren. Goods Einschränkungen unterscheiden sich von denen der allgemeinen Cooley–Tukey-Faktorisierung. Historische Untersuchung und zugängliche Autorenkopie

In ihrem Rückblick von 1993 beschreiben Cooley und Tukey Richard Garwins Rolle dabei, die Beteiligten zusammenzubringen und die Entwicklung zu fördern. Sie würdigen zudem frühere Entdeckungen und erklären, weshalb große elektronische Rechnungen das Verfahren wertvoll machten. Es handelt sich um einen rückblickenden Bericht von Beteiligten, mit den Grenzen persönlicher Erinnerung. Bericht von Cooley und Tukey

Der dauerhafte Wendepunkt bestand darin, dass ein wiederverwendbares Rechenverfahren in die Praxis gelangte. Princetons Bericht über den Meilenstein des IEEE verbindet es mit wissenschaftlichem Rechnen, Signalverarbeitung, medizinischer Bildgebung und Datenübertragung. Diese Anwendungen hängen auch von Instrumenten, physikalischen Modellen und anderen Algorithmen ab; die FFT steuerte einen leistungsfähigen rechnerischen Baustein bei. Die spätere Würdigung stützt die historische Bedeutung, ohne eine neuere Gedenkveranstaltung zum Entdeckungsdatum zu machen. Princeton und der IEEE-Meilenstein

Vier Punkte: die Wiederverwendung vor der allgemeinen Formel verstehen

Verwenden wir die dimensionslose Folge [1, 2, 3, 4]. Dieses bewusst kleine Beispiel ist unsere didaktische Rechnung und besteht nicht aus Daten des Aufsatzes von 1965. Mit i bezeichnen wir die imaginäre Einheit, für die i² = −1 gilt. Die unskalierte DFT mit negativem Exponenten liefert vier Ausgaben:

FrequenzindexAusgabe
010
1−2 + 2i
2−2
3−2 − 2i

Die erste Ausgabe addiert alle vier Eingaben. Die anderen kombinieren positive, negative und imaginäre Gewichte. Eine komplexe Ausgabe erfasst zwei Komponenten; ihr Betrag und ihre Phase beschreiben gemeinsam einen Frequenzbestandteil.

Nun trennen wir die Eingaben mit geradem Index [1, 3] von denen mit ungeradem Index [2, 4]. Für jedes Paar braucht man lediglich Summe und Differenz:

  • Gerades Paar: E = [4, −2].
  • Ungerades Paar: O = [6, −2].

Diese kürzeren Ergebnisse werden zusammengeführt. Die erste Butterfly-Operation liefert 4 + 6 = 10 und 4 − 6 = −2. Die zweite dreht zunächst das ungerade Ergebnis durch Multiplikation mit −i, sodass (−i)(−2) = 2i entsteht. Ihre beiden Ausgaben sind −2 + 2i und −2 − 2i.

„Butterfly“, also Schmetterling, bezeichnet diese gepaarte Summen- und Differenzoperation. Die sich kreuzenden Linien ihres Schemas dienen der Rechenorganisation; sie sind keine physikalische Verbindung zwischen Wellen. Beide Ausgaben verwenden dieselben Zwischenergebnisse erneut. Bei größerem Umfang lässt sich jede kürzere Transformation wiederum zerlegen: Aus Wiederverwendung wird eine Hierarchie statt einer einmaligen Abkürzung.

Vom Beispiel zum Wachstum des Rechenaufwands

Für N Eingabewerte legen wir unsere Konvention wie folgt fest:

Xk=∑n=0N−1xne−2πink/N.X_k = \sum_{n=0}^{N-1} x_n e^{-2\pi i nk/N}.Xk​=n=0∑N−1​xn​e−2πink/N.

Dabei ist n der Eingabeindex und k der Ausgabeindex; beide reichen von null bis N − 1. Die Faktoren sind komplexe Drehungen mit Betrag eins. Unsere Vorwärtstransformation besitzt keinen Normierungsfaktor; die inverse Transformation verwendet einen positiven Exponenten und den Faktor 1/N. Es gibt andere Konventionen. Der Originalaufsatz geht von einer Fourier-Summe mit positivem Exponenten aus; Vorzeichen und Normierung müssen deshalb ausdrücklich verglichen werden. Moderne Konvention

Für gerades N zerlegen wir die Summe nach geraden und ungeraden Eingabeindizes. Die zugehörigen Transformationen der Länge N/2 nennen wir Eₖ und Oₖ und setzen W_N = exp(−2πi/N). Für 0 ≤ k < N/2 lautet die Rekonstruktion:

Xk=Ek+WNkOk,Xk+N/2=Ek−WNkOk.X_k = E_k + W_N^k O_k, \qquad X_{k+N/2} = E_k - W_N^k O_k.Xk​=Ek​+WNk​Ok​,Xk+N/2​=Ek​−WNk​Ok​.

Die zweite Gleichung nutzt den Vorzeichenwechsel der Drehung nach einem halben Kreis. Wir berechnen somit zwei kürzere Transformationen und führen eine zu N proportionale Anzahl von Kombinationen durch. Wiederholen wir die Zerlegung für N = 2ᵐ, entstehen m = log₂N Ebenen.

Jede Ebene erfordert einen zur Folgenlänge proportionalen Arbeitsaufwand. Daher wächst der Gesamtaufwand wie N log₂N. Die Schreibweise O(N log N) beschreibt dieses Wachstum, keine genaue Anzahl von Prozessorbefehlen oder Sekunden. Die didaktische Radix-2-Konstruktion ist auf Zweierpotenzen beschränkt; allgemeine Cooley–Tukey-Faktorisierungen können andere zusammengesetzte Längen verwenden.

Die Geschwindigkeit auf einem realen Computer hängt außerdem von der Datenanordnung, den Speichertransfers und der Implementierung ab. Eine geringere Anzahl arithmetischer Operationen belegt für sich genommen keinen bestimmten Laufzeitgewinn auf Ihrem Gerät.

Was eine schnellere Rechnung nicht beheben kann

Wenn gleichmäßig verteilte Messungen einen Abstand von Δt Sekunden haben, beträgt die Abtastrate 1/Δt Hertz und der Abstand der Frequenzstellen 1/(NΔt) Hertz. Um die höheren Ausgabeindizes zu interpretieren, muss die gewählte Anordnung positiver und negativer Frequenzen berücksichtigt werden. Frequenzkonventionen

Eine endliche Abtastung begrenzt weiterhin die möglichen Schlussfolgerungen. Hier ist t die Zeit in Sekunden, f die Signalfrequenz in Hertz und fₛ = 1/Δt die Abtastrate in Hertz. Beispielsweise bleiben die Abtastwerte von cos(2πft) bei t = n/fₛ unverändert, wenn f durch f + fₛ ersetzt wird: Die zusätzliche Phase beträgt 2πn. Kein schnellerer Algorithmus kann diese beiden Signale allein anhand dieser Abtastwerte unterscheiden. Auch Rauschen und unzureichende Messmodelle bleiben Probleme der Messung.

Die numerische Arithmetik führt zu einer weiteren Grenze. Komplexe Drehungsfaktoren erfordern im Allgemeinen numerische Näherungen, und eine andere Reihenfolge der Operationen kann die Rundung verändern. FFTWs Erörterung der Genauigkeit betont die Bedeutung genauer Drehungsfaktoren und dokumentiert Unterschiede zwischen Implementierungen und Umgebungen. Mathematische Gleichwertigkeit verspricht keine identischen Bitmuster bei Gleitkommazahlen. Erörterung der Genauigkeit

Die didaktische Rechnung überprüfen

Unsere Prüfung verwendete CPython 3.12.10 und ausschließlich die Standardbibliothek. Die Vier-Punkt-Wurzeln [1, −i, −1, i] werden exakt dargestellt; deshalb ist exakte Gleichheit für diese kleinen ganzzahligen Eingaben ein angemessenes Kriterium. Dieses Kriterium darf nicht schematisch auf längere Gleitkommatransformationen übertragen werden.

Die folgenden Kernberechnungen wurden in unserer dokumentierten Prüfung ausgeführt:

PYTHON
ROOTS = (1, -1j, -1, 1j)

def direct(x, roots=ROOTS):
    return [
        sum(x[n] * roots[(n*k) % 4] for n in range(4))
        for k in range(4)
    ]

def butterfly(x):
    even = (x[0] + x[2], x[0] - x[2])
    odd = (x[1] + x[3], x[1] - x[3])
    return [
        even[0] + odd[0], even[1] - 1j*odd[1],
        even[0] - odd[0], even[1] + 1j*odd[1],
    ]

Vergleichen Sie beide Funktionen für [1, 2, 3, 4], einen Impuls [1, 0, 0, 0], eine konstante Folge [1, 1, 1, 1], eine Nullfolge und [1+i, −2, 3−i, 2i]. Alle fünf Fälle stimmten exakt überein. Der erste entsprach auch der Tabelle oben. Das Umkehren der imaginären Vorzeichen der Wurzeln veränderte das Spektrum des asymmetrischen Falls; die Prüfung wies dies als andere Konvention zurück.

Damit sind die festgelegten didaktischen Fälle geprüft. Dies beweist weder die Korrektheit jeder Implementierung noch stellt es eine unabhängige Replikation der historischen Leistung dar. Der Originalaufsatz stellt nicht das vollständige Programm, die Benchmark-Eingaben oder die vollständigen Zeitmessbedingungen bereit, die für eine solche Reproduktion nötig wären.

Dieser Artikel wurde von einem KI-System anhand der zitierten Quellen verfasst und übersetzt sowie gemäß der redaktionellen News-Methode automatisiert geprüft. Die didaktische Rechnung wurde wie beschrieben ausgeführt; dies ist weder ein Peer-Review noch eine wissenschaftliche Validierung durch Menschen oder eine Reproduktion des historischen Programms.