Forum: Digitale Signalverarbeitung / DSP / Machine Learning Fremdlichtunterdrückung - Modulation vs. Subtraktion


von Hatschi Puh (Gast)


Lesenswert?

Mal ne Laien-Frage:

Zur Fremdlichtunterdrückung bei optischen Sensoren (und bei vielen 
anderen Übertragung en) wird moduliert, zB. OOK/Trägerfrequenz.
Per Filter demoduliert.
Bis zur Sättigung des Detektors (Sonneneinstrahlung) spielt der 
Gleichanteil keine Rolle.

Um das rein digital mit Mikrocontroller (AVR) zu basteln, liegt es nahe, 
den Gleichanteil einfach dadurch zu eliminieren, den Signalwert ohne 
Sendesignal vom Signal mit Sendesignal abzuziehen.

Entspricht das schon der o.g. Modulation?

von Achim M. (minifloat)


Lesenswert?

Hatschi Puh schrieb:
> Entspricht das schon der o.g. Modulation?

Nö, das wäre eine Basisband-Übertragung mit Offsetkorrektur.

Die Offsetkorrektur kann bei Nutzung eines Trägers ebenfalls 
durchgeführt werden, indem der Bias der Photodiode verschoben wird.

mfg mf

von MaWin (Gast)


Lesenswert?

Hatschi Puh schrieb:
> Entspricht das schon der o.g. Modulation?

Nein.

Dazu muss der Sender eine zeitlich schwankende Helligkeit haben 
(Phasenmodulation kann man bei Licht ja vergessen)

Zwei Empfänger, einer vom Lichtschrankensender beschienen, der andere 
knapp daneben, könnte man zur Subtraktion verwenden.

von Hatschi Puh (Gast)


Lesenswert?

Achim M. schrieb:
> Nö, das wäre eine Basisband-Übertragung mit Offsetkorrektur.

MaWin schrieb:
> Dazu muss der Sender eine zeitlich schwankende Helligkeit haben
> (Phasenmodulation kann man bei Licht ja vergessen)
>
> Zwei Empfänger, einer vom Lichtschrankensender beschienen, der andere
> knapp daneben, könnte man zur Subtraktion verwenden.

Danke, leider verstehe ich das nicht.
Trifft das auch zu, wenn der Sender mit z.B. 40 kHz gepulst wird (also 
an, messen, aus, messen, Differenz, ...)?
Ist das immer noch Basisband?

von Achim M. (minifloat)


Lesenswert?

Hatschi Puh schrieb:
> der Sender mit z.B. 40 kHz gepulst

Die 40kHz sind Modulation.

mfg mf

von Hatschi Puh (Gast)


Lesenswert?

Ich habe keine Ahnung von Nachrichtentechnik. Ich würde mich freuen, 
wenn es jemand etwas ausführlicher erklären mag, oder mich auf 
Stichworte und zugängliche Literatur verweisen könnte.
Oder bin ich hier im falschen Forum, weil keine nennenswerte 
Verarbeitung gemacht wird?

Also ist das "Verfahren" doch analog zu .. einem Bandpass beim 
Empfänger? Lock-In? Synchrondemodulator?

Ist es ein brauchbarer Ansatz (für einen einzelnen Sensor)?

von Harald W. (wilhelms)


Lesenswert?

Hatschi Puh schrieb:

> Ich habe keine Ahnung von Nachrichtentechnik.

Dann ist es das Beste, Du hälst Dich an die erpobte Technik,
und das ist die Modulation im kHz-Bereich. Zumal es da ja
bereits fertige, billige Empfangs-ICs gibt.

von Hatschi Puh (Gast)


Lesenswert?

Harald W. schrieb:
> Modulation im kHz-Bereich

Genau, und ist mein Ansatz nun eine brauchbare Demodulation oder ...?

von Hatschi Puh (Gast)


Lesenswert?

Wenn es so wäre, müsste es einem digitalen Filter entsprechen (ein 
Filter in Softwre wird eingespart, da es synchron ist und der 
Gleichanteil subtrahiert wird)?

von Achim S. (Gast)


Lesenswert?

Hatschi Puh schrieb:
> Also ist das "Verfahren" doch analog zu .. einem Bandpass beim
> Empfänger? Lock-In? Synchrondemodulator?

