Hallo, ich habe bereits im Mikrocontroller Forum die folgende Frage gepostet. Ich möchte hier keinen zweiten Thread aufmachen, deshalb verweise ich hier einfach mal auf den Thread im Mikrocontroller Forum: Beitrag "Re: [C/C++] Phasenerkennung eines Signals" Kurz umrissen geht es um folgendes: Ich habe ein digitalisierte Signal und nun geht es mir darum wie ich an diesem digitalisierten Signalstrom die Phasenänderung erkenne. Ein zweiter Punkt ist wie ich für die FFT eine Phasenänderung von z.B. 90° erreichen kann. Danke an alle, die den Umweg über das Mikrocontroller Forum gehen. :-) Liebe Grüße Sebastian
90 grad? Mit einer Drehmatrix bei der die Cosinusanteile Null werden. Die Beträge von Real und Imaginärteil tauschen die Plätze und wechseln entsprechend der Drehrichtung ihr Vorzeichen. Geht vieleicht auch mit beliebigen Winkel glaub ich. Einfach Cosinus und Sinus ausrechnen und dann eine Matrixmultiplikation über der komplexen Vektor deines Spektrums machen. Oder ist es komplizierter? Ich würde es auch gern wissen. Die Erkennung der Phasenlage mit oder ohne Referenzsignal? Ohne Referenz kann man wohl nur schnelle Phasenänderungen feststellen. In dem ein Filter die Phase aus einem vorhergegangenen Zeitfenster voraussagt und Abweichungen erkennt. Ansonsten subtrahiert man das Referenzsprektrum vom zu anlysierenden Spektrum. Entweder Komplex oder in Betrag und Phase.
Du machst aber hier einen zweiten Thread auf. Was auch sinnvoll ist, den das Thema unter C/C++ ist ganz falsch. Hat Nichts mit C/C++ zu tun. Wie Gaston schon sagte, ist der Ansatz unguenstig. Eine FFT ist ein Tool, um das Spektrum eines Signales zu rechnen. Damit Phasen zu detektieren ist unguenstig. Wir sollten zuerst mal die Signalthoerie hervorkramen. Da du von Phasenspruengen erzaehlst gehe ich davon aus, das Nutzsignal hat eine feste Frequenz, die in etwa bekannt ist. Wenn du nun an Phasenspruengen interessiert bist so bietet sich ein PLL an. Den Gaston als Zukunfts-esimator bezeichnet. Das Problem ist no, welches ist die Referenzphase ? Das muss extern im Protokoll festgelegt sein/werden.
Um eine Phasenänderung zu erzeugen multiplizierst du einfach dein Signal mit der complexen e-Funktion exp(-i*2PI/360*90). Das sollte mut jedem beliebigen Winkel gehen. Eine Phasenänderung zu erkennen ist schon etwas komplizierter, aber ich denke doch mit Hilfe der fft möglich. Das sollte in etwa so gehen: 1) Berechne Phase von Signal 1 2) Berechne Phase von Signal 2 3) Bilde die Differenz beider Phasenvektoren 4) Berechne so eine Art Mittelwert aller Vektoreinträge Ich glaube das geht aber bei kleinen Phasenänderungen. 90 Grad dürften da schon ziemlich viel sein - kann aber auch sein das ich das jetzt mit etwas anderem verwechsle.
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.