Você está na página 1de 79

Implementao de Algoritmo Set-Membership para Cancelamento de Eco Acstico

Candidato: Marcos Vainer Loeff Orientador: Vtor H. Nascimento NUSP: 5432895

Sumrio 1. Introduo 1.1 Objetivos 1.2 Organizao do Trabalho 1.3 Tipos de Eco 1.4 Controlando o Eco 2 Conceitos Bsicos 2.1 A resposta Impulsiva w(n) 2.2 Filtros 3 Filtros Adaptivos 3.1 Algoritmo do gradiente estocstico Least Mean Squares 3.2 Deteco Double-Talk 3.3 Algoritmo Set-Membership 3.4 Algoritmo Set-Membership Normalizado 3.5 Algoritmo Set-Membership utilizando combinao convexa de 2 filtros 4 Simulaes no Matlab 4.1 Exerccio prtico sobre o algoritmo LMS utilizando senides 4.2 Exerccio prtico sobre o algoritmo LMS utilizando amostras de som 4.3 Introduzindo o algoritmo double-talk 4.4 Introduzindo o algoritmo set-membership (SMF) 4.5 Introduzindo o algoritmo da combinao convexa de 2 filtros (SMFD) 4.6 Teste utilizando rudo branco para o SMF 4.7 Teste utilizando rudo branco para O SMFD 4.8 Teste final 5 Programao no Visual DSP++ 5.1 Introduo 5.2 Instalao do hardware 5.3 Mapeamento das entradas e sadas 5.4 Programao do mixer 5.5 Primeiros testes 5.6 Detector de double-talk 5.7 Contagem dos ciclos 5.8 Modelagem da resposta impulsiva do ambiente 5.9 Nmero de coeficientes do filtro 5.10 Assembly 5.11 Teste final: comparao entre o erro quadrtico do SMF e SMFD 6 Concluso Bibliografia

1.

Introduo

O cancelamento de eco uma tcnica de processamento de sinais que remove um sinal no desejado de uma mistura de sinais de udio. Um exemplo, em que necessrio o uso da tcnica de cancelamento de eco, ocorre na seguinte situao: Imagine um usurio local A, conversando com um usurio remoto B numa reunio de teleconferncia, ou seja, o participante B est usando um sistema viva-voz. . Quando um participante local A fala no microfone, esse som ser reproduzido no alto-falante do usurio B. Entretanto, esse som tambm captado pelo seu microfone. Caso no exista um cancelador de eco no sistema de comunicao, ento o participante A escutaria verses atrasadas de sua prpria voz, prejudicando de maneira determinante a qualidade da comunicao. A tcnica de cancelamento de eco tem como objetivo remover esses ecos indesejados, melhorando a qualidade da comunicao. Para isto, o sistema utiliza tcnicas de filtragem adaptativa, tentando estimar a resposta impulsiva do ambiente. Caso o sistema consiga estimar com preciso essa resposta impulsiva, o eco poder ser estimado com preciso, e se esse eco estimado for subtrado do sinal original, ento o sinal resultante ter o eco cancelado com sucesso. A figura abaixo ilustra o que foi descrito at agora:

Figura 1.1: Exemplo de eco

Atualmente os principais desafios desta tcnica de cancelamento de eco acstico so quanto velocidade com que os filtros so capazes de se adaptar s mudanas da resposta impulsiva do ambiente e ao custo computacional (isto , memria e velocidade de processamento do processador). Alm disso, existem algoritmos que apresentam um melhor desempenho que outros, como veremos neste relatrio.

Este captulo aborda os conceitos relativos ao eco enquanto que nos prximos captulos estudaremos os algoritmos existentes para implementao de um cancelador de eco em tempo real. 1.1 Objetivos do Trabalho Neste trabalho de que Iniciao Cientfica, prope-se a implementao de filtros set-membership utilizando combinao convexa de dois filtros (esta tcnica e suas vantagens sero descritas nos prximos captulos) em uma placa para processamento digital de sinais, para poder testar seu desempenho, e levantar subsdios para a sua melhoria. Esto disponveis duas placas, ambas usando processadores da Analog Devices: um Blackfin ADSP-533 (ponto fixo), e um SHARC ADSP-21363 (ponto flutuante). Este trabalho complementa a dissertao de mestrado [1], e faz parte do projeto Processamento de Sinais para Aplicaes em udio, apoiado atualmente pela Fapesp com o auxlio 2008/04828-5. Para atingir esse objetivo necessrio atingir vrias metas como: - Conhecimento de filtros adaptativos e canceladores de eco em geral - Conhecimento e domnio da linguagem do Matlab - Conhecimento e domnio da linguagem C ou C++, - Conhecimento e domnio sobre a utilizao do programa Visual DSP++, que o programa responsvel por programar a placa Blackfin ADSP-533. - Adquirir experincia e conhecimento de pesquisa e desenvolvimento, que somente um estgio pode oferecer (na graduao), proporcionando uma formao mais completa, alm de preparar melhor o futuro engenheiro para o concorrido mercado de trabalho. 1.2 Organizao Dado que o trabalho trata do cancelamento de eco acstico em sistemas de telecomunicaes, comeamos por descrever os tipos de eco existentes neste tipo de aplicao (seo 1.3, apresentando a seguir algumas caractersticas destes tipos de eco). Na seo 1.4 estudamos as formas de controle e cancelamento de eco. No captulo 2 apresentamos os conceitos bsicos do cancelamento de eco por filtragem adaptativa. Comeamos estudando as caractersticas da resposta impulsiva do caminho acstico (seo 2.1) e ento introduzimos, em linhas gerais, a forma de obteno de uma estimativa desta resposta impulsiva (seo 2.2). No captulo 3 descrevemos de maneira mais terica a tcnica de filtragem adaptativa e apresentamos os principais algoritmos relacionados.

No captulo 4 descrevemos todos os testes realizados com o simulador Matlab cujo objetivo poder entender melhor o funcionamento dos diversos algoritmos, estudando seu comportamento em uma situao controlada. Assim possvel estudar a relao entre os parmetros dos canceladores e suas caractersticas mais importantes, como velocidade de convergncia, atenuao, e acompanhamento de respostas ao impulso variantes no tempo. No captulo 5 descrevemos todos os passos realizados com o programa Visual DSP++, at atingir o objetivo final que a programao do software de cancelamento de eco na placa ADSP-BF533. No captulo 6 so apresentadas as concluses deste trabalho.

1.3 Tipos de Eco Na rea de telecomunicaes existem dois tipos de eco: acstico e o de linha, principalmente em sistemas de telefonia. O eco de linha no ser abordado neste relatrio, apenas o eco acstico. 1.3.1 Acstico O eco acstico um problema audioconferncia. Vejamos um exemplo: muito comum em sistemas de

Em uma conferncia existe um participante local que chamaremos de Ana, e um participante remoto, que chamaremos de Paulo. Por exemplo: 1. Ana fala no microfone. 2. O alto-falante emite esse som e Paulo ouve a voz de Ana. 3. O som emitido captado pelo microfone usado por Paulo, criando eco acstico. 4. Ana escuta verses atrasadas de sua prpria voz.

O fenmeno acima descrito causado principalmente em trs situaes 1. O microfone de Paulo tem uma sensibilidade muito alta 2. O alto-falante de Paulo est em um volume muito elevado 3. O microfone e o alto-falante de Paulo esto muito prximos entre si. A figura abaixo mostra o que ocorre no ambiente em que Paulo se encontra:

Vamos analisar agora o que ocorre com o udio e o eco em dois aparelhos de udio-conferncia que utilizamos com bastante frequncia: o fone de ouvido e o viva-voz. 1.3.2 Fones de ouvido Existem inmeras maneiras de se evitar o problema do eco, alm do cancelador de eco. A mais simples isolar o microfone do alto-falante, usando um fone de ouvido.

Figura 1.2: Fone de ouvido

1.3.3 Viva-voz Os sistemas de viva-voz so aqueles em que tanto o microfone quanto o alto-falante esto longe do usurio. Dessa forma, o problema da existncia do eco acstico comum nesse tipo de sistema de telefonia, uma vez que o microfone deve ser sensvel aos sinais de udio, enquanto que o alto-falante deve estar num volume elevado, para que o usurio consiga ouvir e falar sem dificuldade. Nesse caso, o problema do eco torna-se evidente. A figura abaixo mostra um tpico viva-voz cujo microfone est muito prximo de seu alto-falante.

Figura 1.3: Exemplo de viva-voz

1.3.4 Atraso do eco O tempo de atraso o tempo entre o som sair da boca de um usurio ou de um dispositivo de sada, refletir em alguns objetos ou paredes, e voltar ao ouvido ou a um microfone. A maioria das ondas sonoras do alto-falante para o microfone pode ser transmitida diretamente sem serem refletidas. Entretanto existe uma parcela que sofre reflexes, e que esto diretamente relacionadas ao conceito de atraso do eco. Vejamos as possveis situaes que estes atrasos podem ocorrer (as situaes so classificadas dependendo do tempo): - Unidades de milissegundo: Nesse caso, a diferena entre a fala e o eco muito pequena, de modo, que o crebro humano no capaz de perceber a existncia de eco e, portanto, no gera distrbio algum. - Poucas dezenas de milissegundos o eco percebido, mas de um modo sutil. O incmodo considerado pequeno. - Vrias dezenas de milissegundos ou mais percebe-se claramente o eco, de tal forma que causa incmodo ao usurio. A durao do atraso do eco proporcional distncia percorrida pela onda sonora. Entretanto, a amplitude dessa onda cai com a distncia percorrida. Portanto, quanto maior o trajeto dessas ondas sonoras, maior ser a durao do eco, mas menor ser sua potncia. importante mencionar que alm da distncia mencionada no pargrafo anterior, o nmero de reflexes tambm um fator que altera a amplitude da onda. Quanto maior o nmero de reflexes, menor ser a amplitude. O usurio consegue perceber a existncia de eco quando seu atraso ultrapassa o valor de 17ms, geralmente. Entretanto quanto maior este valor, maior ser o incomodo causado para o usurio, e maior ser a necessidade de eliminar este eco. importante mencionar que os ecos com atrasos grandes precisam de amplitude menor para nos incomodar do que ecos com atrasos pequenos. 1.3.5 Caractersticas do eco Basicamente existem duas principais caractersticas do eco acstico: No Estacionaridade Para o eco acstico, podemos dizer que o ambiente apresenta uma resposta impulsiva que varia constantemente. Isso pode ser explicado, pois num ambiente existem inmeros objetos que se movem constantemente e que so responsveis por refletirem ondas sonoras. Um

exemplo de mudana de ambiente que afeta significativamente a resposta impulsiva a abertura de uma. Linearidade O eco acstico pode ser aproximado como um fenmeno linear caso os alto-falantes sejam de boa qualidade.

1.4 Controlando o eco Agora que j sabemos as caractersticas do eco acstico, vamos analisar duas solues para resolver esse problema. A primeira modificar as caractersticas do ambiente, ou seja, sua resposta impulsiva (veremos mais detalhadamente na seo 2.1). A segunda o cancelador de eco, que funciona atravs de tcnicas de processamento de sinais e filtragem adaptativa. 1.4.1 Controle acstico A soluo nesse caso basicamente diminuir o acoplamento acstico entre o microfone e o alto-falante do aparelho responsvel por realizar a ligao ou a udio - conferncia. Para isso, algumas opes so: - Afastar o alto-falante do microfone, de maneira que um no consiga interferir no outro. O exemplo do fone de ouvido ilustra bem essa recomendao, pois embora o alto-falante e o microfone se localizem prximos fisicamente, o som do fone de ouvido no consegue chegar at o microfone com muita intensidade. - Utilizando um microfone com uma maior direcionabilidade de forma que os sinais de udio que o alto-falante emite no consigam ser captados facilmente pelo microfone. 1.4.2 Cancelador de Eco O cancelador de eco possui o objetivo de eliminar o sinal do eco existente na linha. Descreveremos seu funcionamento de maneira introdutria, pois os prximos captulos tero o nico objetivo de mostrar detalhadamente o funcionamento de um cancelador de eco comum. A partir de um sinal recebido em A, e de um sinal recebido em B, o cancelador de eco, utilizando tcnicas de filtragem adaptativa, tenta estimar a resposta impulsiva. Com os coeficientes calculados possvel calcular o eco

