Quali metodi possono essere utilizzati per identificare e rimuovere l'eco da un sistema audio?


14

sfondo

Sto progettando un sistema che avrà un singolo piccolo microfono e altoparlanti per l'uso in un'impostazione del tipo di telefono. L'esempio più semplice che posso dare è una conversazione su Skype in cui stai usando gli altoparlanti del tuo computer e un microfono da scrivania.

Sono preoccupato che l'audio degli altoparlanti venga raccolto dal microfono e rispedito alla persona originale. Ho sentito che questo accadeva sempre nei primi giorni delle conversazioni VoIP, ma non lo sentivo quasi più.

La mia ipotesi è che i gruppi abbiano escogitato dei modi per annullare l'eco, ma come lo fanno?

approcci

Il mio primo pensiero è stato semplicemente sottrarre il segnale inviato agli altoparlanti dal segnale del microfono, tranne che per questo metodo devi preoccuparti del ritardo. Non sono sicuro di come determinare il ritardo senza una sorta di pre-calibrazione, che vorrei evitare. C'è anche il problema di quanto ridimensionare il segnale prima di sottrarlo.

Successivamente ho pensato di fare una sorta di correlazione tra il segnale dell'altoparlante e il segnale del microfono al fine di determinare la probabilità che il segnale del microfono fosse un'eco oltre a poter determinare il ritardo effettivo. Questo metodo è stato in grado di funzionare correttamente quando stavo giocando con alcuni segnali registrati, ma sembrava esserci una latenza molto ampia nel calcolare la correlazione per essere utile nel sistema in tempo reale. Inoltre, il volume regolabile degli altoparlanti ha reso difficile determinare se qualcosa fosse effettivamente correlato o meno.

Il mio prossimo pensiero che ci deve essere qualcuno su Internet che lo ha già fatto con successo, ma non ha trovato grandi esempi. Quindi vengo qui per vedere quali metodi possono essere utilizzati per risolvere questo tipo di problema.


1
La cancellazione dell'eco acustico è una vasta area tematica con molti libri e decenni di articoli di ricerca sull'argomento. Ecco una
domanda

1
@ hotpaw2 Non so perché la cancellazione dell'eco acustica nel collegamento Java non sia selezionabile.
Mark Booth,

per favore, suggeriscimi, sto provando a cancellare l'eco che è la presenza in un discorso, l'input a un singolo microfono in un auditorium. lo sto provando come hai menzionato il filtro adattivo, per questo stai dando un segnale di riferimento per quanto riguarda il discorso finale. ma non ho qui un segnale di riferimento. il mio segnale è l'eco del segnale originale che sta ricevendo diciamo 500ms con il segnale dell'altoparlante ad un microfono.

Risposte:


15

Hai ragione. Esistono molti metodi di cancellazione dell'eco, ma nessuno di questi è esattamente banale. Il metodo più generico e popolare è la cancellazione dell'eco tramite un filtro adattivo. In una frase, il lavoro del filtro adattativo è quello di alterare il segnale che sta riproducendo minimizzando la quantità di informazioni provenienti dall'input.

Filtri adattivi

Un filtro adattivo (digitale) è un filtro che modifica i suoi coefficienti e alla fine converge in una configurazione ottimale. Il meccanismo di questo adattamento funziona confrontando l'output del filtro con l'output desiderato. Di seguito è riportato un diagramma di un filtro adattivo generico:

inserisci qui la descrizione dell'immagine

Come si può vedere dallo schema, il segnale è filtrato da (convoluta con) w n per produrre segnale di uscita d [ n ] . Abbiamo poi sottrarre d [ n ] dal desiderato segnale ). Poiché cambia ogni iterazione (ogni campione), sottoscriviamo la raccolta corrente di questi coefficienti con n . Una volta ottenuto e [ n ] lo usiamo per aggiornare w nX[n]wnd^[n]d^[n] per produrrel'erroresegnale e [ n ] . Nota chew n è un vettore di coefficienti, non un numero (quindi non scriviamo w [ n ]d[n]e[n]wnw[n]ne[n]wnda un algoritmo di aggiornamento di scelta (ne parleremo più avanti). Se input e output soddisfano una relazione lineare che non cambia nel tempo e offre un algoritmo di aggiornamento ben progettato,finirà per convergere al filtro ottimale e d [n]saranno strettamente seguentid[n].wnd^[n]d[n]

Eliminazione dell'eco

