WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Fragen zur Frequenz-Spiegelung bei FFT

 

Lysop
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.01.2011, 13:33     Titel: Fragen zur Frequenz-Spiegelung bei FFT
  Antworten mit Zitat      
Hallo,

habe mal eine Frage zur Signalverarbeitung, speziell FFT.

Ich habe mein Signal und habe es auch schon gefiltert (Frequenzen von 1-80 Hz).
Ich lasse eine FFT drüber laufen und erhalte das Frequenzspektrum, welches soweit auch ganz gut aussieht.
Allerdings ist es an der halben Abtastfrequenz gespiegelt.

Die Frequenzanteile werden unterschiedlich gewichtet und dann erhalte ich mittels ifft einen neuen Wert, der vom Verlauf her ähnlich ist, wie das urprüngliche Signal.

Meine Frage ist jetzt: Wie gehe ich mit diesen gespiegelten Frequenzen um.
Wenn ich nichts unternehme, meinen Filter laufen lassen und wieder zurück transformiere habe ich zb. einen Ausgangswert von 0.

Wenn ich aber mein Frequenzspektrum so bearbeite, dass ich sage, alle Werte bei einer Frequenz größer als 1/2 Abtastfrequenz = 0 und dann zurück transformiere, erhalte ich zwar den selben Verlauf, aber nur halb so große Ausgangswerte...

Was ist richtig?
Hab mir schon viel zu dem Thema durchgelesen, aber irgendwie wird es immer verwirrender!
Private Nachricht senden Benutzer-Profile anzeigen


Gast-Scriptor

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2011, 21:09     Titel:
  Antworten mit Zitat      
Das hat mit der Periodizität zu tun. Angenommen du hast eine Abtastfrequenz von 5kHz und tastest eine Sekunde ab. Dann kannst du Sini abtasten die maximal die halbe Abtastfrequenz haben, siehe Shannon blabla sülz kennt jeder.

Das betrifft die Frequenzen bis 2,5 Khz aber auch die negativen bis - 2,5 kHz.

Deswegen müsstest du ja nur eine FFT in diesem Frequenzbereich machen können.

Matlab FFT macht aber von bis 5 kHz. Warum? Simpel. Weil es genauso richtig ist, aber total verwirrend für neue Anwender. Die Antwort liegt in der Periodizität. Das selbe Spektrum was du zwischen -2,5 und 2.5 kHz hast, findest du genauso zwischen 2,5 und 7,5 sowi -7.5 bis -2.5 kHz. Einfach die Periodizität anschauen. Damit du dein 0:5 kHz Spektrum in das eigentlich richtige -2.5:2.5 kHz Spektrum umwandelst, musst du mal den fftshift Befehl ausleuchten.

Zum Halbierung nach Anwendung der Inversen.

Du summierst bei der FFT vorwärts über alle Samples und invers über alle Frequenzen. Wenn du nun invers nur noch die Hälfte der Werte summierst als vorher, haste die Hälfte als vorher. Logisch oder noch was unverständlich?

Btw zwei Fakten.
Fakt eins, ein Spektrum der FFT ist IMMER symetrisch an einer Achse
Fakt eins. Da sie symetrisch sind solltest du deine Filterung nicht nur von 0 : 80 sondern auch noch von -80 : 0 vornehmen, wenn du schon im Spektrum rumpfuscht und keine Faltung im Zeitbereich machst ;)

Mfg Ich
 
Lysop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2011, 21:36     Titel:
  Antworten mit Zitat      
Ich hab das ganze mal mit einem Sinus-Signal getestet...Es gibt ja verschiedene Möglichkeiten die fft durchzuführen.

Ich hab z.b. ne Umformungs-formel ich nenn sie mal B.
in B ist festgelegt, dass alle niedrigen Frequenzen etwas gekillt werden.
also ich sag mal die ersten 100 Einträge von B sind kleiner als 1-

ich mache mein Frequenzspektrum und muss auf dieses B anwenden.

