FFT

FFT

Mittel

Einführung

Fourier-Transformation

Die Fourier-Transformation begegnet einem oft in der Physik und der Mathematik, was bedeutet, dass sie auch viele alltägliche Anwendungen hat.

Kurz gesagt nimmt die Fourier-Transformation ein Eingangssignal, oft im Zeit- oder Ortsbereich, und wandelt es in den Frequenzbereich um. Konkret: Bei einem Eingangssignal, das aus einem Durcheinander (also einer Superposition) verschiedener Frequenzen besteht, trennt die Transformation die einzelnen Frequenzen heraus und zeigt ihre relativen Stärken.

Das macht die Transformation zu einem wichtigen Werkzeug in der Signalverarbeitung (z. B. Filterung, Kompression usw.) und in vielen Anwendungen der Datenwissenschaft. Deshalb wird sie vielleicht weiter verbreitet eingesetzt, als man zunächst denkt, was sie zugleich zu einem Paradebeispiel dafür macht, dass imaginäre Zahlen unverzichtbar sind, denn die Ausgabe der Fourier-Transformation ist im Allgemeinen eine komplexe Zahl.

Die Fourier-Transformation hat zwar eine Integralformulierung, aber wir arbeiten digital, also interessiert uns die diskrete Version. Die Herleitung der Transformation sprengt den Rahmen dieser Übung, doch die diskrete Transformation (in den Frequenzbereich) hat die folgende Form: Xₖ = Σ xₙ * ℯ^(-2iπk * n/N) Dabei läuft die Summe über n, und N ist die Anzahl der Abtastwerte, k ist die Frequenz, i die imaginäre Einheit und xₙ ein einzelner Abtastwert.

Schnelle Fourier-Transformation

Die Fourier-Transformation ist zwar äußerst nützlich, aber naiv implementiert etwas langsam (O(n²)). Die schnelle Fourier-Transformation (FFT) ist ein Algorithmus, der das drastisch beschleunigt. Das geschieht üblicherweise mit einer Teile-und-herrsche-Strategie, die einige Symmetrien in der Formulierung ausnutzt und asymptotisch zu einer Komplexität von O(Nlog(N)) führt. Diese Beschleunigung verbessert die Praktikabilität und die Bandbreite der Anwendungen, für die sich die Transformation eignet, erheblich.

Anleitung

Dein Freund ist Toningenieur und hat dich gebeten, ihm zu helfen, eine Fourier-Transformation für eine proprietäre Software zu programmieren, die er gerade entwickelt. Weil du das richtig machen willst, implementierst du zuerst die Diskrete Fourier-Transformation (DFT) in ihrer ganzen naiven Pracht. Diese kann dann verwendet werden, um die Korrektheit deines endgültigen Ziels zu testen, der Schnellen Fourier-Transformation (FFT).

1. DFT

Implementiere die DFT.

Beachte, dass dies eine Komplexität von O(n²) hat, weil du für einen Durchlauf durch alle n ein k bekommst, und du möchtest einen Xₖ-Vektor, der die gleiche Länge wie der Signal-Xₙ-Vektor hat (für Invertierbarkeit), also ist n mal durch n Punkte O(n²).

2. FFT

Implementiere die FFT.

Note

Es gibt viele Ressourcen, um mehr Details zu den Besonderheiten dieses Algorithmus zu finden, also recherchiere gerne.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Julia Exercism

Bereit, mit FFT zu starten?

Melde dich bei Exercism an, um Julia mit 35 Konzepte128 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.