estimado, que subtrado do sinal que antes deveria ter eco. Portanto, quanto melhor for essa estimao, melhor ser a eliminao do eco. A figura abaixo descreve esse processo.

Figura 1.4: Exemplo de um cancelador de eco

Foi mencionado no pargrafo anterior que se utilizaria a tcnica de filtragem adaptativa. Isso pode ser explicado porque, como vimos, uma caracterstica do atraso de ecos a elevada variabilidade da resposta impulsiva (caractersticas do ambiente). A filtragem adaptativa capaz de acompanhar em tempo real essa mudana das caractersticas do ambiente, dependendo do poder computacional e dos algoritmos que o sistema possui.

2. Conceitos Bsicos
A figura 2.1 ilustra um esquema tpico de um cancelador de eco acstico. Vamos definir agora todas as variveis envolvidas e todas as suas funes. Todas as variveis dependem de n, que indica o instante de tempo. O sinal captado pelo microfone do usurio A u(n), w(n) a resposta impulsiva do ambiente do caminho acstico entre o alto-falante e o microfone, y(n) o eco acstico, v(n)=s(n)+r(n), em que v(n) a soma do sinal de voz s(n) e o rudo ambiente r(n). Portanto, o sinal captado pelo microfone do usurio B ser d(n)= y(n)+ v(n).

Figura 2.1: Funcionamento de um cancelador de eco

Em relao parte referente ao cancelador de eco, temos que w(n) a resposta impulsiva estimada, y(n) o eco estimado, e o erro, que chamaremos de e(n), o sinal do microfone em B subtrado do eco estimado, ou seja, e(n) =d(n)-y(n) = v(n) +y(n) - y(n). importante mencionar que a ideia que o cancelador de eco consiga estimar a resposta impulsiva com preciso, ou seja, que w(n)=w(n), e caso isso ocorra teremos que y(n) = y(n), e finalmente e(n)= v(n). Note que nesse caso o erro, que o sinal enviado para o usurio A, somente possui o sinal v(n) que a fala do usurio e o rudo ambiente, ou seja, o eco foi totalmente cancelado. Quanto melhor for essa estimao, melhor ser o cancelamento de eco. Na verdade isso somente possvel porque a utilizao de uma aproximao linear suficiente para garantir uma atenuao adequada do eco. Como j foi mencionado, a resposta impulsiva w(n) no constante, e varia com o tempo.

Ento o principal desafio dos cancelador de eco estimar com preciso a resposta impulsiva acompanhando rapidamente suas variaes. 2.1 Resposta impulsiva w(n) Antes estudarmos os filtros capazes de obter a resposta impulsiva w(n), estudaremos neste item suas caractersticas. O acoplamento acstico entre o alto-falante e o microfone composto pelo caminho direto entre eles e o caminho do eco, que pode possuir vrias reflexes nos diversos objetos que compe o ambiente. Dessa forma, poderamos modelar w(n) como sendo uma srie de impulsos com atrasos proporcionais s distncias percorridas, enquanto que a amplitude destes impulsos tambm estaria relacionada distncia percorrida e atenuao em cada reflexo. 2.1.1 Variabilidade de w(n) A resposta impulsiva w(n) depende de inmeros fatores como: direcionabilidade do microfone, geometria do ambiente, reflexibilidade dos objetos, temperatura, umidade, etc. A posio dos objetos e a temperatura so os dois fatores que parecem afetar de forma mais evidente a variabilidade dessa resposta impulsiva [1]. 2.2 Filtros 2.2.1 Definio de Filtro O termo filtro utilizado para descrever um dispositivo cujo objetivo principal separar a parte desejada da parte indesejada de um sinal. O filtro classificado como linear caso exista uma relao linear entre sua entrada e sua sada. 2.2.2 Obtendo o filtro w(n) viso geral Como j mencionado, para obtermos a estimativa y(n) do eco acstico, a resposta impulsiva w(n) deve ser igual, ou o mais prxima possvel, a w(n). Como obviamente no conhecemos w(n), y(n) ou v(n), precisamos de algum critrio para obter w(n) = w(n), baseado nas informaes que dispomos: u(n), y(n), e(n) e d(n). Dada a relao entre as sequncias {y(n)} e {u(n)}, nota-se que y'(n) altamente correlacionado com u(n) ou verses atrasadas de u(n). Considerando tambm que as sequncias {v(n)} e {u(n)} no sejam correlacionadas, podemos utilizar a correlao cruzada entre u(n), u(n-1), ... e

e(n) para medir quanto de y(n) est presente em e(n). Assim nosso objetivo seria obter um filtro w(n) que minimizasse a correlao cruzada entre u(n) (e suas verses atrasadas) e e(n). 2.2.3 Soluo de Wiener O filtro de Wiener um filtro proposto por Norbert Wiener em 1940 e publicado em 1949. O procedimento que ser descrito neste item baseado em clculos estatsticos. A tcnica utilizada encontrar o mnimo da funo (n) que o valor esperado do erro elevado ao quadrado. Note que, como j foi citado anteriormente: e(n) = d (n) y (n) .
F [e(n)] = (n) = E[e 2 (n)] = E[d 2 (n) 2d (n) y (n) + y 2 (n)] , em que d (n) o

sinal do microfone. Suponha que o filtro adaptativo seja implementado atravs de uma combinao linear tal que:
N

y(n) = wi xi (n) = wT x(n) ,


i=0

em

que

w = [w0 , w1 , w2 , w3 ,..... wN ] e x ( k ) = [ x0 (n) x1 ( n) x2 ( n) x3 ( n)..... x N ( n)] . importante mencionar que w um vetor que representa a soluo para os coeficientes do filtro que so constantes e estacionrios. No prximo captulo, trabalharemos com filtros adaptativos cujos coeficientes do filtro variam com o tempo.

Para cancelamento de eco, x0 = x(n), x1 = x( n 1), x 2 = x( n 2)...., x N = x( n N ) . Podemos, portanto, classificar este filtro como um filtro de resposta ao impulso finita (FIR), pois a sua sada somente depende de um nmero finito de entradas passadas. importante mencionar que na prtica x(n) um vetor que armazena as ltimas N+1 amostras do sinal de entrada na memria. Vamos agora procurar o valor timo do vetor w, supondo que os sinais sejam estacionrios e w seja fixo:
E[e 2 (n)] = E[d 2 (n) 2d (n)w T x(n) + wT x(n)w T x(n)] E[e 2 (n)] = E[d 2 (n)] 2 E[d(n)w T x(n)] + E[w T x(n)x T (n)w] E[e 2 (n)] = E[d 2 (n)] 2w T n)E[d(n)x( n)] + wT (n)E[x(n)x T (n)]w(n)

E, portanto, (n) = E[e 2 ( n)] = E[ d 2 ( n)] 2 wT p + wT Rw , para um filtro com coeficientes fixos, em que P = E[d (n) x(n)] e R = E[ x( n) x T (n)] . R chamada

de matriz de autocorrelao do sinal de entrada enquanto que p chamado vetor de correlao cruzada entre o sinal de entrada e o sinal desejado. Para achar a melhor soluo para o filtro, vamos minimizar a funo (n) . Para isso, vamos derivar essa expresso e igual-la a zero. Ento o gradiente ser:
gw = T =[ .... ] = 2p + 2Rw = 0 w w0 w1 w2 wN

Ento, teremos como soluo:

wtimo = R 1 p
Essa soluo chamada soluo de Wiener. Entretanto, ela utilizada somente em casos que as entradas so estacionrias. Caso contrrio no fcil estimar as matrizes R e p com preciso. Substituindo o valor da soluo de Wiener na expresso anterior, teremos que: T T min (n) = E[e 2 (n)] = E[d 2 (n)] 2 wtimo p + wtimo Rwtimo
T T min (n) = E[d 2 ( n)] 2 wtimo p + wtimo RR 1p T min (n) = E[d 2 ( n)] wtimo p

A soluo de Wiener , portanto inadequada para situaes em que no existe estacionaridade. Por isso, ela no pode ser utilizada para um cancelador de eco, pois, como vimos, a resposta impulsiva varivel com o tempo. Ento, devemos utilizar filtros adaptivos, como uma medida para tentar resolver este problema.

3. Filtros Adaptativos
O filtro adaptativo um dispositivo que tenta modelar uma relao de sinais em tempo real de forma recursiva. Eles exibem comportamento

satisfatrio em ambientes em que no h conhecimento sobre os sinais de entrada. O prprio nome de filtro adaptativo sugere que este capaz de se adaptar a diversas situaes para garantir uma soluo tima capaz de minimizar a funo (n) a cada instante. Se o ambiente for estacionrio, os parmetros do filtro convergem, aproximando a soluo tima, como por exemplo, a soluo de Wiener, estudada no captulo anterior. Caso o ambiente no seja estacionrio existe uma soluo tima que constantemente varia com o tempo. Se esta variao estatstica no for muito rpida, o filtro adaptativo tentar acompanhar a variao da soluo tima com o tempo, podendo conseguir uma atenuao satisfatria do eco. A figura abaixo ilustra como funciona um filtro adaptativo. Veja que o erro e(n) realimentado para que ele possa mostrar a direo em que os coeficientes do filtro devem ser adaptados.

Figura 3.1: Diagrama de blocos de um filtro adaptativo

So muitos os algoritmos de adaptao existentes. A escolha do algoritmo de adaptao deve ter sempre em conta: 1. A velocidade de convergncia e preciso do algoritmo 2. A complexidade numrica do algoritmo 3. A estabilidade do algoritmo

A velocidade de convergncia pode ser entendida como o inverso do nmero de iteraes necessrias para que o algoritmo chegue prximo da soluo tima. Quanto menor for esse nmero, maior ser sua velocidade de

convergncia e mais rapidamente o algoritmo se adaptar a possveis variaes da resposta impulsiva do ambiente. A complexidade numrica refere-se ao nmero de operaes que o algoritmo deve realizar em cada iterao. Na verdade ela pode ser medida tambm como a quantidade de ciclos de processamento durante o intervalo de uma iterao. Explicaremos melhor nos prximos captulos. Existem inmeros algoritmos disponveis, entretanto duas classes so mais importantes: 1. Algoritmos de gradiente 2. Algoritmos de mnimos quadrados Os algoritmos de gradiente possuem o objetivo de se aproximar recursivamente da soluo de Wiener, utilizando apenas o gradiente da superfcie da funo de erro. Um algoritmo recursivo desenvolvido com essa idia o filtro LMS que ser visto no prximo item. A vantagem principal dessa classe de algoritmos sua baixa complexidade computacional. A idia principal dos algoritmos de mnimos quadrados minimizar a soma dos quadrados dos erros parciais, no somente utilizando o gradiente, mas tambm a hessiana. Por isso, embora sejam algoritmos que apresentem convergncia mais rpida, de modo geral, necessitam de um poder computacional superior ao dos algoritmos de gradiente. Entre as duas opes apresentadas escolheremos algoritmos de gradiente para utilizarmos na parte prtica. Embora esses algoritmos no sejam to rpidos quanto o algoritmo de mnimos quadrados, seu desempenho suficiente se a taxa de variao da resposta impulsiva do eco no for grande demais. Alm disso, a placa DSP a ser utilizada apresenta srias limitaes de capacidade de processamento. Assim, devido ao nmero elevado de coeficientes do filtro adaptativo, utilizamos algoritmos de gradiente.

