Hallo zusammen, ich möchte gerne die Phase eines Sinussignals berechnen. Um die Berechnungen per FFT und Hilbert-Transformation zu vergleichen, habe ich ein sinusförmiges Signal erzeugt und die Phase mit beiden Methoden berechnet. Bei Signalen, in der jeweils nur eine Frequenz steckt (z.B. reine 2Hz-Sinuswelle), klappt das auch super. Jetzt habe ich zwei Frequenzen übereinander gelegt (z.B. 1Hz+2Hz) und versuche, die Phase einer der beiden Frequenzen (z.B. 2 Hz) zu extrahieren. Dabei bin ich auf ein Problem gestoßen: Wenn ich die Phase per Bandpass-Filter und Hilbert-Transformation berechne, wird die Phase der 2 Hz-Welle wunderbar berechnet (siehe 2. Bild). Wenn ich allerdings die FFT anwende und dann die Phase der 2Hz-Welle extrahieren möchte, wird die Phasenberechnung von der 1Hz-Welle beeinflusst. Auf dem 1.Bild ist das gezeigt (blau 2Hz-Signal, rot 1Hz+2Hz-Signal, schwarz extrahierte Phase). Wenn die 1- und 2-Hz-Komponenten im Signal genau gleich groß sind, liegt meine berechnete Phase genau in der Mitte der beiden (1 Hz und 2 Hz) Phasen, je höher die Amplitude der 1Hz-Welle, desto näher liegt die für 2Hz extrahierte Phase an der Phase für 1 Hz. Ich habe die Phase so berechnet, indem ich die komplexe Zahl an der 2.Stelle (da Frequenzauflösung 1 Hz und die Phase von 2Hz berechnet werden soll) des Fourier-transformierten Signal genommen habe und die Phase per atan2(imag,real) berechnet habe. Jetzt meine Frage: Kann mir jemand erklären, wieso die Phasenberechnung für die 2Hz-Komponente des Signals von der für 1Hz beeinflusst wird? Ich hoffe, ich habe alles nicht zu verwirrend erklärt. :-/ Danke für jede Hilfe! Benedikt
Man sollte dafür entweder viel größere Datenmengen nehmen, oder die FFT Fensterung auf die Nulldurchgänge synchronisieren und das Fenster über genau eine Periode legen. Vielleicht gibt es auch noch andere Möglichkeiten, aber so konnte ich das mal lösen. Grüße, Peter
Hi Peter, vielen Dank für deine Hilfe. Das Problem ist, dass ich diese Berechnung online, d.h. während der Datenerhebung, durchführen möchte. Daher kann ich weder große Datenmengen verwenden (der Delay wäre zu groß) noch die Nulldurchgänge voraussagen. Vielleicht gibt es noch eine andere Möglichkeit...? Viele Grüße, Benedikt
BZoefel schrieb: > Hi Peter, > vielen Dank für deine Hilfe. Das Problem ist, dass ich diese Berechnung > online, d.h. während der Datenerhebung, durchführen möchte. Daher kann > ich weder große Datenmengen verwenden (der Delay wäre zu groß) noch die > Nulldurchgänge voraussagen. Vielleicht gibt es noch eine andere > Möglichkeit...? > Viele Grüße, > Benedikt Hallo, Dein Problem sind die Signalränder bzw. - wenn Du es im Frequenzbereich und auf Englisch ausdrücken willst - der sogenannte "leakage effect". Die Signalränder werden bei der FFT immer zum Problem, Du nur wenige Signalperioden aufzeichnest. Der Grund, weshalb die Ränder solche Probleme machen, besteht letztlich darin, daß Du ein endlich langes Signal mit unendlich langen Funktionen (Sinusfunktionen) zusammensetzen willst. Am einfachsten Nachzuvollziehen ist das an der Formel für die Sampling-Reihe. (Die Theorie erläutere ich Dir nur, wenn Du es unbedingt wissen willst; die Andeutungen müssen sonst hier reichen.) Wahrscheinlich genügt es, wenn Du das Zeitsignal mit etlichen Nullen vor und hinter dem eigentlich Signal versiehst (Zero-Padding). "Etlich" bedeutet beispielsweise, daß Du einen Zeitbereich von 20-100 Periodendauern mit Nullen ausfüllst. Wenn Du danach die FFT durchführst, wirst Du erkennen, daß die Frequenzauflösung deutlich genauer ist und Du die Frequenzen von 1 und 2 Hz voneinander unterscheiden kannst. Wenn Du Vorwissen über die Frequenzen hast hilft es auch, die Signallänge auf ein Vielfaches der Periodendauer zu beschränken. Ggf. hilfreich ist auch eine Fensterung des eigentlichen Signals (Stichwort für die Suche "Fensterfunktion"), bzw. eine mehrfache Wiederholung des Signals mit Spiegelung an den Signalrändern (verhindert Signalsprünge an den Signalrändern, d. h. die erste Ableitung des Signals am Rand ist gleich Null). Gruß, Michael
Super Tipps! Danke dir vielmals, ich werds gleich ausprobieren...
Michael Lenz schrieb: > Wenn Du Vorwissen über die Frequenzen hast hilft es auch, die > Signallänge auf ein Vielfaches der Periodendauer zu beschränken. Ggf. > hilfreich ist auch eine Fensterung des eigentlichen Signals (Stichwort > für die Suche "Fensterfunktion"), bzw. eine mehrfache Wiederholung des > Signals mit Spiegelung an den Signalrändern (verhindert Signalsprünge an > den Signalrändern, d. h. die erste Ableitung des Signals am Rand ist > gleich Null). Mit Interessieren dein letzter Absatz. Das könnte mir auch sehr hilfreich sein. Könntest du das noch ein bisschen näher erläuter, das wäre wirklich super. In meinem Projekt setzte ich nämlich nur eine Fensterfunktion ein, aber die Frequenz kann ich auch durch vorherigen Berechnngen ungefähr abschätzen.
Hallo Kai, > Michael Lenz schrieb: >> Wenn Du Vorwissen über die Frequenzen hast hilft es auch, die >> Signallänge auf ein Vielfaches der Periodendauer zu beschränken. Ggf. >> hilfreich ist auch eine Fensterung des eigentlichen Signals (Stichwort >> für die Suche "Fensterfunktion"), bzw. eine mehrfache Wiederholung des >> Signals mit Spiegelung an den Signalrändern (verhindert Signalsprünge an >> den Signalrändern, d. h. die erste Ableitung des Signals am Rand ist >> gleich Null). > > Mit Interessieren dein letzter Absatz. Das könnte mir auch sehr > hilfreich sein. Könntest du das noch ein bisschen näher erläuter, das > wäre wirklich super. In meinem Projekt setzte ich nämlich nur eine > Fensterfunktion ein, aber die Frequenz kann ich auch durch vorherigen > Berechnngen ungefähr abschätzen. Was Du verhindern möchtest sind hochfrequente Anteile an den Signalrändern des Signals s. Wenn der Rand glatt sein soll, so mußt Du dafür sorgen, daß daß die Ableitung s'=ds/dt sowie alle höheren Ableitungen s'', s''', s'''' ... existieren und stetig sind. Dummerweise ist bei einer einfachen Fensterung schon das Ursprungssignal unstetig. Indem Du das Signal spiegelst und das gespiegelte Signal periodisch fortsetzt, erreichst Du, daß zumindest keine Signalsprünge vorkommen. Signal: 12345 gespiegeltes Signal: 1234554321 gespiegeltes Signal periodisch fortgesetzt: 123455432112345543211234554321... Gruß, Michael
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.