Lead Lag Detektor mit STM32

Gast #4938476
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
Gast #4938734
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?
Gast #4938776
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.
Gast #4938792
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.
Gast #4938875
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.
Gast #4938991
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.