3.1 Algoritmo do gradiente estocstico Least Mean Squares Esse algoritmo uma soluo iterativa que busca se aproximar da soluo tima de Wiener, ou seja, um algoritmo de gradientes, que pode ser utilizado em ambientes com respostas impulsivas variveis com o tempo.

Vimos no captulo anterior que uma soluo possvel para filtros estacionrios a de Wiener, que igual a:

wtimo = R 1 p , em que p(k) = E[d(n)x(n)

] e R (k) = E [x(n)x

(n)] .

Como iremos trabalhar com filtros no estacionrios, definiremos R uma aproximao para R e p uma aproximao para p . Ento podemos utilizar a soluo de Wiener para aplicar em filtros cujo ambiente no estacionrio atravs de um modo iterativo tal que:
w(n +1 ) = w(n) g w(n) , com n=0, 1,2...

Como vimos anteriormente que g w(n) = 2p(n) + 2R(n)w(n) , ento:


w(n + 1 ) = w(n) + ( 2p(n) 2R (n)w(n))

las :

Mas R e p so aproximaes. Uma das formas de podermos calculR (n) = x(n)x


T

(n)

p ) = d(n (n )x(n)

Portanto, g w(n) dado por:

g w(n) = 2p(n) 2R(n)w(n) = 2d (n)x(n) + 2x (n)x T (n)w(n)


x ) Colocando 2 (n em evidncia:

g w(n) = 2x (n)[ d(n) + x T (n)w(n)] = 2x (n)[d(n) y(n)] = 2x (n)e(n)


E finalmente substituindo g w(n) em w(n + 1 ) :
w +1 ) = w (n (n) + 2(n)x(n)

A equao acima a soluo do mtodo chamado Least-Means-Squares (LMS) em que o fator deve ser escolhido de maneira adequada para garantir a convergncia. Como o fator ser calculado experimentalmente, para simplificar utilizaremos, principalmente nos prximos captulos, a expresso:
w(n + 1 ) = w(n) + e(n)x(n)

Tipicamente, uma iterao de um LMS requer N+1 multiplicaes e 2N+1 adies para a atualizao dos coeficientes do filtro e N+1 multiplicaes para o clculo de e(n). Um modo possvel para escolher (que chamado de passo de adaptao) para garantir essa convergncia escolher um valor tal que:

0< n <

1 ( N + 1) * P on c i(a(n) ) , em que t x

Potncia(x (n)) = x 2 (n i) , ou seja,


i=0

a somatria do quadrado de cada valor das amostras que esto armazenadas (n na memria do cancelador de eco no vetor x ) . Como j foi mencionado, o cancelador de eco consegue armazenar apenas as ltimas N+1 amostras e so elas que vo ser utilizadas para calcular a potncia x(n). O algoritmo que utiliza o passo acima chamado LMS normalizado ou NLMS. O passo de adaptao controla tambm a velocidade de convergncia. Por isso se o passo for muito pequeno, ento, em ambiente no estacionrio, que possui a resposta impulsiva muito varivel, o sistema no ir convergir, pois no tem velocidade suficiente. O algoritmo LMS muito utilizado devido sua baixa complexidade computacional. A figura abaixo ilustra seu funcionamento:

Figura 3.2: Diagrama de blocos de um filtro adaptativo LMS

O algoritmo normalizado (NLMS) utilizado atravs da equao:


w(n + 1 ) = w(n) + e(n)x(n) x T (n)x(n)

Por precauo, adiciona-se uma pequena constante positiva para garantir que o denominador nunca se aproxime demais de zero. Finalmente teremos o algoritmo NLMS:
w(n +1 ) = w(n) + n e(n)x(n) + x T (n)x(n)

3.2 Detector de Double-Talk A utilizao dos algoritmos LMS e NLMS somente ter sucesso no cancelamento de eco quando o sinal captado pelo microfone d(n) for composto pelo sinal de eco y(n) e no a voz do usurio local v(n). Isto na verdade bem intuitivo, pois quando e(n)=0, temos que w(n+1)=w(n), ou seja, se os coeficientes estiverem em seus valores timos, no mudaro. Entretanto, e(n) composta tambm pelo sinal do microfone d(n), e, portanto, caso o eco seja completamente cancelado, teremos e(n)=v(n). Como e(n) no ser nulo, devido presena da voz do usurio, ento ir ocorrer uma variao dos coeficientes do filtro que ir atualiz-los para valores mais distantes da soluo tima. Para reduzir a influncia de v(n), seria necessrio usar um passo pequeno, o que reduziria a velocidade do algoritmo. Ento, para que o algoritmo funcione com eficincia, a iterao deve ocorrer somente quando v(n) for pequeno. Logo, para que exista uma convergncia dos coeficientes do filtro, devemos primeiramente detectar quem est falando, pois o processo de convergncia deveria ocorrer somente em momentos que o usurio local no estiver falando. Para isso utiliza-se o algoritmo detector de double-talk. A deteco de fala consiste em verificar qual dos interlocutores est ativo, para permitir ou interromper a adaptao do filtro nos momentos corretos, pois caso essa deteco for inadequada, a soluo no se aproximar da soluo tima. Existem quatro modos de conversao: - Conversao Inativa: Nenhum dos interlocutores est a falar - Conversao Distante: O interlocutor distante est ativo - Conversao Prxima: O interlocutor prximo est ativo - Conversao Cruzada: Os interlocutores falam simultaneamente. Na conversao inativa, as potncias estimadas para ambos os interlocutores so inferiores a um valor escolhido experimentalmente. Portanto, nesta situao assume-se que exista somente rudo ambiente e, portanto, no se devem estimar os coeficientes do filtro para o cancelamento do eco. A conversao prxima ou distante assumida quando a potncia estimada do valor prximo ou distante exceder em 6dB a potncia do outro extremo. O valor de 6dB foi definido baseado na hiptese que a potncia do

sinal do eco retornada no mximo da potncia original. A equao explica melhor a relao entre a perda em dB e a relao entre as potncias: A1 , em que M a relao entre as potncias medidas em A0 decibis, enquanto que A0 , A1 so os valores absolutos de suas potncias. Isso significa que uma diferena de 6 dB equivale a uma relao de entre o mdulo de suas potncias. M = 10log E finalmente, a conversao cruzada aquela em que ambas as potncias so maiores que o valor experimental definido previamente, e que a relao entre ambas as potncias sempre seja superior a . Neste caso, as adaptao dos coeficientes interrompida. Existem vrios algoritmos capazes de solucionar o problema da deteco da fala. Descreveremos aqui uma verso desenvolvida por Geigel. Ela funciona da seguinte maneira: quando a condio abaixo satisfeita, ento os coeficientes do filtro so adaptados.

|d(n) | 12max {| x(n) |,| x(n

1 )|... ,| x(n N) |}

Na expresso anterior, N o nmero de amostras que o cancelador de () eco armazena na memria, |dn | o mdulo da amostra instantnea do microfone, e | x(n i) | representa o mdulo das amostras do sinal de referncia. Como no se sabe o valor do atraso do eco, ento esse valor comparado com o valor mximo dessas amostras. O valor de 1/2 foi escolhido experimentalmente, mas pode ser alterado. Na realidade o algoritmo proposto detecta picos de potncia tornando-se necessrio manter o estado de inibio durante pelo menos 75ms aps deixar de se verificar a condio que conduziu ao seu incio. Se o detector de fala atuar com xito, ento o cancelador de eco ir iterar seus coeficientes somente nos perodos adequados, de modo que os valores dos coeficientes do filtro sero adequados para que o cancelador de eco cumpra o seu papel. A deteco incorreta pode causar um aumento exagerado da varincia dos coeficientes do filtro e um desempenho inadequado.

3.3 Algoritmo Set-Membership

O algoritmo set-membership Filtering (SMF) aplicado a problemas utilizando filtros adaptativos. A sada de um filtro adaptativo , como vimos:

y ( n) = wi ( n) xi ( n) = wT ( n) x(n)
i =0

E vimos tambm que


e( n) = d ( n) y ( n) = d ( n) wT x( n) , para n=0, 1, 2

A idia central do algoritmo SMF utilizar um critrio de adaptao seletiva, em que os parmetros do filtro somente so atualizados se o mdulo |e(n) | > , em que um parmetro a ser ajustado. Isto significa que o SMF procura solues para w contidas num conjunto:
H ( n) ={w N : d ( n) wT (n) x (n) }

Ento, o objetivo do algoritmo SMF encontrar um valor para w(n+1) a (n (n partir de w(n) que minimize a norma w + 1 ) w ) de modo que w(n) pertena a H(n). Para isto, caso w(n) no pertena a H(n), como na figura abaixo, ento o passo deve ser perpendicular ao plano limitado por . Entretanto, se w(n) estiver dentro de H(n) ento no necessrio ajustar w, e, portanto, w( n +1) = w(n) .
d (n) wT (n) x(n) = + d ( n) wT ( n ) x ( n ) =

H (n)

Figura 3.3: Funcionamento do algoritmo SMF

3.4 Algoritmo Set-Membership Normalizado O algoritmo NLMS proposto anteriormente tem uma forma similar ao algoritmo SM-NLMS, uma vez que ambos so normalizados. O algoritmo SMNLMS verifica se |d(n) wT (n)x(n) | > . Caso isto for verdadeiro, a nova estimativa w(n+1) ser atualizada para a fronteira de H(n), percorrendo o caminho mais curto, que perpendicular fronteira de H(n), como mostrado na figura do item anterior. Considerando e(n) = d(n) wT x(n) e utilizando o NLMS, temos que:
w(n + 1 ) = w(n) + (n) e(n)x(n) , + x T (n)x(n)

em que (n)

um passo

varivel que deve ser devidamente escolhido. A iterao deve ocorrer se ocorrer um dos dois casos abaixo:
d ( n ) w T ( n ) x ( n) < d ( n) wT ( n) x ( n) >

Ento, o erro (n) aps uma iterao ser:


( n) = d ( n) wT ( n +1) x( n) =

(n) = d (n) wT (n) x( n) ( n ) = e( n ) (n)

(n) + x T ( n ) x ( n)

e( n) x T ( n) x( n) =

+ x T ( n ) x ( n) ( n) = e( n)[1 (n)] =

e( n) x T ( n) x( n) =

E logo, 1 ( n) = e( n) . Finalmente, podemos concluir que:


( n) =1
e( n)

, se e(n)

> ,

e (n) = 0 se

e(n) < .

importante mencionar que, de acordo com [3] pode ser escolhido como sendo 5v , onde v 2 a varincia do rudo.

3.5 Algoritmo Set-Membership utilizando combinao convexa de dois filtros O objetivo desta iniciao cientfica utilizar o algoritmo set-membership utilizando combinao convexa de dois filtros. Os algoritmos LMS, NLMS e SMF so populares dentro do campo de filtragem adaptativa. Na dissertao de mestrado de Jonnathan Freitas Partamian [1] foi proposto um novo algoritmo para realizar o cancelamento de eco. Como j foi dito, o objetivo desta iniciao cientfica verificar de modo prtico se este novo mtodo eficaz. Neste item descreveremos a parte terica do mtodo desenvolvido na dissertao de mestrado. A idia principal utilizar dois filtros totalmente independentes (w1 e w2), em que ambos devem contribuir para estimar o eco (calcular o valor de y(n)). Ambos os filtros utilizam o algoritmo set-membership descrito no item anterior. Entretanto eles possuem distintos valores de . Assim, o algoritmo pode ser descrito da seguinte forma:
w1 (n + 1) = w1 (n) +

1 (n) e( n ) x ( n ) + x T ( n) x ( n)
2 (n) e( n ) x ( n ) + x T ( n) x ( n )

w2 (n + 1) = w2 (n) +

Devemos definir os valores de 1 ( n) e 2 ( n) .Supondo que 1 < 2 , podemos admitir quatro possveis situaes:
= = a)Se e1 (n) > 1 e e2 ( n) > 2

