Mit welchen Methoden kann das Echo eines Audiosystems identifiziert und entfernt werden?


14

Hintergrund

Ich entwerfe ein System, das ein einzelnes kleines Mikrofon und Lautsprecher zur Verwendung in einer Telefontypeinstellung enthält. Das einfachste Beispiel, das ich geben kann, ist ein Skype-Gespräch, bei dem Sie die Lautsprecher Ihres Computers und ein Desktop-Mikrofon verwenden.

Ich mache mir Sorgen, dass der Ton aus den Lautsprechern vom Mikrofon aufgenommen und an die ursprüngliche Person zurückgesendet wird. Früher hörte ich das die ganze Zeit in den Anfängen von VoIP-Gesprächen, hörte es aber kaum noch.

Ich gehe davon aus, dass Gruppen Wege gefunden haben, um das Echo zu beseitigen, aber wie machen sie das?

Nähert sich

Mein erster Gedanke war, einfach das an die Lautsprecher gesendete Signal vom Mikrofonsignal zu subtrahieren, außer bei dieser Methode muss man sich mit der Verzögerung befassen. Ich bin mir nicht sicher, wie ich die Verzögerung ermitteln soll, ohne eine Vorkalibrierung vorzunehmen, die ich vermeiden möchte. Es gibt auch die Frage, um wie viel das Signal skaliert werden muss, bevor es subtrahiert wird.

Als nächstes dachte ich darüber nach, eine Art Korrelation zwischen dem Lautsprechersignal und dem Mikrofonsignal herzustellen, um die Wahrscheinlichkeit zu bestimmen, dass das Mikrofonsignal ein Echo ist, und um die tatsächliche Verzögerung bestimmen zu können. Diese Methode funktionierte einwandfrei, wenn ich mit einigen aufgezeichneten Signalen spielte, aber es schien eine viel zu große Latenz bei der Berechnung der Korrelation zu geben, die im Echtzeitsystem nützlich ist. Auch die einstellbare Lautstärke der Lautsprecher machte es schwierig festzustellen, ob tatsächlich etwas korreliert war oder nicht.

Mein nächster Gedanke war, dass es jemanden im Internet geben muss, der dies zuvor mit Erfolg getan hat, aber keine großartigen Beispiele gefunden hat. Ich komme hierher, um zu sehen, mit welchen Methoden diese Art von Problem gelöst werden kann.


1
Acoustic Echo Cancellation ist ein großes Themengebiet mit vielen Büchern und jahrzehntelangen Forschungsarbeiten zu diesem Thema. Hier ist eine SO Q & A zum Thema: stackoverflow.com/questions/3403152/acoustic-echo-cancellation-in-java
hotpaw2

1
@ hotpaw2 Nicht sicher, warum Ihre akustische Echounterdrückung in Java- Link nicht anklickbar war.
Mark Booth

Bitte schlagen Sie mir vor, ich versuche, das Echo zu löschen, das in einer Rede vorhanden ist und in ein einzelnes Mikrofon in einem Auditorium eingegeben wird. Ich versuche es, wie Sie Adaptive Filter erwähnt haben, dafür geben Sie Referenzsignal als Ferngespräch. aber ich habe hier kein referenzsignal. Mein Signal ist das Echo des Originalsignals, das beispielsweise 500 ms mit dem Lautsprechersignal eines Mikrofons empfängt.

Antworten:


15

Du hast Recht. Es gibt viele Methoden zur Echokompensation, aber keine ist genau trivial. Die allgemeinste und beliebteste Methode ist die Echokompensation über einen adaptiven Filter. In einem Satz besteht die Aufgabe des adaptiven Filters darin, das wiedergegebene Signal zu ändern, indem die vom Eingang kommende Informationsmenge minimiert wird.

Adaptive Filter

Ein adaptives (digitales) Filter ist ein Filter, das seine Koeffizienten ändert und schließlich zu einer optimalen Konfiguration konvergiert. Der Mechanismus für diese Anpassung arbeitet durch Vergleichen der Ausgabe des Filters mit einer gewünschten Ausgabe. Unten sehen Sie ein Diagramm eines generischen adaptiven Filters:

Bildbeschreibung hier eingeben

Wie man aus dem Diagramm sehen kann, wird das Signal wird gefiltert durch (konvolviert mit) W n zur Ausgangssignal erzeugen , d [ n ] . Wir haben dann subtrahieren d [ n ] aus dem gewünschten Signal d [ n ] , die zur Erzeugung Fehlersignal e [ n ] . Beachten Sie, dass w n ein Koeffizientenvektor ist, keine Zahl (daher schreiben wir nicht w [ n ]).x[n]wnd^[n]d^[n]d[n]e[n]wnw[n]). Da sich jede Iteration (jede Stichprobe) ändert, wird die aktuelle Sammlung dieser Koeffizienten mit . Sobald e [ n ] erhalten ist, verwenden wir es, um w n durch einen Aktualisierungsalgorithmus nach Wahl zu aktualisieren (dazu später mehr). Wenn der Eingang und Ausgang eine lineare Beziehung erfüllen , die einen gut gestalteten Update - Algorithmus nicht im Laufe der Zeit ändern und gegeben, w n schließlich zum optimalen Filter konvergieren und d [ n ] wird in enger Anlehnung an d [ n ] .ne[n]wnwnd^[n]d[n]

Echounterdrückung

