Kann ich Hilfe dazu erhalten, wie die Frequenzachse von der negativen zur positiven Frequenz (in Hertz) verschoben werden kann? Dies ist die x-Achse in einem FFT-Ergebnis, wenn jedoch entweder eine FFT mit gerader Länge oder eine FFT mit ungerader Länge angegeben wird. Ich habe einige Probleme, es in MATLAB zu schaffen. (Angenommen, Sie kennen die Abtastfrequenz f_s).
frequency-spectrum
frequency
TheGrapeBeyond
quelle
quelle
Antworten:
Ein Ansatz besteht darin, einfach den Frequenzvektor für die unverschobene DFT-Ausgabe zu berechnen (dh, was Sie direkt aus der MATLAB-
fft()
Funktion erhalten würden, ohne ein zu tunfftshift()
) und dann die Frequenzen neu zuzuordnen, die Stellen auf der negativen Seite der Achse entsprechen. Beispiel:Die Antwort von learnvst sollte auch funktionieren. Dies ist nur eine andere Denkweise, die für gerade / ungerade DFT-Größen kein spezielles Gehäuse erfordert.
quelle
Sie können ganz einfach ein positives Frequenzspektrum erstellen (wobei
fs
es sich um die Abtastrate undNFFT
die Anzahl der FFT-Bins handelt). In der Matlab-Implementierung des FFT-Algorithmus ist das erste Element immer die DC-Komponente, weshalb das Array bei Null beginnt. Dies gilt für ungerade und gerade Werte von NFFT.Wenn Sie das Frequenzspektrum umschließen müssen, müssen Sie berücksichtigen, ob Sie eine ungeradzahlige NFFT haben. Es muss also immer eine Gleichstromkomponente geben . .
Beachten Sie, dass die Berechnung der positiven Frequenzachse mit der obigen identisch ist, der durch FFT verschobene Term sich jedoch ändert, um gerade oder ungerade FFT-Längen zu berücksichtigen.
Diese Code-Schnipsel stammen aus einer langen Antwort auf SO (die Sie vielleicht interessieren könnte), die Sie hier finden: /programming/9694297/matlab-fft-xaxis-limits-messing-up-and-fftshift/ 9699983 # 9699983
quelle