|
|
FFT aus eingelesenen Datenpunkten |
|
felifa |
Forum-Anfänger
|
|
Beiträge: 24
|
|
|
|
Anmeldedatum: 14.03.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.03.2017, 14:20
Titel: FFT aus eingelesenen Datenpunkten
|
|
Hallo liebe Forumsbenutzer,
ich versuche gerade aus Datenpunkten eine FFT zu machen, um das Rauschen während der Aufnahme zu analysieren. Ich habe auch schon einige Ansätze, aber aus denen werde ich nicht schlau. Die Daten wurden schon in Matlab eingelesen.
Ich möchte die FFT von erfassten Daten 1 Sekunde machen, mit einer 50hz Aufnahmefrequenz. Meines Erachtens nach, wird die FFT hier nur für die Hälfte der Zeit gemacht. Kann sein dass es stimmt, aber warum wird das so gemacht? Brauche ich nicht das ganze Signal? Könnte mir da jemand bitte helfen?
|
|
|
|
|
Lukass |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.03.2017, 15:03
Titel:
|
|
Hallo,
ob du die FFT über die gesamte Zeit machst kann ich dir nicht sagen, weil da der entsprechende Code fehlt, der zeigt, wo "voltage" herkommt.
Anders gesagt: Wenn "voltage" ein Signal über eine Sekunde ist, wird bei deinem Code die FFT auch über die komplette Sekunde gemacht.
Dich verwirrt möglicherweise diese Zeile hier:
Die FFT erzeugt ein symmetrisches Spektrum, also eines für negative und für positive Frequenzen. Bei dieser Zeile wird das negative "weggeschnitten", da man meistens nur eine Hälfte vom Spektrum betrachten will, weil es für praktische Anwendungen völlig aussreicht.
Gruß Lukas
|
|
|
felifa |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 24
|
|
|
|
Anmeldedatum: 14.03.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.03.2017, 15:39
Titel:
|
|
Danke für die Antwort
Das ist der gesamte Code, die Daten werden aus Excel eingelesen. Die FFT sollte über die ganze Zeit laufen. Es wurde nur 1 Sekunde gemessen, also hat man 50 Werte.
Mich irritiert aber leider noch warum P2=abs(Y/L) ist?? Warum wird das gemacht? Das selbe gilt für
P1(2:end-1) = 2*P1(2:end-1);
und
f = Fs*(0: (L/2))/L;
Könntest du mir erklären was hier geschieht? Ich erkenne da einfach nicht wofür das gemacht wird und ich finde keine Erklärung dafür... Du würdest mir damit sehr helfen!
|
|
|
Lukass |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.03.2017, 19:03
Titel:
|
|
|
|
|
Hallo,
das sind alles Berechnungsschritte um auf die gewünschte Darstellungsform der FFT zu kommen. Um das alles zu verstehen solltest du dich in Signalabtastung und Signalverarbeitung/Fourier-Transformation einlesen.
Ich versuche mal die Zeilen so gut wie möglich zu erklären.
Die Codezeile
macht folgendes:
Das Ergebnis der FFT (in deinem Fall Y) ist ein Vektor mit Real- und Imaginärteil. Daraus kann man z.B. den Betrag und die Phase ermitteln. Um das Betrags bzw. Amplitudenspektrum zu berechnen wird der Befehl "abs" verwendet.
Aufgrund des in Matlab implenentieren FFT-Algorithmus sollte das Ergebnis dann noch durch die Division auf die Signallänge (L) normiert werden.
Bei jeder Frequenz deines Ausgangssignals(Zeitsignals) verteilt sich die entsprechende Amplitude jeweils zur Hälfte auf das negative und positive Spektrum. Das liegt eben an der Fouriertransformation, die ein symmetrisches Spektrum erzeugt. Da man ja nur einen Teil des Spektrums anschaut, mittels
, multipliziert man noch mit dem Faktor zwei, um die korrekte Amplitude des Signals zu erhalten. Da sich die beiden Spektren (positiv und negativ) bei der Frequenz 0 Hz "treffen", also der erste Eintrag von P1, d.h. P1(1), muss dort nicht mit 2 multipliziert werden. Dies wird alles durch die Zeile
erreicht.
Die letzte Zeile
erzeugt dann nur noch den Frequenzvektor, da man Spektren ja auf die Frequenz und nicht auf die Zeit bezieht.
Der Frequenzvektor geht dann gleichmäßig von 0Hz bis zur halben Abtastfrequenz (Fs/2), weil höhere Frequenzen aufgrund des Nyquist-Shannon-Abtasttheorems nicht darstellbar sind. Den Frequenzvektor kannst du z.B. auch so erstellen
Ich hoffe, dass ich dir helfen konnte.
Gruß Lukas
|
|
|
felifa |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 24
|
|
|
|
Anmeldedatum: 14.03.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.03.2017, 10:23
Titel:
|
|
Hallo Lukas,
vielen lieben Dank für diese ausführliche Erklärung
Die letzte Frage die ich mir dennoch noch stelle ist, wenn ich es jetzt plotte, bekomme ich einen Graphen dessen x Achse nur bis 5 Hz reicht. Sollte der Graph nicht bis 10 Hz reichen? Denn so bekomme ich ja nur ein Frequenzspektrum der halben Frequenz... oder liegt das daran, wie du erklärt hat, dass nur das halbe Signal genommen wird, da der andere Teil des Spektrums im negativen Bereich läge?
Ich bitte Dich um eine letzte Hilfestellung
|
|
|
Lukass |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.03.2017, 11:34
Titel:
|
|
Hallo,
kein Problem
Genau so ist es. Die Frequenzen, die du darstellen lassen kannst gehen von -Fs/2 bis +Fs/2. Da man den negativen Teil nicht betrachtet geht es also von 0Hz bis Fs/2. Laut deinen oberen Code ist Fs = 50, also müsste die Frequenzachse von 0 bis 25Hz gehen.
Gruß
Lukas
|
|
|
felifa |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 24
|
|
|
|
Anmeldedatum: 14.03.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 22.03.2017, 11:00
Titel:
|
|
Hallo Lukas ,
Dann wären nun alle meine Fragen zu diesem Thema geklärt Vielen Dank!! :DDD
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 22.03.2017, 18:48
Titel:
|
|
|
|
|
|
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 - 2024
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.
|
|