Das Problem der Echokompensation kann in Form eines adaptiven Filterproblems dargestellt werden, bei dem versucht wird, eine bekannte ideale Ausgabe bei gegebener Eingabe zu erzeugen, indem das optimale Filter gefunden wird, das die Eingabe-Ausgabe-Beziehung erfüllt. Insbesondere wenn Sie sich Ihr Headset schnappen und "Hallo" sagen, wird es am anderen Ende des Netzwerks empfangen, durch die akustische Reaktion eines Raums (wenn es laut wiedergegeben wird) geändert und zum Zurückkehren in das Netzwerk eingespeist für dich als echo. Da das System jedoch weiß, wie das ursprüngliche "Hallo" geklungen hat und jetzt weiß, wie das nachhallende und verzögerte "Hallo" geklungen hat, können wir versuchen, zu erraten, wie diese Raumantwort einen adaptiven Filter verwendet. Dann können wir diese Schätzung verwenden, Falte alle eingehenden Signale mit dieser Impulsantwort (die uns die Schätzung des Echosignals geben würde) und subtrahiere sie von dem, was in das Mikrofon der von dir angerufenen Person eingeht. Das folgende Diagramm zeigt einen adaptiven Echokompensator.

Bildbeschreibung hier eingeben

x[n]d[n]wnx[n]y[n]d[n]e[n]=d[n]-y[n]

wn

xn=(x[n],x[n-1],,x[n-N+1])T

Nwnx

wn=(w[0],w[1],,x[N-1])T

y[n]=xn=wn

y[n]=xnTwn=xnwn

w

wn+1=wn+μxne[n]xnTxn=wn+μxnxnTwn-d[n]xnTxn

μ0μ2

Reale Anwendungen und Herausforderungen

Bei dieser Methode der Echokompensation können verschiedene Probleme auftreten. Zunächst ist es, wie bereits erwähnt, nicht immer richtig, dass die andere Person still ist, während sie Ihr „Hallo“ -Signal empfängt. Es kann gezeigt werden (liegt jedoch außerhalb des Rahmens dieser Antwort), dass es in einigen Fällen immer noch nützlich sein kann, die Impulsantwort zu schätzen, während am anderen Ende der Leitung eine erhebliche Menge an Eingang vorhanden ist, da Eingangssignal und Echo vorhanden sind als statistisch unabhängig angenommen; Daher ist das Minimieren des Fehlers immer noch eine gültige Prozedur. Im Allgemeinen wird ein ausgefeilteres System benötigt, um gute Zeitintervalle für die Echoschätzung zu erfassen.

Überlegen Sie sich andererseits, was passiert, wenn Sie versuchen, das Echo zu schätzen, wenn das empfangene Signal ungefähr lautlos ist (tatsächlich Rauschen). In Abwesenheit eines aussagekräftigen Eingangssignals divergiert der adaptive Algorithmus und erzeugt schnell bedeutungslose Ergebnisse, die schließlich in einem zufälligen Echo-Muster gipfeln. Dies bedeutet, dass wir auch die Spracherkennung berücksichtigen müssen . Moderne Echokompensatoren ähneln eher der Abbildung unten, aber die obige Beschreibung ist das Wesentliche.

Bildbeschreibung hier eingeben

Es gibt reichlich Literatur zu adaptiven Filtern und zur Echounterdrückung sowie einige Open-Source-Bibliotheken, auf die Sie zugreifen können.


2
msgstr "die Aufgabe des adaptiven Filters ist das Signal"? Sie versehentlich ein Wort.
Endolith

@ endolith Danke. Ich konnte mir keine gute Möglichkeit vorstellen, das Problem zu beheben, also habe ich alter verwendet . Sie können es gerne mit etwas Interessanterem bearbeiten. =)
Phonon

3

Ich bin mir nicht sicher, wie ich die Verzögerung ermitteln soll, ohne dass eine Vorkalibrierung erforderlich ist

Ich würde damit beginnen, einen akustischen Fingerabdruck-Algorithmus zu modifizieren, wie er von Shazam verwendet wird .

Ihre Anforderungen sind in vielerlei Hinsicht ähnlich wie die von Shazam (die Funktionen müssen einen für Telefonie konzipierten Komprimierungsalgorithmus überstehen, sie werden auch von Mikrofonen geringer Qualität unterstützt), sodass Sie wahrscheinlich dieselben Funktionen (lokale Leistungsmaxima im Zeit- / Frequenzraum) verwenden können Möglicherweise möchten Sie die Zeitauflösung auf Kosten der Frequenzauflösung erhöhen.

Es gibt auch die Frage, um wie viel das Signal skaliert werden muss, bevor es subtrahiert wird.

Eine einheitliche Skalierung ist mit ziemlicher Sicherheit nicht genau genug. Sie müssten etwa den Frequenzgang mit einem FIR-Filter approximieren und dann Ihr (verzögertes) Mikrofonsignal durch das invertierte Filter leiten, bevor Sie es vom empfangenen Signal subtrahieren.


Shazam-Fingerabdruck kann keine genaue Verzögerungsannäherung erzeugen. Es werden viele komplexe Verfahren zum Extrahieren von Features zum Vergleichen von Audio-Samples verwendet, die nicht alle zeitbasiert sind.
Phonon

@Phonon, Shazam verwendet möglicherweise jetzt zusätzliche Algorithmen, aber der im verlinkten Artikel ist zeitbasiert und liefert eine gute Schätzung der Verzögerung.
3.

Vielleicht sagt Ihnen so etwas wie eine Kreuzkorrelation der gesendeten und empfangenen Spektrogramme die Verzögerung. Sollte resistent gegen Filtereffekte und zusätzliches Rauschen sein
Endolith
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.