vielleicht beschreibst du "das Verfahren" mal möglichst eindeutig, dann 
kann man auch eindeutig antworten.

Wenn du diese Beschreibung meinst:

Hatschi Puh schrieb:
> wenn der Sender mit z.B. 40 kHz gepulst wird (also
> an, messen, aus, messen, Differenz, ...)?

Das ist nicht "analog zu einem Bandpass beim Empfänger". Aus einem 
Bandpass würde das 40kHz-Signal rauskommen. Aus deiner Messung würde ein 
Differenzsignal rauskommen, das nicht 40kHz hat sondern niedrige 
Frequenzen ("im Basisband"). Als eine mögliche Implementierung eines 
Lock-Ins oder eines Synchrondemodulators könnte man dein Verfahren 
allerdings schon bezeichen (wobei dabei im Normalfall noch eine 
Tiefpassfilterung des Differenzsignals angeschlossen wird).

von Hatschi Puh (Gast)


Lesenswert?

Danke für die Hilfe!

Achim S. schrieb:
> vielleicht beschreibst du "das Verfahren" mal möglichst eindeutig, dann
> kann man auch eindeutig antworten.

Wie gesagt, kenne ich mich nicht aus.
Ich möchte eine Lichtschranke mit Fremdlichtunterdrückung mit (möglichst 
nur) einem Mikrocontroller basteln. Ich suche ein geeignetes (einfaches) 
Verfahren.
Das angesprochene wäre einfach zu realisieren, ich kann es aber nicht 
einordnen und bewerten.

Da es nur eine erste Überlegung ist, lässt es sich nicht "möglichst 
eindeutig" beschreiben.

> Wenn du diese Beschreibung meinst:

Ja.

Achim S. schrieb:
> Aus einem
> Bandpass würde das 40kHz-Signal rauskommen.

Stimmt, das müsste dann wohl noch gleichgerichtet und 
detektiert/bewertet werden. Keine Ahnung, daher will ich es ja möglichst 
rein digital machen.

Achim S. schrieb:
> Aus deiner Messung würde ein
> Differenzsignal rauskommen, das nicht 40kHz hat sondern niedrige
> Frequenzen ("im Basisband").

Also doch genau das gesuchte, ist doch gut.

Achim S. schrieb:
> wobei dabei im Normalfall noch eine
> Tiefpassfilterung des Differenzsignals angeschlossen wird

Um Störungen zu glätten oder prinzipbedingt?

von Achim S. (Gast)


Lesenswert?

Hatschi Puh schrieb:
> Ich möchte eine Lichtschranke mit Fremdlichtunterdrückung mit (möglichst
> nur) einem Mikrocontroller basteln. Ich suche ein geeignetes (einfaches)
> Verfahren.

ok, das ist für mich mal eine klare Aussage. Bei den bisherigen 
Beiträgen wurde mir ehrlich nicht klar, ob du etwas vernüftiges bauen 
willst. Oder ob du die Korrektheit und Anwendbarkeit von 
Fachbezeichnungen klären (denn du hast imho ziemlich wild mit 
Fachbegriffen um dich geworfen und nach deren Anwendbarkeit gefragt).

Also du willst etwas bauen. Die nächste Frage für mich wäre: soll es 
eine einfache Lichtschranke werden (moduliertes Licht kommt an oder 
kommt nicht an). Oder willst du über den optischen Kanal Information 
übertragen (so wie z.B. die IR-Fernbedienung für den Fernseher).

Für diesen Zweck gibt es integrierte Sender und Detektoren, die die 
Modulation/Demodulation selbst durchführen und dir damit das Leben 
erleichtern. Je nachdem, was du übertragen willst, wären aber 
unterschiedliche Varianten sinnvoll (was z.B. die AutoGainControl beim 
Empfänger angeht und dadurch den Dynamikbereich zu verbessern).

Hatschi Puh schrieb:
> Um Störungen zu glätten oder prinzipbedingt?

