Wie schafft es ein Mikrofon, nicht die Geräusche aus den Lautsprechern zu übertragen? Werden die Ausgangstöne, welche ja bekannt sind, automatisch herausgefiltert, z. B. durch Interferenz?
Ursprünglich hatte ich nur einen Kommentar zur Antwort von Bernhard Elsner verfasst - so in der Absicht, eine Ergänzung (leicht off topic) anzubringen. Nachdem aber der Fragesteller mir in einer Antwort auf meinen Kommentar den Hintergrund seiner Frage klar gemacht hat, möchte ich zwecks besserer Lesbarkeit alles in einer eigenen Antwort zusammenfassen:
Beim Telefonieren gibt es ein massives Echo-Problem. Wenn ich als Sender in ein Telefon spreche, geht der Schall auf der Empfängerseite vom Lautsprecher des Hörers in das dortige Mikrofon. Meine eigene Sprache höre ich dann verzögert in meinem Hörer.
Bei der Analog-Telefonie hat das nicht gestört, es bewirkte ein "Telefonie-Gefühl" (Gabelschaltung – Wikipedia
). Bei der Digitaltechnik hingegen hat man weit größere Laufzeiten (z.B. wegen der Datenpufferung) und dieses deutliche Echo ist enorm störend.
An meinem letzten Arbeitsplatz hätte dieser Effekt uns fast ein Entwicklungsprojekt und damit vermutlich die ganze Firma ruiniert. Wir mussten eigens eine Signalprozessorbaugruppe einbauen, um das Echo in den Griff zu bekommen:
Intercom Module vicCOM
(diese Baugruppe war unsere Rettung!)
Echokompensation – Wikipedia
und weit besser in Englisch:
Echo suppression and cancellation - Wikipedia
Die Erläuterung von Justus Westerhoff zu seiner Frage:
Genau hierauf sollte meine Frage eigentlich auch abzielen. Mir kam sie überhaupt erst, da ich zu den aktuellen Zeiten viele (Video-)Telefonate habe und bisher (fast) nie durch Rückkopplung oder das "Echo-Problem" gestört wurde. Wenn ich nun (beispielsweise über Zoom) ohne Kopfhörer mit Webcam-Mikrofon und auf dem Schreibtisch stehenden Boxen telefoniere, kommt es nicht vor, dass mein digitaler Gegenüber sich selbst hört. Und das obwohl die Boxen (manchmal) schon ziemlich laut sind und das Webcam-Mikrofon von ihnen auch halb getroffen wird. Dass das (billige) Webcam-Mikrofon keine Verfahren zur Echokompensation verwendet, ist mir klar. Da aber die Ausgangstöne dem (Video-)Telefonie-Programm (z.B. Zoom oder Skype) bekannt sind, dachte ich, dass hier eine Art Echokompensation stattfinden (muss). Und das tut es wahrscheinlich auch.
Ja, das kann die Software. Ein PC hat dafür mehr als genug Rechenleistung.
Mit "künstlicher Intelligenz" im gebräuchlichen Sinn hat das nichts zu tun. Das ist digitale Signalverarbeitung, die es in dieser Form seit gut 30 Jahren gibt:
http://www.ece.rochester.edu/courses/ECE472/resources/Papers/Murano_1990.pdf
Daraus ein Signalflussdiagramm (zum Vergrößern bitte das Bild anklicken):
Und daraus auch folgende Erläuterung:
"For either type of echo, acoustic or electronic, the echo canceler first estimates the characteristics of the echo path, then generates a replica of the echo. The echo is then subtracted from the received signal. Adaptive Digital Filtering (ADF) is required to obtain a good echo replica, since the echo path is usually unknown and time-varying."
Meine Beschreibung ist nicht leicht verständlich und auch nicht sehr exakt. Mir selber platzt fast der Kopf beim Nachdenken über die Funktionsweise des Verfahrens. Aber meine Antwort soll wenigstens eine Ahnung vermitteln, wie so etwas funktioniert.
Im Folgenden wird das Ganze aus der Sicht des Senders (des Sprechers) betrachtet. Die Gegenstelle liefert das Echo und ist ansonsten ruhig. In der Beschreibung habe ich den Index j durch einen Index t ersetzt, das entspricht zwar nicht den Gepflogenheiten, ist aber suggestiver.
Das Signal y[t], also das Echosignal, entspricht dem gesendeten Signal, ist aber zeitverzögert und mit einem Übertragungsfaktor multipliziert zu denken. Wobei dieser Übertragungsfaktor auch negativ sein kann.
Wenn man es schafft, auf der Seite des Senders den Echopfad nachzubilden und das zu erwartende Echosignal z[t] zu berechnen, kann man laufend e[t] := y[t] - z[t] berechnen und hat damit das Echo kompensiert. e[t] wird an den Hörer des Sprechers geliefert, es ist gleichbedeutend mit einem Fehlersignal und es sollte gegen Null gehen.
Die adaptive Filterung erfolgt mittels eines FIR-Filters, auch Transversalfilter genannt (Filter mit endlicher Impulsantwort – Wikipedia
). Die Eingangswerte des Signals x[t] durchlaufen im Takt der Abtastung der Reihe nach eine Sequenz von Speicherstellen. Ähnlich wie bei einem Schieberegister oder einem FiFo-Speicher (first in, first out). In einem Signalprozessor oder in einem Rechner wird man wohl eher einen Ringpuffer verwenden (Warteschlange (Datenstruktur) – Wikipedia
). In diesem Filter ist also ab dem aktuellen Zeitpunkt eine gewisse Vergangenheit des Signals x[t] gespeichert. Das Ausgangssignal y[t] erhält man, indem man das Eingangssigal sowie sämtliche Speicherinhalte mit einem zugehörigen Koeffizienten b[i] multipliziert und die Ergebnisse sodann aufaddiert:
Quelle: By BlanchardJ - Own work, Public Domain, File:FIR Filter.svg
Wenn man an einer Stelle i des FIR-Filters den Filterkoeffizienten b[i] auf einen Wert ungleich Null setzt (den oben erwähnten Übertragungsfaktor des Echo-Pfads) und alle anderen Filterkoeffizienten löscht, liefert dieses Filter am Ausgang ein zeitverzögertes Signal des Eingangs mit passender Amplitude, welches dem Echo entspricht.
Wie bestimmt man nun diese Filterkoeffizienten des FIR-Filters?
In der Theorie:
Man sendet einen Einheitsimpuls. Die Filterkoeffizienten setzt man dann gleich der empfangenen Impulsantwort (Impulsantwort – Wikipedia
). Man hat sozusagen dann Markierungen an den Stellen des FIR-Filters, welche den Laufzeiten der Echos entsprechen. Ja, das alles funktioniert auch bei mehreren Echos.
In der tatsächlichen Realisierung:
Man verwendet das Sprachsignal. Und man berechnet ständig im Takt der Verarbeitung für sämtliche Filterkoeffizienten b[i] des FIR-Filters neue Werte, indem man sie ein bisschen korrigiert:
für i := 0 bis n
b[i, t+Δt] := b[i,t] + μ ⋅ (y[t] - z[t]) ⋅ s[i,t]
Erläuterungen:
y[t] ist das über die Leitung ankommende Echo
z[t] ist das vom FIR-Filter gelieferte Korrektursignal zum Zeitpunkt t
s[i,t] ist der gespeicherte Wert im FIR-Filter an der Stelle i zum Zeitpunkt t
μ ist ein Faktor, der steuert, wie schnell das Verfahren konvergiert
Wie kann man sich nun die Funktionsweise dieses Verfahrens vorstellen?
In einem ersten Schritt kann man sich veranschaulichen, was passiert, wenn alle Filterkoeffizienten mit Null vorbesetzt sind und man als Testsignal einen Einheitsimpuls einspeist.
In der Realität hat man aber ein Sprachsignal. So wie ich es verstanden habe, kann man sich dann die Funktionsweise wie folgt erklären:
liegt für die Position i des FIR-Filters ein Echo vor, sind s[i] und das empfangene Echo y miteinander korreliert. Der Filterkoeffizient b[i] wird nachgeführt und er konvergiert.
liegt für die Position i des FIR-Filters kein Echo vor, sind s[i] und das empfangene Signal y nicht oder nur schwach miteinander korreliert. Gemäß der Rechenvorschrift dürfte dann der Filterkoeffizient b[i] um den Wert Null herum pendeln.
Da bin ich mit meinem Vorstellungsvermögen an der Grenze, ebenso mit meinem theoretischen Wissen. Aber dafür hat man ja hoch qualifizierte Wissenschaftler. Und die Praxis beweist, dass es funktioniert.
Ich hatte anfangs enorme Verständnisschwierigkeiten, was es mit dieser Echokompensation auf sich hat. Ebenso mein Kollege in der Hardware-Entwicklung und unser Chef.
Das Problem: man kann sich einfach nicht vorstellen, dass auch bei einem normalen Telefonhörer (sowohl an der Notrufsäule als auch beim Fahrdienstleiter) ein ziemliches akustisches Übersprechen zwischen dem Lautsprecher des Hörers und der Mikrofonkapsel des Hörers vorhanden ist.