Hallo Zusammen, Es geht um folgendes: Ich hab zwei Signale, beide in Frequenz und Amplitude identisch. Lediglich die Phase eilt entweder um 90 Grad vor oder nach. Nun möchte ich die Phase detektieren und die Aussage treffen ob Signal A dem Signal B vor oder nacheilt. Quasi ein Lead or Lag Detektor. Leider hab ich hierzu noch keine Lösung gefunden. Das ganze soll auf einem STM32F4 implementiert werden. Ein Erkennen der Nullstellen kommt aufgrund des teils schlechten SNR nicht infrage. Hat da jemand eine schnittige Idee? Grüße
Chris H. schrieb: > Nun möchte ich die Phase detektieren und die Aussage treffen ob Signal A > dem Signal B vor oder nacheilt. Quasi ein Lead or Lag Detektor. Eine solche Funktion realisiert der Phasendiskriminator einer PLL. Schau mal, ob Du mit dem 4046 weiterkommst. Um welche Amplituden und Frequenzen handelt es sich denn hier?
Tja, mit deinen dürftigen Angaben kann man nur in den Lösungsmöglichkeiten stochern... Erster Vorschlag mit wenig Rechenaufwand bei bekannter und (für den ADC) nicht zu hoher Frequenz der Signale ist: Beide Signale per ADC samplen und mit den Algorithmen von Goertzel bearbeiten. Es kommt ein Imaginär- und Realteil heraus, die Phase wird mit atan2(real,imag) errechnet. Etwas Rauschen ist dabei erlaubt. Achtung: Wenn du beide Signale nicht zeit-parallel samplest, musst du das phasenmäßig herausrechnen. Ist aber eine Konstante.
Hier noch ein Link für den Algorithmus: http://www.embedded.com/design/configurable-systems/4024443/The-Goertzel-Algorithm
Ja, ich wusste nicht was ihr noch benötigt. Hab beide Signale abgetastet und in Matlab importiert. Mit den Algorithmen von Goertzel kommt da eine Phasendifferenz raus, die soweit gut aussieht. Werd das nochmal genauer analysieren und dann in C implementieren... Es handelt sich im Frequenzen von 10Hz bis 30kHz. Amplitude von ca. 50mV bis 3V. Ich würd das ganze gerne komplett durch Software lösen, da die Daten für die weitere Verarbeitung eh digital sein sollen. Als Idee hatte ich noch ausgearbeitet sowas ähnliches wie der Quadraturencoder zu realiseren. Ist aber dann im Rauschen untergegangen.
Chris H. schrieb: > Es handelt sich im Frequenzen von 10Hz bis 30kHz. Amplitude > von ca. 50mV bis 3V. Welche Kurvenform? Sinus? Ach so: Ist die jeweilige Frequenz a priori bekannt, oder muss das der Algorithmus selbst herausfinden? > Als Idee hatte ich noch ausgearbeitet sowas ähnliches wie > der Quadraturencoder zu realiseren. Ist aber dann im > Rauschen untergegangen. ??? Was bedeutet das? Ist das Rauschen woertlich oder im uebertragenen Sinne gemeint? Falls ((Signalform==Sinus) AND (Rauschen==nichtsoschlimm)): Extrema des einen Signals suchen und Anstieg des anderen bestimmen. Aus dem Vorzeichen des Anstieges kann man auf die zeitliche Lage rueckschlieszen. Ggf. vorher bereichs- weise Polynom approximieren (Rauschminderung). Ansonsten: Wenn die Frequenz a priori bekannt ist, ist eine Art I/Q-Demodulator eine elegante Sache. Ist wegen der Mittelung auch stoerfest.
Possetitjel schrieb: > Welche Kurvenform? Sinus? > > Ach so: Ist die jeweilige Frequenz a priori bekannt, oder > muss das der Algorithmus selbst herausfinden? Die Kurvenform ist in erste Linie sinusförmig. Die Frequenz wird zu einem späteren Zeitpunkt ermittelt, ist aber für den ersten Schritt unwichtig. Hier soll erstmal eine Klassifizierung, ob es vor oder nacheilt stattfinden. Daran entscheidet sich was nachträglich passiert. > Was bedeutet das? Ist das Rauschen woertlich oder im > uebertragenen Sinne gemeint? Eher im übertragenen Sinne. Da das SNR so gering war, das er dann die Nulldurchgänge nicht mehr erkannt hat. > Falls ((Signalform==Sinus) AND (Rauschen==nichtsoschlimm)): > Extrema des einen Signals suchen und Anstieg des anderen > bestimmen. Aus dem Vorzeichen des Anstieges kann man auf > die zeitliche Lage rueckschlieszen. Ggf. vorher bereichs- > weise Polynom approximieren (Rauschminderung). Das war dann auch eine Überlegung, aber das SNR lässt keine robuste Erkennung der Maxima und Nullstellen zu. Ich denke mal der Goertzel Algorithmus funktioniert stabiler, da man sich hier eher spektrale kKomponenten ansieht. Die real abgetasteten Messreihen haben in Matlab sehr gut Resultate gezeigt.
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.