durch dein bisheriges Vorgehen ohne Tiefpass unterdrückst du den 
Einfluss von DC-Störungen (du benutzt dafür den Begriff Gleichanteil). 
Je nach Beleuchtungssituationen können aber auch Störungen bei ganz 
anderen Frequenzen vorliegen. Um möglichst viele Störungen loszuwerden, 
musst du
- die Modulationsfrequenz sinnvoll wählen (40kHz ist nicht so schlecht).
- daneben aber auch noch die Bandbreite deiner Detektion durch den 
Tiefpass entsprechend einschränken - sonst werden dir die Störungen der 
anderen Frequenzen in dein Ergebnis reingemischt.

Die "Basismaßnahmen" sind aber mindestens ebenso wichtig:
- Detektor mit Tageslichtunterdrückung
- ggf. Verstärker, der bevorzugt bei der Modulationsfrequenz verstärkt 
(muss kein ganz enger Bandpass sein: darum kümmert sich ja schon die 
phasenelektiver Gleichrichtung, wenn du noch einen Tiefpass 
nachschaltest).

von Hatschi Puh (Gast)


Lesenswert?

Ja, meine Zusammenfassung war etwas knapp.

Datenübertragung nicht direkt - Kodierung für mehrere "Geräte" evtl. 
schon, aber das ist dann ja schon "echtes" DSP. Da werde ich etwas 
"vorgekautes" brauchen, sonst reicht die Zeit nicht. Also, im ersten 
Schritt reicht einfach "Signal vorhanden" und ggf. noch die 
Signalstärke.

Empfänger für IR kenne ich, danke. Aber ich möchte ja ein wenig die 
Prinzipien kennenlernen.

Verstärker / AGC ist für mich der zweite Schritt. Eigentlich ist bei 
allem, was nicht Fernbedienung ist, der Aufbau fix und daher das Signal 
gleichbleibend. Zumindest bei mir. Nennenswerte Entfernungen und 
Nebelschwaden erwarte ich nicht. Direkte Sonneneinstrahlung auch erstmal 
nicht ;-)

Achim S. schrieb:
> die Bandbreite deiner Detektion durch den
> Tiefpass entsprechend einschränken - sonst werden dir die Störungen der
> anderen Frequenzen in dein Ergebnis reingemischt.

Das leuchtet ein.

Danke dir.

von Achim S. (Gast)


Lesenswert?

Hatschi Puh schrieb:
> Da werde ich etwas
> "vorgekautes" brauchen, sonst reicht die Zeit nicht.

Hatschi Puh schrieb:
> Empfänger für IR kenne ich, danke. Aber ich möchte ja ein wenig die
> Prinzipien kennenlernen.

Das passt für mich auch wieder nicht ganz zueinander. Entweder dir fehlt 
die Zeit und die willst schnell etwas funktionierendes auf die Beine 
stellen. Dann sind integrierte Empfänger mit Demodulator der passende 
Einstieg, und mit denen ist es auch einfach, ein paar Byte seriell zu 
übertragen.

Oder du willst dich mit den Prinzipien auseinandersetzen und selbst 
etwas umsetzen. Dann brauchst du aber halt die dafür notwendige Zeit. Es 
ist keine "Raketentechnik" mit dem µC einen Sender auf 40kHz zu 
modulieren. Wenn der Empfänger vom selben µC ausgewertet wird, dann ist 
auch das Demodulieren machbar (wenn es zwei unabhängige µC sind wird es 
schon schwieriger).

Aber selbst wenn beide Arbeitsschritte im selben Controller durchgeführt 
werden ist es nicht trivial, dass das gut funktioniert. Du musst dir 
Gedanken machen, dass dein Empfänger im linearen Bereich arbeitet 
(sowohl zu große als auch zu kleine Signale führen z.B. bei 
Fototransistoren zu einem Absinken der Empfindlichkeit). Du musst dir 
überlegen, wie schnell dein Empfänger auf das Schalten der Quelle 
moduliert und wie du das Timing des ADCs richtig hinbiegst, dass er 
gerade in den "richtigen" 1-2 µs seinen Sampling-Kondensator öffnet. 
Nicht unmöglich, aber für den Einstieg in das Thema auch nicht 
trivial...

von Hatschi Puh (Gast)


Lesenswert?

Ich meinte die Kodierung. Angedacht, aber ich glaube nicht, dass ich 
dafür Zeit finden werde.
Das Timing hielt ich bislang für unkritisch, die LEDs wollte ich vorerst 
nicht mit Pulsströmen betreiben, sie dürfen also länger als µs leuchten.
Evtl. kann ich das kommende Woche mal ausprobieren.

