Você está certo. Existem muitos métodos de cancelamento de eco, mas nenhum deles é exatamente trivial. O método mais genérico e popular é o cancelamento de eco por meio de um filtro adaptável. Em uma frase, o trabalho do filtro adaptativo é alterar o sinal que está sendo reproduzido, minimizando a quantidade de informações provenientes da entrada.
Filtros adaptativos
Um filtro adaptável (digital) é um filtro que altera seus coeficientes e, eventualmente, converge para uma configuração ideal. O mecanismo para essa adaptação funciona comparando a saída do filtro com a saída desejada. Abaixo está um diagrama de um filtro adaptativo genérico:
Como você pode ver no diagrama, o sinal é filtrado por (convolvido com) para produzir o sinal de saída . Subtraímos do sinal desejado para produzir o sinal de erro . Observe que é um vetor de coeficientes, não um número (portanto, não escrevemos ). Como ele altera todas as iterações (todas as amostras), subscrevemos a coleção atual desses coeficientes com . Depois que é obtido, usamos-o para atualizar→ w n d [ n ] d [ n ] d [ n ] e [ n ] → w n w [ n ] n e [ n ] → w n → w n d [ n ] d [ n ]x [ n ]W⃗ nd^[ n ]d^[ n ]d[ n ]e [ n ]W⃗ nw [ n ]ne [ n ]W⃗ npor um algoritmo de atualização de escolha (mais sobre isso posteriormente). Se entrada e saída satisfizerem um relacionamento linear que não muda ao longo do tempo e com um algoritmo de atualização bem projetado, acabará convergindo para o filtro ideal e seguirá de perto .W⃗ nd^[ n ]d[ n ]
Cancelamento de eco
O problema do cancelamento de eco pode ser apresentado em termos de um problema de filtro adaptativo, no qual estamos tentando produzir alguma saída ideal conhecida dada uma entrada, encontrando o filtro ideal que satisfaça a relação entrada-saída. Em particular, quando você pega o fone de ouvido e diz "olá", ele é recebido do outro lado da rede, alterado pela resposta acústica de uma sala (se estiver sendo reproduzida em voz alta) e retornado à rede para voltar. para você como um eco. No entanto, como o sistema sabe como era o "hello" inicial e agora sabe como é o "hello" reverberado e atrasado, podemos tentar adivinhar qual é a resposta da sala usando um filtro adaptável. Então podemos usar essa estimativa, envolva todos os sinais recebidos com essa resposta de impulso (o que nos daria a estimativa do sinal de eco) e subtraia-o do que entra no microfone da pessoa que você chamou. O diagrama abaixo mostra um cancelador de eco adaptável.
Neste diagrama, seu sinal de "olá" é . Depois de ser tocado por um alto-falante, ricochetear nas paredes e ser pego pelo microfone do dispositivo, ele se torna um sinal de eco . O filtro adaptativo recebe e produz a saída que após a convergência deve rastrear idealmente o sinal eco . Portanto, deve eventualmente chegar a zero, dado que ninguém está falando do outro lado da linha, o que geralmente acontece quando você acabou de pegar o fone de ouvido e disse: "Olá". Isso nem sempre é verdade, e algumas considerações de casos não ideais serão discutidas mais adiante.x [ n ]d[ n ]W⃗ nx [ n ]y[ n ]d[ n ]e [ n ] = d[ n ] - y[ n ]
Matematicamente, o filtro adaptativo NLMS (quadrado mínimo médio normalizado) é implementado da seguinte maneira. Atualizamos todas as etapas usando o sinal de erro da etapa anterior. Ou seja, vamosW⃗ n
x⃗ n= ( x [ n ] , x [ n - 1 ] , … , x [ n - N+ 1 ] )T
onde é o número de toques (amostras) em . Observe quais amostras de estão na ordem inversa. E deixarNW⃗ nx
W⃗ n= ( w [ 0 ] , w [ 1 ] , … , x [ N( 1 ) )T
Então calculamos via (por convolução) localizando o produto interno (produto escalar se ambos os sinais são reais) de e :y[ n ]= x⃗ n= w⃗ n
y[ n ] = x⃗ TnW⃗ n= x⃗ n⋅ w⃗ n
Agora que podemos calcular o erro, estamos usando um método de descida de gradiente normalizado para minimizá-lo. Obtemos a seguinte regra de atualização para :W⃗
W⃗ n + 1= w⃗ n+ μ x⃗ ne [ n ]x⃗ Tnx⃗ n= w⃗ n+ μ x⃗ nx⃗ TnW⃗ n- d[ n ]x⃗ Tnx⃗ n
onde é o tamanho da etapa de adaptação tal que .0 ≤ μ ≤ 2μ0 ≤ μ ≤ 2
Aplicações e desafios da vida real
Várias coisas podem apresentar dificuldades com esse método de cancelamento de eco. Antes de tudo, como mencionado anteriormente, nem sempre é verdade que a outra pessoa fica em silêncio enquanto recebe seu sinal de "olá". Pode ser mostrado (mas está além do escopo desta resposta) que, em alguns casos, ainda pode ser útil estimar a resposta ao impulso enquanto houver uma quantidade significativa de entrada presente na outra extremidade da linha, porque o sinal e o eco de entrada são assumiu ser estatisticamente independente; portanto, minimizar o erro ainda será um procedimento válido. Em geral, é necessário um sistema mais sofisticado para detectar bons intervalos de tempo para a estimativa do eco.
Por outro lado, pense no que acontece quando você está tentando estimar o eco quando o sinal recebido é aproximadamente silencioso (ruído, na verdade). Na ausência de um sinal de entrada significativo, o algoritmo adaptativo diverge e rapidamente começa a produzir resultados sem sentido, culminando eventualmente em um padrão aleatório de eco. Isso significa que também precisamos levar em consideração a detecção de fala . Os canceladores de eco modernos se parecem mais com a figura abaixo, mas a descrição acima é o ponto principal.
Há muita literatura sobre filtros adaptativos e cancelamento de eco por aí, além de algumas bibliotecas de código aberto nas quais você pode acessar.