wenn ich jetzt mein normales spektrum habe und das in der mitte gespiegelt ist und ich mein B damit multipliziere, sorge ich ja dafür, dass die ersten einträge dementsprechend kleiner werden, allerdings die gespiegelten ja nicht.

wenn ich fftshift mache, habe ich ja alle Werte irgendwo in der Mitte im Vektor stehen. Wenn ich den dann mit B multipliziere kommt ja etwas ganz anderes raus.

Wie gehe ich da am Besten vor?

ich hab es jetzt stinknormal mit einer fft gemacht, vektor B multipliziert und wieder inverse fft gemacht. Dann bekomme ich ungefähr das ursprüngliche signal.

und wegen der filterung: wenn ich einen butterworth filter habe und dem sage filter von -80 bis 80 - ist das so viel sinnvoller? da das spektrum ja gespiegelt ist und da größtenteils nur noch frequenzen bis 80 Hz angezeigt werden, ist das doch eigentlich egal, oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
Scrptor-Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2011, 00:03     Titel:
  Antworten mit Zitat      
Frage zum Ablauf

du musst vor der inversen das Spektrum wieder
Signal -> Filterung (Wie? Faltung?) -> fft

oder

Signal -> fft -> Filterung in dem du jedem Punkt mit einem Faktor multiplizierst?
 
Lysop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2011, 09:16     Titel:
  Antworten mit Zitat      
sowohl als auch.

zuerst habe ich mein ausgangssignal. Da es sich um eine Schwingungsmessung handelt, habe ich zuerst einmal detrend gemacht, damit die Werte auch wirklich um 0 schwingen.
Dann habe ich einen Butterworth-Filter darauf angewendet, weil mich nur die Frequenzen von 1-80 Hz interessieren. Kann ich auch mit 0.1-80 Hz machen.


Auf dieses Signal wende ich dann die FFT an und erhalte mein Frequenzspektrum.
Für jede Frequenz habe ich jetzt eine Filterfunktion..einfach mal als Beispiel mal gesagt: B=1/sqrt(1+(10/f)^2)...was bewirkt, das alle Amplituden bei Frequenzen unter 10 Hz verringert werden.


Und dann wieder ifft
Private Nachricht senden Benutzer-Profile anzeigen
 
Scriptor
Forum-Century

Forum-Century


Beiträge: 217
Anmeldedatum: 22.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2011, 13:05     Titel:
  Antworten mit Zitat      
mit dem Butterworth scheint alles richtig zu laufen.
Teste dennoch mal das Spektrum ohne und mit Butterworth an. Ich weiß jetzt nicht ob eine Filterfaltung im Zeitbereich auch die negative Frequenzen antastet, aber eigentlich müsste es das. Halte mal die Filterung neben ein Spektrum ohne Filterung nebeneinander. Es müsste so sein, dass die 0:80 Hz bzw (wie hoch tastest du ab? Ich sag mal 500 Hz). (Nur die Butterworthfilterung betrachten. Nichts anderes!)

bzw 420 : 500 Hz. (siehe Periodizität and Symetrie an Achsen)

Meine Probleme habe ich mit der Funktion im Spektrum. Mach das genauso für die letzten 80 Hz im Spektrum, dann müsste es klappen (ohne fftshift, mit fftshift -80:80).

Schöne Grüße

btw bei der nutzung von fftshift nach einer fft, musst du VOR einer ifft ifftshift nutzen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Lysop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2011, 14:47     Titel:
  Antworten mit Zitat      
Hi,

also ich habe den Code meinem Betreuer geschickt und der schaut nochmal über den Filter drüber.

Mit der Faltung im Frequenzbereich: Ja man muss auch die Werte von -80 - 0 bewerten.

hab das ganze jetzt mit fftshift bzw. dementsprechen ifftshift gelöst.

Habe noch eine Frage:

Gibt es eine gute erläuterung einer FFT im Netz oder in einem Buch?
Ich muss in meiner Arbeit natürlich auch kurz die FFT anreißen, ohne aber zu weit in die mathematischen Tiefen zu versinken.