von Achim S. (Gast)


Lesenswert?

Hatschi Puh schrieb:
> sie dürfen also länger als µs leuchten.

40kHz Modulationsfrequenz heißt: die Periode beträgt 25µs. Man hat also 
bei 50% Duty-Cycle 12µs On-Zeit und 12µs Off-Zeit.

Der Fotodetektor (und ein eventueller Verstärker) haben vielleicht nicht 
beliebig viel Bandbreite (sie sollen ja das Signal bei 40kHz 
detektieren, nicht alle möglichen Störsignale bei allen möglichen 
Frequenzen). Eine Bandbreite von 100kHz bedeutet: die Anstiegs- und 
Abfallzeit des gemessenen Signals beträgt 3,5µs (von 10% bis 90%). Es 
wäre also geschickt, nach der Schaltflanke am Sender erst mal 5µs zu 
warten, bis sich das Signal am Detektor eingeschwungen hat. Dann braucht 
auch der Sampling-Kondensator des ADC irgendwas im µs-Bereich, um den 
Wert korrekt zu übernehmen. Die Ansteuerung des ADCs wird also auf 
wenige µs genau sein müssen (synchronisiert mit dem Sender).

Wie schon gesagt: das lässt sich hinkriegen. Aber ich wollte halt darauf 
hinweisen, dass es für den Einstieg auch nicht trivial ist. Und dass 
integrierte IR-Empfänger einem diese Arbeit abnehmen können.

von Hatschi Puh (Gast)


Lesenswert?

Danke dir für die Hinweise, ich schau mal ob ich bzw. der AVR ADC es 
hinbekommen.

von Hatschi Puh (Gast)


Lesenswert?

Ich hab einen TIA aufgebaut und benutze zwei gleiche LEDs jeweils als 
Sender und Empfänger in geringem Abstand. Das Nutzsignal erreicht etwa 
die halbe Betriebsspannung..! Man sieht schön, wie sich Signal und 
Fremdlicht addieren.

Statt 40 kHz bin ich vorerst bei ca. 4 kHz (1e6/8/13.5/2 = 4630, per 
ADC-Interrupt eines ATtiny85). Da dürfte das Timing noch unkritisch 
sein.
Bei jedem Interrupt wird der Sender umgeschaltet und abwechselnd 
Messwerte für AN und AUS erfasst.

Mit der Differenz (Offsetkorrektur) (entspricht das nicht einem 
Serienkondensator der den Gleichanteil eliminiert?) bleibt ein Wert 
(Signalamplitude), der per Schwellwert bewertet wird.
Liegt das Signal acht mal in Folge (Tiefpass/Integrator) über dem 
Schwellwert, wird der Ausgang gesetzt.

Ich habe ein paar neue Fragen, die kann ich hoffentlich morgen stellen 
;-)

Für Interessierte ein paar Links:

https://de.wikipedia.org/wiki/Amplitudenmodulation
https://de.wikipedia.org/wiki/Synchrondemodulation
https://de.wikipedia.org/wiki/Lock-in-Verst%C3%A4rker
https://de.wikipedia.org/wiki/Mischer_(Elektronik)
https://de.wikipedia.org/wiki/Tiefpass

https://www.mikrocontroller.net/articles/Codierte_%C3%9Cbertragung

von Hatschi Puh (Gast)


Angehängte Dateien:

Lesenswert?

Umgebaut auf differentielle Messung, um später den 20x gain des ADC 
nutzen zu können.
Ansonsten ist es schonmal eine funktionierende Lichtschranke, aber bei 
der Signalstärke ja keine Kunst.
Der nächste Schritt ist dann wohl, zur Auswertung einen "richtigen" 
Integrator zu benutzen...

von Hatschi Puh (Gast)


Angehängte Dateien:

Lesenswert?

Es wird nun 64 mal abwechselnd mit und ohne Licht die Ausgangsspannung 
vom TIA gemessen und multipliziert und integriert: die Messungen mit 
Licht werden zur Summe addiert, die Messungen ohne Licht davon 
abgezogen.

