Warum wird die FFT "gespiegelt"?

36

Wenn Sie einen FFT-Plot eines einfachen Signals erstellen, wie zum Beispiel:

t = 0:0.01:1 ;
N = max(size(t));
x = 1 + sin( 2*pi*t ) ;
y = abs( fft( x ) ) ;
stem( N*t, y )

1Hz Sinus + DC

1Hz

FFT von oben

fft

Ich verstehe, dass die Zahl in der ersten Bin "wie viel DC" im Signal ist.

y(1)  %DC
  > 101.0000

Die Zahl in der zweiten Bin sollte "wie viel 1 Zyklus über das gesamte Signal" sein:

y(2)  %1 cycle in the N samples
  > 50.6665

Aber es ist nicht 101! Es ist ungefähr 50,5.

Es gibt einen weiteren Eintrag am Ende des fft-Signals, der gleich groß ist:

y(101)
  > 50.2971

Also nochmal 50,5.

Meine Frage ist, warum ist die FFT so gespiegelt? Warum ist es nicht nur ein 101- y(2)Zoll-Signal (was natürlich bedeuten würde, dass in allen 101-Bins Ihres Signals eine 1-Hz-Sinuskurve enthalten ist?)

Wäre es richtig zu tun:

mid = round( N/2 ) ;

% Prepend y(1), then add y(2:middle) with the mirror FLIPPED vector
% from y(middle+1:end)
z = [ y(1), y( 2:mid ) + fliplr( y(mid+1:end) ) ];

stem( z )

Flip und Add-In der zweiten Hälfte des FFT-Vektors

Bildbeschreibung hier eingeben

Ich dachte jetzt, der gespiegelte Teil auf der rechten Seite wird korrekt hinzugefügt, was mir die gewünschte "Alle 101 Bins der FFT enthalten eine 1 Hz Sinuskurve" gibt.

>> z(2)

ans =

  100.5943
Bobobobo
quelle
Eine ähnliche Frage wurde hier beantwortet: dsp.stackexchange.com/questions/3466/…
pichenettes
Dabei geht es aber speziell um die Symmetrie (ich glaube, man nennt sie hermetische Symmetrie?) Des Signals.
Bobobobo
Für ein reines reales Signal F (k) = conj (F (Nk)) ist deshalb die Fourier-Transformation eines reinen reellen Signals symmetrisch.
WebMonster
Fragen Sie sich: Welches Ergebnis würden Sie erwarten, wenn Ihr Signal 1 + cos (2 * pi t) ... und 1 + i cos (2 * pi t) ... und 1 + i sin (2 * pi * t) wäre? ...
Pichenettes
2
Weil eine Fourier-Transformation ein Signal in komplexe Exponentiale zerlegt und eine Sinuswelle die Summe von 2 komplexen Exponentialen ist. dsp.stackexchange.com/a/449/29
endolith

Antworten:

39

Reale Signale werden aufgrund der Natur der Fouriertransformation in der realen und der negativen Hälfte der Fouriertransformation "gespiegelt". Die Fourier-Transformation ist wie folgt definiert:

H(f)=h(t)ej2πftdt

Grundsätzlich korreliert es das Signal mit einer Reihe von komplexen Sinuskurven, jede mit ihrer eigenen Frequenz. Wie sehen diese komplexen Sinuskurven aus? Das Bild unten zeigt eine komplexe Sinuskurve.

Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

Der "Korkenzieher" ist die rotierende komplexe Sinuskurve, während die beiden folgenden Sinuskurven die extrahierten realen und imaginären Komponenten der komplexen Sinuskurve sind. Der kluge Leser wird feststellen, dass die realen und imaginären Komponenten exakt gleich sind, nur dass sie um 90 Grad zueinander phasenverschoben sind ( ). Da sie um 90 Grad phasenverschoben sind, sind sie orthogonal und können jede Komponente des Signals bei dieser Frequenz "fangen".π2

Die Beziehung zwischen Exponential und Cosinus / Sinus ergibt sich aus der Euler-Formel

ejx=cos(x)+jsin(x)

Dies ermöglicht es uns, die Fourier-Transformation wie folgt zu modifizieren:

H(f)=h(t)ej2πftdt=h(t)(cos(2πft)jsin(2πft))dt

Bei den negativen Frequenzen wird die Fouriertransformation wie folgt: -

H(f)=h(t)(cos(2π(f)t)jsin(2π(f)t))dt=h(t)(cos(2πft)+jsin(2πft))dt

Der Vergleich der Version mit negativer Frequenz mit der Version mit positiver Frequenz zeigt, dass der Cosinus der gleiche ist, während der Sinus invertiert ist. Sie sind jedoch immer noch um 90 Grad phasenverschoben, sodass sie jede Signalkomponente bei dieser (negativen) Frequenz erfassen können.

Da sowohl die Sinuskurven der positiven als auch der negativen Frequenz um 90 Grad phasenverschoben sind und dieselbe Größe haben, reagieren beide auf gleiche Weise auf reale Signale. Oder besser gesagt, die Größe ihrer Reaktion ist gleich, aber die Korrelationsphase ist unterschiedlich.