Habe jetzt schon viel im Internet gestöbert und habe auch ein FFT Buch hier, allerdings wird es da ja bis ins kleinste Detail erklärt
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast-Scriptor

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2011, 21:00     Titel:
  Antworten mit Zitat      
Das ist eine sehr weite Geschichte. Soweit ich weiß kann man da mehrere Ansätze verfolgen. Wenn du dir eine Fouriermatrix anschaust, dann kanst du feststellen dass sie symetrisch ist. Diese Matrix ist immer die Anzahl der Frequenzen mal die Anzahl der Samples. Ich haue dir mal die Rechenvorschrift in Matlab, wie eine dft aussieht.

Code:

function spectrum = ndft( in, x, f)
    spectrum = in*exp(-1i*2*pi*x'*f)/length(in);
end
 


was die Parameter in, x, f bedeuten kannst du dir ja vorstellen.
Nimm dir irgendein Signal, die entsprechenden Daten x dazu und die zugehörigen Frequenzen dazu. Diese Fouriermatrix wird dann mit dem Falkschema multipliziert.

Anschließend schaust du dir die Fouriermatrix mal an. Da sie symetrisch ist kannst du vll schon ahnen, warum die FFT schneller ist, dennoch das selbe macht. Man rechnet nur einmal , dass was zweimal rauskommt. Zudem noch ein paar andere Kniffe mit Einheitswurzeln (als Stichwort zur Hilfe), was ich aber selber noch nicht ganz verinnerlicht habe.

Das FFT Buch benötigst du auf jeden Fall eh als Quelle,

Faltung im Frequenzbereich machst du nicht, nur die Multiplikation. Sorry das ich da so drauf rumreite...

Vll konnte ich dir mit diesen Anstößen helfen. Falls du andere Infos hast, kannst du sie gerne mal darlegen.

Grüße
 
Lysop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.01.2011, 00:48     Titel:
  Antworten mit Zitat      
also das mit der Rechnung hab ich soweit schon verinnerlicht.

Dass die FFT einfach ein Geschwindigkeitsvorteil gegenüber der normalen DFT hat steht ja überall beschrieben und das werde ich auch nur in 1,2 sätzen erläutern.

generell geht es mehr um das Prinzip der Fourier-Transformation.

Tja Einheitswurzeln...viel zu gelesen heute...aber muss das wirklich mit rein? Also ich hätte es glaube ich halbwegs ohne Einheitswurzeln verstanden, was bei so einer F-Transformation abläuft....Wenn man einmal damit anfängt Einheitswurzeln zu erklären muss man echt weit vordringen und erklären...

Aber ergänzen kann man ja immer noch.
Private Nachricht senden Benutzer-Profile anzeigen
 
Pinguin

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.10.2012, 13:33     Titel: Signalverarbeitung
  Antworten mit Zitat      
Hallo,

ich habe ganz interessiert den Beitrag gelesen, ich habe ebenfalls eine/ein/einen FFT gemacht und bei der Achse, wo gespiegelt wird abgeschnitten. Ich habe alleridigs das problem, dass ich eine Schwingung messe, wo ich als Hauptfrequenz 500 erwarte. Nun sieht mein Spektrum etwas zerstreut aus. Ich habe auch die 500, 1000, 1500.. was schick ist. Aber ich habe ab 3000 alle 500 Schritte ebenfalls Peaks, die teilweise größer sind als meine Hauptfrequenz. Woran liegt das und kann ich meiner Auswertung vertrauen? Ich habe so meine Bedenken, dass ich auch tatsächlich das darstelle was da ist oder irgendwas anderes.

Vielen Dank schon mal im vorraus!
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 09.10.2012, 14:22     Titel:
  Antworten mit Zitat      
Ohne genaue Angaben kann man nicht beantworten, ob du das Spektrum richtig erstellt hast. Entweder postest du deinen Code und ein Bild des Spektrums oder noch besser deinen Datensatz, falls du ihn veröffentlichen darfst.

Hier ist eigentlich alles zu dem Thema zur Erstellung des Frequenzspektrums in einem Bsp. erläutert:

http://www.gomatlab.de/fft-umfassendes-beispiel-t777.html
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.