Da das ganze vorerst stur in einer Schleife steckt und Messwerte über 
eine serielle Schnittstelle ausgegeben werden, passiert das nur mit ca. 
1 kHz.
Das lässt sich aber noch beschleunigen.

Durch die Integration vieler Messungen kann nun auch ein stark 
gedämpftes Signal erkannt werden (Papier im Lichtweg), das auf dem Oszi 
(siehe Anhang, 5 ms, 500 mV) noch erkennbar, aber auf den ersten Blick 
in den ADC-Werten nicht mehr sichtbar ist.
Eine "einfache Doppel-Messung" mit Offsetkompensation und Schwellwert 
schafft das nicht.

Die Offsetkompensation steckt beim Integrator mit drin.
Also ist eine analoge AC-Kopplung (via Koppel-Kondensator / Hochpass) 
wohl nicht zwingend erforderlich. Solange der Empfänger durch 
DC-Einstrahlung nicht in Sättigung gerät, und der ADC hoch genug 
auflöst, müsste das Nutzsignal erfasst werden können.

Auch wenn ich das Prinzip nun begreife, dürfte das Ganze noch kein 
"richtiger" lock-in sein, da ein Sample pro Puls sehr weit von 
kontinuierlicher Integration entfernt ist - oder?
Wie hängen denn Referenzfrequenz (also Pulsfrequenz) und Samplefrequenz 
zusammen? Was wäre, wenn bei gleicher Pulsfrequenz mehr Samples 
integriert würden? Steigt die Empfindlichkeit?

Als nächstes werde ich mich an einer Art AGC versuchen (Referenzspannung 
und 20x Gain des ADCs).


Siehe auch:
Beitrag "Fotodiode Umgebungslicht filtern"
Beitrag "Photodiode vor Fremdlicht schützen-Lock-in-Verstärker?"
Beitrag "Lock-In Verstärker oder Korrelation?"

von Achim S. (Gast)


Lesenswert?

Hatschi Puh schrieb:
> Auch wenn ich das Prinzip nun begreife, dürfte das Ganze noch kein
> "richtiger" lock-in sein, da ein Sample pro Puls sehr weit von
> kontinuierlicher Integration entfernt ist - oder?

ich denke nicht, dass es irgendwo eine verbindliche Regelung gibt, wie 
viele Samples pro Periode ein digitaler Lock-In aufnehmen muss. Für mich 
darf man es dann einen lock in nennen, wenn
- die Messung mit definiertem Phasenbezug zur Modulation stattfindet
- die Modulationsfrequenz (oder bei manchen Anwendungen auch vielfache 
der Modulationsfrequenz) auf DC heruntergemischt/demoduliert wird
- eine Tiefpassfilterung des demodulierten Signals stattfindet.
Alle drei Kriterien dürfte deine aktuelle Umsetzung erfüllen. Ein 
Lock-In könnte auch per zeitkontinuierlicher Multiplikation mit einem 
Sinussignal realisiert werden, muss aber nicht.

Du zeigst eine Menge Messungen. Aber ich tue mich schwer zu 
interpretieren, was genau da dargestellt sein soll, wenn nicht 
wenigstens ein bisschen was zu den Signalen gesagt wird. Messkurven, bei 
denen die Skalierung abgeschnitten wurde oder wenig aussagekräftig ist 
("count, sample") ist auch nicht ideal. Wie groß sind denn bei deinen 
aktuellen Messungen konkret die Anteile von Signal (moduliert) und 
Störsignal?

von Hatschi Puh (Gast)


Lesenswert?

Achim S. schrieb:
> schwer zu interpretieren, was genau da dargestellt sein soll, wenn nicht 
wenigstens ein bisschen was zu den Signalen gesagt wird.

Stimmt:

Figure_1.png zeigt die 10-Bit-ADC-Werte (count) mit (on) und ohne (off) 
Licht. delta ist die Differenz der beiden. filtered ist ein gleitender 
Mittelwert über - ich glaube - 8 Werte. Wenn dieser den Schwellwert 
unterschreitet, geht output auf 0.
Die samplerate war 8 kHz (-> Rechtecksignal mit ca. 4 kHz).
Es sind also ein paar Sekunden dargestellt, in denen ich die 
Lichtschranke händisch unterbreche und ein bisschen mit der Taschenlampe 
auf den Empfänger leuchte.