1 ( n) = 1 2 (n) = 1

1 e1 (n)
2 e 2 ( n)
e2 ( n) <2

= b) Se e1 (n) > 1 e

1 ( n) = 1

1 e1 (n)

2 (n) = 0
= c)Se e1 ( n) < 1 e e2 ( n) > 2

1 (n) = 0
2 (n) = 1

2 e 2 ( n)

d) Se e1 (n) < 1 e e2 ( n) < 2

1 ( n) = 2 (n) = 0
Podemos concluir que na verdade a escolha do passo depende do erro relacionado ao seu prprio filtro, por isso que podemos afirmar que eles so independentes.

A dissertao explica que quando um algoritmo adaptativo escolhido, quase sempre nos deparamos com compromissos como taxa de convergncia vs desajuste, rastreamento vs rejeio a rudo etc. Por isso, uma forma de solucionar esse problema e conseguir um algoritmo que rena as diversas qualidades desejadas fazer a combinao convexa de diferentes algoritmos, visando reunir suas diferentes qualidades num filtro nico. Os filtros com um valor de menor apresentam como caractersticas principais uma elevada taxa de convergncia e rastreamento, enquanto que para maior, seu ponto forte o desajuste e a rejeio a rudo. importante mencionar que embora este mtodo seja mais poderoso, necessita de uma complexidade computacional maior, pois teremos que trabalhar praticamente com o dobro da velocidade. Veremos nos captulos seguintes como a utilizao desse algoritmo requer mais velocidade de processamento.

Descreveremos a seguir como os dois filtros interagem entre si para gerar o sinal de sada y(n). A figura abaixo ilustra esse processo.

Figura 3.4: Esquema para utilizao de dois filtros independentes

Neste caso a sada de y(n) pode ser escrita como:


y ( n) = (n) y1 (n) + [1 ( n)] y 2 ( n) , em que y1 ( n) = w1i ( n) x( n i ) e
i =0 N

y 2 (n) = w2 i (n) x (n i ) e 0 < (n) < 1 .


i =0

(n Para se definir ) , a dissertao nos ensina uma possvel opo:

, em que a (n) uma varivel auxiliar utilizada para 1 + e a ( n 1) minimizar o erro quadrtico mdio do filtro combinado. Ento pelo mtodo do gradiente, chegamos a:

( n) =

a (n) = a ( n 1)

a e 2 (n 1)
2 a ( n 1)

= a ( n 1)

a e 2 ( n 1) ( n 1) 2 ( n 1) a ( n 1)

E logo,

a e( n)[ y1 ( n) y 2 ( n)]( n)[1 (n)] , com a chamado pot ( n) + de passo de adaptao. O valor deste passo deve ser tal que garanta uma velocidade de ajuste da mistura proporcionalmente muito maior que a velocidade de convergncia dos filtros, principalmente em casos de mudana brusca da resposta impulsiva. Um valor tpico 1. O valor de ser 0.001, e ele importante para que esse termo no tenda a ir para o infinito. E finalmente:
a (n) = a ( n 1) +

pot (n) = * pot (n 1) + (1 ) * [ y1 (n) y 2 (n)] 2 , com um valor tpico de igual a 0,9.
(n Um fator importante para o clculo de a ) o termo ( n)[1 ( n)] . (n fundamental observar que caso (n) = 0 ou (n) = 1 , ento a ) nunca ser a(n) = a(n 1 ) para . Para resolver esse problema, deve ser alterado, pois n imposta uma restrio tal que |a(n) | 4 .

Do ponto de vista de erro quadrado mdio, foi comprovado que a combinao de dois filtros se comporta no mnimo to bem quanto o melhor de seus componentes. Agora estamos prontos para fazer algumas simulaes no Matlab utilizando os algoritmos aprendidos. O algoritmo NLMS no ser utilizado, pois ele somente foi usado na parte terica para que se possa entender melhor o algoritmo NSMF.

4. Simulaes no Matlab
At agora, foi vista toda a teoria necessria para a realizao deste projeto. Portanto, daremos incio parte prtica. Ela dividida em duas partes: simulaes no Matlab (neste captulo) e programao no Visual DSP++ (no prximo captulo,).

O Matlab um excelente programa para modelar e simular problemas matemticos, podendo produzir resultados grficos de modo que o programador possa ter uma viso crtica com o que est ocorrendo com as variveis, como ser possvel perceber neste captulo. Daremos incio a este captulo com vrias simulaes no Matlab. O primeiro exerccio visa que o leitor perceba a funcionalidade do algoritmo LMS de maneira prtica e mostrar como cada varivel envolvida afeta a resoluo do problema, mas utilizando entradas senoidais. Logo depois, iremos utilizar o algoritmo LMS para processar sinais de udio, verificando o cancelamento de eco. Programaremos em um momento posterior o algoritmo double-talk e set-membership. Finalizaremos modificando o algoritmo set-membership para que ele funcione utilizando a combinao convexa de dois filtros, que na verdade o objetivo final desta iniciao cientfica.

4.1 Exerccio prtico sobre o algoritmo LMS utilizando senides Antes de iniciar este exemplo prtico, vamos relembrar a funo de cada varivel do nosso projeto.

Figura 4.1: Funcionamento de um cancelador de eco

Lembrando que u(n) o sinal captado pelo microfone do usurio A, w(n) a resposta impulsiva de ordem M do caminho acstico entre o alto-falante e o microfone, y(n) o eco acstico, v(n) a soma do sinal de voz com o rudo do ambiente, d(n) =y(n) +v(n) sinal captado pelo microfone local, w(n) a resposta impulsiva de ordem NM do filtro adaptativo, que tenta reproduzir w(n),

y(n) o eco estimado. Finalmente e(n) o sinal enviado ao alto-falante distante, que o valor de d(n)-y(n), ou seja, o som do microfone original menos o eco estimado. Para iniciar nosso estudo, vamos simplificar o problema, trabalhando com senides e no com sinais de udio. Logo abaixo, temos trs funes senoidais (u,v e y) com amplitudes e fases diferentes (A,B e C). Entretanto percebemos que a frequncia do som emitido (u) e a de seu eco (y) so iguais a wo, embora entre eles exista um tempo de atraso (por isso fase3 diferente de fase1). E o ltimo fato que deve ser mencionado que A>C, uma vez que o eco sempre possuir uma amplitude menor do que o som original. J para o rudo ambiente e a voz do usurio B, a frequncia ser wi, com um atraso fase2, ambos arbitrrios. Assim: u(n)=A*cos(wo*n+fase1); v(n)=B*cos(wi*n+fase2); y(n)=C*cos(wo*n+fase3); Pode-se ainda perceber que o som que o microfone captura inclui o som do eco, do rudo ambiente e do usurio B. d(n)=v(n)+y(n); Sabemos ainda que e(n) o sinal do som enviado para o usurio A, ou seja, o sinal do subtrado do valor que o cancelador de eco estimou para y(n), e, portanto: e(n)=d(n)-y(n); Criando agora uma nova varivel r(n), que definida como: r(n)=e(n)-v(n) = d(n)-y(n) v(n) = v(n)+y(n) -y(n) v(n) = y(n) -y(n) Portanto, a nova varivel criada r(n) nada mais do que a diferena entre o eco estimado e o eco real. Ento, nosso objetivo que r(n) tenda a zero o mais rpido possvel, medida que n v aumentando. Note que n relaciona-se ao nmero da amostra. Agora vamos aplicar o algoritmo LMS, e assim tentar estimar o eco. As equaes abaixo utilizam apenas duas variveis: ha e hb. Estamos trabalhando apenas com duas variveis, por ser um exemplo bsico. Um cancelador de eco, geralmente, precisa ter um filtro na ordem de centenas de coeficientes, uma vez que estes permitem que algoritmo estime melhor a resposta impulsiva do ambiente. Logo as variveis descritas anteriormente podem ser calculadas do seguinte modo. .

y(n)=ha(n)*x(n)+hb(n)*x(n-1); ha(n+1)=ha(n) + *e(n)*x(n); hb(n+1)=hb(n) + *e(n)*x(n-1); E os grficos de y(n), y(n) e r(n) podem ser gerados:

Figura 4.2

Figura 4.3

Figura 4.4

Pode-se perceber claramente que a diferena entre o eco real y e o eco estimado ylinha foi diminuindo com o decorrer do tempo (aumento de n). Na verdade foram precisas aproximadamente 2200 amostras para que ambos tivessem valores realmente prximos de amplitude.

importante mencionar que, na verdade, todas as ondas acima so senides, mas devido ao fato de que a freqncia muito alta relativamente escala de tempo utilizada, v-se apenas uma faixa. A velocidade de convergncia depende do valor numrico da varivel passo. Quanto maior for esse valor, mais rpido os coeficientes do filtro convergem, at um certo limite. Abaixo est plotada a varivel r(n) em funo de n, com o passo multiplicado por 100 em relao ao passo anterior:

Figura 4.5

Est claro que, neste caso, so necessrias somente 24 amostras para convergir, e no 2200 como no caso anterior. Entretanto, se multiplicarmos nosso primeiro exemplo por 1000, em vez de 100, teremos um novo grfico para r(n):

Figura 4.6

Analisando o grfico acima, torna-se evidente que o sistema diverge, j que r(n) tende a ir para o infinito. Esse exemplo mostra a importncia de se escolher um bom valor para a varivel passo. Se for muito pequeno, a convergncia demorada. Se for muito grande, o algoritmo pode no convergir.

4.2 Exerccio prtico sobre o algoritmo LMS utilizando amostras de som Vamos agora utilizar esse algoritmo no Matlab, mas utilizando amostras de som, e no senides. Para isso, deve-se utilizar um vetor h com centenas de coeficientes, e no apenas duas variveis: ha e hb, como anteriormente. Utilizando a funo wavread podemos guardar todas as amostras de um arquivo WAV no formato PCM, e guard-las em um vetor, que no caso x(n). A partir de x(n), o sinal de referncia, vamos simular um eco y(n), atravs da expresso: y(n)=x(n-20)+0.8*x(n-300)

Caso deseje-se ouvir o eco gerado, pode-se utilizar a funo sound(y). Ento se percebe claramente que esse som o mesmo do original, mas com um eco agregado. Para que haja o cancelamento de eco de modo eficaz, criaremos o vetor yl(n), o eco estimado, que como j foi mencionado deve aproximar-se de y(n). Deste modo, a sada e(n)=d(n)-yl(n)=v(n)+y(n)-yl(n)=r(n), tender a ser nula, pois yl(n) deve se aproximar de y(n). Note que neste primeiro caso estamos adotando v(n)=0. Sabe-se que yl(n)=somatria de h(k)*x(n-k). Ento para que yl(n) se aproxime de y(n) basta que h(20)=1, h(300)=0.8 e h(k)=0, para k diferente de 20 e 300. Deste modo a sada (e(n)) se aproxima de zero. Aps executar o algoritmo com 120000 amostras, foi possvel gerar os seguintes grficos:

Figura 4.7

Figura 4.8

Figura 4.9

Os trs grficos acima mostram que o eco estimado se aproxima do eco gerado medida que o tempo passa, ou seja, quando n cresce. O grfico de e(n) mostra isso claramente. A sada comea a ficar nula quando n est ao redor de nove mil amostras. O que determina a velocidade de convergncia a escolha da varivel passo, como vimos anteriormente. Para gerar os grficos acima, utilizamos a expresso do algoritmo LMS, com passo fixo, isto : h(k)=h(k)+passo*e(n)*x(n-k), sendo k variando de 1 at N+1, em cada iterao, que o tamanho do filtro.