EDIT: Insbesondere ist die negative Frequenzkorrelation das Konjugat der positiven Frequenzkorrelation (aufgrund der invertierten imaginären Sinuskomponente) für reale Signale. In mathematischer Hinsicht ist dies, wie Dilip ausführte,

H(f)=[H(f)]

Eine andere Art, darüber nachzudenken:

Imaginäre Komponenten sind genau das. Imaginär! Sie sind ein Werkzeug, mit dem eine zusätzliche Ebene zum Anzeigen von Objekten verwendet werden kann. Sie ermöglichen die digitale (und analoge) Signalverarbeitung, wenn auch nicht viel einfacher als die Verwendung von Differentialgleichungen!

Aber wir können nicht die logischen Gesetze der Natur brechen, können wir nichts tun ‚echte‘ mit dem imaginären Inhalt und so muss sie effektiv selbst aufheben , bevor in der Realität zurück. Wie sieht dies bei der Fourier-Transformation eines zeitbasierten Signals (komplexer Frequenzbereich) aus? Wenn wir die positiven und negativen Frequenzkomponenten des Signals addieren / summieren, das die Imaginärteile aufheben, ist dies das, was wir damit meinen, dass die positiven und negativen Elemente miteinander konjugiert sind. Beachten Sie, dass, wenn eine FT von einem Zeitsignal genommen wird, diese konjugierten Signale existieren, wobei der "reale" Teil von jedem die Größe teilt, die Hälfte im positiven Bereich, die Hälfte im negativen Bereich, so dass das Addieren der Konjugate zusammen die entfernt imaginärer Inhalt und liefert nur den realen Inhalt.

wir können keine Spannung von Volt . Offensichtlich können wir imaginäre Zahlen verwenden, um Signale der realen Welt mit zwei Vektoren darzustellen, wie zirkular polarisierte EM-Wellen.5i

Jim Clay
quelle
Gute Antwort - ein kleiner Trottel, ich bin nicht dabei mit "Weil sie gleich sind, alles, was mit einem korreliert, wird der andere auch mit genau der gleichen Größe und einer 90-Grad-Phasenverschiebung." Ich weiß, was Sie zu sagen versuchen, aber (wie Sie wissen), ein Sinus korreliert mit einem Sinus (Punktzahl 1), aber überhaupt nicht mit einem Cosinus (Punktzahl 0). Sie sind das gleiche Signal, aber mit unterschiedlichen Phasen.
Spacey
Du hast recht. Es gibt noch ein anderes ernstes Problem. Ich werde es später beheben.
Jim Clay
Es wäre schön, wenn Sie Ihre Antwort so bearbeiten könnten, dass sie besser auf die Frage eingeht, die sich mit DFTs befasst (obwohl im Titel FFT steht), anstatt die allgemeine Theorie der Fouriertransformationen anzugeben.
Dilip Sarwate
@DilipSarwate Mein Ziel ist es, dem Fragesteller das Verständnis zu erleichtern, und ich denke, mein Ansatz ist dafür am besten geeignet. Ich habe jedoch Ihre Antwort für die diskrete Berechnung positiv bewertet.
Jim Clay
@JimClay Ihr Ansatz wird von der gesamten Leserschaft von dsp.SE sehr geschätzt, und ich hoffe, dass Sie die Zeit finden, um Ihre Antwort zu einer wirklich guten Antwort zu machen, indem Sie ausdrücklich in Ihre Antwort aufnehmen, was der Leser derzeit noch ableiten kann: nämlich . dass die Gleichungen zeigen, dass (und damit ), wenn ein reelles Signal ist und dass Dies ist die "Spiegelung", nach der das OP gefragt hat. Mit anderen Worten, ich bitte Sie, Ihre Antwort so zu bearbeiten, dass sie besser auf die tatsächlich gestellte Frage reagiert (wie ich es in meinem vorherigen Kommentar gefordert habe). H(f)=[H(f)]|H(f)|=|H(f)|x(t)
Dilip Sarwate
20

Die FFT (oder Fast Fourier Transform) ist eigentlich ein Algorithmus zur Berechnung der Diskreten Fourier Transformation oder DFT. Die typische Implementierung erzielt eine Beschleunigung gegenüber der herkömmlichen Berechnung der DFT, indem die Tatsache ausgenutzt wird, dass , die Anzahl der Datenpunkte, eine zusammengesetzte ganze Zahl ist, was hier nicht der Fall ist, da eine Primzahl ist. (Während FFTs für den Fall existieren, dass eine Primzahl ist, verwenden sie eine andere Formulierung, die möglicherweise in MATLAB implementiert ist oder nicht). Tatsächlich wählen viele Leute absichtlich in der Form oder , um die DFT-Berechnung über die FFT zu beschleunigen.N101NN2k4k

