sexta-feira, 8 de maio de 2020

Modulação PAM - um exemplo

Conversão de sinal analógico em PAM.
Na modulação por amplitude de pulso (PAM) o sinal analógico é amostrado e convertido em pulsos (em geral retangulares) de largura constante e amplitude variável. Esses pulsos possuem topo constante. A taxa de amostragem do sinal analógico precisa obedecer ao teorema de Nyquist. De forma resumida:
  • É definida pelo produto entre o sinal de mensagem e um trem periódico de pulsos retangulares.
  • Na modulação PAM a amplitude dos pulsos, regularmente espaçados, é variada proporcionalmente aos valores amostrados do sinal contínuo de mensagem. 
  • Na amostragem natural, o topo de cada pulso retangular modulador pode variar com o sinal de mensagem, enquanto que no PAM ele é mantido plano.
O código Scilab abaixo mostra a amostragem de um sinal analógico, a geração de pulsos e a recuperação do sinal analógico a partir dos pulsos. Nesse código não foi incluído o efeito de ruído.

//////////// PAM
clc; close; close;

/// Gerando o sinal "analógico":
dt = 1/200;
t = 0:dt:(3-dt);  // f = 1/dt = 200 Hz
p2 = 2*%pi;
tam = max(size(t));
tam2 = round(tam/2) - 1;

s = sin(p2*t) + 0.5*cos(3*p2*t) - 0.25*sin(4*p2*t);
s = s/max(abs(s));  // amplitude máxima igual a 1.
subplot(2,2,1); plot(t,s); title('Sinal analógico');

/// Amostragem (sample):
sa = 0*s;
sa(1:10:$) = s(1:10:$);  /// taxa de amostragem = 20 Hz
subplot(2,2,2); bar(sa,0.1); title('Amostras');

/// amostras de topo plano (hold):
sah = sa;
for k=1:10:tam
    sah(k:k+3) = sa(k);
end
subplot(2,2,3); plot2d2(sah); title('Amostras com retenção.');
plot(s,'m');

/// Espectros:
sf = abs(fft(s));  /// espectro do sinal original.
sahf = abs(fft(sah));  /// espectro do sinal amostrado com retenção
ff = 1:tam; ff = ff - 1; ff = ff/max(size(ff)); ff = ff/dt;
subplot(2,2,4); plot(ff(1:tam2),sf(1:tam2)); 
title('Espectro do sinal analógico');

figure;
subplot(2,2,1); plot(ff(1:tam2),sahf(1:tam2)); 
title('Espectro do sinal amostrado com retenção');

//////  Recuperação:
sk = sah;
for k=1:10:tam
    sk(k:k+9) = sah(k);
end
subplot(2,2,2); plot(sk); title('Recuperando o sinal');

//// Filtragem:
hx = [0.1 0.1 0.25 0.5 0.6 0.65 0.70 0.65 0.60 0.5 0.25 0.1 0.1];
hx = hx/sum(hx);
skf = filter(hx,1,sk);
subplot(2,2,3); plot(skf); plot(s,'m'); 
title('Sinal recuperado');

skff = abs(fft(skf));
subplot(2,2,4); plot(ff(1:tam2),skff(1:tam2)); 
title('Sinal recuperado');

Gráficos:



Nenhum comentário:

Postar um comentário