Forum: Mikrocontroller und Digitale Elektronik Lead Lag Detektor mit STM32


von Chris H. (Gast)


Lesenswert?

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

von Kalle (Gast)


Lesenswert?

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?

von Jacko (Gast)


Lesenswert?

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.

von Genervter (Gast)


Lesenswert?

Frequenz?

von Jacko (Gast)


Lesenswert?


von Chris H. (Gast)


Lesenswert?

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.

von Possetitjel (Gast)


Lesenswert?

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.

von Chris H. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.