Vous êtes sur la page 1sur 8

Processamento de Sinal – Aula nº17

Sumário: Amostragem de sinais discretos no tempo.


Amostragem de sequências. Decimação e expansão.
Decimação e interpolação fraccionária. Exemplos de aplicação.

x[n] xd[n]
Decimação N xd [ n] = x[nN ] X d (e jω ) = X p (e jω / N )

x[n] xe[n]  x[ Ln ] , n = kL
Expansão L xe [n] =  X e (e jω ) = X (e jω L )
0 , n ≠ kL

Interpolação x[n] L H i (e jω ) xi[n]

π
ωc =
L
Processamento de Sinal – Aula nº17
x[n] xb[n]
Decimação N


ωs = ≥ 2ωM
N

xd[n]

X d (e jω ) = X p (e jω / N )
xd [n] = x[nN ] 1 N −1  j ω −N2π k 
=
N
∑ X e 
k =0  
Processamento de Sinal – Aula nº17

Interpolação x[n] L H i (e jω ) xi[n]

X e (e jω )
xe[n]

π
ωc =
L

 x[ Ln ] , n = kL
xe [n] =  X e (e jω ) = X (e jω L )
0 , n ≠ kL
X i (e jω ) = X e (e jω ) H i (e jω )
xi [ n] = xe [ n] ∗ hi [n]
Processamento de Sinal – Aula nº17

Decimação ou Interpolação Fraccionária:

- Expansão por L seguida de decimação por N


- Factor racional L/N
se L/N < 1 – decimação
se L/N > 1 – interpolação

- Antes de decimar deve aplicar-se um filtro “anti-aliasing” (ωc=π/N)


- Depois de expandir deve aplicar-se um filtro de interpolação (ωc=π/L)
- Logo o filtro é passa-baixo com freq. corte ωc=min(π/L,π/N)

x[n] L H (e jω ) N y[n]

Notas:
- Frequência de corte do filtro em Hz:
min(fsx,fsy)/2 onde fsx e fsy são as frequências de amostragem
implícitas nos sinais x[n] e y[n].
- O ritmo de amostras a que opera o filtro é fsh = L*fsx
Processamento de Sinal – Aula nº17

Problema 17.1: Considere um sinal de áudio amostrado a 44kHz. Assuma que o


sinal ocupa uma banda inferior a 5.5kHz. Defina dois filtros, um passa-baixo,
H0, e outro passa-alto, H1, com frequências de corte ligeiramente inferior e
ligeiramente superior a 5.5Khz (π/4). Corrompa o sinal com ruído passa-alto
acima de 5.5 kHz (some o ruído ao sinal). Ouça o sinal. Filtre-o com o filtro
passa-baixo e verifique que o sinal é recuperado.
Processamento de Sinal – Aula nº17

Ver LimparSinal.m
% Problema 17.1
% % Façamos agora o mesmo em relação ao filtro passa alto
% Vamos especificar 2 respostas em frequencia H0 e H1 (low pass e high H1=ones(N,1);
% pass) em que a frequencia de corte de H0 e ligeiramente menor do que pi/4 H1(1:69)=0;
% e a frequencia de corte de H1 um pouco maior do que pi/4. A especificação H1(N-67:N)=0;
% das pespostas em frequencia será feita em 512 pontos equidistantes na frequencia h1=real(ifft(H1));
% no intervalo entre 0 e 2pi atraves da 512-DFT. Notando a correspondência plot(h1)
% temp(1:N/2-1,1)=h1(N/2+2:N);
% Angulo 0 pi/4 pi/2 pi ... 2pi temp(N/2:N,1)=h1(1:N/2+1);
% Amostra da DFT 0 64 128 256 ... 512 h1=temp;
% Indice no MatLab 1 65 129 257 ... 513 plot(h1)
% H1=fft(h1);
% O indice (MatLab) que corresponde a frequência de corte de H0 será 60 plot(abs(H1))
% e, no caso de H1, sera 69. Se as respostas a impulso que correspondem a
% H0 e H1, (h0 e h1), fossem finitas e de duração inferior a 512 poderiamos usar
% a 512-DFT e a 512-IDFT para passar de um domínio a outro sem erro. É o % agora vamos filtrar o ficheiro som2.wav por H0
% que vamos fazer, desprezando esse erro. Assim: [x,fs]=wavread('som2.wav');
% x=10.*x(:,1); % passar a mono e amplificar 20 dB
N=512; sound(x,fs) % verificar
H0=zeros(N,1); xf=conv(x,h0);
H0(1:60)=1; % 60 amostras a 1 no inicio sound(xf,fs) % eliminamos a energia de alta frequência, que era pouca
H0(N-58:N)=1; % 59 amostras no fim, para ser simetrica e originar h0 real % vamos construir ruido branco e depois passa-lo por h1
h0=real(ifft(H0)); n=2*randn(size(x,1),1);
plot(h0) nf=conv(n,h1);
% h0 não teria duraçao finita :-( como se ve em plot(h0)
% Construamos um filtro causal a partir de h0, atrasando a resposta de N/2: % e "sujamos" o sinal xf com este ruido de alta frequência
temp(1:N/2-1,1)=h0(N/2+2:N); % notemos que as durações de xf e nf sao iguais (duraçao de x + N -1)
temp(N/2:N,1)=h0(1:N/2+1); zf=xf+nf;
h0=temp; soundsc(zf,fs)
plot(h0) % como xf e nf ocupam bandas diferentes deve ser possivel recuperar
% agora h0 é causal. Verifiquemos qual a amplitude da resposta em frequência: % o sinal original a partir do sinal sujo
H0=fft(h0); o=conv(zf,h0);
plot(abs(H0)) soundsc(o,fs)
Processamento de Sinal – Aula nº17

Problema TPC17:
Considere um sinal de áudio, x[n], com frequência de amostragem de 22 kHz. A
informação espectral útil do sinal é inferior a 8kHz. O sinal é fornecido no ficheiro
‘PS_Aula17.zip’, com nome ‘sinal17.wav’, bem como uma função Matlab para fazer
a expansão de um sinal.
a) Pretende-se converter este sinal para uma frequência de amostragem de 16kHz.
Faça um programa em Matlab para fazer essa conversão. Determine os factores
mínimos de expansão, L, e de decimação, N, a usar.
Abra o ficheiro com o sinal com o comando: [x,fs] = wavread('sinal17.wav');
Use o comando expand() para expandir o sinal por L. Faça um “plot” do sinal
expandido e verifique que tem L-1 amostras nulas entre cada amostra não nula.
Use o comando fir1() para obter o filtro de interpolação de comprimento 512:
h = fir1(512,wn);
%wn é a freq. de corte normalizada, onde 1 corresponde a pi.
%wn = min(1/N,1/L)

vsff
Processamento de Sinal – Aula nº17

TPC17 (cont.)
Faça um “plot” da resposta em frequência do filtro e verifique que está bem
definido.
Filtre o sinal expandido por L com o filtro de resposta a impulso h. Para tal, use a
função y=conv(h,xe) ou y=filter(h,1,xe). Decime o sinal resultante por N:
xb =y(1:N:end); %toma uma amostra de N em N.
Ouça o sinal resultante e verifique que “soa” da mesma forma. Use soundsc().

b) Repita o procedimento anterior para converter o sinal x[n] para uma frequência
de amostragem de 32kHz.

Enviar o trabalho realizado por email até 25/04/2010.

Vous aimerez peut-être aussi