Bei der Frage, warum die Spiegelung stattfindet, hat hotpaw2 im Wesentlichen den Grund angegeben, und daher ist das Folgende nur ein Ausfüllen der Details. Die DFT von einer Sequenz von Datenpunkten definiert eine Sequenz sein wobei wobei . Es ist offensichtlich, dass im Allgemeinen eine Folge mit komplexen Werten ist, auch wenn eine Folge mit reellen Werten ist. Aber beachte, wannx=(x[0],x[1],x[2],,x[N1])NX=(X[0],X[1],X[2],,X[N1])

X[m]=n=0N1x[n](exp(j2πmN))n,m=0,1,,N1
j=1Xxx ist eine reelle Folge, ist eine reelle Zahl. Wenn eine gerade Zahl ist , haben wir außerdem , da , auch das ist eine reelle Zahl. Aber unabhängig davon , ob gerade oder ungerade ist, die DFT eine reellwertigen Sequenz hat Hermitesche Symmetrie Eigenschaft , dass Sie in einem Kommentar erwähnt. Wir haben für jedes feste ,X[0]=n=0N1x[n]Nexp(jπ)=1
X[N2]=n=0N1x[n](exp(j2πN/2N))n=n=0N1x[n](1)n
NXx m1mN1, So ist , . Als Sonderfall ist zu beachten, dass, wenn wir wählen, wenn ist, wir das , wodurch unser Ergebnis bestätigt wird frühere Schlussfolgerung, dass
X[m]=n=0N1x[n](exp(j2πmN))nX[Nm]=n=0N1x[n](exp(j2πNmN))n=n=0N1x[n](exp(j2π+j2πmN))n=n=0N1x[n](exp(j2πmN))n=(X[m])
1mN1X[Nm]=(X[m])m=N/2NX[N/2]=(X[N/2])X[N/2]ist eine reelle Zahl. Beachten Sie, dass dies eine Auswirkung der hermitischen Symmetrieeigenschaft ist

Das te Bin in der DFT einer reellen Sequenz hat die gleiche Größe wie das -te Bin.m(Nm)

MATLABi-Benutzer müssen dies übersetzen, um die Tatsache zu berücksichtigen, dass MATLAB-Arrays von aufwärts nummeriert sind .1


In Bezug auf Ihre tatsächlichen Daten ist Ihr ein Gleichstromwert von plus etwas mehr als eine Periode einer Sinuskurve mit einer Frequenz von Hz. In der Tat erhalten Sie wobei . Somit haben das erste und das letzte von Abtastwerten den gleichen Wert. Die DFT, die Sie berechnen, ist also gegeben durch Die Nichtübereinstimmung zwischen und verursacht Unordnung in der DFT: the Werte von x11

x[n]=1+sin(2π(0.01n)), 0n100
x[0]=x[100]=1101
X[m]=n=0100(1+sin(2π(n100)))(exp(j2πm101))n
100101X[m]für ungleich Null, wenn auch klein. Angenommen, Sie würden das Array in Ihrem MATLAB-Programm so anpassen , dass Samples bei entnommen werden sodass Dann ist die DFT Sie werden sehen, dass Ihre DFT genau (oder zumindest innerhalb des Rundungsfehlers), und die inverse DFT gibt dies für , 2m99t100t=0,0.01,0.02,,0.99
x[n]=1+sin(2π(0.01n)), 0n99.
X[m]=n=099(1+sin(2π(n100)))(exp(j2πm100))n,
X=(100,50j,0,0,,0,50j)0n99
x[n]=1100m=099X[m](exp(j2πn100))m=1100[10050jexp(j2πn100)1+50j(exp(j2πn100))99]=1+12j[exp(j2πn100)exp(j2πn100)]=1+sin(2π(0.01n))
dem genau Sie .
Dilip Sarwate
quelle
Kann man an der FFT erkennen, ob ein Signal periodisch ist oder nicht ?
Anzeigename
@displayname Dies ist eine separate Frage, die für sich gestellt werden sollte (und möglicherweise bereits gestellt und beantwortet wurde).
Dilip Sarwate
Wenn ich die konjugierten symmetrischen Bins vorsichtig herausheble [indem ich eine 0 + 0i in sie schreibe] und das Zeitdomänensignal mit ifft rekonstruiere, hat sich die Größe des rekonstruierten Zeitdomänensignals halbiert. Ist das natürlich oder ist es ein Werkzeugproblem? Ich kümmere mich um die Normalisierung der FFT-Ausgabe und deren Umkehrung nach iFFT.
Raj
14

Beachten Sie, dass ein FFT-Ergebnis (wie bei konjugierter Symmetrie) nur dann gespiegelt wird, wenn die Eingabedaten real sind.

Für rein reale Eingabedaten heben die beiden konjugierten Spiegelbilder in der FFT die Imaginärteile aller komplexen Sinuskurven auf und summieren sich so zu einer rein realen Sinuskurve (mit Ausnahme des kleinen numerischen Rundungsrauschens), sodass Sie eine Darstellung von rein erhalten echte Sinuswellen.

Wenn das FFT-Ergebnis nicht konjugiert gespiegelt wäre, würde es eine Wellenform darstellen, die komplexe Werte (imaginäre Komponenten ungleich Null) und keine reellen Werte aufweist.

hotpaw2
quelle