O passo escolhido para gerar esses grficos foi de 0.004. Com o passo de 0.01, os coeficientes do filtro no atingem seus valores timos, e, portanto, no h cancelamento. E com o passo de 0.001, as 120 mil amostras no so suficientes para que e(n) tenha valores inferiores a 0.05, pois no h velocidade suficiente. Escolhendo o passo correto, foi possvel gerar os grficos do vetor h.

Figura 4.10

O grfico mostra que o vetor h convergiu a algo muito prximo ao valor de h terico, utilizando n=120000. Calculando os valores crticos de h, temos que: - h(20)=0.9986, que muito prximo ao valor terico, que igual a 1. - h(300)=0.7981, que muito prximo ao valor terico, que igual a 0.8. Ampliando um pouco o grfico anterior, pode-se perceber que nem todos os outros valores de h se tornaram nulos, principalmente valores com n entre 0 e 400. Entretanto, os valores de h para esses casos so todos inferiores a 0.003, o que pode ser considerado desprezvel. Esses valores no nulos e a pequena diferena nos outros dois vo causar um eco residual, que (devido grande sensibilidade do ouvido) ainda pode ser audvel.

Figura 4.11

4.3 Introduzindo o algoritmo double-talk O algoritmo do detector de double-talk, como descrito nas sees anteriores basicamente compara o sinal instantneo no microfone d(n) com a metade do maior valor (em mdulo) das N ltimas amostras armazenadas. Caso d(n) seja menor que metade do maior valor das ltimas N amostras do sinal de referncia, o microfone deve estar apenas captando os sons produzidos pelo alto-falante, ou seja, est trabalhando no modo single-talk. Caso contrrio, ento provavelmente existe um som alm do eco do alto-falante, que deve ser o rudo externo junto com uma possvel fala de um usurio do sistema telefnico. Neste caso, portanto, no interessante continuar as iteraes do filtro, pois os valores iro se afastar dos valores incorretos. No programa escrito, a varivel xtemp armazena o mdulo do sinal de referncia a cada perodo de amostragem. Essa varivel xtemp comparada ao valor de xmax, que responsvel por armazenar o maior valor presente nas ltimas 300 amostras. A varivel mic armazena o mdulo de cada amostra da varivel microfone. Deste modo, uma comparao entre xmax e mic, permite saber se o sistema deve trabalhar em modo single-talk ou double-talk. A varivel dtalk responsvel por guardar essa informao. Se o modo detectado singletalk, dtalk=1. Em caso de deteco de double-talk, dtalk=0. importante

destacar que essa comparao ocorre a cada 600 interrupes, que so contadas atravs de uma outra varivel. Abaixo est o grfico de um sinal de voz do usurio B (que est em vermelho) e dtalk (em azul) em funo do tempo.

Figura 4.12

Como o detector de double-talk tem a funo de detectar quando o usurio est falando, podemos dizer que dtalk deve ser predominantemente 0 para valores de n entre 100000 e 120000, quando percebe-se um aumento na potncia do som, que sugere que o usurio B est falando no microfone. Por outro lado dtalk deve ser predominantemente 1 para n entre 60000 e 100000, pois nesses valores o usurio no est falando uma vez que v(n) menor que 0,2. Podemos supor que neste perodo somente est presente o rudo ambiente. Pode-se perceber que embora houvesse algumas oscilaes entre zero e um (prximo aos valores de 50000), o grfico gerado est de acordo com o esperado, uma vez que ele se relaciona claramente com os valores da varivel v(n), como descrito no pargrafo anterior. Vamos agora fazer uma anlise da influncia desse algoritmo double-talk no cancelador de eco, visando que o filtro chegue aos valores timos. Seguem

abaixo dois grficos. O primeiro de um cancelador com o algoritmo de doubletalk e o segundo sem ele. A linha azul representa os valores calculados com o tempo enquanto que a vermelha representa os valores timos, que foram variados de maneira bem mais rpida do que o usual na prtica.

Figura 4.13

Figura 4.14

Vemos que no processo que foi utilizado o algoritmo double-talk, no momento em que o usurio B estava falando no microfone, os coeficientes ficaram estticos at o momento em que somente foi detectado o rudo ambiente (ou seja, voltou a operar no modo single-talk). Nesse momento, os coeficientes convergiram rapidamente para os seus valores timos. J no caso do algoritmo sem double-talk, no momento da fala houve muitas oscilaes com amplitudes elevadas, causando uma distoro sonora no sinal resultante e(n). No entanto, a convergncia tambm rpida aps o usurio B parar de falar. Nota-se que o algoritmo de double-talk congela os coeficientes do filtro adaptativo quando o usurio B est falando. Caso os coeficientes timos variem mais devagar do que o mostrado neste exemplo, como costuma acontecer em situaes reais, o filtro adaptativo vai ficar congelado prximo a uma boa soluo, o que no aconteceria se o filtro pudesse se adaptar o tempo todo. 4.4 Introduzindo o algoritmo set-membership (SMF) O algoritmo set-membership tem o objetivo de evitar que o filtro varie os valores da estimativa da resposta impulsiva em casos em que o rudo ambiente for maior que o eco residual (nesse caso, a adaptao s afastaria os coeficientes de seus valores timos). Definindo um valor para a amplitude do rudo, que chamaremos de GAMA, e comparando esse valor com o valor de sada, ou seja, e(n), pode-se perceber quando no sinal de microfone est presente somente o rudo ambiente, ou outros sons, como o prprio eco ainda no cancelado. No grfico abaixo, a cor azul representa os valores das amostras de e(n), enquanto que a cor vermelha mostra o valor da varivel do set-membership sm(n), que determinada em funo de e(n). A cor verde mostra o valor de GAMA, que no caso 0,1. Observe que quando os valores de e(n) so maiores que o valor de GAMA, ento sm(n)=1. Quando so menores, ento sm(n)=0.

Figura 4.15

