Com o auxílio do Matlab, estude o processo de modulação por codificação de pulso utilizando filtragem
ideal. Para tanto, use o script dado abaixo, em que inicialmente é proposto um sinal composto por duas
senoides m(t) = sen(2πt) – sen(6πt). Este sinal é modelado discretamente através de pontos espaçados a
cada 0,002 segundos e analisado em uma janela de tempo de 1 segundo.
clear; clf;
td = 0.002;
t = [0:td:1.]; % intervalo de tempo de 1 segundo
xsig = sin(2*pi*t)-sin(6*pi*t); % senoides 1 Hz + 3 Hz
Lsig = length(xsig);
ts = 0.02; % amostragem de 50 Hz
Nfactor = ts/td;
figure(1)
subplot(211); plot(t,xsig,'b',t,sqh_out1(1:Lsig),'r','Linewidth',2);
title('Sinal {\itg}({\itt}) and o sinal PCM de 16 níveis');
xlabel('tempo (s)');
subplot(212); plot(t,xsig,'b',t,sqh_out2(1:Lsig),'r', 'Linewidth',2);
title('Sinal {\itg}({\itt}) and o sinal PCM de 4 níveis');
xlabel('tempo (s)');
A seguir, define-se o fator de compressão Nfactor, usado para fazer a amostragem e quantização do sinal
original. O sinal e seus respectivos sinais PCM quantizados em 16 e 4 níveis são mostrados na Figura 1.
Para a análise do resultado, estude todos os procedimentos feitos no processamento do sinal e comente a
utilização das funções sampandquant e uniquan, dadas logo abaixo. Plote os resultados s_out, sq_out e
sqh_out para ambos os níveis de quantização e comente o que significa cada um destes sinais. Estude a
relação sinal-ruído de quantização, que pode ser calculada com este script. O que este parâmetro significa?
Estude os resultados obtidos. Varie a quantidade de níveis de quantização e obtenha outros resultados,
fazendo os comentários pertinentes.
1
function [s_out,sq_out,sqh_out,Delta,SQNR]=sampandquant(sig_in,L,td,ts)
% Uso:
%
% [q_out,sq_out,sqh_out,Delta,SQNR] = sampandquant(sig_in,L,td,ts);
% L - número de níveis de quantização
% sig_in - vetor do sinal de entrada
% td - discretização do sinal original
% ts - período de amostragem
% Saídas da função:
% s_out - sinal de saída amostrado
% sq_out - sinal de saída amostrado e quantizado
% sqh_out - sinal de saída quantizado, amostrado e segurado
% Delta - intervalo de quantização
% SQNR - razão sinal ruído de quantização
if (rem(ts/td,1)==0)
nfac = round(ts/td);
p_zoh = ones(1,nfac);
s_out = downsample(sig_in,nfac);
[sq_out,Delta,SQNR] = uniquan(s_out,L);
s_out = upsample(s_out,nfac);
sqh_out = kron(sq_out,p_zoh);
sq_out = upsample(sq_out,nfac);
else
warning('Erro! ts/td não é um inteiro!');
s_out = []; sq_out = []; sqh_out = []; Delta = []; SQNR = [];
end
function [q_out,Delta,SQNR]=uniquan(sig_in,L)
% Uso
%
% [q_out,Delta,SQNR] = uniquan(sig_in,L);
% L - número de níveis de quantização
% sig_in - vetor do sinal de entrada
% Saídas da função:
% q_out - saída quantizada
% Delta - intervalo de quantização
% SQNR - razão sinal ruído de quantização
sig_pmax = max(sig_in);
sig_nmax = min(sig_in);
Delta = (sig_pmax - sig_nmax)/L;
2
Para a recuperação do sinal original, uma solução é usar um filtro passa-baixa para separar o espectro de
interesse. Assim, pode-se definir um filtro ideal no domínio da frequência e filtrar o sinal. A continuação
do script anterior, dado abaixo, executa este processo.
figure(2)
subplot(211); plot(t,xsig,'b-',t,s_recv1,'r-.','Linewidth',2);
legend('original','recovered'); legend boxoff;
title('Sinal {\itg}({\itt}) e o sinal PCM-16 filtrado');
xlabel('tempo (s)');
subplot(212);plot(t,xsig,'b-',t,s_recv2(1:Lsig),'r-.','Linewidth',2);
legend('original','recovered'); legend boxoff;
title('Sinal {\itg}({\itt}) e o sinal PCM-4 filtrado');
xlabel('tempo (s)');
Relacione todos os procedimentos executados no script com aquilo que foi visto em teoria na sala de aula.
Estude o espectro dos sinais quantizados em 16 níveis e 4 níveis. Determine qual nível de quantização
obtém o melhor desempenho na reconstrução do sinal original.
2. Modulação Delta
Para o estudo da Modulação Delta será utilizado o mesmo script anterior, acrescentando o trecho de
código a seguir. Este trecho de código utiliza a função deltamod, que também é mostrada a seguir e é
necessária para os estudos que se seguem.
No exemplo mostrado na Figura 3 é mostrada a utilização da modulação Delta para três valores distintos
de Delta. Analise os resultados encontrados e explique os procedimentos executanos no script. Encontre
exemplos que mostrem claramente o problema do ruído granular e a distorção de sobreinclinação.
Experimente outros valores de Delta e faça os comentários pertinentes.
3
% Estudo da Modulação Delta
Delt1 = 0.2; % Escolha de um delta pequeno
s_DMout1=deltamod(xsig,Delt1,td,ts);
figure(3)
subplot(311); plot(t,xsig,'k',t,s_DMout1(1:Lsig),'b','Linewidth',2);
title('Sinal {\itg}({\itt}) e Sinal DM');
xlabel('tempo (s)'); axis([0 1 -2.2 2.2]);
% Aplicar modulação DM novamente com o dobro do delta
Delt2 = 2* Delt1;
s_DMout2=deltamod(xsig,Delt2,td,ts);
subplot(312); plot(t,xsig,'k',t,s_DMout2(1:Lsig),'b','Linewidth',2);
title('Sinal {\itg}({\itt}) e Sinal DM com o dobro do passo');
xlabel('tempo (s)'); axis([0 1 -2.2 2.2]);
% Aplicar modulação DM novamente com o quádruplo do delta
Delt3 = 2* Delt2;
s_DMout3=deltamod(xsig,Delt3,td,ts);
subplot(313); plot(t,xsig,'k',t,s_DMout3(1:Lsig),'b','Linewidth',2);
title('Sinal {\itg}({\itt}) e Sinal DM com o quádruplo do passo');
xlabel('tempo (s)'); axis([0 1 -2.2 2.2]);
function s_DMout=deltamod(sig_in,Delta,td,ts)
% Uso
%
% s_DMout = deltamod(sig_in,Delta,td,ts);
% Delta - tamanho do passo DM
% sig_in - vetor do sinal de entrada
% td - discretização do sinal original
% ts - período de amostragem
%
% NOTA: td*ts deve ser um número inteiro positivo
%
% Saída da função:
% s_DMout - sinal amostrado DM
%
if (rem(ts/td,1) == 0),
nfac = round(ts/td);
p_zoh = ones(1,nfac);
s_down = downsample(sig_in,nfac);
Num_it = length(s_down);
s_DMout(1) = -Delta/2;
for k = 2 : Num_it,
xvar = s_DMout(k-1);
s_DMout(k) = xvar + Delta*sign(s_down(k-1)-xvar);
end
s_DMout=kron(s_DMout,p_zoh);
else
warning('Erro! ts/td não é um inteiro!');
s_DMout=[];
end