|
|
Matlab FFT - Fragen zu Synthax und zur Frequenzauflösung |
|
matz86 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.07.2011, 09:38
Titel: Matlab FFT - Fragen zu Synthax und zur Frequenzauflösung
|
 |
|
 |
|
Hallo,
in der Matlab Hilfe ist ja ein Beispiel zur Anwendung der Funktion fft dargestellt.
Ich habe mir mit Matlab eine Sinusschwingung generiert, wobei ich 64 Abtastwerte aufgezeichnet habe. Im Grund genommen habe ich also folgendes gerechnet: Y = fft(y,64)/64
Nun interessiert mich wie der komplexe Vektor Y bei Y = fft(y,NFFT)/L;
aufgebaut ist?
Das erste Element ist der Gleichanteil, also sozusagen eine Konstante. Nun habe ich noch 63 weitere komplexe Werte im Vektor Y.
Anhand der Matlab Hilfe werden für das konkrete Beispiel die ersten 33 Werte des Vektors (bzw. die Beträge) als Amplitude geplottet:
Doch warum die ersten 33? Also warum steht in der Formel NFFT/2+1 und nicht NFFT/2?
Und was ist mit den restlichen 31 Werten des Vektors Y? Welche Informationen sind dort enthalten?
Außerdem verwundet mich, wie ich auch die zugehörigen Frequenzen komme, also f = Fs/2*linspace(0,1,NFFT/2+1);.
Dass dort ebenfalls NFFT/2+1 steht ist logisch, allein schon dass beide Vektoren fürs plotten gleich lang sind. Aber was würde passieren, wenn ich in beiden Formeln NFFT/2 anstatt NFFT/2+1 verwenden würde? Ich habe es getestet und die Peaks waren etwas verschoben in Bezug auf das andere Beispiel.
Auf was ich hier hinaus will: Welche Begründung gibt es, die Frequenzabstufung gleichmäßig in NFFT/2+1 Schritten von 0 bis Fs/2 laufen zu lassen (und nicht in NFFT/2 Schritten)? Vllt ist dieser Sachverhalt lediglich Matlab spezifisch?
Gruß
Matz
|
|
|
|
|
Ajax |

Forum-Century
|
 |
Beiträge: 176
|
 |
|
 |
Anmeldedatum: 09.09.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.07.2011, 09:56
Titel:
|
 |
Hallo,
bei der Fourier Transformation werden sowohl positive als auch negative Frequenzen berechnet (einfach aufgrund der Formel). Diese Frequenzen sind symmetrisch zur y-Achse. Damit enthalten die negativen Frequenzen an sich keine zusätzliche Information. Da sie in den meisten Anwendungen "physikalisch keinen Sinn ergeben", werden sie bei einer Darstellung häufig weggelassen. Zusätzlich zu den positiven und den negativen Frequenzen gibt es natürlich auch noch den Wert bei 0 - also den Offset. Hat das Signal eine Länge von 64, dann werden zusätzlich zu den 32 Frequenzwerten auch noch der Offset abgespeichert. Daher kommt die NFFT/2 + 1. Der hintere Teil des Vektors entspricht den negativen Werten.
Noch als Zusatz: für einen plot beider Frequenzen eignet sich die fftshift() Funktion, welche die negativen Frequenzen "an die richtige Stelle" schiebt.
mfg
|
|
|
matz86 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.07.2011, 10:04
Titel:
|
 |
Hallo Ajax,
das erscheint mir logisch. Jedoch geht die Geschichte ja nicht ganz auf. Wenn ich gleich viele positive und negative Werte habe UND einen Wert bei 0, müssten ja 65 Werte vorhanden sein. Wenn 33 Werte genutzt werden, werden der Wert bei 0 sowie 32 positive Frequenzen verwendet. Es verbleiben nun aber nur noch 31 nagative Frequenzen.
Gruß
Matz
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 01.07.2011, 10:42
Titel:
|
 |
Auf diese Rückfrage habe ich schon gewartet . Ich hatte damit am Anfang auch so meine Probleme.
Evtl. wird es dir hiermit deutlicher:
Nehmen wir mal an das Signal hat 1000 Werte, dann ist
Fy_pos0 = 501 Werte lang und Fy_neg = 500 Werte lang. Der zusätzliche Wert kommt dadurch zustande, dass der Wert bei fs/2 doppelt verwendet wird. Das Spektrum ist damit beim Gleichanteil f = 0 Hz spiegelsymmetrisch und hat dann auf jeder Seite 500 Werte
|
|
|
matz86 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.07.2011, 11:35
Titel:
|
 |