Analisando esse grfico, percebemos que ele est coerente com o que queremos. Quando o n varia de 119840 e 119850, o grfico de e(n) mostra que esses valores so sempre maiores de 0.1, ou seja, sm=1. J entre 119850 e 119860, os valores do erro e(n) so predominantemente inferiores ao valor definido GAMA, e portanto, sm=0. O exemplo acima no possui relao com o exemplo utilizado nos itens anteriores. A ltima modificao que faz parte do algoritmo set-membership em relao ao processo de iterao do h. Com o algoritmo LMS, foi utilizado com um passo fixo. J com o algoritmo set-membership, utilizaremos um passo varivel, e modificaremos a expresso de iterao do h, da seguinte forma: h(k)=h(k)+(passo(n)*e(n)*x(n-k))/(xm), em que: passo(n)= 1-(gama/(modulo(e(n)), se mdulo de e(n)>gama passo(n)=0, caso mdulo de e(n)<gama. A varivel xm o quadrado da norma do vetor de referncia x, cujos elementos compem o clculo de y. Isso quer dizer que xm=somatria(x(n-k)^2), com k variando desde 0 at N (que define o tamanho do filtro, como visto anteriormente).

interessante observar que, baseado em como foi feito o algoritmo, o valor de passo(n) somente pode estar dentro do intervalo entre 0 e 1. Para xm, como a raiz quadrada de uma somatria de quadrados, podemos afirmar que ela ser no negativa. Entretanto, como a varivel xm divide uma expresso, ela no pode estar prxima de zero, caso contrrio no se deve iterar o h, pois chegaramos a valores indesejveis. Assim, podemos gerar os grficos do passo(n) e xm(n):

Figura 4.16

Figura 4.17

4.5 Introduzindo o algoritmo set-membership utilizando a combinao convexa de dois filtros J vimos que a introduo do algoritmo set-membership utilizando combinao convexa de dois filtros (chamaremos de SMFD) nada mais do que dois filtros com dois valores diferentes da constante que comparada com o valor de e(n), que chamaremos de GAMA1 e GAMA2. Deste modo, vamos supor que o primeiro filtro tenha a constante menor, que chamaremos de GAMA1, enquanto que o segundo filtro tem a constante maior, que chamaremos de GAMA2. importante mencionar que esses filtros so independentes entre si ao ponto de que se deve calcular e1(n) e e2(n), ou seja, o erro relativo a cada filtro. Utilizando as expresses: yl1(n)=yl1(n)+h1(k)*x(n-k); yl2(n)=yl2(n)+h2(k)*x(n-k); E, yl(n)=part(n)*yl1(n)+(1-part(n))*yl2(n); Deste modo, podemos concluir que os ecos estimados so calculados separadamente por todos os filtros, e logo depois, calculada uma mdia entre eles, cuja proporo definida pela varivel part(n). Est claro que part(n) varia

desde 0 (em que somente funciona o segundo filtro) at 1 (em que somente funciona o primeiro filtro). Para determinar o valor de part(n), seguimos as duas expresses abaixo, como j vimos na parte terica: part(n)=1/(1+exp(-a(n-1))); a(n)=a(n-1)+100*e(n)*(yl1(n)-yl2(n))*part(n)*(1-part(n)); Lembrando que o mdulo de a(n) no pode ultrapassar de 4.

Figura 4.18

Figura 4.19

Note que o algoritmo escolheu que o filtro mais adequado no caso acima o filtro 1, pois a(n) est prximo de seu valor mximo (que igual a 4), e portanto, part(n) est prximo de 1. Lembrando que: yl(n)=part(n)*yl1(n)+ (1-part(n))*yl2(n).

4.6 Teste utilizando rudo branco para o set-membership Agora que j conhecemos todos os componentes do nosso algoritmo, vamos verificar seu desempenho como um todo. O desempenho de um algoritmo para cancelamento de eco pode ser medido de duas formas. A
2 primeira atravs do erro quadrtico de e(n), ou seja, Erro = e (i) , em que M i=1 M

a ltima amostra armazenada no vetor do erro. O erro quadrtico ser utilizado em muitos grficos dos prximos itens, como critrio para avaliar seu desempenho. Neste caso, quanto menor for esse erro, melhor o desempenho do algoritmo. O segundo mtodo atravs do calculo do ERLE, que pode ser calculado atravs da expresso: ERLE(n) = 10log(

d 2 (n i)
i=0 N

e
i=0

) , em que N pode

(n i)

ser arbitrrio, mas que no caso foi escolhido N=1000. Quanto maior o valor de ERLE, melhor a eficincia do algoritmo. Para o algoritmo set-membership, a escolha do valor de GAMA essencial para obtermos um melhor desempenho. Para vermos isto na prtica, utilizaremos um rudo branco em nossas entradas. Sejam x e v vetores que so gerados pelo Matlab como sendo rudos brancos com mdia nula e varincia conhecida. O grfico abaixo mostra o valor de v(n).

Figura 4.20

No caso acima, o valor da varincia de v 3,0271e-005, ento o valor de GAMA de acordo com a teoria : Gama = v 5 que igual a 0,0123. Ainda nesse exemplo, no utilizamos microfone. O eco gerado atravs da expresso y(n)=0,6*x(n-20)+0,2*x(n-200). O grfico abaixo mostra o valor do coeficiente h(20) em funo do tempo.

Figura 4.21

Figura 4.22

Vemos que os coeficientes dos filtros convergem rapidamente ao valor timo. Entretanto, somente com essa informao no podemos ver como o Gama influi no desempenho do algoritmo. Note que neste caso a resposta impulsiva do ambiente esttica, pois os coeficientes ideais no se alteram com o tempo. Vamos observar o grfico do ERLE em funo do tempo. O grfico mostra que o cancelador de eco obteve uma atenuao de aproximadamente 100 dB, que considerado um timo resultado. Entretanto, estamos trabalhando com rudos brancos e com eco gerado pelo prprio programa.

Figura 4.23

Vamos agora observar como o algoritmo se comporta quando a resposta impulsiva do filtro varia senoidalmente. A idia perceber o que ocorre com o Gama timo. Ser que este o mesmo para respostas impulsivas estticas e respostas impulsivas variantes? Vamos verificar o que ocorre.

Figura 4.24

Figura 4.25

Com o primeiro grfico acima, percebemos que o filtro converge para valores muito prximos aos ideais, mesmo variando senoidalmente. J o

segundo grfico mostra que o ERLE mdio do cancelador foi de 70 dB, enquanto que a resposta impulsiva esttica era de 100 dB, apresentando um desempenho superior. Os resultados anteriores, entretanto, no mostraram que o gama timo calculado pela teoria realmente o valor que faz com que o algoritmo apresente o melhor desempenho tanto com a resposta impulsiva esttica, como com a resposta impulsiva varivel. Para ser possvel chegar a alguma concluso com respeito problemtica apresentada, foi proposto o seguinte teste. Este ir calcular o valor do erro quadrtico em funo de Gama, para 100 valores diferentes, com Gama variando desde 0 at 0,1. Pela teoria, o gama timo deveria ser 0,0123, que est contido nesse intervalo proposto. Vamos fazer o teste para a resposta impulsiva estacionria e para a resposta impulsiva varivel (que da forma senoidal) separadamente. O grfico abaixo mostra o resultado obtido.

Figura 4.26

Analisando o grfico acima, podemos afirmar que o gama timo proposto pela teoria (para o caso esttico) realmente um dos valores que apresenta o erro quadrtico mais baixo. Entretanto, no o nico. Qualquer valor de gama entre 0.01 e 0.02, resultar em um erro quadrtico to baixo quanto ao do gama timo.

J para o caso varivel, o valor timo para o gama foi deslocado para a esquerda, ou seja, para um valor quase nulo, diferentemente proposto pela teoria. Vemos, portanto, que a teoria calcula o valor de gama timo para o caso em que a resposta impulsiva esttica. Quando a resposta impulsiva varivel, necessrio mais velocidade para acompanhar as mudanas dos coeficientes ideais e, portanto, o gama se deslocar para esquerda, se aproximando aos valores prximos de zero. Sabemos que o valor do rudo ambiente v(n) nem sempre constante ao longo do tempo como gostaramos. Vamos estudar este tema, verificando como o nosso algoritmo se comporta, atravs do seguinte teste. O valor de referncia de x continua sendo um rudo branco. Modificaremos o valor de v, dividindo-o em trs amplitudes diferentes de rudo branco, do seguinte modo:

Figura 4.27

O gama foi calculado baseando-se no segundo tipo de rudo (aquele que est no meio). Realizando os mesmos procedimentos do caso anterior e lembrando que estamos trabalhando com o caso da resposta impulsiva esttica, chegamos ao seguinte grfico:

Figura 4.28

O grfico acima do ERLE mostra o que ocorre com o ERLE para os trs diferentes valores do Gama timo (cada um referente a uma parcela do sinal). importante observar que o ERLE do primeiro trecho apresentou o melhor valor para o gama timo referente ao primeiro trecho. O mesmo ocorreu para a segunda e terceira parcela, ou seja, seus respectivos gamas timos foram os que apresentaram o melhor desempenho. Analisando a linha verde, referente segunda parcela, podemos afirmar que a parte cujo gama foi calculado continua apresentando um desempenho do ERLE de 100 dB. Entretanto, as outras partes que possuem varincias mais elevadas, apresentaram um desempenho inferior. Quanto maior for a diferena entre suas varincias, menor ser o ERLE. O problema que temos que se deve escolher um nico gama para satisfazer as trs varincias de rudos diferentes. Uma possvel soluo a proposta de se utilizar a combinao convexa de dois filtros set-membership. Um comentrio final sobre este item que o aumento da varincia de v diminui o valor de ERLE. Isto um resultado intuitivo, uma vez que medida que se aumente a amplitude da varincia do rudo ambiente , natural que o desempenho do cancelador seja prejudicado.

4.7 Teste utilizando rudo branco para a combinao convexa de dois filtros set-membership (SMFD). A combinao convexa de dois filtros set-membership permite que se escolham dois valores diferentes de gama, ou seja, Gama1 e Gama2. Utilizaremos esse algoritmo para resolver o problema anterior em que o vetor v possui trs amplitudes de varincias diferentes. De modo geral, Gama1 sempre ter o valor menor enquanto que o Gama2, o valor maior. Para o nosso caso, calcularemos Gama1, como o Gama timo do rudo com menor varincia enquanto que o Gama2 o gama timo do rudo com maior varincia.

Figura 4.29

Este grfico mostra como o algoritmo consegue trabalhar com dois filtros com gamas diferentes ao mesmo tempo. Lembrando que a funo que escolhe qual filtro deve predominar : yl(n)=part(n)*y1(n)+ (1-part(n))*y2(n). No primeiro trecho, em que o rudo branco possui a maior varincia, o filtro 2 deveria prevalecer pois o gama2 foi escolhido baseando-se nesse trecho. Vemos que part(n) nesse trecho prximo de zero, escolhendo o filtro dois como gostaramos. As primeiras dez mil amostras esto prximas de um, pois o

algoritmo ainda est convergindo, e, portanto, escolhe o algoritmo mais rpido, ou seja, aquele que possui o gama mais baixo (Gama1). No segundo trecho, em que o rudo branco possui a menor varincia dos 3 tipos, o filtro 1 deveria prevalecer pois o Gama1 foi escolhido baseando-se nesse trecho. Vemos que part(n) nesse trecho prximo de um, escolhendo o filtro 1 como gostaramos. J no terceiro trecho, o rudo possui uma varincia mdia em relao aos outros dois trechos. Por isso, vemos que o part(n) oscila prximo ao valor de 0,5. Vemos que o algoritmo funciona como gostaramos.

Figura 4.30

Verificando a convergncia de cada filtro e do filtro resultante, obtemos o grfico acima, que para podermos verificar algo interessante, abaixo se encontra o mesmo grfico com zoom em partes selecionadas.

Figura 4.31

Para o primeiro trecho, ou seja, aquele que prevalece o filtro dois, pois ele o de maior amplitude, vemos que o filtro resultante se aproxima mais da linha vermelha que a linha verde. Vemos tambm que a linha vermelha est mais prxima dos valores ideais que a linha verde.

Figura 4.32

Para o segundo trecho, ou seja, aquele que prevalece o filtro um, pois ele o de menor amplitude, vemos que o filtro resultante se aproxima mais da linha verde que a linha vermelha. Vemos tambm que a linha verde est mais prxima dos valores ideais que a linha verde.

Figura 4.33

E finalmente, o grfico acima nos permite observar a melhora que o algoritmo que utiliza dois filtros (SMFD) proporcionou em comparao ao SMF. Para o segundo trecho em que o algoritmo SMF com um filtro usava o valor timo de gama, no houve uma melhora. Entretanto, para o primeiro e terceiro trecho, o ERLE aumentou consideravelmente como gostaramos.

4.8 Teste final Agora estamos prontos para realizar o teste final em Matlab. No utilizaremos mais os rudos brancos, nem geraremos o eco atravs de uma expresso matemtica. Gravaremos num arquivo. wav o sinal de referencia x e

o sinal do microfone d diretamente. Nesse caso, no podemos trabalhar com a varivel v, por exemplo, uma vez que o eco real e o rudo ambiente esto misturado na varivel d.

Figura 4.34

O grfico acima mostra o valor da varivel d(n) e e(n). Vemos que existe uma reduo de sua amplitude, mas que no total. Isso depende do valor do rudo ambiente e se o usurio est falando no microfone ou no. O teste real mais complexo que o teste utilizando variveis simuladas e logo, o desempenho esperado deve cair.

O som do microfone foi gravado em meu quarto. Podemos ver qual a resposta impulsiva do meu quarto depois que o algoritmo tenha convergido, gerando o seguinte grfico abaixo, cuja taxa de amostragem utilizada foi de oito kHz.

Figura 4.35

Como no estamos trabalhando com rudo branco, no podemos determinar o gama timo de maneira terica. Vamos determin-lo de maneira experimental, testando 100 gamas diferentes. Deste modo, podemos plotar o seguinte grfico.

Figura 4.36

O grfico acima nos mostra que o valor de gama timo aproximadamente 0,032. Com esse valor, o erro quadrtico aproximadamente 367,5.

Figura 4.37

Finalmente o grfico acima mostra os resultados para o algoritmo utilizando a combinao convexa de dois filtros em paralelo. O melhor resultado possvel foi com Gama1 = 0,01 e Gama2=0,09. Com esses valores, o erro quadrtico baixou para aproximadamente 334,2. Podemos concluir, portanto, que para seus valores timos a combinao convexa de dois filtros set-membership em paralelo pode apresentar um desempenho superior ao do filtro set-membership dependendo da varincia do rudo ambiente. Quanto maior for essa varincia, mais conveniente ser o uso da combinao convexa. Por outro lado, caso o rudo ambiente apresente uma varincia constante, o algoritmo SMF poder apresentar um desempenho to bom quanto o algoritmo com dois filtros.

5 Programao no Visual DSP++

5.1 Introduo Nesta iniciao cientfica, a proposta no demonstrar que o algoritmo SMFD sempre apresenta um melhor desempenho que o algoritmo SMF, pois era justamente esse o objetivo da dissertao de mestrado [1], que foi comprovar teoricamente (e atravs do matlab) que a utilizao do algoritmo SMFD vivel. A proposta desta iniciao cientfica programar esse algoritmo na placa ADSPBF533, que um processador de sinais capaz de simular um cancelador de eco com alto desempenho em tempo real. O programa que permite programar os algoritmos na placa ADSP-BF533 chamado Visual DSP++.

5.2 Instalao do hardware A principio houve inteno de utilizar o driver da Placa ADSP BF533 com o Windows XP 64 bits. Entretanto depois de algumas tentativas e pesquisas no Google, foi descoberto que no compatvel com esse sistema operacional, e nem com o Windows Vista 64 bits. Portanto, deve-se utilizar o Windows XP 32 bits para este projeto. O primeiro passo a ser realizado foi testar o programa Talk Through. Este programa um exemplo que se encontra no prprio CDROM da placa e possui o objetivo de apenas reproduzir o sinal de entrada na sada da placa. A principio, o teste no foi realizado com sucesso, pois existem trs sadas estreas e duas entradas estreas. Entretanto depois de alguns testes foi constatado o nome de cada entrada e sada da placa. Com isso, o programa funcionou com xito. 5.3 Mapeamento das entradas e sadas Depois de alguns testes, foi possvel relacionar o nome da entrada e sadas.

Vdeo Output Left Right

Audio Output

Audio Input

Figura 5.1: Mapeamento das entradas e sadas da placa

Esse um passo importantssimo para a programao, pois sem ele no possvel definir relacionar as entradas de udio com as variveis de entrada, que sero utilizadas no processamento. Por exemplo, existe uma varivel que se chama iChannel0LeftIn. Seguindo o mapeamento acima, sabemos exatamente a qual entrada a varivel se refere. Por ser uma varivel left, sabemos que ela est na linha superior. Por ser uma entrada de udio, ela uma das quatro entradas na parte da direita. E finalmente, por ser o canal 0, ela est na coluna da esquerda. Portanto, a entrada que est em cima e esquerda do conjunto de entradas que se localizam a direita, definidos como udio Input. 5.4 Programao do mixer Analisando o arquivo Process Data, que a parte mais importante do programa, percebemos que as quatro linhas abaixo so as linhas que definem que o programa somente ir copiar a entrada na sada, sem fazer nenhuma alterao. iChannel0LeftOut = iChannel0LeftIn; iChannel0RightOut = iChannel0RightIn; iChannel1LeftOut = iChannel1LeftIn; iChannel1RightOut = iChannel1RightIn; A partir desse exemplo, foi possvel modific-lo para programar um mixer alterando o process data, deste modo: ProcessData Mixer iChannel0LeftOut = iChannel0LeftIn+iChannel1LeftIn;

iChannel0RightOut = iChannel0RightIn+iChannel1RightIn; Assim, cada sada composta pela mistura de dois sinais de entrada, como se pode perceber claramente atravs das expresses acima. Para o cancelamento de eco, no utilizamos o algoritmo acima. Ele somente foi interessante para ver como as variveis se relacionam com o udio. 5.5 Primeiros testes Como o objetivo deste trabalho comparar o desempenho do algoritmo set-membership para um filtro (SMF) com a combinao convexa de dois filtros set-membership (SMFD), no programaremos o algoritmo LMS, como fizemos com o Matlab. Portanto, o primeiro programa a ser executado pela placa ADSPBF533, ser um algoritmo set-membership, sem detector de double-talk. A idia a mesma que realizada no Matlab. Colocaremos na entrada um sinal de Rdio FM, que ser nosso sinal de referncia. Criaremos um eco artificial, utilizando um filtro de 50 coeficientes, atravs da expresso y(n)=0.7*x(n-11)+0.2*x(n-41). Podemos utilizar uma outra entrada na placa para simular o rudo ambiente e a voz do usurio (a varivel v), que no caso, uma fita cassete. O diagrama abaixo mostra o que foi descrito.

Rdio FM Placa ADSP-BF533 Fita Cassete Amplificador de udio com entrada RCA

Figura 5.2 Esquema para testar o cancelador

A sada da placa deve ir para um amplificador de udio, que possui uma entrada compatvel com a do cabo utilizado. Se o cancelador de eco no estiver ativado, ou seja, se e=d, a sada ser uma mistura do sinal de Rdio FM e da Fita Cassete. Caso o cancelador de eco esteja funcionando corretamente e ativado, ento se deve escutar predominantemente o som da Fita Cassete.

O esquema abaixo foi modificado, em relao ao esquema acima, para podermos analisar o ERLE no computador do desempenho da placa.

Rdio FM

Placa ADSP-BF533

e(n) Entrada Line In do Computador d(n)

Figura 5.3 Esquema para analisar o ERLE

Vamos agora verificar o desempenho do cancelador. Para isto, no utilizaremos a Fita Cassete, somente a Rdio FM, pois queremos que v(n)=0. Executando o programa em tempo real, e gravando sua sada no computador atravs da entrada Line-In da placa de som com auxlio do programa Audacity, podemos mostrar o seguinte grfico.

Figura 5.4 Grfico gerado pelo programa Audacity

A parte inferior da figura acima representa o sinal do microfone, enquanto que a parte superior mostra a sada, ou seja, o eco cancelado. O som do eco cancelado possui uma amplitude to pequena, que quase no conseguimos ouvir. Aparentemente, o cancelador de eco est funcionando muito bem. Entretanto, como vimos j no teste do Matlab, para podermos avaliar seu desempenho, um dos mtodos o clculo do ERLE. Ento podemos gravar esses sinais em arquivos. wav, com mesma frequncia de amostragem, para que o Matlab consiga processar estas informaes. Note que neste caso, utilizamos o Matlab somente para o clculo do ERLE e do erro quadrtico. O cancelamento do eco realizado pelo DSP. Deste modo, foi possvel gerar a seguinte figura, que utiliza o mesmo sinal da figura logo acima.

Figura 5.5

Observando o grfico acima, podemos dizer que a potncia mdia de 50 dB, que um bom desempenho. Entretanto, vemos uma diminuio do ERLE, em relao ao algoritmo realizado no Matlab. Isso pode ser explicado por diversas razes cujas principais so presena de rudo branco nas medies e rudo de quantizao nos valores de entrada e nos clculos.

5.6 Detector de Double-Talk Agora que o algoritmo simples do set-membership est funcionando de acordo com o previsto, vamos introduzir o detector de double-talk. Entretanto, queremos no somente program-lo, como tambm test-lo. A programao j foi vista no captulo anterior. Queremos agora verificar se o programa est funcionando em tempo real. Devemos lembrar que o algoritmo double-talk faz com que a adaptao dos coeficientes do filtro se detenha, no momento que o usurio estiver falando. Quando o usurio no estiver falando e, portanto, o sistema estiver no modo single-talk, ento a adaptao dos coeficientes deve prosseguir. Entretanto, no conseguimos perceber isto analisando o sinal de e(n) e d(n). preciso criar uma nova sada que mostre este efeito especificamente. Uma possvel soluo foi enviar duas sadas ao computador. A primeira (a de baixo) seria o sinal do microfone original (d(n)). A segunda (superior) o sinal de microfone original multiplicado pela varivel dtalk, ou seja, d(n)*dtalk. Quando o sistema estiver no modo single-talk, dtalk =1, ento a sada da parte superior igual que a inferior. Quando dtalk=0, no momento em que o sinal do microfone cresce (na presena de vozes) a sada da parte superior torna-se nula. Observe o grfico abaixo:

Figura 5.6 Grficos do erro e do microfone

O grfico acima mostra que o algoritmo double-talk est funcionando corretamente. No se deve esquecer que sempre necessrio configurar os parmetros, o que feito de maneira experimental, para que o algoritmo funcione corretamente.

5.7 Contagem dos Ciclos

Sabemos que a placa possui um processador que trabalha a 756MHz, ou seja, realiza um ciclo a cada 1,322 ns. De modo similar, a taxa de amostragem 48kHz, ou seja, o intervalo entre uma amostra e a prxima 20833 ns. Consequentemente, a relao entre eles nos permite calcular o nmero de mximo de ciclos permitidos, ou seja, ciclos=20833/1,322=15750 Os primeiros algoritmos programados na placa foram escritos 100% em linguagem C. Depois de vrios testes, foi constatado que a velocidade de processamento no era suficiente para acompanhar a quantidade de clculos necessria. Quanto maior a quantidade de coeficientes do filtro, mais rpido o algoritmo deve operar, utilizando menos ciclos em cada operao. Uma possvel soluo seria programar em Assembly, que uma linguagem especfica para um determinado processador. Um processador de outra famlia da Analog Devices, por exemplo, o ADSP-2189M, utiliza um Assembly totalmente diferente em relao ao mesmo do Blackfin. A linguagem do assembly para o Blackfin no uma linguagem fcil. O primeiro motivo que existem mais de 350 comandos diferentes na sua utilizao. O segundo que so poucas as pessoas que realmente esto familiarizadas com esse tipo de processador, especialmente no Brasil. Documentos na internet sobre esse tema existem, mas em pouca quantidade. A principal literatura que foi utilizada na programao foi o Manual chamado Program Reference[6]. Por ser o assembly para Blackfin uma linguagem complicada para aprender, a melhor soluo encontrada foi substituir apenas partes do programa em assembly e manter o resto na linguagem C. As partes do programa que foram transformadas em assembly so as que ocupam as maiores quantidades de ciclos. Essas partes que demandam maior tempo de processamento foram dois laos for. O primeiro calcula o eco estimado, ou seja, y=somatria de x(nk)*h(k), com k variando de 0 a NUM, em que NUM o tamanho do filtro. O segundo for o que realiza a atualizao de cada filtro em cada amostra. Com essa modificao realizada e testada com sucesso, verificamos a quantidade de ciclos necessrios em relao ao tamanho do filtro, antes e depois dessa melhora. Seguem abaixo dois grficos. O primeiro para o algoritmo set-membership com um filtro. O segundo para a combinao convexa utilizando dois filtros. Note que de maneira geral, o algoritmo com dois filtros necessita o dobro da quantidade de ciclos para sua execuo.

Melhoria da eficincia com a implementao do Assembler para o algortmo Set-Membership


Nmero de ciclos por amostra 35000 30000 25000 20000 15000 10000 5000 0 0 50 100 150 200 300 400 Nmero de coeficientes do filtro Ciclos para o SM Assembler Ciclos para o SM

Figura 5.7
Melhoria da eficincia com a implementao do Assembler na combinao convexa de dois filtros set-membership
Nmero de ciclos por amostra 50000 40000 30000 20000 10000 0 0 50 100 150 200 250 300 Nmero de coeficientes do filtro Ciclos para o SM Ciclos para o SM Assembler

Figura 5.8

Torna-se evidente que a programao do Assembly diminuiu a quantidade de ciclos necessrios para um determinado nmero de coeficientes do filtro. Caso colocssemos como limite os 15 mil ciclos, como calculados de maneira terica (pois experimentalmente um pouco inferior a esse nmero), podemos afirmar que o limite de coeficientes para o algoritmo com um filtro 600 para aquele com Assembly e 200 para o anterior. Utilizando dois filtros,

esses valores seriam 300 e 75, respectivamente. Sabe-se que com 75 coeficientes do filtro no poderamos realizar um teste final num quarto, por exemplo, pois, como veremos mais adiante so necessrios pelo menos 120 coeficientes. 5.8 Modelagem da resposta impulsiva do ambiente Para achar uma estimativa preliminar da quantidade de coeficientes necessrios num ambiente, que no caso o meu prprio quarto, foi usado o esquema que se encontra logo abaixo. Basicamente, h duas entradas na placa. A primeira o sinal de referncia, x(n), de uma rdio FM. A segunda uma entrada de microfone, d(n), que capta o som da reproduo de um alto-falante que reproduz essa mesma estao de rdio. A placa ADSP apenas transfere esse som para o computador, onde os sinais capturados so convertidos em. wav, com a mesma taxa de amostragem utilizada pela placa. O Matlab ir realizar o processamento dos sinais para poder nos mostrar quantos coeficientes so necessrios para o cancelamento de eco. Poderamos ter colocado o sinal de Rdio FM e do Microfone diretamente na entrada Line In do computador. Entretanto, no escolhemos essa opo por causa da facilidade de manipular com os cabos (j estavam preparados). Somente foi necessrio alterar duas linhas do programa.

Rdio FM Placa ADSP-BF533 Microfone

x(n) Entrada Line In do Computador d(n)

Figura 5.9 Esquema para gravar os sinais no computador

Como o Matlab consegue mostrar o valor de cada coeficiente do filtro de maneira grfica, este ser utilizado para realizar o processamento de sinais, determinando a quantidade mnima de coeficientes para que garantir um bom

desempenho do cancelamento do eco. Foram criados trs modelos, que foram realizados no meu quarto: - Modelo 1, cuja distncia entre o alto-falante e do microfone de 10 cm - Modelo 2, cuja distncia entre o alto-falante e do microfone de 20 cm. - Modelo 3, cuja distncia entre o alto-falante e do microfone de 1 m. E assim foi possvel gerar os seguintes grficos:

Figura 5.10

Podemos afirmar que para o modelo 1 so necessrios 554 coeficientes, e para o modelo 2 so necessrios 669. Aumentando mais distncia do microfone ao alto-falante, so necessrios 873 coeficientes para o modelo 3. Os nmeros acima foram obtidos utilizando como critrio para a escolha do nmero de coeficientes do filtro aquele mnimo que garanta 97% da energia total do sinal. Esse critrio assume que os outros 3% so devido presena de rudos e erros de quantizao, que podem ser desprezados.

importante mencionar que os valores dos coeficientes foram obtidos utilizando a mesma taxa de amostragem da placa que igual a 48kHz. Portanto, no necessrio fazer nenhuma converso com a finalidade de se utilizar na placa. Para exemplificar uma situao hipottica em que necessria essa converso, podemos dizer que ela ocorre, por exemplo, caso os valores dos coeficientes fossem obtidos utilizando uma taxa de amostragem de 8kHz, ento dever-se-ia multiplicar por 6 o nmero de coeficientes obtidos. Vemos que o valor mnimo da quantidade de coeficientes calculados do filtro para modelar a resposta impulsiva do ambiente foi de 554. Esse valor maior que a capacidade da placa de processamento, que como vimos, de 300 para o algoritmo com dois filtros. Portanto, mediremos um novo modelo, cuja distncia entre o microfone e o alto-falante 5 cm.

Figura 5.11

Neste caso, utilizando o mesmo critrio que foi usado para os outros modelos chegamos ao nmero de coeficientes necessrios de 265. Vemos que agora esse valor compatvel com a capacidade de processamento do Blackfin. Para concluir, os valores calculados para os coeficientes do filtro neste item, so apenas estimativas. Para termos mais garantia de uma boa escolha do

nmero de coeficientes do filtro, temos que realizar testes com o cancelador funcionando com sinais reais.

5.9 Nmero de coeficientes do filtro Surge, portanto, uma questo: determinar o tamanho do filtro. Se este for muito alto, o algoritmo no ter tempo de terminar seus clculos. Se for muito pequeno, o filtro no ter condies de modelar a resposta impulsiva do ambiente. Baseando-se no que j foi escrito neste captulo, poderamos afirmar que com a melhoria de velocidade, proporcionada pela programao em assembly, o nmero de coeficientes do filtro mximo permitido para o algoritmo SMFD (aquele que possui dois filtros) 300. Por outro lado, vimos que o valor mnimo de coeficientes para modelar a resposta impulsiva, que uma estimativa, como j foi mencionado, 265. Poderamos dizer, portanto, que qualquer tamanho de filtro entre 265 e 300 garantir o melhor resultado possvel. Vamos medir e verificar os resultados, para ver se o que foi afirmado realmente verdadeiro. O esquema abaixo ilustra o nosso novo teste. Como em cada medio pode haver diferentes rudos ambientes e respostas impulsivas, foi decidido gravar durante 30 segundos um arquivo de som. wav estreo , em que o primeiro canal contm o sinal de referncia enquanto que no segundo se encontra o sinal do microfone. Assim, sempre reproduzimos esse sinal em um notebook, conectando os cabos desses sinais na entrada na placa e analisamos suas sadas, ou seja, o d(n) e o e(n). Com esses dois sinais podemos calcular o o erro quadrtico, que ser utilizado como critrio para avaliar o desempenho do algoritmo em funo de diferentes tamanhos do filtro.

d(n) Notebook x(n)

Placa ADSP-BF533

d(n) Entrada Line In do Computador e(n)

Figura 5.12 Esquema para analisar os sinais no computador

O grfico abaixo mostra os resultados obtidos calculando-se o erro quadrtico em funo do nmero de coeficientes do filtro, tanto para um filtro (SMF), como para a combinao convexa utilizando dois filtros (SMFD). importante lembrar que, como mencionado na seo 4.6, o erro quadrtico
2 calculado atravs da expresso: Erro = e (i) , em que M a ltima amostra i=1 M

armazenada no vetor do erro.

Figura 5.13

Analisando o grfico acima, vemos que na prtica o resultado foi um pouco diferente do previsto. Para reproduzir a resposta impulsiva, o tamanho de 100 coeficientes foi suficiente para isto, diferente do que havamos previsto. Entretanto, o nmero mximo de coeficientes foi na prtica inferior. Para o caso do SMF, vemos que a partir de 400 coeficientes o erro quadrtico comea a subir constantemente. No caso do SMFD, ocorre o mesmo para 200 coeficientes. Portanto, podemos afirmar que, observando o grfico dos ciclos em funo do nmero de coeficientes, a partir de dez mil ciclos por amostra, o

DSP comea a apresentar erros de clculos que se tornam maiores medida que o nmero de ciclos aumenta.

5.10 Assembly Foi mencionado que a programao de parte do algoritmo em assembly diminuiu a quantidade de ciclos necessrios em cada perodo de amostragem. Mas no explicamos o motivo, que est no fato de que a programao em C trabalha com pontos flutuantes, enquanto que a programao em assembly foi feita para ponto fixo. O programa armazena em cada perodo de amostragem uma amostra do sinal de entrada de udio na varivel iChannel0LeftIn, que um inteiro que pode variar entre -2^31 e 2^31. No incio do programa, todas as variveis de entrada so normalizadas para que elas tenham sempre um valor entre -1 e 1. Isto feito atravs da seguinte expresso: x[n]=PRES*iChannel0LeftIn, em que iChannel0LeftIn multiplicada por uma constante PRES. Essa operao realizada em ponto flutuante e o resultado convertido para ponto fixo para que o vetor x possa armazen-lo. O vetor x[n] do tipo fract16, que sempre ter valores entre -1 e 1 com preciso de 16 bits. O mesmo ocorre com o vetor h[n]. O eco cancelado calculado na varivel e, ento se deve desnormalizar atravs da expresso: iChannel0LeftOut=(1/PRES)*e, em que a varivel iChannel0LeftOut a sada final. Ento se deve estudar quanto deve valer a varivel PRES. Analisando de maneira terica, poderamos afirmar que o valor para PRES igual a 2^-31, ou seja, 4.6566*10^-10, garantiria que todos os valores do vetor x estivessem entre -1 e 1. Por outro lado, o valor de PRES, poderia ser maior na prtica, pois os valores da varivel de entrada iChannel0LeftIn no chegam prximo de seu limite que igual a 2^31. Eles so na prtica menores. E como regra pode-se afirmar que quanto menor o valor de PRES, maior ser o erro de quantizao. Por outro lado, devemos garantir que os coeficientes do filtro e o valor do eco estimado, que so variveis fract16, no saturem (nunca tenham mdulo maior que um). Portanto, devemos calcular o valor timo de PRES de maneira experimental. O grfico abaixo mostra os resultados prticos, calculando-se o erro quadrtico (da mesma forma que no item anterior) em funo da varivel PRES.

Vemos que o valor timo para PRES 10E-8. Entretanto o intervalo entre 5E-9 e 1,5E-8 aceitvel. Para valores de PRES que esto fora desse intervalo o erro quadrtico aumenta consideravelmente.
Erro quadrtico em funo da varivel PRES
400 350 Erro quadrtico 300 250 200 150 100 50 0 0 10 20 30 40 PRES (multiplicado por 10E9)

Figura 5.14

Apresentados todos estes conceitos, testes e resultados, estamos preparados para o nosso teste final. 5.11 Teste final: Comparao entre o erro quadrtico do SMF e SMFD Agora que j sabemos que o algoritmo set-membership e a combinao convexa de dois filtros set-membership esto funcionando com um erro quadrtico mnimo, que o detector de double-talk est funcionando corretamente, que o nmero de coeficientes do filtro foi bem escolhido, e que a varivel PRES est na margem permitida para garantir um bom desempenho para o algoritmo, podemos realizar os testes finais. Precisamos testar como o erro quadrtico varia com relao ao Gama, encontrando o Gama timo. Precisamos tambm encontrar Gama1 e Gama2 para que, o erro quadrtico resultante seja menor que o erro quadrtico mnimo encontrado com o gama timo. Utilizando o mesmo esquema descrito no item 5.9, e medindo o erro quadrtico em funo do gama, foi possvel gerar o seguinte grfico para o algoritmo SMF:

Erro quadrtico em funo do Gama


500 Erro quadrtico 400 300 200 100 0 0 0,01 0,02 0,03 Gama 0,04 0,05 0,06

Figura 5.15

Vemos que o valor do gama timo est prximo de 0,025, cujo erro quadrtico mnimo encontrado 272,63. importante mencionar que teoricamente pode-se encontrar um valor menor ainda no intervalo entre 0,025 e 0,03, como por exemplo para o valor de gama igual a 0,0275. Entretanto, analisando o formato do grfico, a diferena deve ser desprezvel. Esse um dos motivos de no termos coletado mais pontos. Devido dificuldade em se calcular o erro quadrtico, para o SMFD no calcularemos 100 opes diferentes para Gama1 e Gama2, como foi feito quando os clculos eram realizados inteiramente no Matlab. Apresentaremos abaixo dois resultados para o SMFD:
Gama1 0,021 0 0,01 Gama2 0,035 0,03 0,05 Erro quadrtico 254,14 282,41 422,52

Observamos que somente o primeiro caso apresentou um desempenho superior ao algoritmo SMF, pois o erro quadrtico mnimo do SMF foi de 272,63 enquanto que o algoritmo SMFD conseguiu apresentar um erro quadrtico de 254,14. Para outros Gama1 e Gama2, no foi possvel chegar ao mesmo nvel de desempenho. Isso mostra a importncia de se escolher o Gama1 e Gama2 com o objetivo de ter um desempenho superior ao do algoritmo SMF.

Percebe-se facilmente que os resultados obtidos foram prximos dos resultados esperados, ou seja, aqueles que foram calculados inteiramente no Matlab, o que demonstra que a programao na placa foi realizada com sucesso.

6. Concluses
Primeiramente, como foi possvel perceber na leitura deste relatrio, pode-se dizer que os resultados obtidos no entraram em contradio com a

parte terica, estudada previamente. Inicialmente, o algoritmo no convergiu, e, portanto, no houve cancelamento de eco. Entretanto, depois de estudar todas as variveis envolvidas, e escolher valores adequados para os passos envolvidos, muitas vezes atravs do mtodo da tentativa e erro, foi possvel chegar a resultados satisfatrios tanto para o Matlab, quanto para a placa da Analog Devices. Acredito que quando ouvimos o som de um udio com o eco cancelado que percebemos que o esforo valeu a pena. Em segundo lugar, eu aprendi muito com essa iniciao. E isto vai desde as partes mais elementares como escrever um relatrio com certo nvel de qualidade, at ter o conhecimento e a fluncia de programar com mais facilidade no Matlab e no Visual DSP++, que o software que controla a placa utilizada. Alm disso, existe todo um procedimento de como resolver problemas para encontrar uma soluo satisfatria. Realmente me sinto mais preparado para realizar projetos de engenharia. Quanto ao projeto e sua viabilidade, no h dvida de que a implementao da combinao convexa de dois filtros set-membership apresenta um desempenho superior do que o algoritmo com apenas um filtro, uma vez que o gama timo varia com o tempo. Entretanto, em minha opinio, a velocidade de processamento das placas nos dias atuais ainda no suficiente para que essa tcnica seja amplamente utilizada, quando utilizamos uma frequncia de amostragem de 48kHz. E o motivo muito simples. Para ambientes em que so necessrios mais coeficientes, a velocidade de processamento no suficiente, quando se utiliza dois filtros, para apresentar um desempenho satisfatrio. Mas acredito que com a evoluo da tecnologia, este mtodo se tornar mais conveniente. Por outro lado, para frequncias mais baixas, como 8 kHz, a implementao desse novo algoritmo, em minha opinio vivel, desde que seja possvel escolher valores de Gama1 e Gama2, que garantam um alto desempenho do cancelamento. Embora na minha graduao de Engenharia Eltrica, minha nfase seja Automao e Controle, gostei muito da experincia de ter realizado um projeto de processamento de sinais.

Bibliografia

[1] J. F. Partamian. Cancelamento de eco acstico utilizando combinao convexa de filtros adaptativos Set-Membership. Dissertao de mestrado, Escola Politcnica da USP, outubro 2008. [2] J. F. Partamian e V. H. Nascimento. Combinao convexa de filtros adaptativos set-membership. In Anais do XXV Simpsio Brasileiro de Telecomunicaes (CDROM), pp. 16, Rio de Janeiro, RJ, 2008. Sociedade Brasileira de Telecomunicaes (SBrT). [3] Paulo S.R. Diniz. Adaptive Filtering: Algorithms and Practical Implementation. Third Edition. Springer, 2008 [4] V. H. Nascimento. Implementao de algoritmo Set-Membership para cancelamento de eco acstico. Plano de trabalho para a iniciao cientfica do candidato Marcos Loeff, fevereiro 2009. [5] C/C++ Compiler and Library Manual for Blackfin Processors, Analog Devices, August 2007. [6] ADSP-BF53x/BF56x Blackfin Processor Programming Reference, Analog Devices, February 2006. [7] ADSP-BF533 EZ-KIT Lite, Evaluation System Manual, Analog Devices, September 2007.