% Este script mostra a forma de onda e o espectro de diversos esquemas de código de linha usando
% pulsos retangulares.
% São gerados sinais polar (RZ e NRZ), Manchester, On-Off (Rz e NRZ) e bipolar  

% Universidade de Brasília
% André Noll Barreto, 14 Junho 2011

close all;

N=1000000;
rs = 16;

bits = 1.0*(rand(1,N) > 0.5);

p_rz = [ones(rs/2,1);zeros(rs/2,1) ];
p_nrz = ones(rs,1);
p_manc = [ones(rs/2,1);-ones(rs/2,1) ];

t = 0:1/rs:(N-1/rs);
t_s = 1/rs;

s_rz_oo = p_rz * bits;
s_rz_oo = reshape(s_rz_oo, 1 , rs * N);

s_nrz_oo = p_nrz * bits;
s_nrz_oo = reshape(s_nrz_oo, 1 , rs * N);

s_rz_pol = p_rz * (2*bits-1);
s_rz_pol = reshape(s_rz_pol, 1 , rs * N);

s_nrz_pol = p_nrz * (2*bits-1);
s_nrz_pol = reshape(s_nrz_pol, 1 , rs * N);

s_manc = p_manc * (2*bits-1);
s_manc = reshape(s_manc, 1 , rs * N);

pol = 1;
aux = bits;
for k = 1:N
  if aux(k) == 1
    aux(k) = pol;
    pol = -1*pol;
  end
end
s_rz_bip = p_rz * aux;
s_rz_bip = reshape(s_rz_bip, 1 , rs * N);

figure(1)
subplot(2,3,1)
plot(t,s_rz_oo)
axis([0 20 -1.1 1.1])
title('on-off, RZ')

subplot(2,3,2)
plot(t,s_nrz_oo)
axis([0 20 -1.1 1.1])
title('on-off, NRZ')

subplot(2,3,3)
plot(t,s_rz_pol)
axis([0 20 -1.1 1.1])
title('polar, RZ')


subplot(2,3,4)
plot(t,s_nrz_pol)
axis([0 20 -1.1 1.1])
title('polar, NRZ')


subplot(2,3,5)
plot(t,s_manc)
axis([0 20 -1.1 1.1])
title('Manchester')

subplot(2,3,6)
plot(t,s_rz_bip)
axis([0 20 -1.1 1.1])
title('Bipolar')

figure(3)
plot(t,s_nrz_pol)
axis([0 20 -1.1 1.1])
title('polar, NRZ')

figure(4)
plot(t,s_rz_pol)
axis([0 20 -1.1 1.1])
title('polar, RZ')

figure(5)
plot(t,s_rz_oo)
axis([0 20 -1.1 1.1])
title('on-off, RZ')

[psd_rz_oo,f] = pwelch(s_rz_oo,[],[],256,rs);

figure(2);
subplot(2,3,1)
plot(f, abs(psd_rz_oo))
title('DEP, on-off, RZ')
xlabel('frequência (Hz)');

[psd_nrz_oo,f] = pwelch(s_nrz_oo,[],[],256,rs);
subplot(2,3,2)
plot(f, abs(psd_nrz_oo))
title('DEP, on-off, NRZ')
xlabel('frequência (Hz)');


[psd_rz_polar,f]  = pwelch(s_rz_pol,[],[],256,rs);
subplot(2,3,3)
plot(f, abs(psd_rz_polar))
title('DEP, polar, RZ')
xlabel('frequência (Hz)');


[psd_nrz_polar,f]  = pwelch(s_nrz_pol,[],[],256,rs);
subplot(2,3,4)
plot(f, abs(psd_nrz_polar))
title('DEP, polar, NRZ')
xlabel('frequência (Hz)');


[psd_manc,f]  = pwelch(s_manc,[],[],256,rs);

subplot(2,3,5)
plot(f, abs(psd_manc))
title('DEP, Manchester')
xlabel('frequência (Hz)');


[psd_bip,f]  = pwelch(s_rz_bip,[],[],256,rs);

subplot(2,3,6)
plot(f, abs(psd_bip))
title('DEP, Bipolar')
xlabel('frequência (Hz)');


figure(6)
plot(f, 10*log10(abs(psd_rz_polar)))
title('DEP, polar, RZ')
xlabel('frequência (Hz)');
ylabel('dB')

figure(7)
plot(f, 10*log10(abs(psd_nrz_polar)))
title('DEP, polar, NRZ')
xlabel('frequência (Hz)');
ylabel('dB')

figure(8)
plot(f, 10*log10(abs(psd_rz_oo)))
title('DEP, on-off, RZ')
xlabel('frequência (Hz)');
ylabel('dB')