Forum: Digitale Signalverarbeitung / DSP / Machine Learning Amplitude aus Lock-In-Amplifier gewinnen (Python)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von bilalj (Gast)


Lesenswert?

Hallo,
ich implementiere momentan für eine Datenauswertung einen 
Lock-In-Amplifier in Python (da so weit ich das gefunden hab hier keine 
passende Lib existiert). Als Referenzsignal dient ein Rechtecksignal.

Die Verstärkung des Messsignals ist hardwareseitig mit einem einfachen 
Verstärker durchgeführt. In Python hab ich bisher die Multiplikation der 
Signale und das anschließende tiefpassfiltern implementiert. Ich 
scheitere gerade allerdings an der Demodulation bzw. der Gewinnung der 
Phase und Amplitude aus dem gefilterten Signal. Bisher konnte ich dazu 
nur Erläuterungen für den Fall eines sinusförmigen Referenzsignals 
finden.
Hat jemand einen Tipp, wie die Demodulation für ein Rechtecksignal 
aussehen würde (oder ggf. sogar eine passende Lib-Empfehlung)?

Danke schon mal.

Grüße

von Achim S. (Gast)


Lesenswert?

bilalj schrieb:
> In Python hab ich bisher die Multiplikation der
> Signale und das anschließende tiefpassfiltern implementiert. Ich
> scheitere gerade allerdings an der Demodulation bzw. der Gewinnung der
> Phase und Amplitude aus dem gefilterten Signal.

Die Demodulation besteht schon gerade darin, dass du die Messwerte mit 
den Werten der Referenzspannung multiplizierst (also "auf 0 Hz 
heruntermischst") und anschließend tiefpassfilterst. Das liefert dir 
schon die "demodulierte Amplitude" bzw. den Anteil der Amplitude, der in 
Phase mit deiner Referenzspannung ist.

Wenn du nicht nur den Anteil haben willst, der genau in Phase mit deiner 
Referenzkurve ist, sondern die volle Amplituden- und Phaseninformation 
(bzw. sin- und cos-Anteil der Amplitude), dann musst du mit zwei um 90° 
verschobenen Referenzsignalen arbeiten. Oder du googelst nach 
Goertzel-Algorithmus und implementierst das.

bilalj schrieb:
> In Python hab ich bisher die Multiplikation der
> Signale

Du schreibst nicht, was genau du mit deinem Messsignal multiplizierst. 
Die "sauberere" Demodulation bekommst du, wenn du mit einem Sinus 
multiplizierst, der phasenstarr an deiner Rechecktfunktion hängt. Du 
kannst auch mit dem Rechteck arbeiten, aber dann musst du darauf achten, 
dass das symmetrisch zur Nulllinie genommen wird. (Also nicht 1 und 0 
als Werte des Rechecks nehmen sondern +1 und -1).

von bilalj (Gast)


Lesenswert?

Hallo Achim,
danke für die Rückmeldung! Das mit dem gefilterten Signal macht 
natürlich Sinn. Geht also ohne das bspw. verschobene Referenzsignal 
Information verloren? bzw. mit der Methode nur mit dem Tiefpass zu 
filtern.

Ich wollte das Mess-Signal mit dem Referenz-Signal, also einem 
Rechtecksignal, multiplizieren. Das Referenz-Signal ist nämlich ein 
Laser (der an und ausgeschaltet wird) und das Mess-Signal die Intensität 
an einer Fotodiode. Kann ich auch ohne angelegtes Sinus-Signal mit einem 
Sinus-Signal arbeiten?

von Achim S. (Gast)


Lesenswert?

bilalj schrieb:
> Kann ich auch ohne angelegtes Sinus-Signal mit einem
> Sinus-Signal arbeiten?

"Klassische" Lock-In Amplifier (noch in den analogen Zeiten) hatten dazu 
oft eine PLL mit verbaut. Die konnte man auf das rechteckförmige Signal 
des Laser-Coppers locken und hatte den gewünschten Sinus. Ggf. kannst du 
sowas in deiner Software "nachbauen".

bilalj schrieb:
> Geht also ohne das bspw. verschobene Referenzsignal
> Information verloren?

Wenn du nur mit einem Referenz-sinus multiplizierst, dann bekommst du 
auch nur eine Komponente (die, die in Phase mit dem Sinus ist). Um beide 
Quadraturkomponenten zu erhalten (bzw. die komplexe Amplitude) brauchst 
du auch zwei Auswertungen für beide Quadraturkomponenten.

Wenn es dir nur darum geht, den Betrag der Ampltude zu bestimmen, dann 
ist die übliche Lösung, das Referenzsignal gegenüber dem Choppersignal 
so weit zu verschieben, dass der modulierte Ausgang deines 
Photodiodenverstärkers genau in Phase zum Referenzsignal ist. (Praktisch 
gesagt: du verschiebst die Phase des Referenzsignals so, dass das 
demodulierte Signal maximal wird.)

bilalj schrieb:
> Ich wollte das Mess-Signal mit dem Referenz-Signal, also einem
> Rechtecksignal

Was heißt "Rechtecksignal". Ein Rechteck hast du auch, wenn es zwischen 
0 und 1 hin und herschaltet. Dein Rechteck muss aber symmetrisch zur 
Nulllinie sein. In der On-Phase müssen die Werte des Messsignals addiert 
werden. Aber in der Off-Phase müssen sie auch abgezogen werden - es 
reicht nicht, sie auf 0 zu setzen.

von Bernd (Gast)


Lesenswert?

bilalj schrieb:
> Geht also ohne das bspw. verschobene Referenzsignal
> Information verloren?
Ja. Du bekommst nur den I- oder den Q-Anteil.
Um die Amplitude phasenunabhängig zu ermitteln, kann man beide Signale 
quadratisch addieren:
Amp = sqrt( I^2 + Q^2)

Das dürfte gegenüber der einfachen Methode eine Verbesserung von 3dB 
beim SNR bringen.

von bilalj (Gast)


Lesenswert?

Hallo,
danke für eure Erläuterungen, jetzt ist das ganze klar geworden!

Grüße

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.