|
|
FFT-Probleme: Es kommen falsche Werte raus |
|
_Stefan_ |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.09.2008, 09:32
Titel: FFT-Probleme: Es kommen falsche Werte raus
|
 |
Hallo,
um sicher zu sein, dass ich die fft-Funktion richtig anwende, will ich eine einfache Kosinusfunktion analysieren. Ich bekomme jedoch für die Amplituden falsche Werte heraus.
Weiterhin weiß ich nicht wie ich den Frequenzvektor bilden soll.
Ich habe hier schon einige Threads zur FFT gelesen, aber zur Bildung des Frequenzvektors werden häufig nur Zahlenwerte benutzt und ich weiß nicht, woher diese Zahlen genau kommen.
Meine code ist unten angehängt.
Wäre jemand so nett, ihn zu verfollständigen / zu korrigieren und mir vor allem zu Erklären warum es so gemacht werden muss?
Ich hatte früher schonmal mit der fft-Fkt gearbeitet und mir die Bildung des Frequenzvektors aus dem Internet besorgt. Allerdings lag ich immer etwas neben der gesuchten Frequenz. Kann ich nicht erwarten, dass die Frequenz genau getroffen wird?
Viele Grüße,
Stefan.
|
|
|
|
|
mr_endres |

Forum-Fortgeschrittener
|
 |
Beiträge: 78
|
 |
|
 |
Anmeldedatum: 11.06.08
|
 |
|
 |
Wohnort: Unterfranken
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.09.2008, 11:05
Titel:
|
 |
Hallo,
ich würde deinen Code so ergänzen :
Dabei benötigst du fftshift um das Spektrum symmetrisch um Null betrachten zu können.
Dementsprechend musst du auch deinen Frequenzvektor symmetrisch angegeben.
Im Plot siehst du nun das Frequenzspektrum (in Einheiten der Samplingfrequenz!).
Mit dem Befehl :
siehst du, dass sich die Peaks im Spektrum bei
f=-0.0055*f_s und f=0.0045*f_s
also bei ca. (+-)5Hz befinden.
Du wählst zwar die Samplingfrequenz sehr hoch, doch wenn du mehr Perioden des Eingangssignals (also größeres t wählst) dann kommst du auch genauere Werte im Frequenzspektrum (Stichwort sinc-Funktion und Faltung).
mfg Johannes
|
|
|
_Stefan_ |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.09.2008, 22:17
Titel:
|
 |
Hallo Johannes,
danke für deine Antwort.
Wenn ich deinen code in Matlab starte, dann bekomme ich aber immer noch nicht ganz die gewünschten Werte angezeigt.
Wenn ich die Frequenz gemäß deiner Angabe noch mit 1/dt multipliziere bekomme ich also offenbar die tatsächliche Frequenz in Hz (siehe angehängtes Bild).
Leider liegt der Peak noch recht weit von 5 Hz entfernt, immerhin bei 4,496Hz.
Ist diese Ungenauigkeit normal? Ich habe doch sogar fünf Perioden im Zeitsignal und die Abtastrate ist auch sehr hoch.
Vor allem stimmt aber die Amplitude in deinem Diagramm noch nicht.
Was soll denn die Amplitude von 1502 bedeuten?
Die Amplitude der cos-Funktion war doch 3.
Viele Grüße
Stefan[/code]
Beschreibung: |
|
 Download |
Dateiname: |
plot.jpg |
Dateigröße: |
30.82 KB |
Heruntergeladen: |
817 mal |
|
|
|
mr_endres |

Forum-Fortgeschrittener
|
 |
Beiträge: 78
|
 |
|
 |
Anmeldedatum: 11.06.08
|
 |
|
 |
Wohnort: Unterfranken
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.09.2008, 17:31
Titel:
|
 |
|
 |
|
Zunächst mal zur Abtastfrequenz f_s. Für eine verlustfreie Abtastung muss gelten : f_s=2*f_max, wobei f_max die größte vorkommende Frequenzkomponente in deinem Signal ist (das ist das Nyquist Kriterium, s. z.B. Wikipedia ...). Damit wäre für deine 5Hz also dt=0.1s schon ausreichend.
Wenn du jetzt t=1s setzt so schneidst du den Cosinus quasi nach 1s ab, d.h. du multiplizierst ihn mit einer Rechteckfunktion (Stufenfunktion). Nun wird aber aus der Fouriertransformierten des Produktes zweier Funktionen im reziproken Raum eine Faltung der Fouriertransformierten (die Cosinus Funktion wird zu zwei Delta Peaks; die Stufenfunktion zu einer sinc Fkt, und damit die Faltung der beiden zu zwei Sinc Fkt. an den Stellen der Delta Peaks ). Im Idealfall möchtest du die Delta Peaks bei +-5Hz sehen. Je breiter nun du die Stufenfkt. (also je größer t wird) machst desto schmaler wird die sinc Fkt. und desto besser nähert sich deren Max. an +- 5Hz an.
Wenn du z.B. folgendes ausführtst :
So bekommst du schon -.500Hz und 0.4950Hz.
Faszit: Das entscheidende ist bei richtiger Abtastfrequnz die Dauer der Abstastung.
Zur Amplitude: Du trägst hier das Frequenzspektrum nicht die Amplitude auf ! Wenn du die y-Achse normierst so bekommst du den raltiven Anteil der Frequenzen im Spektrum. Die Delta Peaks die die Fouriertrafo bei cosinus liefer sollte ja z.B. unendlich hoch sein.
mfg Johannes
|
|
|
|
|
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.
|
|