Il problema della cancellazione dell'eco può essere presentato in termini di un problema di filtro adattivo in cui stiamo provando a produrre un output ideale noto dato un input trovando il filtro ottimale che soddisfa la relazione input-output. In particolare, quando prendi l'auricolare e dici "ciao", viene ricevuto dall'altra parte della rete, alterato dalla risposta acustica di una stanza (se riprodotta ad alta voce) e reimmesso nella rete per tornare indietro a te come un'eco. Tuttavia, poiché il sistema sa come suonava il "ciao" iniziale e ora sa come suona il "ciao" riverberato e ritardato, possiamo provare a indovinare quale sia la risposta della stanza usando un filtro adattivo. Quindi possiamo usare quella stima, contorta tutti i segnali in arrivo con quella risposta all'impulso (che ci darebbe la stima del segnale dell'eco) e lo sottrarrà da ciò che entra nel microfono della persona che hai chiamato. Lo schema seguente mostra un cancellatore di eco adattivo.

inserisci qui la descrizione dell'immagine

In questo diagramma, il segnale "ciao" è . Dopo essere stato riprodotto da un altoparlante, rimbalzare dalle pareti e essere raccolto dal microfono del dispositivo diventa un segnale eco d [ n ] . Il filtro adattivo w n accetta x [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

Applicazioni e sfide della vita reale

Diverse cose possono presentare difficoltà con questo metodo di cancellazione dell'eco. Prima di tutto, come accennato in precedenza, non è sempre vero che l'altra persona tace mentre riceve il segnale di "ciao". Si può dimostrare (ma va oltre lo scopo di questa risposta) che in alcuni casi può essere ancora utile stimare la risposta all'impulso mentre sull'altra estremità della linea è presente una quantità significativa di input perché il segnale di input e l'eco sono assunto statisticamente indipendente; pertanto, minimizzare l'errore sarà comunque una procedura valida. In generale, è necessario un sistema più sofisticato per rilevare buoni intervalli di tempo per la stima dell'eco.

D'altra parte, pensa a cosa succede quando stai cercando di stimare l'eco quando il segnale ricevuto è approssimativamente silenzioso (rumore, in realtà). In assenza di un segnale di input significativo, l'algoritmo adattivo divergerà e inizierà rapidamente a produrre risultati insignificanti, culminando infine in un picchiettio di eco casuale. Ciò significa che dobbiamo anche prendere in considerazione il rilevamento del parlato . I cancellatori di eco moderni assomigliano più alla figura in basso, ma la descrizione sopra è il jist di esso.

inserisci qui la descrizione dell'immagine

Ci sono molte pubblicazioni su entrambi i filtri adattativi e la cancellazione dell'eco là fuori, così come alcune librerie open source in cui puoi attingere.


2
"il lavoro del filtro adattivo è al segnale"? Hai accidentalmente una parola.
endolito

@endolith Grazie. Non riuscivo a pensare a un bel modo di aggiustarlo, quindi ho usato l' alter . Puoi modificarlo con qualcosa di più interessante. =)
Phonon

3

Non sono sicuro di come determinare il ritardo senza una sorta di pre-calibrazione

Vorrei iniziare modificando un algoritmo di fingerprinting acustico come quello usato da Shazam .

I tuoi requisiti sono simili a quelli di Shazam in molti modi (le funzionalità devono sopravvivere a un algoritmo di compressione progettato per la telefonia, passano anche attraverso microfoni di bassa qualità), quindi potresti probabilmente usare le stesse funzionalità (massimi locali di potenza nello spazio tempo / frequenza) potresti voler aumentare la risoluzione temporale a scapito della risoluzione in frequenza.

C'è anche il problema di quanto ridimensionare il segnale prima di sottrarlo.

Il ridimensionamento uniforme non sarà quasi certamente abbastanza preciso. Dovresti fare qualcosa come approssimare la risposta in frequenza con un filtro FIR quindi passare il tuo segnale mic (ritardato) attraverso il filtro invertito prima di sottrarlo dal segnale ricevuto.


Le impronte digitali di Shazam non possono produrre un'accurata approssimazione del ritardo. Utilizza molti complessi processi di estrazione delle caratteristiche per confrontare campioni audio, non tutti basati sul tempo.
Phonon,

@Phonon, Shazam potrebbe utilizzare algoritmi aggiuntivi ora, ma quello nel documento collegato è basato sul tempo e fornisce una buona stima del ritardo.
finnw,

Forse qualcosa come la correlazione incrociata degli spettrogrammi inviati e ricevuti ti direbbe il ritardo. Dovrebbe essere resistente agli effetti del filtraggio e al rumore aggiunto
endolito
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.