Diese Vorgangsweise habe ich aus einem FFT-Tutorial von hier und ich muss leider zugeben, dass ich das Prozedere noch nicht ganz verstanden habe, ich arbeite aber daran. Grundsätzlich funktioniert das jedoch einmal recht gut.
Hier das eigentliche Problem:
Ich muss die einzelnen Werte in gewisse Frequenzbereiche einteilen. Das mache ich über eine Reihe an If-Anweisungen, wo einfach alle y-Werte in einem Bereich addiert werden. Die Werte in diesen Bereichen sollen jetzt aber mit Ergebnissen der Vergangenheit einer Person, die leider nicht mehr greifbar ist, verglichen werden. Die Vorgangsweise wurde damals von der entsprechenden Person so beschrieben:
Zitat:
interp: Da die Messdaten mit einer Frequenz von 32 Hz aufgezeichnet werden liefert die Frequenzanalyse einen Wert für alle 1/32 Hz. Um jedoch genau auf die gewünschten Frequenzbereiche zu kommen, ist es nötig das Frequenzspektrum zu interpolieren. In diesem Fall wird eine lineare Interpolation herangezogen. Es wird für alle 0,01 Hz ein Punkt berechnet.
Code dazu konnte ich leider keinen ausfindig machen. Kann mir jemand helfen das entsprechend dieser Beschreibung umzusetzen?
Die FFT liefert dir Frequenzanteile im Abstand 1/32=0.031. Der Beschreibende wünscht sich aber eine Auflösung von 0.01Hz, also dreimal so fein. Um nun die zwei Werte zwischen zwei tatsächlich berechneten Stützstellen zu bekommen, verbindet er immer zwei benachbarte Frequenzen mit einer Geraden und liest die zwei fehlenden Zwischenwerte bei den gewünschten Frequenzen an eben dieser Geraden ab.
Allerdings passt dann die Länge des Vektors f (auf der x-Achse aufgetragen; in dem der jeweilige Frequenzwert steht) nicht zu der Länge des Vektors mit den y-Werten.
damit kannst du noch mehr einstellen. Schau mal in der Hilfe, da steht auch was zur Arraygröße
Gruß fekal
Akustiker
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 17.10.2011, 12:17
Titel:
Hallo,
ich habe gerade etwas gelesen, was so nicht ganz korrekt ist ...
Wenn du von einem Zeitsignal eine FFT macht, und eine Frequenzauflösung von 0,031 erhällst, dann darfst du NICHT einfach so linear interpolieren DENN
In einer Linie steckt die Energie von zb 1 - 1,031 Hz ... Wenn du eine FFT mit 3 mal so großer Blocklänge machst, dann fällt dir bestimmt auf, dass die Amplitude im gesamten etwas geringer ausfällt je kleiner das delta F wird.
Weil eben die Energie auf viel mehr Linien verteilt wird.
Wenn beispielsweise ALLE deine Linien eine Amplitude von 1 N haben und du .. 1000 Linien hast, wäre deine Summe 31,5 N (quadratische addition weil energetisch betrachtet)
wenn du nun einfach je Punkt noch 2 Linien dazurechnest, dann verdreifachst du die Linien .. hast also 3000 Linien. aber da du linear interpoliert hast haben ALLE 3000 Linien nun 1 N als Amplitude ... als summe also 54,7 N (wieder quadratisch addiert und danach gewurzelt..) ... richtig wäre aber wenn jede Linie nun nur noch 0,577 N als Amplitude hätte , denn 1N² (Energetisch gesehen) / 3 = 0,333 N² und Wurzel von 0,3333 N² = 0,577 N
nur um es physikalisch richtig zu stellen.
Im frequenzbereich darf niemals linear interpoliert werden, wenn dann überhaupt nur energetisch, aber selbst das ist nicht genau.
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
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.