Super, danke!
DSP, vielleicht kannst du mir auch noch schnell bei einer anderen Frage, die darauf aufbaut, weiterhelfen:
Ist nun die FFT-Länge NFFT länger als die Anzahl L der abgetasteten Werte, so wird das Signal mit Nullen aufgefüllt. Dadurch werden keine neuen Informationen geschaffen, aber das Spektrum wird sozusagen interpoliert.
Was ist neben der längeren Rechenzeit ein Nachteil davon? Ich habe gelesen, dass durch Zero Padding Nebenkeulen (Nebenmaxima) entstehen können, welche eigentlich nicht im Frequenzsignal enthalten sind. Ist dies der einzige Nachteil?
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 01.07.2011, 13:15
Titel:
|
 |
|
 |
|
matz86 hat Folgendes geschrieben: |
Ist nun die FFT-Länge NFFT länger als die Anzahl L der abgetasteten Werte, so wird das Signal mit Nullen aufgefüllt. |
Das ist richtig! Bsp. Nfft = 1024 und L = 1000...denn werden 24 Nullen automatisch bei fft(data[L], Nfft) angehängt.
matz86 hat Folgendes geschrieben: |
Dadurch werden keine neuen Informationen geschaffen, aber das Spektrum wird sozusagen interpoliert.
Was ist neben der längeren Rechenzeit ein Nachteil davon? Ich habe gelesen, dass durch Zero Padding Nebenkeulen (Nebenmaxima) entstehen können, welche eigentlich nicht im Frequenzsignal enthalten sind. Ist dies der einzige Nachteil? |
Zero padding führt man durch, um die Freq.Auflösung df = fs/Nfft des Spektrums zu erhöhen. Durch die höhere Anzahl an Messwerten, wird df kleiner und dadurch liegen die diskreten Spektrallinien näher aneinander. Sind die Frequenzen meines Signals Vielfache der Auflösung df=fs/L, so ergibt sich kein Leakage Effekt. Durch das Zero-padding ändert sich ja das df=fs/Nfft, wodurch es sein kann, dass es dann kein Vielfaches der Signalfreq. ist. Hier entsteht dann der Leakage Effekt...Auftreten von Nebenmaxima.
|
|
|
Ajax |

Forum-Century
|
 |
Beiträge: 176
|
 |
|
 |
Anmeldedatum: 09.09.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.07.2011, 13:43
Titel:
|
 |
Kleine Zusatzbemerkung: Zero-Padding wird meines Wissens ebenfalls verwendet, um die Länge des Signals auf eine 2er-Potenz zu bringen. Dies ist Notwendig um den schnellen Fast Fourier-Transformations-Algorithmus anwenden zu können.
mfg
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 03.07.2011, 17:10
Titel:
|
 |
Das ist vollkommen richtig...an diesen simplen Grund habe ich gar nicht gedacht. Ich bin es einfach gewohnt meine Daten in deiner passenden 2er Potenz Länge zu haben
|
|
|
Verschoben: 04.07.2011, 09:53 Uhr von _Peter_ Von Script-Ecke nach Programmierung |
matz86 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.07.2011, 10:20
Titel:
|
 |
Vielen Dank für eure Antworten!
|
|
|
ifranz |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.08.2013, 19:02
Titel: FFT in Matlab
|
 |
Hallo,
ich habe da noch ein paar Verständnisprobleme...
Nachdem ich die FFT von einem Vektor mit einer geraden Anzahl an Werten gemacht habe, bekomme ich durch Umformung einen Vektor mit N+1 Werten.
Ich habe nun zusätzlich einen Vektor mit der gleichen Größe (auch fouriertransformiert), der mit dem Ersten multipliziert werden soll. Am Schluss soll das Produkt der beiden Vektoren aufsummiert werden.
Habe ich dann jetzt aber nicht insgesamt meinen Betrachtungsbereich vergrößert? Ich habe ja eigentlich keine N+1 Werte gegeben. Kann man das ganze irgendwie wieder zurücktransformieren?
Grüße
ifranz
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|