Aber das ist ja schon Schnee von gestern.

opto.png zeigt mit 5 ms bzw. 500 mV Teilung in cyan die Pulse an die 
LED, in gelb den Ausgang vom TIA, und in magenta den Ausgang (Summe > 
0).
De Lichtschranke ist erst unterbrochen, dann ziehe ich das Hindernis 
heraus.

Man sieht auch die kleine Denkpause, in der die 64 Werte verarbeitet 
werden.


Achim S. schrieb:
> Ein
> Lock-In könnte auch per zeitkontinuierlicher Multiplikation mit einem
> Sinussignal realisiert werden, muss aber nicht.

Ja, das wäre wohl besser, aber ist natürlich aufwändiger. Als Kompromiss 
kann offenbar auch das Signal ein Rechteck, aber die Referenz ein Sinus 
sein.

Das SNR wäre interessant, ich versuche das bei Gelegenheit mal zu 
ermitteln.

Achim S. schrieb:
> Alle drei Kriterien dürfte deine aktuelle Umsetzung erfüllen.

Erstaunlich, dass es scheinbar funktioniert - auf den ersten Blick sah 
es nicht so simpel aus (die praktische Minimal-Umsetzung).

Danke für die Begleitung ;-)

von Hatschi Puh (Gast)


Lesenswert?

Nach Beseitigung der Störungen durch Netzbrumm und mit einem Bias, um 
den Ausgang am TIA in den funktionsfähigen Bereich zu heben, erreiche 
ich jetzt im abgedunkelten Raum und bei Fremdlicht ca. 50 cm Abstand mit 
wenigen mA Sendestrom (rote LED und 1k Vorwiderstand an 5 V).
Das lässt sich mit richtiger Fotodiode, einem besseren Verstärker und 
AC-Kopplung mit Sicherheit vervielfachen (mit Offset lässt sich die 
interne 20x Verstärkung des Mikrocontrollers nicht nutzen). Pulsbetrieb 
vom Sender geht natürlich auch noch.

Die Messfrequenz ist immer noch etwas langsam, so dass ein "Blitz" einer 
Taschenlampe schon zu einer Erkennung führt (eine einzelne Messung über 
Rauschen reicht, um die Summe über den Schwellwert zu bringen).
Das lässt sich filtern. Und momentan ist alles noch "freilaufend", das 
wird Timer/Interrupt gesteuert noch schneller.

Aber schonmal die nächsten Schritte angedacht (bitte korrigieren!):
Momentan wird nur ein Rechteck mit 32 Pulsen "gesendet" (32, da 64 Werte 
gut in den Speicher passen).
Um mehrere Sensoren gleichzeitig betreiben zu können, müsste ich im 
Idealfall Rauschen senden. Da Sender und Empfänger eine Einheit sind, 
also keine Synchronisierung erforderlich ist, könnte das vermutlich 
sogar echtes Rauschen sein.
Habe ich nicht, also eine Pseudozufallsfolge. Diese muss aber so 
beschaffen sein, dass nicht mehrere Sender dieselbe (oder ähnliche) 
Folgen erzeugen;
also eine möglichst kleine Kreuzkorrelation haben -> orthogonale 
Signale.
Dann gehen die jeweils anderen Folgen ins Rauschen ein.

Und falls doch mal Sender und Empfänger getrennt sind, muss der 
Empfänger sich auf den Sender bzw. auf den gesendeten Code 
synchronisieren und dazu diesen (in Software) autokorrelieren. Es gibt 
(wenige) Codes, bei denen die Autokorrelation ideal ist 
(https://de.wikipedia.org/wiki/Barker-Code).
Es kann dann wohl auch gemischt werden: eine Art Code für die 
Synchronisierung und ein anderer für die Daten.

Nun mal angenommen, ich möchte zwei Sensoren betreiben, was wäre der 
einfachste Ansatz?
Barker Code (da kurz) einmal normal und einmal invertiert 
Manchester-Kodieren und dann senden?

von Hatschi Puh (Gast)


Lesenswert?

Hatschi Puh schrieb:
> Barker Code (da kurz) einmal normal und einmal invertiert
> Manchester-Kodieren und dann senden?

Nein, die sind nicht "orthogonal".

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.