Professional Documents
Culture Documents
R EDUO A DAPTATIVA
R UDO
PARA
DE
E CO
E DE
So Paulo
2002
R EDUO A DAPTATIVA
R UDO
PARA
DE
E CO
E DE
So Paulo
2002
Sumrio
1 Apresentao
2 Aspectos Tericos
10
11
12
15
19
20
30
35
39
42
43
2.3 Comentrios . . . . . . . . . . . . . . . . . . . . . . . . . .
48
3 Implementao Prtica
50
51
54
3.2.1 Ncleo . . . . . . . . . . . . . . . . . . . . . . . . .
54
64
64
SUMRIO
II
3.3.1 Processamento . . . . . . . . . . . . . . . . . . . . .
65
67
3.4 Integrao . . . . . . . . . . . . . . . . . . . . . . . . . . .
70
3.5 Comentrios . . . . . . . . . . . . . . . . . . . . . . . . . .
71
4 Resultados
73
73
74
4.2.1 Resultados . . . . . . . . . . . . . . . . . . . . . . .
75
4.2.2 Especificaes . . . . . . . . . . . . . . . . . . . . .
79
80
4.3.1 Resultados . . . . . . . . . . . . . . . . . . . . . . .
80
4.3.2 Especificaes . . . . . . . . . . . . . . . . . . . . .
81
82
4.5 Comentrios . . . . . . . . . . . . . . . . . . . . . . . . . .
83
5 Concluses
87
A Listagens Matlab
90
91
92
93
95
96
B Listagens SHARC
B.1 Reduo de rudo (em linguagem C) . . . . . . . . . . . .
97
98
112
119
Lista de Figuras
1.1 Aplicao de terminal viva-voz . . . . . . . . . . . . . . .
13
14
17
20
21
24
26
29
34
35
36
38
39
41
47
52
III
LISTA DE FIGURAS
IV
53
69
70
71
76
77
78
79
81
82
83
85
86
Lista de Tabelas
2.1 Algoritmo LMS convencional. . . . . . . . . . . . . . . . .
11
12
18
19
41
46
53
55
3.3 Ncleo do algoritmo EFLSL modificado, com equaes reordenadas e identificadores atrelados aos operandos. . .
56
58
3.5 Quadro mostrando o contedo dos registradores imediatamente antes de cada ciclo de execuo. . . . . . . . . . .
3.6 Endereamento para o algoritmo EFLSL
60
. . . . . . . . .
61
62
63
75
79
80
84
Resumo
H um grande interesse hoje em desenvolver terminais viva-voz que
permitam aos participantes de uma conversa distncia contarem com
um bom grau de naturalidade e inteligibilidade.
O objetivo deste trabalho apresentar soluo para dois impedimentos que surgem quando se deseja projetar um terminal viva-voz
para ser utilizado em automveis: o eco acstico resultante do acoplamento entre microfone e alto-falante do terminal; e o rudo ambiente
produzido por exemplo pelo vento, pneus e motor do veculo.
A soluo proposta envolve o uso de filtros adaptativos e alteraes
no espectro do sinal de voz para minimizar os problemas mencionados. Os aspectos tericos so abordados de forma breve, sem deixar
no entanto que nenhum detalhe importante fique de fora. Uma implementao prtica e eficiente em processador digital de sinais um dos
destaques do trabalho.
VI
Abstract
There is currently great motivation in developing hands-free devices
which offer users, engaged in a telephone conversation, a good level of
naturalness and intelligibility.
In this work, the goal is to present a solution for two well-known
problems that occur when designing a hands-free device for use in automobile environments: (1) the acoustic echo coupling between microphone and speaker, and (2) the background noise generated for example by wind, tires and vehicle engine.
The proposed solution includes adaptive filtering techniques and
modifications in the speech signal spectrum, in order to minimize the
two problems above. Theoretical issues are briefly analyzed, however
the author believes no relevant detail is kept out. Highlighted in the
report is a practical and efficient implementation of the algorithms in
a modern digital signal processor.
VII
brico;
Projeto de filtros de reconstruo quase-perfeita com atraso pequeno, para uso em estrutura polifsica;
VIII
Captulo 1
Apresentao
Em 1982, quando o FCC1 autorizou os servios de telefonia mvel, uma
nova indstria comeou seu caminho evolutivo para a situao que se
apresenta hoje: milhes de telefones mveis em operao, permitindo a
comunicao de voz e dados em qualquer lugar, desde a prpria casa ou
escritrio, nas horas de lazer e at nas ruas e dentro dos automveis.
Quando se pensa no uso de telefones celulares em automveis, vm
mente as preocupaes com o conforto e a segurana; por isso, h hoje
um grande interesse em desenvolver terminais viva-voz que permitam
aos participantes de uma conversa distncia contarem com um bom
grau de inteligibilidade e naturalidade. Esses terminais avanados tratam de resolver ou minimizar dois problemas (ver Figura 1.1 na pgina
seguinte):
O eco acstico resultante do acoplamento entre o alto-falante, o ambiente e o microfone; e
O rudo ambiente, do prprio motor do carro, dos pneus e do vento na
janela que perturbam a voz local2 , reduzindo a relao sinal-rudo
1
Apresentao
Apresentao
Um filtro adaptativo serve bem a esse propsito e vem sendo utilizado extensivamente em equipamentos de viva-voz [1, 2, 3, 4, 5], para
reduzir o chamado eco acstico. Outro tipo de eco presente nos enlaces
que envolvem telefones fixos, causado pelo descasamento de impedncia entre o cabo e o aparelho, tem sido resolvido com equipamentos
instalados na central telefnica [6] e no especificamente abordado
neste trabalho.
Dois so os propsitos de um sistema de reduo de rudo para sinais
de voz: a) diminuir o incmodo causado pela presena do rudo e b)
destacar o sinal de voz para aumentar sua inteligibilidade.
Ao longo da ltima dcada, diversos autores atacaram o problema
de vrias formas, incluindo abordagens baseadas nos conceitos de filtragem adaptativa [7, 8, 9] e que precisam de um ou mais microfones de
referncia longe da fonte de voz. Tambm alguns usaram idias de redes neurais e separao de sinais aplicadas ao problema de melhorar a
qualidade dos sinais de voz [10, 11, 12]. Outros modelaram os sinais de
udio ou voz como processos estocsticos autorregressivos de mdia mvel (ARMA3 ) e empregaram a teoria de Bayes ou dos filtros de Kalman
para estimar verses mais limpas dos sinais de interesse [13, 14, 15].
O algoritmo empregado neste trabalho pertence a outra classe de
tcnicas conhecida como subtrao espectral, a qual alcanou popularidade no desenvolvimento de terminais viva-voz graas sua simplicidade conceitual e computacional, capacidade de reduo do rudo em
ambientes hostis (fbricas, aeroportos, helicpteros e caminhes, por
exemplo) e necessidade de apenas um microfone para seu uso.
A teoria, a implementao prtica e os resultados obtidos aparecem
assim divididos nos captulos seguintes:
Captulo 2: Mostra os conceitos fundamentais de filtragem adaptativa e subtrao espectral, expondo os diversos algoritmos mais
utilizados em cancelamento de eco e as tcnicas utilizadas para
3
Apresentao
Apresentao
as conversas mais naturais; os ambientes envolvidos nessas atividades so maiores que um automvel tpico e exigem maior carga
computacional, mas possvel;
Restaurao de udio com rudo estacionrio (e.g. discos velhos e
fitas com chiados);
Captulo 2
Aspectos Tericos
Este captulo dividido em duas sees, correspondendo a primeira teoria usada no cancelamento de eco acstico e a segunda reduo de rudo.
A primeira seo comea com uma reviso dos conceitos de
filtragem adaptativa e suas vrias abordagens. Detem-se depois
no mtodo dos mnimos quadrados para explicar o algoritmo da
famlia RLS1 utilizado no desenvolvimento do cancelador de eco
proposto. Nenhum algoritmo perfeito em todos os aspectos, mas
esse foi escolhido por apresentar alta taxa de convergncia, robustez numrica e boa capacidade de ajuste s mudanas estatsticas do ambiente modelado.
A segunda seo inicia com a apresentao de uma reviso
terica sobre anlise e sntese em freqncia utilizando a transformada de Fourier. Essa reviso estendida na Seo 2.2.3 com a
introduo da estrutura polifsica e o projeto de filtros para essa
estrutura. O algoritmo de subtrao espectral convencional, em
sua forma mais simples, explicado na Seo 2.2.4 junto com a
discusso de suas propriedades mais importantes. A Seo 2.2.5
apresenta algumas tcnicas de obteno das estatsticas do rudo
1
Aspectos Tericos
e como podem ser utilizadas em conjunto com o algoritmo de subtrao espectral. Finalmente, so introduzidos elementos de psicoacstica que tornam o algoritmo bastante mais robusto e com
menos perda de qualidade na voz.
Aspectos Tericos
Ambiente
Reverberante
v(n)
d(n)
x(n)
Filtro
adaptativo
w(n)
d(n)
e(n)
Figura 2.1: Diagrama de blocos para o cancelador de eco acstico.
captado pelo microfone local a partir do sinal do alto-falante x(n). Idealmente, supondo que a contribuio v(n) para o sinal do microfone seja
estatisticamente independente do eco acstico, o sinal de erro
(2.1)
M
1
X
k=0
wk x(n k),
(2.2)
Aspectos Tericos
w0
z 1
x(n 1)
w1
z 1
x(n 2)
z 1
w2
wM 1
y(n)
(2.3)
em que E{} denota o operador estatstico esperana, com o erro de estimao dado pela equao (2.1) e os coeficientes do filtro representados
pelo vetor w.
Sinais no-estacionrios. Quando os sinais envolvidos no so
estacionrios, ou suas propriedades estatsticas no so conhecidas,
no possvel projetar o filtro de Wiener. possvel, no entanto, contornar essa dificuldade por dois caminhos:
1. Adotar um procedimento de dois estgios, com a estimativa dos
parmetros estatsticos ocorrendo no primeiro e o resultado sendo
usado para computar, de forma no-recursiva, os coeficientes do
filtro no segundo; ou
2. Usar um filtro adaptativo, no qual um algoritmo recursivo parte
de algumas condies iniciais para convergir aos poucos para a
soluo tima de Wiener. Um algoritmo bem conhecido para fazer
essa adaptao chamado Least-Mean Square, ou LMS.
Aspectos Tericos
10
(2.4)
(2.5)
(2.6)
Aspectos Tericos
11
2
M r(0)
(2.7)
Aspectos Tericos
12
rada
E(n) =
n
X
k=0
2
nk
L |e(k)|
(2.8)
na qual L < 1 uma constante positiva, denominada fator de esquecimento, empregada para garantir que as amostras passadas tenham
menor peso no ndice de desempenho. Assim, o filtro pode operar em
ambientes no-estacionrios.
Usando um resultado conhecido como lema da inverso matricial, e
partindo da equao normal adaptada ao ndice de desempenho E(n),
1 P(n1)x(n)
1+1 xT (n)P(n1)x(n)
Note que, na Tabela 2.1 e na definio 2.1, o erro e(n) pode ser denominado a
Aspectos Tericos
13
Amplitude
0.05
0
-0.05
-0.1
10
Amostras (n)
15
20
Aspectos Tericos
14
2
(2.9)
M x2
e, atendendo a esse critrio, dois valores foram escolhidos: 1 =
0<<
0,02 e 2 = 0,05.
A Figura 2.4 mostra as curvas de aprendizado dos filtros para os
dois algoritmos, ou seja, o erro de estimao e(n) ao longo do tempo.
As curvas foram obtidas pela mdia do conjunto de 40 realizaes do
processo.
LMS (1 = 0.02)
LMS (2 = 0.05)
RLS ( = 1)
-10
-20
-30
-40
-50
-60
0
50
100
150
200
n
250
300
350
400
Comparao. A convergncia do algoritmo RLS muito mais rpida que a do LMS. Cerca de 50 iteraes (pouco mais que o dobro do
nmero de coeficientes) so necessrias para que o erro de estimao
atinja o patamar mnimo, para o RLS. Para o LMS esse tempo de
quatro a oito vezes maior. Essa diferena se deve ao fato de o algoritmo
RLS utilizar toda a informao presente no sinal, desde o instante inicial de operao.
Aspectos Tericos
15
Aspectos Tericos
16
Aspectos Tericos
17
0 [n]
x[n]
M 1 [n]
M [n]
b,1 [n 1]
b,M [n 1]
f,1 [n 1]
f,M [n 1]
1 [n]
z 1
0 [n]
d[n]
1 [n]
bM 1 [n]
M [n]
z 1
0 [n 1]
1 [n 1]
M 1 [n 1]
M [n 1]
1 [n]
2 [n]
M [n]
Aspectos Tericos
18
Condies iniciais (n = 0, m = 1, . . . ,M ):
m1 (0) = 0
f,m1 (0) =
b,m1 (0) =
Predio (n 1, m = 1, . . . ,M ):
f,m (n) =
m (n)
Estimao conjunta (n 1, m = 0, . . . ,M ):
m (n) = L m (n 1) + m (n)m (n)m (n)
m+1 (n) = m (n) m (n 1)m (n)
m (n) =
m (n)
b,m (n)
Aspectos Tericos
1
2
3
4
5
6
7
8
9
19
b
b
m1
(n) = L m1
(n 1) + bm1 (n)m1 (n) +
bm1 (n) =
bm1 (n)
b
m1
(n)
f
f
m1
(n) = L m1
(n 1) + fm1 (n)m1 (n) +
f m1 (n) =
fm1 (n)
f
(n)
m1
Aspectos Tericos
20
x0
x1
xM 1
x=s+r
Supresso
de
Rudo
s1
sM 1
Anlise
Espectral
Sntese
Espectral
2
,
M
= 0,1, . . . ,M 1
(2.10)
so as freqncias centrais das M faixas em que o espectro dividido e = 2 a freqncia de amostragem normalizada. Cada filtro
3
Neste texto, j =
Aspectos Tericos
21
h0
h0
y0
y1
r
r
x0
x1
ej1 k
h0
ejM 1 k
yM 1
xM 1
(a)
X()
Y2 ()
X2 ()
0
(b)
Figura 2.7: Anlise espectral com banco de filtros passa-baixas: (a) diagrama
de blocos; (b) exemplo grfico para M = 6 e r = 4.
+
X
n=
h0 (k n)x(n)ej n ,
(2.11)
Aspectos Tericos
22
1 se || < M
H0 () =
,
0 se || M
(2.12)
para que cada sinal y (k) no contenha informao redundante de outras bandas, e nem restem trechos sem a devida representao em
r N
(2.13)
ser obtida utilizando-se de resultados referentes amostragem de sinais contnuos no tempo [25]. O resultado
r1
1X
Y
X () =
r `=0
2`
r
(2.14)
2
2
r M.
(2.15)
M
r
A condio r = M . Aqui cabe um comentrio de ordem prtica: os
Aspectos Tericos
23
ser indesejvel.
+
X
n=
h0 (rk n)x(n)ej n .
(2.16)
Aspectos Tericos
24
x(k) no modulado em freqncia. Ao contrrio, os filtros que sofrem um deslocamento no espectro a partir do prottipo h0 (k), e passam
a ser escritos como
h (k) = h0 (k)ej k .
x
h0
h1
hM 1
y0
y1
yM 1
r
r
(2.17)
x0
x1
xM 1
(a)
X()
Y2 ()
2 ()
X
0
2
(b)
Figura 2.8: Anlise espectral com banco de filtros passa-faixa: (a) diagrama
de blocos; (b) exemplo grfico para M = 6 e r = 4.
+
X
n=
h (k n)x(n)
(2.18)
Aspectos Tericos
25
+
X
n=
= e
j k
n=
j k
= y (k)e
h0 (k n)x(n)ej n =
(2.19)
= x (k)e
(2.20)
que, quando comparada equao (2.16), revela as similaridades e diferenas entre as estruturas passa-baixas e passa-faixa.
Comparao entre as estruturas. Em geral, os sinais x (k) e
x (k) so diferentes, porm contm a mesma informao: ambos representam a evoluo no tempo da transformada de Fourier de curto
prazo na freqncia . Apenas, se r < M , o espectro de x (k) ligeiramente deslocado em relao sua verso passa-baixas x (k). No caso
de r = M , o argumento da exponencial complexa
2
ej rk = ej M rk
Aspectos Tericos
26
r = M ; x (k) = x (k).
Sntese: estrutura passa-baixas
O objetivo desta seo e da prxima explicar como o processo de anlise pode ser revertido, isto , como, a partir dos sinais nas bandas de
freqncia (que representam a transformada de Fourier de curto prazo)
se pode obter o correspondente sinal no tempo.
Suponha que esto disponveis M seqncias sub-amostradas s (k),
= 0,1, . . . ,M 1, sadas de uma estrutura de anlise passa-baixas
sM 1
r
r
u0
u1
uM 1
g0
g0
ej1 k
g0
ejM 1 k
(2.22)
Aspectos Tericos
27
U () = S (r),
(2.23)
o que permite visualizar melhor seu efeito: as amostras nulas introduzidas pela interpolao causam o aparecimento de repeties peridicas
(com perodo
2
)
r
cias.
A filtragem passa-baixas subseqente
+
X
v (k) =
n=
(2.24)
g0 (k n)u (n)
.
M
ciamais amostras para representar a mesma informao temporrio e apenas um passo na montagem da seqncia a ser obtida no
final do processo de sntese.
O filtro g0 (k) ideal tem o mesmo formato daquele definido para a
estrutura de anlise (ver equao ( 2.12 na pgina 22))
G0 () =
r 1 se || <
0
se ||
(2.25)
onde o ganho adicional r serve para compensar a diminuio na densidade de potncia que ocorre com a insero das amostras nulas.
Modulao. Aps a filtragem, os sinais v (k), ainda centralizados
na origem, so deslocados em freqncia por meio da modulao complexa e+j k e somados
s(k) =
M
1
X
=0
e+j k v (k).
(2.26)
Aspectos Tericos
28
+
M
1 X
X
=0 n=
g0 (k n)u (n)e+j k ,
(2.27)
que ainda precisa ser relacionada aos sinais de entrada s . Para isso,
preciso reescrever a expresso da interpolao utilizando um trem
de pulsos ao invs de uma definio condicional como a equao (2.22).
Assim, possvel verificar que
u (k) =
`=
(2.28)
s (`)(k r`),
M
1 X
+
X
=0 n=
g0 (k n)u (n)e+j k
+
M
1 X
X
=0 n= `=
M
1
X
+
X
X
=0 `= n=
g0 (k n)
s (`)(k r`)e+j k
g0 (k n)(k r`) s (`)e+j k ,
{z
g0 (kr`)
M
1
X
=0
"
`=
g0 (k r`)
s (`) e+j k .
(2.29)
Aspectos Tericos
29
(2.30)
+
X
n=
s0
s1
sM 1
r
r
u0
u1
uM 1
(2.31)
g (k n)
u (n).
g0
g1
gM 1
Considerando-se ideal cada filtro g (k), seu espectro o mesmo utilizado na estrutura passa-baixas deslocado em freqncia pela modulao complexa
g (k) = g0 (k)ej k
(2.32)
.
M
Aspectos Tericos
30
M
1 X
+
X
=0 n=
(2.33)
`=
(2.34)
s (`)(k r`)
M
1
X
=0
"
`=
g0 (k r`)
s (`)ej r` ej k .
(2.35)
Comparao com estrutura passa-baixas. Os resultados apresentados nas equaes (2.29) e (2.35) podem ser melhor interpretados
na condio de reduo mxima da taxa de amostragem r = M e uso
de filtragem ideal. Nesse caso, a exponencial complexa ej r` reduz-se
unidade, as seqncias das bandas so idnticas (ver discusso no
fim da Seo 2.2.1), e os sinais reconstrudos s(k) e s(k) so portanto
matematicamente iguais. Na verdade, mesmo para r < M , pode-se verificar que os sinais reconstrudos s e s so idnticos se as estruturas
utilizadas na anlise e sntese forem compatveis.
Aspectos Tericos
31
k
X
`=0
=
=
k
X
`=0
k
X
`=0
h (`)g (k `)
h0 (`)ej ` g0 (k `)ej (k`)
h0 (`)g0 (k `)ej k .
(2.36)
M
1
X
hef, (k) =
=0
k
X
`=0
h0 (`)g0 (k `)s(k),
(2.37)
(2.38)
mento espectral (aliasing) causado pela reduo da taxa de amostragem puder ser desconsiderado. Uma maneira de garantir essa condio, para sub-amostragem no-crtica (r < M ), impor uma atenuao
elevada para a faixa de rejeio nos prottipos h0 (k) e g0 (k). Valores
Aspectos Tericos
32
k
X
`=0
h0 (`)g0 (k `).
(2.39)
Notando-se que
(2.40)
(2.41)
A constante k0 = a0 M serve para contabilizar um possvel atraso introduzido pelos filtros. Em implementaes prticas feitas para operar
em tempo real, esse atraso (que sempre existe) no pode ser compensado, apenas minimizado.
Filtro ideal. O filtro passa-baixas ideal, com freqncia de corte
c =
,
M
(2.42)
obviamente satisfaz as especificaes (2.41) acima, mas de pouca utilidade prtica. Uma forma de atender s especificaes multiplicar a
resposta impulsiva ideal
hideal (k) =
sin M
k
k
(2.43)
por uma janela de comprimento finito e formato apropriado para garantir a atenuao adequada na faixa de rejeio. Janelas como as de
Hamming, Kaiser e Chebyshev podem ser utilizadas [26].
6
Aspectos Tericos
33
M
1
X
=0
H0 (
2
2
)G0 (
),
M
M
(2.44)
(2.45)
se torna simplesmente
Hcomp () =
M
1
X
=0
H02 (
2
).
M
(2.46)
Aspectos Tericos
34
`min (n)
log | |
iDFT
DFT
X()
exp()
Xmin ()
Note que a transformao de Hilbert realizada por trs blocos ilustrados na figura, a saber: uma transformada de Fourier inversa (iDFT),
uma multiplicao pela seqncia
`min (n) = 2u(n) (n),
(2.47)
na qual u(n) representa um degrau unitrio, e finalmente uma transformada de Fourier direta.
A fase de Hmin () no mais necessariamente linear, porm a eventual distoro introduzida no relevante para o processamento de sinais de udio. O ganho, em termos de atraso perceptvel no sinal,
bastante significativo e mais importante que uma eventual distoro
na fase.
Exemplo. O filtro projetado para M = 32 bandas, pode ser visto
representado por sua resposta impulsiva na Figura 2.12 na pgina seguinte e resposta em freqncia na Figura 2.13 na pgina 36. Em cada
grfico, duas curvas so mostradas:
Projeto de fase linear (linha tracejada); e
Projeto de mnima fase (linha contnua).
Para o projeto deste prottipo foi utilizada uma janela de Kaiser.
Note que resposta em freqncia resultante permite somente a interpenetrao de filtros adjacentes, o que virtualmente elimina o efeito do
rebatimento na superposio espectral.
Aspectos Tericos
35
0.04
hmin
h0
0.03
h0 (n)
0.02
0.01
0
-0.01
0
50
100
150
n
200
250
(2.48)
q = {0,1,2,3, . . .}
(2.49)
obtm-se
y (qr) =
1
+ M
X
X
`=0 =0
(2.50)
Fase (rad)
Magnitude (dB)
Aspectos Tericos
36
Hmin
H0
-20
-40
-60
0
Hmin
H0
-500
-1000
0.05
0.1
0.3
0.35
0.4
M
r
(2.51)
se k 6= `M +
(2.52)
x(k) se k = `M +
se k 6= qr
h0 (k) se k = qr
(2.53)
M
1
X
=0
M
j
[h(r)
,
(qr) x (qr)] e
(2.54)
Aspectos Tericos
37
A equao (2.54) mostra que o deslocamento em freqncia, a filtragem passa-baixas e a subseqente reduo da taxa de amostragem
podem ser descritos igualmente pela convoluo de cada subseqn(M )
cia x
(r)
so calculados;
nores, de largura m.
Devido sub-amostragem do prottipo passa-baixas h0 , fases diferentes esto associadas com as funes de transferncia dos caminhos
individuais da estrutura, razo para o termo rede polifsica normalmente encontrado na literatura.
Sntese. A reconstruo do sinal a partir de seu espectro, descrita
pela Figura 2.9 na pgina 26, tambm pode ser feita de modo mais eficiente seguindo procedimento anlogo ao descrito para a anlise. Partindo da equao (2.28), usando a substituio de variveis
k = `M + ,
(2.55)
Aspectos Tericos
38
(M )
x0
(r)
h0
(M )
x1
(r)
h1
(M )
xr1
x
(M )
xr
(r)
hM 1
(r)
h0
(M )
xr+1
(r)
h1
(M )
xM 1
(r)
hM 1
(r)
x0
(r)
x1
(r)
xr1
y0
y1
yr1
DFT
(M ) xr
(r)
yr
(r)
xr+1
(r)
xM 1
yr+1
yM 1
(2.56)
obtm-se
s(`M + ) = g(r) (`M + )
"M 1
X
=0
s (qr)e+j .
(2.57)
Aspectos Tericos
39
(r)
s0
u0
s1
u1
sr1
iDFT
sr (M )
(r)
g0
(r)
(r)
g1
(r)
ur1
(r)
gM 1
(r)
ur
(r)
g0
(r)
sr+1
ur+1
sM 1
uM 1
(r)
g1
(r)
(r)
gM 1
(2.58)
Aspectos Tericos
40
(2.59)
(2.60)
Aspectos Tericos
41
S1 (Q ) = 1 Q
p
S2 (Q ) = 1 Q
p
S3 (Q ) = 1 Q
S1
S2
S3
Coeficiente c
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0.8
Q
Figura 2.16: Leis para supresso de rudo.
Aspectos Tericos
42
sinal de voz.
(2.61)
(2.62)
Aspectos Tericos
43
Lw menor que L para permitir eventuais ajustes rpidos e diminuir as necessidades de armazenamento do algoritmo.
(2.63)
(2.64)
Aspectos Tericos
44
Cclea ou membrana basilar: longo canal de forma espiral, cheio de lquido, que
se comunica por meio de trs pequenos ossos (martelo, bigorna e estribo) com a membrana timpnica. Est situado no ouvido interno.
Aspectos Tericos
45
(2.65)
onde os ndices re e im denotam, respectivamente, a parte real e imaginria do sinal. Esse espectro convertido em potncia
Px (f ) = |Xre (f )|2 + |Xim (f )|2
(2.66)
e a energia contida em cada uma das bandas crticas (ver Tabela 2.6)
somada
Bn =
f2,n
X
Px (f ),
(2.67)
f =f1,n
normalmente calculada por meio de um algoritmo chamado FFT (Fast Fourier Transform) devido a motivos prticos.
Aspectos Tericos
46
n (banda) Incio (Hz)
1
0
2
100
3
200
4
300
5
400
6
510
7
630
8
770
9
920
10
1080
11
1270
12
1480
13
1720
14
2000
15
2320
16
2700
17
3150
18
3700
Fim (Hz)
100
200
300
400
510
630
770
920
1080
1270
1480
1720
2000
2320
2700
3150
3700
4400
(2.68)
S(k) (dB)
Aspectos Tericos
0
-50
-100
-150
-200
-10
47
-5
0
5
k (deslocamento)
10
15
(2.69)
Gm
Am
(2.70)
Aspectos Tericos
48
banda. A segunda coisa converter as bandas crticas para um espectro linear novamente, o que se faz repetindo valores nas faixas de
freqncia correspondentes a cada banda crtica. Com isso, o clculo do
valor do limiar se completa.
O redutor de rudo convencional pode ser utilizado para se obter
uma estimativa do sinal de voz e partir deste calcular o limiar de mascaramento Tn para cada freqncia. Suponha que rn representa a energia local em cada banda, e R um nvel residual de rudo que se deseja
manter no sinal. Ento a regra de atenuao espectral a seguinte:
cn = min
!
Tn
+ R , 1,0 .
rn
(2.71)
2.3 Comentrios
A base terica do sistema de cancelamento de eco acstico e reduo de
rudo foi apresentada neste captulo.
Cr-se que as razes para a escolha do algoritmo EFLSL foram explicadas: velocidade de convergncia, robustez numrica e baixa complexidade computacional (comparado a outros algoritmos da mesma famlia).
Aspectos Tericos
49
Acredita-se tambm que o algoritmo de subtrao espectral, dependente de adequadas estruturas de anlise e sntese espectrais, foi justificado. Com a incluso da tcnica de estimao do rudo por estatsticas mnimas e dos critrios psicoacsticos, o subsistema de reduo de
rudo descrito tem condies para operar em ambientes ruidosos e com
caractersticas variantes no tempo.
O prximo captulo enfoca os aspectos prticos do sistema, sua implementao em processador digital de sinais para operao em tempo
real, as escolhas feitas para alguns parmetros introduzidos neste captulo terico. Referncias abundantes s listagens dos programas criados para projetar e executar os algoritmos de cancelamento de eco e
reduo de rudo acompanham as explicaes do captulo seguinte.
Captulo 3
Implementao Prtica
As discusses do captulo anterior foram aplicadas na construo
de um prottipo funcional, capaz de demonstrar a utilidade dos filtros adaptativos da famlia RLS e tambm dos processos de anlise,
modificao e sntese espectrais.
Este captulo inicia com uma exposio breve da arquitetura
do processador digital de sinais escolhido para o prottipo e segue
mostrando a simulao e implementao eficiente do algoritmo
LSL nesse processador. Um processo semi-formal desenvolvido especialmente para este projeto, mas com potencial para uso na
implementao de algoritmos adaptativos em geral, detalhado.
A implementao do sub-sistema de anlise e sntese espectrais, usando eficientes estruturas polifsicas, vem logo a seguir. Os
aspectos prticos do processo de estimao de rudo a partir do
sinal capturado pelo microfone so expostos, bem como as rotinas
de supresso espectral de rudo, com e sem ponderao psicoacstica.
O captulo termina com algumas observaes sobre a integrao do filtro adaptativo e do redutor de rudo em um nico sistema.
Alm disso, so feitos alguns comentrios sobre a montagem do
prottipo funcional.
50
Implementao Prtica
51
Dois barramentos separados para acesso memria interna permitem que dois operandos sejam transferidos em um mesmo ciclo;
uma unidade computacional especializada, enquanto uma unidade aritmtica se encarrega das adies e subtraes;
Operaes em paralelo. Os 16 registradores, onde ficam os fatores e parcelas e tambm os resultados das operaes, podem ser divididos em quatro grupos de quatro elementos cada um, de acordo com a
Tabela 3.1 na pgina 53.
1
2
Implementao Prtica
52
Core Processor
DAG 1
DAG 2
8 x 4 x 32
8 x 4 x 24
PROGRAM
SEQUENCER
BLOCK 0
INSTRUCTION
CACHE
32 x 48Bit
Two Independent,
DualPorted Blocks
PROCESSOR PORT
ADDR
DATA
BLOCK 1
DualPorted SRAM
I/O PORT
DATA
ADDR
48
DATA
REGISTER
FILE
MULTIPLIER
16 x 40Bit
BARREL
SHIFTER
ALU
Implementao Prtica
53
Grupo
Registradores
R0, R1, R2 e R3
R4, R5, R6 e R7
R0
R1
R2
R3
R8
R9 R10 R11
R4
R5
R6
R7
Unidade
Aritmtica
R0 . . . R15
Figura 3.2: Diagrama de condies para funcionamento paralelo das
unidades computacionais do SHARC.
Implementao Prtica
54
3.2.1 Ncleo
A Tabela 3.2, cpia parcial da Tabela 2.4 na pgina 19 e repetida aqui
por convenincia, mostra as equaes que compem a parte principal
do algoritmo. Como a eficincia na utilizao do processador um aspecto importante, um processo de otimizao foi desenvolvido e ser
explicado a seguir.
Ordem das equaes. O primeiro passo colocar as equaes em
uma ordem diferente de execuo, deixando as que precisam dos resultados de outra(s) equao(es) para o final. Depois de reordenadas,
as operaes formam uma espcie de hierarquia, onde algumas do
mesmo grupo podem ser executadas em paralelo e outras dependem
de grupos anteriores.
Implementao Prtica
1
2
3
4
5
6
7
8
9
55
b
b
m1
(n) = L m1
(n 1) + bm1 (n)m1 (n) +
bm1 (n) =
bm1 (n)
b
m1
(n)
f
f
m1
(n) = L m1
(n 1) + fm1 (n)m1 (n) +
f m1 (n) =
fm1 (n)
f
(n)
m1
Com isso, h uma maior possibilidade de manter a unidade aritmtica (realizando multiplicaes, principalmente) em carga total, sem
ter que esperar por transferncias de variveis. Assim, por exemplo, a
operao da linha 4 no pode ser executada sem o resultado da linha
3, e precisa ser deslocada em direo ao final. Em seu lugar, a linha 7
pode ser colocada.
Identificadores. Para facilitar um tratamento mais formal das
equaes da Tabela 3.2, as variveis so identificadas. Notando que
vrios operandos se referem aos mesmos smbolos com ndices (ou tempos) diferentes, um esquema de identificao que agrupe os operandos
por similaridade foi escolhido. A Tabela 3.3 mostra as equaes reordenadas e j identificadaspor meio de caixas com letras minsculas do
alfabeto latino. A numerao das equaes foi preservada para comparao.
O segundo passo escolher uma representao das equaes mos-
Implementao Prtica
1
56
f
m1
(n)
f
L m1
(n
k
l
n
f m1 (n) =
o
b
b
m1
(n) = L m1
(n 1) + bm1 (n)m1 (n) +
n
bm1 (n) =
j
fm1 (n)
f
(n)
m1
bm1 (n)
b
(n)
m1
13
dm (n)
g
Implementao Prtica
57
Implementao Prtica
ID
a
b
c
d
e
c
d
f
g
a
h
c
i
f
j
k
l
m
n
b
l
n
o
j
e
g
d
58
12
Equaes
10
8
4
11
13
?
?
?
Implementao Prtica
59
las devem ser colocados preferencialmente em registradores adequados nos grupos C ou D. As parcelas que so posteriormente
subtradas precisam ficar no grupo D. Parcelas que participam
de operao conjunta devem ser colocadas em grupos diferentes.
Exemplos: cg , gerado no ciclo 5, aparece no grupo D, para ser
subtrado de f no ciclo 6;
5. Em cada grupo, o mnimo de registradores devem ser utilizados
em um dado momento da iterao;
6. No sobrepor contedo de registrador quando esse contedo ainda
for utilizado em operao posterior no mesmo grupo;
7. A diviso feita em duas etapas: uma inverso que no paralelizvel e uma multiplicao normal.
A Tabela 3.5 mostra, para cada ciclo (linha), o valor que cada registrador possui imediatamente aps o ciclo anterior e imediatamente
antes do ciclo corrente. A escrita das operaes em assembly algbrico
deriva diretamente dessa tabela.
Transferncia de dados. O quarto passo relacionar as operaes de transferncia de dados entre memria e registradores, todas
realizadas por meio de acesso indireto.
Notando-se que algumas das variveis da Tabela 3.3 no precisam
ser guardadas de iterao para iterao (porque so constantes ou porque so intermedirias), conclui-se que as restantes podem ser representadas por vetores.
Os tamanhos dos vetores so escolhidos a partir de anlise da Tabela 3.2. Vale lembrar que m = 1 . . . M , com M igual ao nmero de
coeficientes do filtro.
Cada varivel que precisa ser transferida a cada iterao apontada por um ndice I0I15, de acordo com a Tabela 3.6.
Os ndices so escolhidos de modo a possibilitar a transferncia simultnea de dois operandos (um deles pelos ndices I0I7 e o outro
Implementao Prtica
60
Multiplicador
#
R0
1
2
3
b
a
a
4
5
12
13
14
15
16
17
18
R2
R4
a-bc
(a)
c
d
ad
(h)
c
c
6
7
9
10
11
A
R1
Acumulador
B
R5
g
j
R12
D
R13
R14
bc
c
c-ae
(c)
f
aj
aj+b
(b)
k
l=ah+
kl+m
1/l
o=h/l
R10
R8
e
d
cd
(i)
a
f-cg
(f )
R6
C
R9
ae
cg
b
ah
ah
ah+kl
ci
kl
m
kn
h
c
n=ci+
kn+m
1/n
j=i/n
ci
ci+kn
kn
m
oc
i
f
oc
oc+e
(e)
i
d
19
f j
f j+g
(g)
g
ji
d-ji
(d)
Implementao Prtica
61
a, a
I0
b, b
I1
c, c, c
2(M + 1)
I2
j, j
I3
I4
n, n
I5
d, d, d
2(M + 1)
I8
e, e
I9
f, f
I10
g, g
I11
l, l
I12
I13
Implementao Prtica
62
Ciclo
DM
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
R0 / [I1]
R0 / [I0]
R1 / [I2]
R2 . [I0]
R6 / [I3]
R12 / [I1]
R0 / [I4]
R8 . [I1]
R6 / [I5]
PM
R4 / [I8]
R5 / [I9]
R5 / [I8]
R6 / [I11]
R8 / [I10]
Extra
R4 / [I2]
R8 / [I0]
R8 / [I2]
R8 . [I2]
R6 / [I12]
R2 . [I10]
R12 / [I13]
R0 . [I12]
R4 / [I2]
R1 . [I5]
R4 / [I10]
R1 . [I3]
R12 / [I9]
R12 / [I11]
R8 / [I8]
R9 . [I11]
R8 . [I8]
Implementao Prtica
63
conjunto M0M7 so utilizados com os ndices I0I7, e alguns do conjunto M8M15 so usados com os ndices I8I15. A Tabela 3.8 mostra
os valores inicializados para os modificadores.
Modificador
Valor
Modificador
Valor
M0
M +1
M8
M +1
M1
M +2
M9
M +2
M5
M13
M6
M14
Implementao Prtica
64
5000
' 294.
17
(3.1)
Contando com instrues de inicializao, interface com os conversores e ciclos para atendimento da interrupo, conseguiu-se rodar o
filtro em tempo real com 290 coeficientes, permitindo ao mesmo acompanhar respostas impulsivas com durao de at cerca de 36 ms. Isso
se compara com o desempenho conseguido com a implementao direta
em linguagem C, que foi de apenas 54 coeficientes.
Implementao Prtica
65
3.3.1 Processamento
A rotina de anlise divide o sinal em M = 64 faixas de freqncia por
meio de uma estrutura polifsica (cf. Seo 2.2.3).
Cada uma dessas faixas de freqncia tem uma largura 64 vezes
menor que a largura do espectro original. Uma reduo crtica da
taxa de amostragem (r = M ) dizimaria o sinal de cada faixa por 64.
Para facilitar o projeto dos filtros e evitar o efeito do rebatimento (parte
da energia de uma banda caindo na banda adjacente) sem rearranjos
complexos da estrutura [24], optou-se por uma reduo sub-crtica com
r = M/2.
Na sntese o sinal no tempo recomposto a partir das 64 bandas
por um processamento inverso ao da anlise: a taxa do sinal de cada
faixa aumentada de uma razo r = M/2 e as faixas so combinadas
adequadamente.
A rotina spr0_asserted() (ver cdigo-fonte) se encarrega das etapas de mudana na taxa de amostragem (implicitamente realizada pelas chaves comutadoras das Figuras 2.14 e 2.15) e filtragem.
Nessa rotina, que na verdade o tratamento de interrupo de
hardware acionada pela chegada de uma amostra do sinal, quatro operaes de filtragem FIR (funo fir() da biblioteca) rodam na taxa
original a cada amostra recebida: dois filtros relativos anlise e dois
para sntese.
Note que um dos filtros de anlise recebe sempre uma amostra de
valor zero, devido dizimao no-crtica. Da mesma forma, a sada
de um dos filtros de sntese no usada. A cada amostra, os filtros so
trocados (so 64 filtros distintos) por meio de duas chaves comutadoras.
A cada 32 amostras de entrada, o vetor de sada dos filtros se completa com 64 amostras. A rotina ento sinaliza outra interrupo (de
Implementao Prtica
66
Implementao Prtica
67
Implementao Prtica
68
muito importante desse sistema de reduo de rudo. Conforme descrio detalhada na Seo 2.2.2 no captulo de aspectos tericos, para
r = M/2 no h preocupao com o rebatimento (aliasing) na banda
j se a atenuao do filtro suficientemente alta no centro das bandas
j 1 e j + 1.
2
M
= 0,03125)
1
M
= 0,015625).
Erro de reconstruo. Interessantes tambm so os grficos mostrados na Figura 3.5. Para obt-lo, o filtro passa-baixas deslocado em
freqncia sucessivamente para o centro de cada banda
f =
2
,
M
= 0,1, . . . ,M 1
Implementao Prtica
69
0.02
0.015
h0 (n)
0.01
0.005
0
-0.005
-0.01
50
(3.2)
A listagem do Apndice A.4 gera os coeficientes dos filtros reamostrados nas linhas 3135 e guarda o resultado em arquivos para serem
includos na rotina principal do sistema de reduo de rudo.
Tabelas para clculo de FFT. Ainda so includos, durante a com-
Fase (rad)
Magnitude (dB)
Implementao Prtica
70
0
-20
-40
-60
0
-500
0.02
0.04
0.06
f (Nyquist=1)
0.08
0.1
3.4 Integrao
O prottipo funcional do sistema utiliza duas placas de desenvolvimento, cada uma com um processador SHARC executando separadamente os dois sub-sistemas. Um processador carregado com as instrues de mquina relativas ao cancelamento de eco e o outro carregado
com as instrues relativas reduo de rudo.
A comunicao entre os dois processadores se faz atravs de uma
porta serial sncrona rpida, operando a 10 Mbits/s. O sinal pode passar pelo cancelamento de eco antes do redutor de rudo ou fazer o cami-
Implementao Prtica
71
|H0 |2 (dB)
0
-30
-60
-90
-120
Erro
-0.000002
-0.000003
0.02
0.04
0.06
f (Nyquist=1)
0.08
0.1
3.5 Comentrios
Neste captulo foram apresentados os detalhes de implementao do
algoritmo EFLSL para cancelamento de eco acstico e do algoritmo
de subtrao espectral para reduo de rudo ambiente. As explicaes, baseadas nos aspectos tericos apresentados no captulo anterior,
referem-se constantemente s listagens finais dos programas implementados no moderno processador digital SHARC. Uma das utilidades
desse captulo, portanto, completar os comentrios colocados no prprio cdigo-fonte (Apndice B).
No prximo captulo, essa implementao colocada para ser exe-
Implementao Prtica
72
Captulo 4
Resultados
Os testes e medies feitas com o prottipo funcional descrito no
captulo anterior so agora mostrados em diversas tabelas e grficos.
Iniciando com uma descrio do processo de obteno dos sinais usados como entrada do sistema, o captulo continua com os
resultados de simulaes e medidas em tempo real. Diversas situaes de utilizao do sistema de cancelamento de eco acstico e
reduo de rudo so avaliadas.
Uma anlise detalhada dos pontos fortes e dos pontos fracos da
implementao encerra o captulo. Algumas idias de aprimoramento futuro do sistema so registradas e comentadas.
Resultados
74
guintes fatores:
Estabilidade e confiabilidade, sem perda de amostras;
Maior velocidade de resposta aos comandos;
Maior visibilidade no visor do Laptop, j que o modo de texto
ativado;
Resultados
75
4.2.1 Resultados
A Tabela 4.1 apresenta um resumo das diversas condies avaliadas
para o cancelador de eco.
Sinal local ausente
Rudo local
SN R (dB)
0,999
290
290
60
0,9994
"
"
40
0,999
512
"
20
d 0,9994
"
h 512
60
"
40
"
20
Influncia de L . O fator de esquecimento um parmetro importante no bom desempenho do cancelador de eco, e dois valores so
usados para comparao: 0,999 e 0,9994, que fornecem janelas de esquecimento de 0,86s e 1,4s, respectivamente.
Os sinais de entrada do cancelador de eco so gerados a partir da
resposta impulsiva medida (com 1024 pontos) para o ambiente do carro,
mostrada na Figura 4.1.
O parmetro N na tabela o nmero de pontos da resposta impulsiva utilizados em cada caso, j que o nmero de coeficientes do filtro
fixo em 290 (ver listagem). Os casos de a a d esto mostrados na
Figura 4.2.
importante salientar que a medida de ERLE (Echo Return Loss
Enhancement) feita do modo indicado na figura,
ERLE =
d2
,
y2
Resultados
76
0.03
Amplitude
0.02
0.01
0
-0.01
-0.02
-0.03
100
200
300
400
Amostras (n)
500
600
ERLE = d2 /y 2 (dB)
ERLE = d2 /y 2 (dB)
Resultados
50
45
40
35
30
25
20
15
10
5
0
50
45
40
35
30
25
20
15
10
5
0
77
= 0,999
= 0,9994
0.5
1.5
2.5
= 0,999
= 0,9994
0.5
1.5
tempo (s)
2.5
audvel.
Double-talk. Se ao invs de rudo local, um outro sinal de voz,
descorrelacionado com o sinal de entrada do filtro adaptativo, for somado ao sinal desejado d(n) (ver Figura 2.1 na pgina 8), tem-se a situao conhecida como double-talk. Esse caso no comum na prtica,
ocorrendo apenas quando os dois participantes de uma conversa distncia decidem falar simultaneamente, mas interessante para avaliar a imunidade a interferncias estatisticamente similares ao sinal
Resultados
78
ERLE = d2 /y 2 (dB)
70
SNR = 60dB
SNR = 40dB
SNR = 20dB
60
50
40
30
20
10
ERLE = d2 /y 2 (dB)
0.1
70
60
50
40
30
20
10
0
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
0.8
0.9
SNR = 60dB
SNR = 40dB
SNR = 20dB
0.1
0.2
0.3
0.4 0.5
tempo (s)
0.6
0.7
de entrada.
Para esse teste, L = 0,9994 e uma resposta impulsiva de N = 512
coeficientes foi utilizada. Para o sinal de voz local foram adotados dois
nveis de potncia diferentes: 10 dB e 20 dB abaixo do nvel do sinal de
eco.
A Figura 4.4 mostra os resultados, onde se nota uma recuperao
rpida do algoritmo aps os trechos de atividade local. Em alguns perodos, a atividade local parece no perturbar o cancelador de eco (por
Resultados
79
80
SNR = 10dB
SNR = 20dB
ERLE = d2 /y 2 (dB)
70
60
50
40
30
20
10
0
0.5
1.5
2.5
2
tempo (s)
3.5
4.5
4.2.2 Especificaes
Os detalhes de especificao para o bloco de cancelamento de eco esto
mostrados na Tabela 4.2, para o processador SHARC e o sistema de
desenvolvimento utilizado no prottipo funcional.
Mtodo
Freq. de amostragem
8000 Hz
Faixa dinmica
16 bits
Atenuao do eco
3040 dB
36 ms
Carga computacional
Resultados
80
4.3.1 Resultados
A Tabela 4.3 mostra as diversas combinaes testadas. Para rudo
gaussiano, dois valores de relao sinal-rudo SNR (Signal-to-Noise Ratio) foram usados: 22 dB para o valor alto e 12 dB para o valor baixo.
Rudo gaussiano
Caso R (dB)
Rudo de automvel
SNR (dB)
Caso
R (dB)
-6
alto
-6
-18
alto
-18
-6
baixo
-18
baixo
A Figura 4.5 apresenta os resultados para baixo rudo. Nela se observa a pequena degradao nas pores do sinal correspondentes s
regies de atividade vocal. Nota-se ainda que nos trechos mais curtos
de silncio, o rudo no atenuado at o valor desejado. Isso demonstra a atuao do algoritmo psicoacstico includo no bloco de reduo
de rudo. O sinal de voz provavelmente mascara o restante do rudo,
fazendo-o ser menos audvel sem que seja necessrio modificar ainda
mais o sinal de voz.
Resultados
81
90
= 6dB
= 18dB
80
70
60
50
40
30
0.5
1
tempo (s)
1.5
4.3.2 Especificaes
Os detalhes de especificao para o bloco de reduo de rudo esto
mostrados na Tabela 4.4, para o processador SHARC e o sistema de
Resultados
82
Potncia mdia(dB)
90
= 6dB
= 18dB
80
70
60
50
40
30
0.5
1
tempo (s)
1.5
atrasado pelo redutor de rudo. O sinal de entrada do filtro adaptativo foi atrasado artificialmente de maneira similar.
Na configurao com supresso de rudo aps o cancelador de eco
Resultados
83
Potncia mdia(dB)
90
= 6dB
= 18dB
80
70
60
50
40
30
3
4
tempo (s)
(Figura 4.9) nenhuma modificao foi feita. O sinal foi simplesmente passado de um sistema para o outro.
Em ambas as configuraes, foram usados os parmetros abaixo:
Fator de esquecimento: L = 0,9994;
Atenuao de rudo: R = 18 dB.
4.5 Comentrios
Os resultados do sistema integrado so nitidamente a favor da ltima
configurao (redutor de rudo aps cancelamento de eco). Conforme
comentado por Martin e Vary [5], o eco j atenuado amortecido ainda
mais pelo algoritmo de reduo de rudo.
Embora essa colaborao seja desejvel, ela no foi explorada mais
profundamente. Critrios psicoacsticos, aplicados ao redutor de rudo,
Resultados
84
Mtodo
Freq. de amostragem
8000 Hz
Faixa de passagem
3003400 Hz
Reduo de rudo
> 30 dB
64
Dizimao
sub-crtica
> 60 dB
Erro de reconstruo
< 0,0003 %
Atraso
32 ms
Carga computacional
28 % (22 MFLOPS)
Resultados
85
80
Sinal remoto
Sada
70
60
50
40
30
0.2
0.4
0.6
0.8
1
tempo (s)
1.2
1.4
1.6
1.8
Resultados
86
Potncia mdia(dB)
80
Sinal remoto
Sada
70
60
50
40
30
0.2
0.4
0.6
0.8
1
tempo (s)
1.2
1.4
1.6
1.8
Captulo 5
Concluses
Nos captulos anteriores foram apresentados os resultados obtidos com
algoritmos de cancelamento de eco acstico e reduo de rudo ambiente implementados em processador digital de sinais, utilizando de
forma combinada diversas tecnologias e ferramentas matemticas.
O enfoque prtico dado ao trabalho ntido ao longo da maior parte
do texto. A comear pelo captulo terico, no qual se procura mostrar
a necessidade de resolver o problema do atraso provocado pelo processamento espectral para reduo de rudo. A tcnica utilizada no projeto de filtros de reconstruo quase perfeita com mnimo atraso bem
ilustrada com um grfico da resposta impulsiva obtida (Figura 2.13 na
pgina 36).
Embora o projeto dos filtros tenha utilizado uma janela de Kaiser,
um procedimento semelhante (e ligeiramente mais elaborado) foi desenvolvido para a janela de Chebyshev. Este no foi includo no trabalho por apresentar resultados finais um pouco menos satisfatrios que
os obtidos com a janela de Kaiser.
A adoo de uma tcnica de estimao de rudo sem utilizar detectores de atividade vocal tambm tem uma explicao prtica, j que o
sistema foi pensado para operar em veculos, onde variaes no nvel
de rudo so a regra. O algoritmo implementado se revelou muito ro87
Concluses
88
Concluses
89
Apndice A
Listagens Matlab
Os programas listados deste apndice foram usados para simulao dos
algoritmos mencionados no texto e projeto de tabelas. A linguagem
compatvel com a verso 5.0 do Matlab e com a verso 2.1.35 do Octave.
90
Listagens Matlab
lms.m
10
%
%
%
%
Octave 2.0.16
AHCC
Criado: set/1999
Modificado: fev/2002
15
function y=lms(x,d,M,mu)
% inicializacao
w=zeros(1,M);
xx=zeros(1,M);
y=zeros(size(x));
LeastMeanSquare
Filtro adaptativo baseado no gradiente estocastico
Y=LMS(X,D,M,MU) calcula a saida do filtro
dado o sinal de entrada X e a saida desejada D
O numero de coeficientes e M e o passo de adaptacao
e MU (0<MU<2/(potencia de X))
20
25
30
% loop
n=1;
N=length(x);
while (n<=N)
xx = [x(n) xx(1:M1)];
y(n) = w * xx;
erro = d(n) y(n);
w = w + mu*xx*erro;
n = n + 1;
end
91
Listagens Matlab
92
rls.m
10
%
%
%
%
Octave 2.0.16
AHCC
Criado: set/1999
Modificado: fev/2002
15
function y=rls(x,d,M,lambda)
% inicializacao
xx=zeros(1,M);
w=zeros(1,M);
y=zeros(size(x));
P=1000*diag(ones(1,M));
20
25
30
Recursive LeastSquares.
Filtro adaptativo baseado no metodo dos minimos quadrados.
Y=RLS(X,D,M,lambda) calcula a saida do filtro
dado o sinal de entrada X e a saida desejada D
O numero de coeficientes e M e o fator de
esquecimento (para tracking) e lambda (0<lambda<1).
% loop
n=1;
N=length(x);
l=1/lambda;
while (n<=N)
xx = [x(n) xx(1:M1)];
k = l*P*xx / (1+l*xx*P*xx);
erro = d(n) w * xx;
y(n) = w * xx;
w = w + k*erro;
P = l*P l*k*xx*P;
n = n + 1;
end
% ganho de Kalman
% saida
% recursao da matriz inversa
Listagens Matlab
93
10
15
20
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
##
Andr Carezia
## Author:
AHCC <acarezia@uol.com.br>
30
if (nargin < 2)
usage ("qp_kaiser (nb, at)");
endif
if (nargin < 3)
linear = 0;
endif
if !(is_scalar (nb) && (nb == round(nb)) && (nb >= 0))
error ("qp_kaiser: nb has to be a positive integer");
endif
35
40
bandwidth = pi/nb;
45
50
65
# Kaiser window
if (at>50)
beta = 0.1102 * (at 8.7);
elseif (at>21)
beta = 0.5842 * (at 21)^0.4 + 0.07886 * (at 21);
else
beta = 0;
endif
w = kaiser(N,beta);
# squared in freq. domain
wsquared = conv(w,w);
70
n = (N1):(N1);
hideal = 1/nb * sinc(n/nb);
hcomp = wsquared .* hideal;
55
60
Listagens Matlab
75
80
85
Hsqr = sqrt(abs(fft(hcomp,Ndft)));
if (linear)
h = real(ifft(Hsqr));
h = h(2:N);
h = [fliplr(h) h(1) h];
else
Hmin = Hsqr .* exp(j*imag(hilbert(log(Hsqr))));
h = real(ifft(Hmin));
h = h(1:N);
endif
# truncate and fix amplitude scale
# (H(0)=1)
h = h / sum(h);
endfunction
94
Listagens Matlab
95
10
##
##
##
##
##
##
##
##
Andr Carezia
## Author:
AHCC <acarezia@uol.com.br>
M=64;
r=M/2;
aten=60;
15
out = h;
save ascii filter_ri.dat out
# Deixa o comprimento do filtro mltiplo
# de M
25
n = length(h);
if n/M ~= round(n/M)
h = [h, zeros(1, ceil(n/M)*M n)];
n = length(h);
end;
30
35
taps = n/r;
h = reshape(h,r,taps);
g = h;
h = [h(1,:);flipud(h(2:r,:))];
fh=fopen(hfilts.h,w);
fg=fopen(gfilts.h,w);
40
45
50
for i=1:r1
fprintf(fh,%.8g, ,fliplr(h(i,:)));fprintf(fh,\n);
fprintf(fg,%.8g, ,fliplr(g(i,:)));fprintf(fg,\n);
end
fprintf(fh,%.8g, ,fliplr(h(r,2:taps)));
fprintf(fg,%.8g, ,fliplr(g(r,2:taps)));
fprintf(fh,%.8g\n,h(r,1));
% last sample
fprintf(fg,%.8g\n,g(r,1));
% last sample
fclose(fh);
fclose(fg);
Listagens Matlab
96
##
##
##
##
##
##
## Author:
AHCC <acarezia@uol.com.br>
10
## nro. de canais
M = 64;
r = M/2;
r2 = r/2;
15
## calcula vetores
fc=fopen(cosk.h,w);
fs=fopen(sink.h,w);
20
Andr Carezia
cosk=cos(pi*(0:r21)/r);
sink=sin(pi*(0:r21)/r);
fprintf(fc,%.12f, ,cosk(1:(r21)));
fprintf(fc,%.12f,cosk(r2));
25
30
fprintf(fs,%.12f, ,sink(1:(r21)));
fprintf(fs,%.12f,sink(r2));
## fecha arquivos
fclose(fc);
fclose(fs);
Apndice B
Listagens SHARC
As listagens deste apndice foram extradas do prottipo funcional do
sistema de cancelamento de eco e reduo de rudo, montado em duas
placas de desenvolvimento para o processador SHARC, da Analog Devices. A verso 3.3 do sistema de desenvolvimento (Compilador GNU
C e Assembler) foi usada.
97
Listagens SHARC
98
/* psiconr.c
*
* Copyright (C) 2002 Andr Carezia <acarezia@uol.com.br>
* Verso: 1.25
*/
10
/* 8 kHz
* 64 bandas
* Noise estimation: minimum statistics
*/
15
20
25
30
M 64
R (M/2)
FS 8000
TAPS 11
FFT cfft32
IFFT ifft32
NLOW 3
/*
/*
/*
/*
#define NHIGH 5
35
#define NCRIT 14
#define SFMMAX 40.0
40
#define
#define
#define
#define
/* max. tonality */
SNRMAX 50
SNRMIN 20
OSMAX 2.6
MINRED 1.0e10
/**********************************************************/
50
/* ProgramControlled Interrupts
bit */
/* Valid memory address field bits
/**********************************************************/
60
65
70
Control Blocks */
/*
/*
/*
/*
/*
/*
/*
/*
/*
#define SZ_regs_1847 8
int regs_1847[SZ_regs_1847] = {
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
Listagens SHARC
75
80
85
0xc000,
0xc100,
0xc600,
0xc700,
0xc850,
0xc909,
0xccc0,
0x8f00};
99
/*
/*
/*
/*
/*
/*
/*
index
index
index
index
index
index
index
int rx_buf[3];
int tx_buf[3] = {0xccc0, 0, 0};
/* receive tcb */
/* transmit tcb */
95
float pm cosk[R/2]=
{
#include "cosk.h"
};
100
float pm sink[R/2]=
{
#include "sink.h"
};
105
float pm h[R][TAPS] =
{
#include "hfilts.h"
};
110
115
/* tabelas */
/* coeficientes anlise */
float pm g[R][TAPS] =
{
#include "gfilts.h"
};
/* coeficientes sntese */
float dlineh[M][TAPS+1];
float dlineg[M][TAPS+1];
float spread[NCRIT][NCRIT]={
120
#include "spreadf.h"
};
125
int
CBLE[NCRIT+1] = {300,400,510,630,770,920,1080,1270,1480,1720,\
2000,2320,2700,3150,3700};
float CB[NCRIT];
float SB[NCRIT];
130
135
140
145
float
float
float
float
float
float
float
mod_in1[M],mod_in2[M];
*mi_active=mod_in1;
*mi_inact=mod_in2;
mod_out1[M],mod_out2[M];
*mo_active=mod_out1;
*mo_inact=mod_out2;
*aux;
float
float
float
float
float
float
float
ruido[R+1];
sinal[R+1];
sinalm[R+1];
sinalr[R+1];
limiar[R+1];
Pxmin[R+1];
PMmin[R+1][WW];
=0.8;
Listagens SHARC
150
155
100
/* cte de tempo para clculo de rudo */
/* 18 dB */
saida;
count=0;
ganho=1;
CHAVE=1;
modo=3;
pk_in=0;
smp_count=0;
blk_count=0;
160
165
170
175
180
185
/**********************************************************/
/*
*/
/* Serial port transmit DMA complete
*/
/*
*/
/**********************************************************/
void spt0_asserted( int sig_num )
{
// Check if there are more commands left to transmit.
if( xmit_count )
{
// If so, put the comand into the transmit buffer and update
// count.
tx_buf[0] = *xmit_ptr++;
xmit_count;
}
}
/**********************************************************/
/*
*/
/* Serial port receive DMA complete
*/
/*
*/
/**********************************************************/
void spr0_asserted( int sig_num )
{
static int index=0;
int sig_in;
sig_in = rx_buf[1];
if (abs(sig_in)>pk_in) pk_in=sig_in;
190
195
200
205
210
/************/
/* ANALYSIS */
/************/
// Filtro na taxa 1/R
mi_active[index]=fir(sig_in,&h[index%R][0],&dlineh[index][0], TAPS);
mi_active[(index+R)%M]=fir(0.0,&h[index%R][0],&dlineh[(index+R)%M][0],TAPS);
/*************/
/* SYNTHESIS */
/*************/
// Filtro na taxa 1/R
saida=M*fir(mo_active[index],&g[index%R][0],&dlineg[index][0],TAPS);
fir(mo_active[(index+R)%M],&g[index%R][0],&dlineg[(index+R)%M][0],TAPS);
/************/
/* CONTROLE */
/************/
// Testa se entrada do modulador j cheia
if (index == 0 || index == R)
{
// swap input buffers
aux=mi_active;
mi_active=mi_inact;
mi_inact=aux;
215
raise(SIG_USR0);
}
220
index++;
if (index == R)
{
// swap output buffers
Listagens SHARC
101
aux=mo_active;
mo_active=mo_inact;
mo_inact=aux;
225
}
if (index == M)
{
// swap output buffers
aux=mo_active;
mo_active=mo_inact;
mo_inact=aux;
230
index=0;
}
235
tx_buf[1] = (int)(ganho*saida+.5);
tx_buf[2] = tx_buf[1];
}
240
245
250
255
260
265
270
275
280
285
290
295
/**********************************************************/
/*
*/
/* S2 switch interrupt service routine
*/
/*
*/
/**********************************************************/
void irq1_asserted( int sig_num )
{
if (poll_flag_in(READ_FLAG1,RETURN_FLAG_STATE)==1)
{
if (modo<3) modo++;
else {
modo=1;
set_flag(SET_FLAG2,CLR_FLAG);
count=2000;
}
}
else
{
if (NivelResidual>0.03125) NivelResidual/=2;
else
{
NivelResidual=0.5;
set_flag(SET_FLAG2,CLR_FLAG);
count=2000;
}
}
}
/********************************************************/
/*
*/
/* User interrupt 0 service routine
*/
/* Polyphase Analysis
*/
/*
*/
/********************************************************/
void usr0_asserted( int sig_num)
{
int
x,y,i,j;
float tempre[R],tempim[R],
/* armazenamento temporrio */
A[R],F[R],
/* armazenamento temporrio */
Re[R+1],Im[R+1];
/* armazena espectro */
float c;
float Gm,Am,SFM,tonal;
float SNR,OverSub;
float Offset[NCRIT],Thresh[NCRIT];
float PLmin;
// calcula x(2n)+j*x(2n+1)
for (x=0;x<R;x++)
{
tempre[x]=mi_inact[2*x];
tempim[x]=mi_inact[2*x+1];
}
// FFT(x(2n)+j*x(2n+1))
FFT(tempre,tempim,A,F);
Listagens SHARC
300
305
310
102
cosk[x]*(F[x]+F[Rx]) +
cosk[x]*(F[x]+F[Rx])
sink[x]*(F[x]+F[Rx]) +
sink[x]*(F[x]+F[Rx])
sink[x]*(A[Rx]A[x]))/2;
sink[x]*(A[Rx]A[x]))/2;
cosk[x]*(A[Rx]A[x]))/2;
+ cosk[x]*(A[Rx]A[x]))/2;
/***********************/
/* spectral processing */
315
320
325
330
/* passafaixa telefnico */
for (x=0;x<NLOW;x++)
{
Re[x]=0;
Im[x]=0;
}
for (x=0;x<NHIGH;x++)
{
Re[Rx]=0;
Im[Rx]=0;
}
/* subtrao espectral prvia */
for(x=NLOW;x<=RNHIGH;x++)
{
// Estimao da potncia do sinal
c = Re[x]*Re[x]+Im[x]*Im[x];
sinal[x] = SinalTC*sinal[x] + (1.0SinalTC)*c;
// atualiza valor mnimo do sinal nesta banda
if (sinal[x] < Pxmin[x]) Pxmin[x]=sinal[x];
335
340
345
350
355
360
}
365
370
Listagens SHARC
PMmin[x][blk_count] = Pxmin[x];
PLmin = PMmin[x][0];
for (i=1;i<WW;i++)
if (PMmin[x][i] < PLmin)
PLmin = PMmin[x][i];
375
103
/* minimum of MM
samples */
/* minimum of
L=MM*WW
samples */
380
Pxmin[x]=PMAX;
}
smp_count=0;
blk_count++;
385
}
390
395
400
405
410
420
425
430
435
440
Listagens SHARC
104
445
c = sqrt(limiar[x]/ruido[x]) + NivelResidual;
if (c < 1.0)
{
Re[x]=Re[x]*c;
Im[x]=Im[x]*c;
}
sinalr[x] = SinalTC*sinalr[x] + (1.0SinalTC)*(Re[x]*Re[x]+\
Im[x]*Im[x]);
450
}
455
460
465
470
475
480
485
490
495
500
}
/**********************************************************/
void setup_sports ( void )
{
/* Configure SHARC serial port SPORT0 */
/* Multichannel communications setup */
sport0_iop.mtcs = 0x00070007;
/* transmit on words 0,1,2,16,17,18
sport0_iop.mrcs = 0x00070007;
/* receive on words 0,1,2,16,17,18
sport0_iop.mtccs = 0x00000000;
/* no companding on transmit
sport0_iop.mrccs = 0x00000000;
/* no companding on receive
*/
*/
*/
*/
505
510
*/
*/
515
*/
*/
Listagens SHARC
SetIOP(CP0, (((int)&rx_tcb.ii) & CP_MAF) | CP_PCI);
/* define ptr to current TCB (kick off DMA) */
/* (SPORT0 receive uses DMA ch 0)
*/
520
}
525
530
/**********************************************************/
void send_1847_config_cmds( void )
{
// Set up pointer and counter to transmit commands.
xmit_ptr
= regs_1847;
xmit_count = SZ_regs_1847;
// Wait for all commands to be transmitted.
while( xmit_count )
idle();
535
540
return;
545
550
}
/**********************************************************/
void init_21k( void )
{
// Initialize pointer and counter to transmit commands.
xmit_count = 0;
xmit_ptr
= regs_1847;
// Enable interrupt nesting.
asm( "#include <def21060.h>" );
asm( "bit set mode1 NESTM;" );
555
565
return;
}
570
575
580
/**********************************************************/
void main ( void )
{
int x,y,i;
// Initialize some SHARC registers.
init_21k();
// Set up delay lines (FIR filters)
for(x=0;x<M;x++)
for(y=0;y<=TAPS;y++)
{
dlineh[x][y]=0;
dlineg[x][y]=0;
}
585
590
105
Listagens SHARC
106
Pxmin[x]=PMAX;
}
595
600
605
// Loop forever.
for (;;)
{
idle();
if (count==0) set_flag( SET_FLAG2, SET_FLAG );
else count;
};
610
615
Listagens SHARC
107
10
15
!
!
!
!
!
!
!
!
!
!
!
!
!
LING.ASM
Algoritmo de filtragem adaptativa EFLSL
Verso: 1.54
Artigo ICASSP2001 (Carezia, A. et al)
Modificaes: 25/jan/2001 AHCC Correo da energia mnima
25/mar/1999 AHCC Otimizao (17 ciclos)
19/mar/1999 AHCC criao
#include <def21060.h>
#define NCOEFS 290
#define LAMBDA 0.9994
#define MINENRG 4000.0
#define ENRG0
4000.0
/*
/*
/*
/*
nro. de coeficientes */
fator de esquecimento */
terico: 2^(12) */
energia inicial (lambda * minenrg) */
20
30
35
40
45
50
55
/* vetor de interrupcoes */
.segment /pm seg_rth;
nop;nop;nop;nop;
nop;jump start;
.endseg;
/* variaveis (dados) */
.segment /dm seg_dmda;
.var
regs_1847[8] =
0xc000,
0xc100,
0xc600,
0xc700,
0xc850,
0xc909,
0xccc0,
0x8f00;
/* reserved */
/* reset */
/*
/*
/*
/*
/*
/*
/*
/*
registros do CODEC */
index 0 left input control */
index 1 right input control */
index 6 left dac control */
index 7 right dac control */
index 8 data format */
index 9 interface configuration */
index 12 miscellaneous information */
.var
.var
.var
.var
.var
.var
tx_buf[3] = 0xccc0,0,0;
rx_tcb[9] = 0,0,0,0,0,0,3,1,0;
tx_tcb[9] = 0,0,0,0,0,0,3,1,0;
rx_buf[3];
xmit_count;
xmit_ptr;
.var
.var
.var
.var
.var
erro_r[2*(NCOEFS+1)];
erro_p[NCOEFS+1];
alfa=0;
b_bar[NCOEFS];
lambda=LAMBDA;
.var
xrms=0.0;
.endseg;
60
65
70
Listagens SHARC
108
r2=dm(xmit_count);
r2=pass r2;
if eq jump (pc, _L$2) (DB);
i7=dm(xmit_ptr);
i5=i7;
75
80
85
_L$2:
90
modify(i5,m6);
dm(xmit_ptr)=i5;
r2=r21,r4=dm(i7,m5);
dm(xmit_count)=r2;
dm(tx_buf)=r4;
rti;
/**********************************************/
/* rot. tratamento de interrupcao (SPORT0 RX) */
/**********************************************/
s0rx:
r0=dm(rx_buf+2);
/* x(n)=ref. (canal direito) */
f0=float r0;
95
lbl:
100
dm(i0,m0)=f0;
dm(i1,m5)=f0;
/* erro_r = x(n) */
/* erro_p = x(n) */
r0=dm(rx_buf+1);
f0=float r0;
dm(i2,m5)=f0;
/* alfa = d(n) */
/* inicializao */
f4 =dm(i0,m5) , f0 =pm(i8,m13);
f10=1.0;
f12=0.0;
f3 =0.0;
105
110
flt:
115
120
125
flt0:
f0 =dm(i1,m5)
f8 =dm(i1,m6)
f9 =dm(i0,m0)
f5 =dm(i0,m6)
dm(i1,m5)=f2
f9 =dm(i2,m5)
f5 =dm(i3,m5)
f2 =dm(i4,m5)
dm(i0,m0)=f6
dm(i2,m5)=f1
dm(i3,m6)=f4
f4 =dm(i0,m5)
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
f4 =pm(i9,m8);
f5 =pm(i10,m13);
pm(i9,m13)=f10;
f0 =pm(i9,m13);
f1 =pm(i11,m15);
pm(i11,m14)=f3;
f10=pm(i8,m13);
f5 =pm(i14,m13);
f5 =pm(i15,m13);
pm(i8,m14)=f10;
pm(i14,m14)=f8;
f10=pm(i9,m9);
f12=pm(i10,m13);
pm(i15,m14)=f9;
f12=pm(i11,m14);
pm(i10,m14)=f8;
f0 =pm(i8,m13);
/* finalizao */
f10=f10f12 , modify(i9,m8);
f10=abs f10 , modify(i11,m15);
pm(i11,m14)=f3;
pm(i9,m9)=f10;
130
135
/* atualizao no tempo */
modify(i1,m6);
modify(i0,m1);
/* prepara amostra para converso D/A (float > integer) */
r1=fix f1;
140
flt_on:
145
dm(tx_buf+1)=r1;
r1=dm(rx_buf+1);
dm(tx_buf+2)=r1;
rti;
Listagens SHARC
109
150
155
/*************/
/* principal */
/*************/
start:
r1=JUMP_OPCODE;
px2=r1;
r2=0xffff;
r0=s0rx;
r0=r0 and r2;
px1=r0;
pm(S0RX_ADDR)=px;
160
r0=s0tx;
r0=r0 and r2;
px1=r0;
pm(S0TX_ADDR)=px;
165
call inicio;
170
/* constantes */
f15=MINENRG;
m0=NCOEFS+1; m1=NCOEFS+2; m5=0; m6=1;
m8=NCOEFS+1; m9=NCOEFS+2; m13=0; m14=1;
175
/* ponteiros fixos */
i4=lambda;
i2=alfa;
180
/* ponteiros circulares */
b0=erro_r; l0=@erro_r;
b1=erro_p; l1=@erro_p;
b3=b_bar; l3=@b_bar;
185
b8 =kf;
b9 =ftconv;
b10=kb;
b11=kd;
b14=enrg_p;
b15=enrg_r;
190
init:
l8 =@kf;
l9 =@ftconv;
l10=@kb;
l11=@kd;
l14=@enrg_p;
l15=@enrg_r;
200
f0=ENRG0;
f1=0.0;
lcntr=NCOEFS; do ini0 until lce;
pm(i14,m14)=f0, dm(i0,m6)=f1;
pm(i15,m14)=f0;
pm(i8,m14)=f1;
pm(i10,m14)=f1;
pm(i11,m14)=f1;
dm(i0,m6)=f1;
205
/* liga
bit clr
bit clr
bit set
195
ini0:
interrupes */
IRPTL SPR0I;
IMASK SPT0I | IRQ2I;
IMASK SPR0I;
wait:
idle;
jump wait;
210
215
220
/********************************************************/
/* inicializacao do processador (DMA, SPORT) e do CODEC */
/********************************************************/
inicio: r4=regs_1847;
dm(xmit_count)=m5;
dm(xmit_ptr)=r4;
/* reset do CODEC */
bit clr ASTAT FLG0;
lcntr = 0x7fff; do (pc, 1) until lce; nop;
bit set ASTAT FLG0;
Listagens SHARC
225
230
235
/* ativa interrupcoes */
bit clr IRPTL SPT0I;
bit set IMASK SPT0I;
bit set MODE1 IRPTEN;
245
/* configura DMA */
i0=rx_tcb+8;
i4=tx_tcb+8;
r4=131071;
r2=i4;
r8=131072;
r2=r2 and r4;
dm(i0,m5)=rx_buf;
r2=r2 or r8;
dm(115)=r2;
dm(rx_tcb+5)=i0;
r2=i0;
dm(tx_tcb+5)=i4;
r2=r2 and r4;
dm(i4,m5)=tx_buf;
r2=r2 or r8;
dm(99)=r2;
250
255
260
265
_L$10:
275
idle;
r2=dm(xmit_count);
r2=pass r2;
if ne jump (pc, _L$10) (DB);
r2=dm(rx_buf);
r4=2;
280
270
_L$13:
idle;
r2=dm(rx_buf);
r2=r2 and r5;
if eq jump (pc, _L$13) (DB);
r2=dm(rx_buf);
r4=2;
285
_L$16:
idle;
r2=dm(rx_buf);
r4=2;
_L$18:
295
110
Listagens SHARC
rts;
300
.endseg;
111
Apndice C
Artigo SBT 1999
Este artigo, de autoria de A. H. C. Carezia, M. Gerken, P. M. S. Burt e
M. T. M. da Silva, apareceu no XVII Simpsio Brasileiro de Telecomunicaes, em setembro de 1999.
112
113
coeficientes do filtro adaptativo) e so de implementao relativamente fcil. Entretanto, para sinais de voz, podem apresentar convergncia excessivamente lenta. Os algoritmos rpidos da famlia
Recursive Least Squares (RLS), por outro lado,
podem proporcionar convergncia mais rpida s
custas de maior complexidade computacional e de
um eventual comportamento numrico instvel.
necessria a utilizao de um algoritmo numericamente estvel, o que por sua vez tende a aumentar
ainda mais a carga computacional.
Estendendo o conjunto de aplicaes considerado, as caractersticas do eco acstico em cada situao podem ser bastante diversas, o que tem uma
influncia importante na escolha das tcnicas de
filtragem adaptativa. Tipicamente, o acoplamento
entre alto-falante e microfone tem uma resposta impulsiva cuja durao de aproximadamente 50 ms
no caso de automveis (o que, para uma taxa de
amostragem de 8 kHz, resulta em um modelo FIR
de 400 coeficientes) e de aproximadamente 500 ms
para uma sala grande de conferncias (o que, para
uma taxa de amostragem de 16 kHz, resulta em
um modelo FIR de 8000 coeficientes). A menor
durao da resposta impulsiva e a taxa de amostragem mais baixa contribuem para tornar menos agudo o compromisso entre desempenho e complexidade computacional na soluo do problema de eco
acstico em automveis.
Introduo
Existe atualmente um grande interesse no desenvolvimento de terminais telefnicos viva-voz avanados para serem utilizados em automveis. Para
esta aplicao, um dos problemas bsicos que devem ser resolvidos de modo a prover uma comunicao de alta qualidade e verdadeiramente bidirecional o problema de eco acstico. Este eco
resulta do acoplamento entre o alto-falante e o microfone do terminal viva-voz, sendo que o desconforto produzido por ele cresce quando o retardo
na conexo ultrapassa aproximadamente 30 ms [1].
Para superar este problema, um cancelador de eco
acstico [2] ideal usaria o sinal recebido da outra extremidade da conexo para gerar uma rplica exata
do sinal de eco acoplado entre o alto-falante e o microfone, e deste modo poder elimin-lo do sinal enviado outra extremidade da conexo. Devido ao
fato de que o compartimento de passageiros de cada
automvel tem caractersticas acsticas diferentes
e que um mesmo compartimento pode apresentar
variaes de suas caractersticas acsticas durante
a conexo, necessrio que o cancelamento de eco
seja realizado por um filtro adaptativo.
Os requisitos gerais de um filtro adaptativo so
velocidade de convergncia, capacidade de rastreio,
robustez e preciso numricas e baixa complexidade computacional. Esses requisitos, de modo
geral, so conflitantes entre si e diferentes estruturas de filtragem e algoritmos de adaptao apresentam compromissos distintos para tentar atendlos. Os algoritmos do tipo gradiente estocstico
(LMS) [1] tm uma complexidade computacional
baixa (da ordem de 2M , onde M o nmero de
=
=
=
=
f
fm1 (n)/m1
(n)
f
m1 (n 1)m1 (n)/m1
(n)
b
bm1 (n)/m1
(n)
b
m1 (n)m1 (n)/m1
(n)
114
Estes erros normalizados so utilizados como
variveis intermedirias nas equaes de atualizao da pgina 633 de [8]. Resulta o algoritmo apresentado na Tabela 1.
Em relao ao algoritmo original o nmero de
multiplicaes e de divises reduzido para 13
multiplicaes e 2 divises por estgio da trelia,
enquanto que o nmero de adies, 9 por estgio
da trelia, se mantm constante. As equaes esto agrupadas em quatro conjuntos (1, 2, 3, 4,
5), (6, 7, 8), (9, 10) e (11, 12, 13) que so apresentados na Tabela 1 em ordem de precedncia,
isto , alguns resultados do conjunto de equaes
precedente so necessrios para os conjuntos subsequentes. Alm disso foram introduzidos identificadores (ID) para as diferentes variveis (destacados nos retngulos abaixo de cada varivel) que
so utilizados no desenvolvimento do programa
para o DSP. Um aspecto importante que apesar
das modificaes realizadas o mecanismo de realimentao de erro mantido, no se afetando
assim a acurcia numrica.
Para garantir a estabilidade numrica mesmo na
ausncia de excitao persistente faz-se necessrio
evitar as divises por zero nas equaes (9, 10) da
Tabela 1. Para isso suficiente forar as variveis
f m1 e bm1 para zero quando as energias dos erros
de predio ficam muito prximas de zero. Notase que nesse caso os erros de predio esto mais
prximos de zero que as energias correspondentes,
justificando este procedimento. Na implementao
no DSP adotou-se uma outra estratgia computacionalmente mais eficiente que foi a de se somar
ao valor da energia uma constante de valor baixo,
no caso 260 . Com esta estratgia no se notou
qualquer diferena mensurvel nas simulaes realizadas e nem nas implementaes no DSP.
Alm disso mostra-se necessrio saturar os erros
de predio para evitar resultados indefinidos (NaN
- Not A Number), o que se consegue no DSP utilizado ativando o modo de truncamento. Nesse
modo, resultados que ultrapassam o maior valor representvel NORM.MAX ficam exatamente nesse
valor.
3
Implementao no DSP
Arquitetura do processador[9]
115
Multiplicador
Multiplicador
R8/F8
R1/F1
R9/F9
R2/F2
R10/F10
R3/F3
R11/F11
R4/F4
R12/F12
R5/F5
R13/F13
R6/F6
R14/F14
R7/F7
R15/F15
R0-R15
Inicializao (n = 0):
Para m = 1 a M execute
f
b
(n) = m1
{m1
(n) = ;
fm (n) = bm (n) = dm (n) = m1 (n) = 0}
Para n = 1, 2, 3, ... execute {
Para m = 0 execute {m (n) = 1;
m (n) = u(n); m (n) = u(n); m (n) = d(n) }
Para m = 1 a M execute { 1) a 13) abaixo }}
1)
m (n) = m1 (n) fm (n1)m1 (n1)
a
c
j
b
2)
3)
Acumulador
Acumulador
R0-R15
4)
5)
6)
7)
8)
9)
10)
11)
12)
3.2
Processo de otimizao
O primeiro passo colocar as equaes na ordem de execuo, deixando as que precisam dos
resultados de outra(s) equao(es) para o final.
Conforme pode-se notar nas equaes da Tabela 1,
as mesmas j esto ordenadas dessa forma. As
equaes (1-5), por exemplo, so independentes
umas das outras e somente precisam de valores
previamente calculados em iterao anterior. Entretanto a equao (6) precisa do resultado da
equao (1) para ser feita, e por isso no pode ser
deslocada para o incio da iterao. O mesmo acontece com a equao (9), dependente dos resultados
das equaes (2) e (7). Com isso, destaca-se uma
hierarquia de operaes, com algumas podendo
ser executadas em paralelo e outras dependendo de
grupos anteriores. As variveis so identificadas
com letras para facilitar a manipulao.
O segundo passo escolher uma representao
das equaes mostradas na Tabela 1 mais adequada
s caractersticas do SHARC. Isso se faz necessrio
quando no h registradores internos (ou alguns
precisam ser reservados para expanso futura) no
DSP suficientes para armazenar todas as variveis.
Alm disso, para obter paralelismo no SHARC
13)
f
(n)
f m1 (n) = fm1 (n)/m1
v
b
bm1 (n) = bm1 (n)/m1
(n)
w
116
E quaes
ID
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
10
11
12
13
117
Multiplicador
X
Ciclo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
F0
b
a
a
a
f
fg=m
m
F1
F2
F3
a-bc=j
F4
c
d
ad=k
k
j
p
p
ak+pq=t
inv(t)
k/t=v
m
n
m
k
gm+pr=u
u
inv(u)
m/u=w
w
X
F6
F7
F8
F9
F10
F11
F12
c-ae=l
F13
F14
F15
bc
bc
a
c
g
g
g
o
q
r
i
h-gi=n
Acumulador
Y
F5
ae
ak
h
gm
ak
gi
b
b
b+jo=s
jo
pq
pr
pr
gm
l
vl
vl
e+vl=x
nw
i+nw=y
e
i
i
mw
f-mw=z
Tamanho do vetor
2(M+1)
M+1
1
M
1
M
2(M+1)
M
M
M
M
Identificadores
c,l,g
a,j
h,n
o,w
p
b,s
d,f,z
e,x
i,y
q,t
r,u
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Complexidade computacional
Com o procedimento de otimizao descrito, obteve-se uma implementao com 17 ciclos de mquina por iterao. A cada amostra de entrada, so
executadas basicamente 17 M instrues. O ciclo
de instrues no processador utilizado de 25 ns.
Com uma taxa de amostragem de 8 kHz o processador pode executar 1/(8000 25.109 ) = 5000
instrues por amostra.
Se todas as instrues forem usadas em iteraes
do filtro adaptativo, o nmero mximo de coeficientes dado por M = 5000/17
= 294.
Contando com instrues de inicializao, interface com os conversores e ciclos para atendimento
DM bus
F4 (I0)
F0 (I1)
F8 (I1)
F9 (I0)
F5 (I0)
F2 (I1)
F9 (I2)
F5 (I3)
F2 (I4)
F6 (I0)
F1 (I2)
F4 (I3)
PM bus
F0 (I8)
F4 (I9)
F5 (I10)
F0 (I9)
F1 (I11)
F10 (I8)
F5 (I12)
F5 (I13)
F10 (I8)
F2 (I12)
F4 (I13)
F12 (I10)
F12 (I11)
F8 (I10)
F10 (I9)
F9 (I11)
F10 (I9)
Resultados
Para ilustrar o seu funcionamento, o algoritmo implementado foi aplicado a um problema de cancelamento de eco acstico. Em um automvel
marca Escort, o acoplamento acstico entre um
alto-falante localizado no console e um microfone
de eletreto LeSon ML-8 localizado no espelho foi
118
2 (n)],
ERLE = 10 log[d2 (n)/M
40
dB
20
0.5
1
tempo (s)
1.5
0.02
0.01
0
0.01
0.02
0
20
40
tempo (ms)
60
Apndice D
Artigo ICASSP 2001
Este artigo, cujos autores so A. H. C. Carezia, P. M. S. Burt, M. Gerken, M. Miranda e M. T. M. da Silva, foi apresentado no congresso
internacional ICASSP, em maio de 2001.
119
120
We also propose a simple numerical convention that ensures numerical stability for poor persistent excitations. Divisions may be
implemented using denominators with reduced wordlength. Thus,
lookup tables may be used to implement inversion of denominators, removing one of the reasons why LSL adaptive filters are
usually not used in high-order real-time applications like AEC, i.e.
the high computational load of divisions. These properties make
the presented algorithm a good option for stringent high-order realtime adaptive filtering applications like AEC.
In Section III we present an efficient implementation of the
modified EF-LSL algorithm for the floating point SHARC DSP.
The implementation followed a thorough optimization procedure,
which allowed the paralellism of this processor to be fully exploited. As a result, a 290 coefficient (for a 8 kHz sampling rate)
EF-LSL acoustic echo canceller was made possible.
2. MODIFIED ERROR-FEEDBACK LSL ALGORITHM
The conventional a priori EF-LSL algorithm can be found for exf
ample in [8, p.633]. It deals with the following variables: (m
(n),
b
m (n), fm (n)) and (m1
(n), m (n), bm (n)) that represent respectively energies, a priori prediction errors and reflection coefficients of the forward and backward predictions, (m (n), m (n),
dm (n)) that are respectively conversion factors, a priori estimation errors and regression coefficients and the forgetting factor .
The subscript m indicates the corresponding order. In its original form, the computational complexity of this algorithm is 18M
multiplications, 9M additions and 4M divisions, where M is the
number of adaptive filter coefficients.
To reduce the computational complexity of this algorithm we
introduced normalized a posteriori prediction errors that are related to the a priori prediction errors as follows [4]:
f m1 (n) =
=
bm1 (n) =
=
f
fm1 (n)/m1
(n)
f
m1 (n 1)m1 (n)/m1
(n),
b
bm1 (n)/m1 (n)
b
m1 (n)m1 (n)/m1
(n).
2)
3)
4)
5)
6)
7)
8)
b
b
m1
(n) = m1
(n1) +bm1 (n)m1 (n) +
u
r
f
f m1 (n) = fm1 (n)/m1
(n)
v
b
10) bm1 (n) = bm1 (n)/m1
(n)
w
9)
121
wordlength (for example, 8 bits), without producing instability.
Considering that numerical instability problems show up more
easily when low forgetting factors are used, we performed acoustic
echo cancellation experiments with more than one thousand coefficients and with forgetting factors as low as = 0.1. In these
cases the algorithm remained numerically stable and did not break
down, although it did not produce useful results due to the low
values that lead to large estimation errors.
3. DSP IMPLEMENTATION
The EF-LSL algorithm was implemented in assembly language in
a floating point Analog Devices 21061 DSP (SHARC). This DSP
has sixteen 40-bit internal registers, which are used for paralell additions and multiplications. In the following, these registers are denoted by F0, F1,...., F15 (F standing for floating point ). For
indirect memory adressing 16 pointers are used, which are denoted
by I0, I1,..., I15. Two simultaneous transfers between registers and
memory can be made, as long as one transfer uses a pointer in I0I7 and the Data Memory (DM) bus and the other transfer uses a
pointer in I8-I15 and the Program Memory (PM) bus. A reduced
wordlength division can be carried out in two machine cycles: an
8-bit tabulated inversion and a multiplication.
3.1. Optimization
The particular organization of the steps of the modified EF-LSL
algorithm presented in Table 1 is a suitable starting point for obtaining an efficient DSP implementation, as the steps within each
group can be carried out independently. Performing then a careful
allocation of the required operations to the processing resources,
the 13 steps of the algorithm can be fitted, initially, into 19 machine
cycles. The contents of the DSP registers before each of these 19
cycles are shown in Table 2. Table 3 shows the variables that are
assigned to each pointer and Table 4 shows the transfers between
memory and registers carried out in each cycle. The number of
required machine cycles can still be reduced to 17 by transferring
steps 18 and 19 in Tables 2 and 4 to the beginning of the following
iteration and step 0 in Table 4 to the end of the previous iteration.
This involves making adjustments in steps 12 and 13 in Tables 2
and 4. The core of the final algorithm is shown (in assembly language [9]) in Table 5. With the 40 MIPS SHARC DSP that was
employed, it is possible to use up to M = 290 coefficients for a 8
kHz sampling rate.
3.2. Numerical aspects
Using the definitions of Section II, in the DSP implementation k =
30 (due to a 16-bit A/D) and b = 8 (the mantissa length to which
the prediction energies are quantized). This would lead to =
222 (1 ) 212 (for = 0.999). However, considering the high
value of that is used, a smaller value of = 27 was adopted.
As an extra safeguard against instability, the absolute value of the
conversion factor m was used in the implementation. For the
SHARC DSP this did not represent any additional computational
load. It was also necessary to saturate the prediction errors in order
to avoid indefinite results (NaN), which is obtained activating the
saturation mode in the DSP.
3.3. An acoustic echo cancellation experiment
Using a measured impulse response of 1024 samples (at a 8 kHz
sampling rate) an echo signal was produced from a recorded voice
signal. The first 512 samples of the measured impulse response
are shown in Figure 1. The voice signal and the echo signal d(n)
122
Table 2: Contents of DSP registers previously to each cycle or result after each cycle
Multiplier Unit
Cycle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
f0
b
a
a
a
f
fg=m
m
X
f1
Accumulator Unit
Y
f2
f4
c
d
ad=k
k
a-bc=j
f5
j
p
p
inv(t)
k/t=v
m
n
m
f8
Y
f10
f12
f13
a
c-ae=l
ak+
ak++pq=t
k
l
vl
vl
e+vl=x
gi
b
b
b+jo=s
pq
pr
pr
gm
gm+pr=u
u+
nw
i+nw=y
jo
f
f-mw=z
e
e
i
i
mw
DM bus
(I0) f4
(I1) f0
(I1) f8
(I0) f9
(I0) f5
f2 (I1)
(I2) f9
(I3) f5
(I4) f2
f6 (I0)
f1 (I2)
f4 (I3)
PM bus
(I8) f0
(I9) f4
(I10) f5
(I9) f0
(I11) f1
(I8) f10
(I14) f5
(I15) f5
f10 (I8)
f8 (I14)
(I10) f12
f9 (I15)
(I11) f12
f8 (I10)
(I9) f10
f9 (I11)
f10 (I9)
Table 5: Core of the assembly program. The values of the modifiers are:
m0 = m8 = M + 1, m1 = m9 = M + 2, m5 = m13 = 0, m6 = m14 = 1 and m15 = 1
1)
2)
3)
4)
5)
6)
7)
8)
9)
10)
11)
12)
13)
14)
15)
16)
17)
flt:
f12 = f0*f4,
f4 = f0*f4,
f13 = f0*f5,
f8 = f0*f4,
f0 = f0*f5,
f14 = f1*f5,
f9 = f0*f5,
f12 = f2*f5,
f13 = f2*f5,
f14 = f2*f5,
f2 = f2*f4,
f8 = f2*f6,
flt0:
f4 = f0*f4,
f9 = f1*f4,
f12 = f0*f4,
f10 = f10-f12,
f10 = abs f10,
f2 = f8-f12,
f6 = f9-f13,
f8 = f8+f15,
f1 = f9-f14,
f10 = f10+f12,
f8 = f8+f13,
f2 = recips f8,
f9 = f9+f14,
f9 = f9+f15,
f4 = recips f9,
f8 = f8+f12,
f3 = f9+f12,
f15
ae
ak
ak+
h
gm
u
inv(u+)
m/(u+)=w
w
f14
bc
bc
c
g
g
g
o
q
r
i
h-gi=n
f6
X
f9
f0 = dm(i1,m5),
f8 = dm(i1,m6),
f9 = dm(i0,m0),
f5 = dm(i0,m6),
dm(i1,m5) = f2,
f9 = dm(i2,m5),
f5 = dm(i3,m5),
f2 = dm(i4,m5),
dm(i0,m0) = f6,
dm(i2,m5) = f1,
dm(i3,m6) = f4,
f4 = dm(i0,m5),
f4 = pm(i9,m8);
f5 = pm(i10,m13);
pm(i9,m13) = f10;
f0 = pm(i9,m13);
f1 = pm(i11,m15);
pm(i11,m14) = f3;
f10 = pm(i8,m13);
f5 = pm(i14,m13);
f5 = pm(i15,m13);
pm(i8,m14) = f10;
pm(i14,m14) = f8;
f10 = pm(i9,m9);
f12 = pm(i10,m13);
pm(i15,m14) = f9;
f12 = pm(i11,m14);
pm(i10,m14) = f8;
f0 = pm(i8,m13);
123
were then fed to the DSP system and error M (n) was recorded.
A forgetting factor = 0.999 was used. The instantaneous echo
return loss enhancement (ERLE) given by
0.02
ERLE (dB)
was calculated. Figure 2 shows 2s of the echo signal prior to cancellation and the obtained ERLE. Each ERLE value shown is the
mean of 64 consecutive measurements. We observe that the ERLE
range is approximately 30-40 dB, a good result considering the
order of the echo canceller, the quantization of denominators of
Equations (9,10) of Table 1 and the usual noise levels in handsfree mobile telephony environments. No noise was superposed to
the echo signal in order to show the stable behaviour of the echo
canceller. It can be seen that the algorithm remains stable, without the need for additional control measures, even when the voice
signal decays to almost zero.
Figure 3 is similar to Figure 2 but considering an echo canceller with 1024 coefficients. In this case the described algorithm
was implemented by a C routine embedded in MatLab and using
the same numerical conventions as the DSP. It can be seen that the
obtained ERLE range is improved due to the higher number of coefficients and that algorithm still works well. It should be observed
that in this case the maximum attainable ERLE is limited due to
mantissas quantization before division. Similar results have been
obtained for higher orders and longer echo impulse responses.
40
20
0.5
1
time (s)
1.5
Fig. 2. Result of AEC experiment using ADSP-21061 (290 coefficients). Bottom trace: echo signal prior to cancellation.
60
ERLE (dB)
2
(n)]
ERLE = 10 log[d2 (n)/M
40
20
0.01
0
0
0.01
0.5
1
time (s)
1.5
Fig. 3. Result of AEC experiment using MatLab (1024 coefficients). Bottom trace: echo signal prior to cancellation.
0.02
0
20
40
time (ms)
60
Proceedings of the 15th Brazilian Telecommunications Symposium, Recife, 1997, pp. 280-284.
[5] M. Miranda, M. Gerken, M.T.M. da Silva: Efficient implementation of error-feedback LSL algorithm, Electronics
Letters, 1999, pp. 1308-1309.
[6] A. H. C. Carezia, M. Gerken, P. M. S. Burt, M. T. M. da Silva:
Efficient Implementation of a LSL Algorithm for Acoustic
Echo Cancelling in Automobiles (in Portuguese), Proceedings of the 17th Brazilian Telecommunications Symposium,
Vila Velha, 1999, pp. 372-377.
[7] F. Ling, D. Manolakis, J.G. Proakis: Numerically robust
least-squares lattice-ladder algorithms with direct updating
of the reflection coefficients, IEEE Trans. on ASSP, August
1986, vol.34, no.4, pp.837-845.
[8] S. Haykin: Adaptive filter theory, Prentice Hall Int., 2nd Ed.,
1991.
[9] ADSP-2106x (SHARC) Users Manual, 2nd Ed., Analog
Devices Inc., July 1996.
Referncias Bibliogrficas
[1] ANTWEILER, C. Adaptation of acoustic echo cancelers exploiting
spectral characteristics of room impulse responses. In: Proceedings
of IWAENC 97. London: [s.n.], 1997. p. 5760.
[2] GUSTAFSSON, S.; MARTIN, R. Combined acoustic echo control
and noise reduction based on residual echo estimation. In: Proceedings of IWAENC 97. London: [s.n.], 1997. p. 160163.
[3] IHLE, M.; KROSCHEL, K. Integration of noise reduction and echo
attenuation for handset-free communication. In:
Proceedings of
14.
[5] MARTIN, R.; VARY, P. Combined acoustic echo control and noise
reduction for hands-free telephony - state of the art and perspectives.
In: Proceedings of EUSIPCO. Trieste: [s.n.], 1996. p. 11071110.
[6] TELLABS, INC. Echo cancellation tutorial. mar. 1999. Disponvel
em: <http://www.webproforum.com/tellabs/full.html>.
[7] GABREA, M. et al. Two microphones speech enhancement system
based on a double fast recursive least squares (DFRLS) algorithm.
In: Proceedings of EUSIPCO. Trieste: [s.n.], 1996. p. 983986.
124
REFERNCIAS BIBLIOGRFICAS
125
[8] KIM, K.-S.; PARK, K.-J.; YOUN, D.-H. Degraded audio enhancement based on spectral envelope estimation. In: Proceedings of ICSPAT 97. [S.l.: s.n.], 1997. p. 285288.
[9] KUO, S. M.; CHUANG, H.; MALLELA, P. P. Integrated automotive
signal processing and audio system. IEEE Transactions on Consumer Electronics, v. 39, n. 3, p. 522531, ago. 1993.
[10] CHAN, D. C. B.; RAYNER, P. J. W.; GODSILL, S. J. Multi-channel
signal separation. In: Proceedings of ICASSP 96. [S.l.: s.n.], 1996.
v. 2, p. 649652.
[11] DOUKAS, N.; STATHAKI, T.; NAYLOR, P. Speech enhancement
thorugh nonlinear adaptive source separation methods. In: Proceedings of SSAP 96. Corfu, Greece: [s.n.], 1996.
[12] WAN, E. A.; NELSON, A. T. Removal of noise from speech using
the dual EKF algorithm. In: Proceedings of ICASSP 98. [S.l.: s.n.],
1998. v. 1, p. 381384.
[13] GODSILL, S. J. The Restoration of Degraded Audio Signals. Tese
(Doutorado) University of Cambridge, dez. 1993.
[14] GODSILL, S. J. Bayesian enhancement of speech and audio signals which can be modelled as ARMA processes. International Statistical Review, v. 65, n. 1, p. 121, 1997.
[15] GOH, Z.; TAN, K.-C.; TAN, B. Speech enhancement based on a
voiced-unvoiced speech model. In: Proceedings of ICASSP 98. [S.l.:
s.n.], 1998. v. 1, p. 401404.
[16] HAYKIN, S. Adaptive Filter Theory. 2nd ed. Englewood Cliffs, NJ:
Prentice Hall, 1991. (Information and System Sciences Series).
[17] MUELLER, M. S. Least-squares algorithms for adaptive equalizers. Bell Syst. Tech. J., v. 60, p. 19061925, dez. 1984.
REFERNCIAS BIBLIOGRFICAS
126
[18] MORF, M.; KAILATH, T.; LJUNG, L. Fast algorithms for recursive identification. In: Proc. Conf. Decision and Control. Clearwater
Beach, Fla.: [s.n.], 1976. p. 916921.
[19] LJUNG, L.; MORF, M.; FALCONER, D. Fast calculation of gain
matrices for recursive estimation schemes. Intern. J. Control, v. 27,
p. 119, 1978.
[20] LING, F.; MANOLAKIS, D.; PROAKIS, J. G. New forms of LS lattice algorithms and an analysis of thei round-off error characteristics. In: Proceedings of ICASSP. Tampa, Fla.: [s.n.], 1985. p. 1739
1742.
[21] MIRANDA, M.; GERKEN, M. Implementao otimizada para o
algoritmo LSL a priori com realimentao de erro. In:
Anais do
REFERNCIAS BIBLIOGRFICAS
127
1995. p. 796799.
[32] AZIRANI, A. A.; JEANNS, R. L. B.; FAUCON, G. Optimizing
speech enhancement by exploiting masking properties of the human
ear. In: Proceedings of ICASSP 95. [S.l.: s.n.], 1995. p. 800803.
[33] GUSTAFSSON, S.; JAX, P.; VARY, P. A novel psychoacoustically
motivated audio enhancement algorithm preserving background
noise characteristics. In:
1998. p. 397400.
[34] INTERNATIONAL
TION.
ORGANIZATION
ISO/IEC 11172-3:
FOR
STANDARDIZA-
Information TechnologyCoding of
REFERNCIAS BIBLIOGRFICAS
128
[35] SCHROEDER, M. R.; ATAL, B. S.; HALL, J. L. Optimizing digital speech coders by exploting masking properties of the human ear.
Journal of Acoustical Society of America, v. 66, n. 6, p. 16471652,
dez. 1979.
[36] JOHNSTON, J. D. Transform coding of audio signals using perceptual noise criteria. IEEE Journal on Selected Areas in Communications, v. 6, n. 2, p. 314323, fev. 1988.
[37] SCHARF, B. Critical bands. In: TOBIAS, J. (Ed.). Foundations
of Modern Auditory Theory. New York: Academic Press, 1970. v. 1,
cap. 5, p. 159202.
[38] ANALOG DEVICES. ADSP-2106x SHARC Users Manual. 2nd
ed. [S.l.], jul. 1996.
[39] PRESS, W. H. et al. Numerical Recipes in C - The Art of Scientific
Computing. 2nd ed. [S.l.]: Cambridge University Press, 1992.