Beruflich Dokumente
Kultur Dokumente
Indice do Texto ii
1 Introduc~ao 1
3 Metodos de Aproximac~ao:
Filtros IIR 6
4 Metodos de Aproximac~ao:
Filtros FIR 14
5 Tecnicas de Realizac~ao 22
6 Efeitos da Quantizac~ao 29
ii
Cap
tulo 1
Introdu
c~
ao
Filtros Anal
ogicos: fun
c~oes
aproxima
c~
ao e implementa
c~
ao
digital - w - (rad).
plano Z
plano S
jw
z=e
s=jΩ
jH (j
)j2 = p 2N
N
(2.1)
+
2cN
J. A. Apolin
ario Jr. { Dezembro 2003 3
IME { Mestrado em Engenharia Eltrica PDS I
X
1
y (n) = x(n) h(n) = x(k)h(k n) (2.2)
k= 1
Tal operac~ao no domnio da transformada Z e dada por Y (z ) = X (z )H (z ),
onde H (z ) = Zfh(n)g, ou seja, a func~ao de sistema e a transformada Z da
resposta ao impulso. Existem basicamente dois tipos de ltros digitais: os
de resposta ao impulso nita (FIR do ingl^es \Finite Impulse Response")
e os de resposta ao impulso innita (IIR de \Innite Impulse Response").
Lembramos que os ltros FIR n~ao possuem polos fora da origem (H (z )
possui somente numerador) sendo sempre estaveis enquanto que os l-
tros IIR possuem polos fora da origem podendo ser dentro do crculo
unitario (estaveis) ou fora dos mesmos (instaveis). Para a observac~ao
anterior quanto a estabilidade, foi levado em conta os ltros causais ou
n~ao-antecipativos, ou seja, aqueles onde h(n) = 0 para n < 0. Estudaremos
no captulo seguinte os ltros IIR e no posterior os ltros FIR. Termi-
namos este captulo apresentando a forma geral de representar um ltro
digital por seus coecientes.
EQUACAO ~ EM DIFERENCAS:
y (n) = b(1)x(n) + b(2)x(n 1) + + b(nb + 1)x(n nb )
a(2)y (n 1) a(na + 1)y (n na )
~ DE SISTEMA:
FUNCAO
b(1) + b(2)z 1 + + b(nb + 1)z nb
H (z ) =
1 + a(2)z 1 + + a(na + 1)z na
VETOR B:
B = [b(1) b(2) b(nb 1)] (numerador)
VETOR A:
A = [1 a(2) a(na + 1)] (denominador)
Comando Matlab
c para ltrar o sinal x(n):
> y = filter (B,A,x);
M
etodos de Aproxima
c~
ao:
Filtros IIR
3.3 Exemplo
Seja um ltro analogico Butterworth de segunda ordem que tem como
func~ao de transfer^encia
H (s) = 2 p
1 (3.10)
s + 2s + 1
Sabemos que os polos situam-se em S1;2 = cos 34 jsen 34 e, como todo
ltro Butterworth analogico, possui sua frequ^encia de corte
c em js1 j =
js2j iguais a 1 no nosso caso. Neste exemplo desejamos um ltro digital
pelos dois metodos (invari^ancia ao impulso e transformac~ao bilinear) com
frequ^encia de corte em wc = 3=5.
(a) Invari^ancia ao impulso
A1 A2
H (s) = + (3.11)
s s1 s s2
J. A. Apolinario Jr. { Dezembro 2003 8
IME { Mestrado em Engenharia Eltrica PDS I
p2 p p p
com s1 = 2 + j 22 e s2 = 2
2 j 22 onde
p
1 )js=s1 = (s 1 )js=s1 =
1 j 2
A 1 = H (s):(s s :(s s (3.12)
s 1 )(s 1
s )
p
2
2 )js=s2 = (s 2 )js=s2 =
1 j 2
A 2 = H (s):(s s :(s s (3.13)
s 1 )(s 1
s ) 2
E em seguida:
H (z ) =
0 :6832z 1
(3.17)
1 0:1243z 1 + 0:0695z 2
(b) No caso da transformac~ao bilinear, temos uma vez mais que calcular
Td para ajustar a frequ^encia de corte:
c = T2 tan(wc=2) (3.18)
d
ou Td =
2c tan(wc =2) = 2tan( 3=2 5 ) = 2:7528.
Em seguida fazemos a transformac~ao:
s=
2 1 z 1 = 0:7265 1 z 1
(3.19)
Td 1 + z 1 1+z 1
em
H (z ) = H (s)js=0:7265 1 z 1 (3.20)
1+z 1
que resulta em
H (z ) =
1 + 2z 1 + z 2 (3.21)
2:5554 + 0:9443z 1 + 0:5004z 2
H (z ) =
0 :3913 + 0:7827z 1 + 0:39132z 2
(3.22)
1 + 0:3695z 1 + 0:1958z 2
Mesmo com um ltro de ordem baixa, tais transformac~oes s~ao traba-
lhosas para fazer manualmente e impraticaveis para uma ordem elevada.
Para a nossa sorte, o Matlab disp~oe de duas instruc~oes que deixa o pro-
cesso trivial: H (s) = s2 +p12s+1 implica em
> num=1;
e
> den=[1 sqrt(2) 1];
- Invari^ancia ao impulso:
> TdII=3*pi/5;
> [numII,denII]=impinvar(num,den,1/TdII);
- Transformac~ao bilinear:
> TdTB=2*tan(3*pi/10);
> [numTB,denTB]=bilinear(num,den,1/TdTB);
Tabela I
FILTRO INSTRUCO~ ES
Butterworth buttord, butter
Chebyshev Tipo I cheb1ord, cheby1
Chebyshev Tipo II cheb2ord, cheby2
Elptico ou Cauer ellipord, ellip
| H(e )| jw
| H(j Ω ) |
1 1
1 - δ1 1 - δ1
δ2 δ2
w Ω
wp ws π Ωp Ωs
0 0
p e
s calculados de acordo com a pre-distorc~ao
Rp : o ltro n~ao perde mais que Rp dB na banda passante
O resultado e N = 2 e
c = 2:7530.
Podemos, alternativamente, calcular N e wc no domnio discreto com
[N,wc]=buttord(0.4863,0.7981,-20*log10(0.9),-20*log10(0.2)); e os re-
sultados seriam N = 2 e wc = 0:6 (de 0:6 ou 3=15).
Os valores de coecientes (ja obtidos no mesmo exemplo anterior)
podem, ent~ao, ser obtidos com a func~ao butter:
> [numTB,denTB]=butter(2,0.6);
onde N = 2 (ordem) e wc = 0:6 (frequ^encia de corte).
Procedimento similar pode ser usado para calcular um ltro Cheby-
shev 1, 2 ou Elptico. Aconselha-se o uso de help butter (cheby1, cheby2
ou ellip) para obter detalhes na hora do uso da func~ao.
M
etodos de Aproxima
c~
ao:
Filtros FIR
4.1 Janelamento
Um ltro digital ideal, passa-baixas por exemplo, n~ao e implementavel
pois sua resposta ao impulso e uma sequ^encia bilateral e, portanto, anti-
causal. Podemos expressar a resposta em frequ^encia de um ltro PB
ideal pela equac~ao abaixo a qual e visualizada pela Figura 4.1.
8
< e jw ; jwj wc
Hd (ejw ) = (4.1)
: 0 ; wc < jwj
Observe que este ltro tem uma fase linear o que equivale a dizer um
retardo constante (de amostras). Obtemos a resposta ao impulso hd (n)
sacando a transformada inversa de Fourier de Hd (ejw ):
senwc(n )
hd (n) = F 1fHd (ejw )g = (4.2)
(n )
A ideia basica do janelamento e usar somente uma porc~ao nita das
amostras de hd (n). Isto correspode a termos h(n) = hd (n):w(n) onde w(n) =
u(n) u(n 2) conforme vemos na Figura 4.2. A sequ^encia w(n) e chamada
IME { Mestrado em Engenharia Eltrica PDS I
jw
| H(e
d
)|
w
wc π
0
w(n)
hd(n)
0 α 2α n
Tabela I
8
< 1 ;0 n M
Retangular w (n) =
: 0 ; caso contrario
8
>
< 2n=M ; 0 n M=2
>
Triangular w(n) = 2 2n=M ; M=2 n M
>
>
:
8 0 ; caso contrario
< 0:5 0:5cos( 2Mn ) ; 0 n M
Hanning w (n) =
:
8 0 ; caso contrario
< 0:54 0:46cos( 2Mn ) ; 0 n M
Hamming w (n) =
:
8 0 ; caso contrario
< 0:42 0:5cos( 2Mn ) + 0:08cos( 4Mn ) ; 0 n M
Blackman w (n) =
: 0 ; caso contrario
> w=hanning(M+1);
> n=0:M; n=n'+0.0000001;
> hd=sin(wc*(n-M/2))./(pi*(n-M/2));
> h=hd.*w;
> [H,W]=freqz(h,1,1000);
> plot(W/pi,abs(H)); grid;
> figure; plot(n,h); hold; plot(n,w)
As janelas apresentadas ate agora traduzem um metodo um tanto
quanto emprico. A janela de Kaiser apresentada a seguir resulta num
procedimento simples e eciente na obtenc~ao da janela correta dadas as
especicac~oes do ltro desejado.
8 I0(p1 (n )=)
< ;0 n M
w (n) = I0 ( ) (4.3)
: 0 ; caso contrario
onde = M=2 e Io (:) e a func~ao de Bessel modicada de primeira ordem
Os valores de e M s~ao encontrados da seguinte maneira:
w = ws wp (4.4)
A = 820log10 Æ (4.5)
>
> 0:1102(A 8:7) A > 50
<
= > 0:5842(A 21)0:4 + 0:07886(A 21) ; 21 A 50 (4.6)
>
: 0 A < 21
M = 2:A2858w (4.7)
Exemplo: Consideremos o projeto de um ltro digital FIR usando a
janela de Kaiser que deve obedecer as especicac~oes dadas na Figura 4.3
onde Æ1 = 0:01 e Æ2 = 0:001.
Consideremos, inicialmente, que Æ = 0:001, ou seja, o menor entre Æ1 e
1+ δ1
1
1- δ1
δ2
w
wc = 0.5π π
0
wp = 0.45π w = 0.55π
s
Æ2 . A seguir calculamos:
w = ws wp = 0:1 (4.8)
A = 20log10 Æ = 60 (4.9)
= 0:1102(60 8:7) = 5:6533 (4.10)
A 8
M =
2:285 0:1 = 72:4381 (4.11)
Finalmente, apresentamos a soluc~ao em Matlab:
> wc=0.5*pi;
> M=73;
> w=kaiser(M+1,beta);
> n=0:M; n=n'+0.0000001;
> hd=sin(wc*(n-M/2))./(pi*(n-M/2)));
> h=hd.*w;
> [H,W]=freqz(h,1,1000);
> plot(W/pi,abs(H)); grid;
... ou (simplesmente:)
> h=fir1(M,wc/pi,kaiser(M+1,beta));
| H(ejw) |
1+ δ1
1
1- δ1
δ2
w
wc π
0
wp w
s
| H(ejw) |
1 + δ1
1
1 - δ1
δ1=δ2=0.001
δ2
w
π/5 π/2 π
0
Ultimas observaco~es:
(i) a fase e linear
T
ecnicas de Realiza
c~
ao
+
x(n) y(n)
z-1 z-1
-0.5
Figura 5.1: Representac~ao do sistema apresentado em (5.1).
> yant=0;
> for n=1:tam
> y(n)=x(n)-0.5*xant-0.1*yant;
> xant=x(n);
> yant=y(n);
> end
> soundsc(y,fs);
Ou simplesmente y=filter([1 -0.5],[1 0.1],x); que sera muito mais
rapido que a implementac~ao da equac~ao em diferencas como anterior-
mente. Com o comando help filter, vemos que esta func~ao usa a imple-
mentac~ao Forma Direta II Transposta. Vejamos o que signica isto.
b1 a1
+ +
bM-1 aN-1
+ +
-1 -1
z z
bM aN
b0
x(n) + + y(n)
-1
z
a1 b1
+ +
aN-1 bM-1
+ +
-1
z
aN bM
+ +
x(n) y(n)
-1 -1
z z
0.2 -0.1
x(n) y(n)
-1 -1
0.2 z -0.1 z
y(n) x(n)
-1 -1
0.2 z -0.1 z
b0
x(n) y(n)
-1
z z-1
a1 b1
z-1 z
-1
a2 b2
a N-1 bM-1
z-1 z
-1
aN bM
b0
x(n) y(n)
-1
z
b1 a1
z-1
b2 a2
bM-1 a N-1
z-1
bM aN
Efeitos da Quantiza
c~
ao
^
x(n)=Q[x(n)]
3∆
2∆
−∆
−2∆
−3∆
−4∆
e2 =
2 = 4Xm2 2 2#
= Xm212
2 2(# 1)
(6.3)
12 12
# sendo o numero de bits.
A representac~ao numerica usada ate agora e conhecida como ponto
xo (\xed point"). Vejamos a express~ao para um valor quantizado em
ponto xo, complemento-a-dois, com B + 1 bits:
X
B
x^(n) = QB [x(n)] = Xm :( b0 + bi 2 i ) = Xm :x^B (n) (6.4)
i=1
com = Xm 2 B .
Contemplamos ate agora o caso do arredondamento ao nvel de quan-
tizac~ao mais proximo (\round"). Contudo, e importante mencionar que
podemos truncar o numero de bits n~ao para o nvel mais proximo mas
em direc~ao a 1 (\
oor") ou em direc~ao a +1 (\ceil").
Quando o valor a ser quantizado e maior em valor absoluto que Xm ,
normalmente e usada a saturac~ao (\clipping" ou \saturation over
ow")
conforme sugere a gura anterior.
Esta aritmetica em ponto xo permite a representac~ao de um numero
maior que 1 em magnitude pela denic~ao do fator de escala Xm . Fazendo
o fator de escala uma variavel Xm = 2c, chegamos a uma representac~ao
conhecida como ponto
utuante ou \
oating-point" onde o expoente c do
fator de escala e chamado de caracterstica e a parte fracional e chamada
de mantissa. Esta representac~ao em ponto
utuante oferece um meio
conveniente de manter uma faixa din^amica elevada e um baixo erro de
quantizac~ao.
mean((y-yQ).^
2)
disp('Valor te
orico:')
2.25*2^
(-2*8)/12
7.1 Introduc~ao
O processamento digital do sinal de voz, assunto com uma natureza in-
terdisciplinar envolvendo fonetica, siologia e acustica dentre outras dis-
ciplinas alem da teoria de processamentode sinais digitais, vem sofrendo
um grande avanco com o desenvolvimento da tecnologia dos processadores
digitais de sinais e encontra inumeras aplicac~oes na vida moderna quer
seja em codicac~ao, reconhecimento ou sntese de voz.
Neste curso procuramos, com o auxlio do Matlab, oferecer os con-
ceitos basicos envolvidos no processamento digital do sinal de voz com
vista ao entendimento dos princpios de transmiss~ao de voz.
O processo da produc~ao de voz inicia-se com a passagem de um
uxo
de ar pelas cordas vocais. Quando estas est~ao tensas e vibram, a voz
resultante sera um sinal dito sonoro ou vozeado (voiced speech) como
o \~a" em \Jo~ao". Por outro lado, quando as cordas vocais est~ao re-
laxadas (so uma constric~ao), produz-se um sinal conhecido como surdo
ou n~ao-vozeado (\unvoiced sound"). Em seu percurso das cordas vocais
ate a boca, o
uxo de ar passa pelo chamado trato vocal com um even-
IME { Mestrado em Engenharia Eltrica PDS I
tual acoplamento com o trato nasal (parte do ar pode sair pelo nariz).
Este trato vocal e usualmente modelado em tubos com diferentes sec~oes
transversais (0 a 20cm2 ) e com um comprimento total de cerca de 17cm
para um homem adulto.
Para vermos a representac~ao de um sinal de voz, vamos gravar uma
fala: apos acertar o volume de entrada de sinal pelo microfone, gravamos
2 segundos de voz com o comando > [x,fs]=daqrecord(2); Esperimente
gravar a frase \S~ao Jo~ao". Com este comando estaremos digitalizando
(mono) com uma frequ^encia de amostragem de 8000Hz , logo, teremos
16000 amostras.
Representac~ao no domnio do tempo:
> plot(x)
Escutando:
> soundsc(x,fs)
Representac~ao no domnio da frequ^encia:
> X=fft(x);
> plot(abs(X(1:max(size(X))/2)))
Como o sinal de voz n~ao e estacionario, este ultimo graco mostra
os componentes frequenciais existentes em todo sinal. O mais adequado
seria uma analise \short time" onde podemos vericar os componentes
frequenciais em perodos de tempo (por exemplo em torno de 20ms) onde
o sinal de voz e localmente estacionario. Uma maneira de visualizarmos
o espectro em func~ao do tempo e atraves do spectograma:
> specgram(x);
que e equivalente a > specgram(x, 256, 8000, hamming(256), 128), ou seja,
spectrograma do sinal x com FFT em janelas de 256 amostras, fs = 8KHz ,
janela tipo Hamming de 256 pontos e overlap de 128 amostras.
MODELO DO MODELO DE
~
TRATO VOCAL RADIACAO
V(z) ’
R(z)
UNVOICED
GERADOR DE
RUIDO
Vejamos a seguir alguns exemplos dos modelos que aparecem na Figura 7.1:
1
G(z ) = (1aelnaz(a)1z)2 , modelo exponencial
V (z ) = DG(z) = 1 PN G k z k , modelo de tubos acusticos sem perdas
k=1
R(z ) = 1 1z 1 , modelo de radiac~ao
Vejamos, a ttulo de exemplo, a sntese de uma vogal \a" conforme o
programa Matlab que segue.
function x = vogal(tam);
% s
ntese da vogal "A"
% "tam"
e o nmero de amostras
fs=10000; % sampling frequency
pitch=90; % pitch
a=0.91; % const. do modelo exp. do pulso Glotal
%-------------------------------------------------
G = 1.9206;
D = [1.0000 -0.0460 -0.6232 0.3814 0.2443 0.1973 ...
0.2873 0.3655 -0.4806 -0.1153 0.7100];
% +-> vocal tract coef. of the russian vowel AA
disp('')
disp('Programa vogal.m (exemplo s
ntese de uma vogal) ...')
disp('')
%---------------------+
% EXCITATION e(n): |
%---------------------+
e = zeros(tam,1);
for n=1:fix(fs/pitch):tam
e(n) = 1;
end
%---------------------+
% GLOTTAL PULSE G(z): |
%---------------------+
num = [0 -a*exp(1)*log(a)];
den = conv([1 -a],[1 -a]);
%gE = [1 zeros(1,(tam-1))]';
%gE = filter(num,den,gE);
eg = filter(num,den,e);
%eg = randn(tam,1); % whispered "A"
%---------------------+
Use > x=vogal(2500); para gerar 0.25s de sinal com uma frequ^encia
de amostragem de 10KHz . Modique o programa para variar a pitch e
a excitac~ao do trato voal (\whispered speech"). Observe as mudancas
na forma de onda no domnio do tempo. Observe tambem o espectro de
cada sinal gerado.
Apos este pequeno e interessante exerccio, voltemos nossa atenc~ao
- DM (Delta Modulation)
- ADM (Adaptive Delta Modulation)
- Phase Vocoder
- Formant Vocoder
- LPC Vocoder
Os codicadores PCM (Pulse Code Modulation) s~ao os mais simples cod-
icadores de forma de onda. Voz com baixa largura de banda e tipica-
mente amostrada 8000 vezes por segundo e ent~ao cada amostra e quan-
tizada. Se um quantizador linear e usado, uns 12 bits por amostra s~ao
necessarios, dando uma taxa uma taxa de bits de cerca de 96kbps. En-
tretanto isto pode ser facilmente reduzido se usarmos uma quantizac~ao
n~ao-linear.Para a codicac~ao de voz, vericou-se que uma quatizac~ao n~ao-
linear de 8 bits por amostra era suciente para manter uma qalidade
de voz que n~ao pudesse ser distinguida da original. Isto nos da uma
taxa de bits de 64kbps e dois destes PCM n~ao-lineares foram padroniza-
dos nos anos 60. Nos Estados Unidos a codicac~ao usando a -Law e
o padr~ao enquanto que na Europa a compress~ao A-Law, ligeiramente
diferente, e usada. Devido a simplicidade, excelente qualidade e baixo
retardo (delay), ambos codicadores ainda s~ao usados hoje em dia. Por
exemplo, os arquivos de audio \.au" usados na internet s~ao em verdade
arquivos PCM. Programas para implementar os codigos G711 A-Law e
-Law foram disponibilizados pela Sun Microsystems Inc. Uma outra
fonte de informac~oes sobre PCM e outros codicadores de forma de onda
podem ser encontrados no livro \Digital Coding of Waveforms" de N.S
Jayant e Peter Noll, Prentice Hall, 1984.
sobre outros codicadores a taxas baixas e sua relativa simplicidade: ele
pode rodar em um microcomputador de uso geral enquanto que os cod-
icadores CELP necessitam de um DSP dedicado para rodar em tempo
real.