Hallo Zusammen,
ich denke, ich habe einen kleinen Denkfehler in meiner FFT drin. Ich bekomme alle 30s 400 Messwerte. Diese 400 Messwerte stellen eine Signalkurve dar und stammen von einem Sensor. Ich weiß definitiv, dass dieses Signal verrauscht ist. Dieses Rauschen möchte ich herausrechnen, damit ich die eigentlichen Messwerte analysieren kann.
Ich mache momentan eine FFT-Analyse über diese 400 Messwerte. Dazu lege ich zunächst einen Tiefpassfilter über die Messwerte, um die höheren Frequenzanteile zu filtern. Anschließend mache ich meine FFT-Analyse. Als Ergebnis bekomme ich beim Amplitudenspektrum über 1000 Frequenzen. Mir ist klar, dass ich nur die ersten 5-6 Frequenzen interessieren. Wenn ich jetzt mehrere dieser Amplitudenspektren sammle, heißt in ein Array schreibe, und anschließend den Signalverlauf für eine Frequenz anschaue, sehe ich zwar den korrekten Signalverlauf, der allerdings immer noch sehr verrauscht ist. Ich habe mir schon die mittlere Frequenz jedes Spektrums berechnet und von den Amplituden subtrahiert. Dadurch bleiben die besagten 5-6 Nutzfrequenzen zwar übrig. Stelle ich diese wieder als Signalverlauf dar, sehe ich diese wieder verrauscht.
Was ich meine ist, wenn ich mehrere dieser 400 Messwerte sammle (der Sensor verändert sich in der Zeit nicht), müsste ich für die jeweiligen Frequenzen eigentlich den selben Wert für die Amplitude bekommen. Aber dies ist nicht der Fall.
Ich hoffe, ich habe mein Problem verständlich genug beschrieben.
Viele Grüße
Hi
Hast Du Sprünge in Deinem Signal. Du musst für eine ordentliche FFT periodische Randbedingungen einhalten. Sonst gibt es in der Tat ein kontinuierliches Frequenzspektrum mit (sehr) hohen Frequenzanteilen.
Gruß Holger
Naja, wie gesagt, zunächst lege ich einen Tiefpassfilter drüber. Und bei der FFT benutze ich ein Hamming Fenster. Was für periodische Bedingungen meinst du sonst?
Kleiner Denkfehler? Das strotzt ja nur so von von Ungereimtheiten:
1) FFT funktioniert nur mit 2^N Messwerten
2) Aus einem Signalverlauf mit 400 Samples bekommt man genau 199 Frequenzen, niemals 1000 wie Du es behauptest. (selbst wenn die 400 Messwerte mit Nullen auf 512 Werte aufgefüllt werden, damit fft möglich ist, waren es dann nur 255 Frequenzen).
3) Aus einem Amplitudenspekrum (ohne die zugehörigen Phasen) kann man niemals den Signalverlauf wieder herstellen, wie Du es ebenfalls behauptest. (höchstens die Autokorrelationsfunktion).
4) Du gehst nicht auf das Problem des Einschwingesn bei Tiefpassfilterung bzw. das Problem der Fensterung bei Spektralanalyse ein.
Hallo Lucki,
Sorry, du hast recht. Es sind tatsächlich "nur" 199 Amplituden. Fehler von mir.
Selbst, wenn ich meine 400 Messwerte quasi künstlich periodifiziere, also das Signal N-mal aneinandergereiht, bekomme ich am Ende dasselbe Ergebnis. Den Tiefpass könnte ich auch weglassen, weil der ebenfalls keinen nennenswerten Effekt auf die FFT hat.
Mir ist schon klar, dass das ich das Zeitsignal nur wieder erhalte, wenn ich das Amplituden- und Phasenspektrum rücktransformiere.
Ich habe aber etwas anderes gemacht. Ich habe das Ergebnis jeder FFT in ein Array geschrieben (die Amplituden). Die nächste FFT habe ich angehängt. So das ein 2D Array entsteht. Nach ca. 130 FFT "Durchgängen" habe ich mir für eine Frequenz die Amplitude herausgelesen und als Signalverlauf dargestellt. Also ich habe eine ganze Spalte dieses 2d Arrays ausgelesen und als Signmalverlauf dargestellt. Als Ergebnis habe ich tatsächlich den Signalverlauf erhalten.
Es gibt in LAbview die Rücktransformationsfunktion für FFT. Wie verwnede ich die Korrekt, um das Phasen und Amplitudenspektrum wieder als Zeitsignal darszustellen?
Die "künstliche Periodisierung" bringt überhaupt nichts, weil FFT ohnehin von einem sich unendlich wiederholendem Signal ausgeht. Mit "Periodisierung der Randbedingungen" meint Holger etwas anderes: Um Sprünge zu vermeiden, sollte die Messdauer das genau Ein-oder Mehrfache der Grund-Periodendauer des Messignals gewählt werden. Dann nämlich hat man bei der unendlichen Periodisierung durch FFT keine Sprünge im Signalverlauf und kann auf Fensterung völlig verzichten.
Der Haken an der Sache ist aber, dass das nicht immer möglich ist. Die Frequenz ist ja nicht unbedingt von vornherein bekannt, sofern es sich überhaupt um ein periodisches Signal handelt.
Okay, vielen Dank schonmal für die Hinweise bis jetzt.
Aber wie mache ich nach der FFT weiter, um doch das richtige Messsignal zu erhalten? Da hänge ich gerade etwas.
Die 400 Messwerte sind mit 10ms abgetatstet.
Hallo toda4506,
deinem ersten Post entnehme ich, dass du einfach nur Rauschen entfernen möchtest. Mit der FFT kannst du zwar ein bisschen rumspielen aber die Aufgabe mit der Eliminierung der hochfrequenten Anteile solltest du alleine dem Tiefpassfilter überlassen. Dass man selbst den Freuqenzbereich manipuliert und anschließend das Ergebnis wieder in der Zeitbereich transformiert ist zwar in der Theorie (oder im Hochschulalltag) denkbar, aber ziemlich unpraktikabel. Also lass einfach mal das Thema FFT erstmal beiseite und spiele lieber mit der Grenzfrequenz/Ordnung vom Filter rum und schau dir an was hinten rauskommt.
Beste Grüße
dimitri
Hallo dimitri,
nein es geht nicht nur um höhere Frequenzen. Wenn ich Messwerte aufnehme und die Bedingungen alle identisch sind, die Ergebnisse aber schwanken, dann liegt vermutlich ein Rauschen auf dem Signal. Dieses möchte herausbekommen. Wenn die Bedingungen der Messwertaufnahme nur geringfügig ändere, kann ich das wahre Messsignal nicht erkennen, da das Rauschen dieses überlagert. Es geht darum kleine Messsignaländerungen erkennbar zu machen. Habe ich größere Änderungen der Messbedingungen, stört mich das Rauschen ja nicht, weil die Signaländerung groß genug ist. Aber es geht speziell, um die kleinen Änderungen.
Danke
Ich verstehe deinen Einwand nicht. Du versuchst mittels FFT und iFFT im Frequenzbereich aufzuräumen. Ich behaupte das geht besser mit Filtern und die FFT solltest du nur zum Betrachten heranziehen. Mehr nicht.