Warum erzeugt FFT komplexe Zahlen anstelle von reellen Zahlen?


81

Alle FFT-Implementierungen, auf die wir gestoßen sind, führen zu komplexen Werten (mit Real- und Imaginärteilen), selbst wenn die Eingabe in den Algorithmus eine diskrete Menge von reellen Zahlen (Ganzzahlen) war.

Ist es nicht möglich, den Frequenzbereich nur in reellen Zahlen darzustellen?

Antworten:


86

Die FFT ist grundsätzlich ein Basiswechsel. Die Basis, auf der die FFT Ihr ursprüngliches Signal ändert, ist stattdessen eine Reihe von Sinuswellen. Damit diese Basis alle möglichen Eingaben beschreiben kann, muss sie sowohl Phase als auch Amplitude darstellen können. Die Phase wird mit komplexen Zahlen dargestellt.

Angenommen, Sie FFT ein Signal, das nur eine einzige Sinuswelle enthält. Abhängig von der Phase erhalten Sie möglicherweise ein völlig reales FFT-Ergebnis. Wenn Sie jedoch die Phase Ihres Eingangs um einige Grad verschieben, wie kann der FFT-Ausgang diesen Eingang sonst darstellen?

edit: Dies ist eine etwas lockere Erklärung, aber ich versuche nur, die Intuition zu motivieren.


3
Es hilft viel zu beantworten. Wenn das FFT-Ergebnis nur Frequenz und Phase enthält, wie erfasst es die Amplitudeninformationen in der Zeitbereichsprobe? Das heißt, wie werden die richtigen Amplituden in der iFFT wiederhergestellt?
Steve Landiss

7
Nun, jeder Wert in der FFT entspricht einer anderen Frequenzkomponente. Die Größe dieses Wertes ist die Amplitude der Komponente und der komplexe Winkel ist die Phase dieser Komponente.
Zmccord

52

Die FFT liefert Ihnen Amplitude und Phase. Die Amplitude wird als Größe der komplexen Zahl (sqrt (x ^ 2 + y ^ 2)) codiert, während die Phase als Winkel (atan2 (y, x)) codiert wird. Um ein streng reales Ergebnis der FFT zu erhalten, muss das eingehende Signal eine gerade Symmetrie aufweisen (dh x [n] = konj (x [Nn])).

Wenn Sie sich nur für die Intensität interessieren, reicht die Größe der komplexen Zahl für die Analyse aus.


40

Ja, es ist möglich, die FFT-Frequenzbereichsergebnisse einer streng reellen Eingabe nur mit reellen Zahlen darzustellen.

Diese komplexen Zahlen im FFT-Ergebnis sind einfach nur zwei reelle Zahlen, die beide erforderlich sind, um die 2D-Koordinaten eines Ergebnisvektors zu erhalten, der sowohl einen Längen- als auch einen Richtungswinkel (oder eine Größe und eine Phase) aufweist. Und jede Frequenzkomponente im FFT-Ergebnis kann eine eindeutige Amplitude und eine eindeutige Phase haben (relativ zu einem bestimmten Punkt in der FFT-Apertur).

Eine reelle Zahl allein kann nicht sowohl Größe als auch Phase darstellen. Wenn Sie die Phaseninformationen wegwerfen, kann dies das Signal leicht massiv verzerren, wenn Sie versuchen, es mit einer iFFT neu zu erstellen (und das Signal ist nicht symmetrisch). Ein vollständiges FFT-Ergebnis erfordert also 2 reelle Zahlen pro FFT-Bin. Diese 2 reellen Zahlen werden in einigen FFTs in einem komplexen Datentyp nach allgemeiner Konvention gebündelt, aber das FFT-Ergebnis könnte leicht (und einige FFTs) nur 2 reelle Vektoren erzeugen (einen für Cosinuskoordinaten und einen für Sinuskoordinaten).

Es gibt auch FFT-Routinen, die Größe und Phase direkt erzeugen, aber sie laufen langsamer als FFTs, die ein komplexes (oder zwei reelle) Vektorergebnis erzeugen. Es gibt auch FFT-Routinen, die nur die Größe berechnen und nur die Phaseninformationen wegwerfen. Sie werden jedoch normalerweise nicht schneller ausgeführt, als wenn Sie dies nach einer allgemeineren FFT selbst tun. Vielleicht sparen sie einem Codierer ein paar Codezeilen, um nicht invertierbar zu sein. Viele Bibliotheken machen sich jedoch nicht die Mühe, diese langsameren und weniger allgemeinen Formen der FFT einzuschließen, und lassen den Codierer einfach konvertieren oder ignorieren, was sie benötigen oder nicht benötigen.

Darüber hinaus halten viele die Mathematik mit komplexer Arithmetik für viel eleganter (wobei für eine streng reale Eingabe die Kosinuskorrelation oder die gerade Komponente eines FFT-Ergebnisses in die reale Komponente und die Sinuskorrelation oder die ungerade Komponente der Das FFT-Ergebnis wird in die imaginäre Komponente einer komplexen Zahl eingefügt.)

(Hinzugefügt :) Und als weitere Option können Sie die beiden Komponenten jedes FFT-Ergebnisbereichs betrachten, anstatt als reale und imaginäre Komponenten, als gerade und ungerade Komponenten, beide real.


19

Wenn Ihr FFT-Koeffizient für eine bestimmte Frequenz fist x + i y, können Sie ihn xals den Koeffizienten eines Kosinus bei dieser Frequenz betrachten, während yder Koeffizient des Sinus ist. Wenn Sie diese beiden Wellen für eine bestimmte Frequenz addieren, erhalten Sie eine phasenverschobene Welle bei dieser Frequenz. Die Größe dieser Welle ist sqrt(x*x + y*y)gleich der Größe des komplexen Koeffizienten.

Die diskrete Kosinustransformation (DCT) ist ein Verwandter der Fourier-Transformation, die alle reellen Koeffizienten liefert. Eine zweidimensionale DCT wird von vielen Bild- / Videokomprimierungsalgorithmen verwendet.


9
  1. Die diskrete Fourier-Transformation ist im Grunde eine Transformation von einem Vektor komplexer Zahlen im "Zeitbereich" zu einem Vektor komplexer Zahlen im "Frequenzbereich" (ich verwende Anführungszeichen, denn wenn Sie die richtigen Skalierungsfaktoren anwenden, ist die DFT ihre eigene invers). Wenn Ihre Eingaben real sind, können Sie zwei DFTs gleichzeitig ausführen: Nehmen Sie die Eingabevektoren x und y und berechnen Sie F ( x  +  i  y ). Ich habe vergessen, wie Sie die DFT danach trennen, aber ich vermute, es geht um Symmetrie und komplexe Konjugate.

  2. Mit der diskreten Kosinustransformation können Sie den "Frequenzbereich" mit den Realwerten darstellen und sind bei verlustbehafteten Komprimierungsalgorithmen (JPEG, MP3) üblich. Das Überraschende (für mich) ist, dass es funktioniert, obwohl es Phaseninformationen zu verwerfen scheint, aber dies scheint es auch für die meisten Signalverarbeitungszwecke weniger nützlich zu machen (mir ist kein einfacher Weg bekannt, Faltung / Korrelation mit zu machen ein DCT).

Ich habe wahrscheinlich einige Details falsch verstanden;)


1
Ich würde gerne mehr Informationen darüber finden, wie Sie es ausdrücken - danach die DFT trennen - für den Fall der Transformation F (x + iy).
CatsLoveJazz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.