FACULTAD NACIONAL DE INGENIERIA
INGENIERIA ELECTRICA-ELECTRONICA
LABORATORIO DE TELECOMUNICACIONES
Materia: Telecomunicaciones I
LABORATORIO 6
SIMULACION DE CODIGOS DE LINEA EN MATLAB
INTRODUCCION
El presente laboratorio tiene como objetivo simular algunos de los códigos de línea en
Matlab : AMI, NRZ, RZ, Bipolar, Unipolar. Asimismo, programar una interfaz gráfica de
usuario (GUIDE) que genere bits aleatorios (hasta 10 bits) para su posterior codificación
(seleccionada por el usuario). De igual forma, se grafica los espectros de cada uno de los
códigos de línea.
MARCO TEORICO
La transmisión de datos en forma digital implica una cierta codificación. A la forma de
transmisión donde no se usa una portadora se la conoce como transmisión en banda base.
Los códigos de línea son usados para este tipo de transmisión. Existen varios tipos de
códigos, entre ellos Unipolar NRZ, Polar NRZ, Unipolar RZ, Bipolar RZ (AMI),
Manchester, CMI, etc. Algunos de estos códigos se muestran en la figura 1.
Fig.1. Códigos de línea usuales.
Algunas de las características deseables de los códigos de línea son:
▪ Autosincronización: contenido suficiente de señal de temporización (reloj) que
permita identificar el tiempo correspondiente a un bit.
▪ Capacidad de detección de errores: la definición del código incluye el poder de
detectar un error.
▪ Inmunidad al ruido: capacidad de detectar adecuadamente el valor de la señal ante
la presencia de ruido (baja probabilidad de error).
▪ Densidad espectral de potencia: igualación entre el espectro de frecuencia de la
señal y la respuesta en frecuencia del canal de transmisión.
▪ Ancho de banda: contenido suficiente de señal de temporización que permita
identificar el tiempo correspondiente a un bit.
▪ Transparencia: independencia de las características del código en relación a la
secuencia de unos y ceros que transmita.
FUNCIÓN UNRZ(h)
El código Unipolar sin retorno a cero representa un 1 lógico (1L) con un nivel de
+V durante todo el periodo de bit y un cero lógico (0L) con un nivel de 0 V durante todo el
periodo de bit. La función siguiente simula esta codificación:
%Example:
h=[1 0 0 1 1 0 1 0 1 0];
%URZ(h)
clf;
n=1;
l=length(h);
h(l+1)=1;
while n<=length(h)-1;
t=n-1:0.001:n;
if h(n) == 0
if h(n+1)==0
y=(t>n);
else
y=(t==n);
end
d=plot(t,y);grid on;
title('Line code UNIPOLAR NRZ');
set(d,'LineWidth',2.5);
hold on;
axis([0 length(h)-1 -1.5 1.5]);
disp('zero');
else
if h(n+1)==0
y=(t<n)-0*(t==n);
else
y=(t<n)+1*(t==n);
end
d=plot(t,y);grid on;
title('Line code UNIPOLAR NRZ');
set(d,'LineWidth',2.5);
hold on;
axis([0 length(h)-1 -1.5 1.5]);
disp('one');
end
n=n+1;
%pause;
end
Como ejemplo, ejecutamos lo que muestra la figura 2:
Fig. 2. Función UNRZ(h).
FUNCIÓN URZ(h)
El código Unipolar con retorno a cero representa un 1 lógico (1L) con un nivel de +V
durante la mitad del periodo de bit y un cero lógico (0L) con un nivel de 0 V durante todo
el periodo de bit. La función siguiente simula esta codificación:
%Example:
h=[1 0 0 1 1 0 1 0 1 0];
%URZ(h)
clf;
n=1;
l=length(h);
h(l+1)=1;
while n<=length(h)-1;
t=n-1:0.001:n;
%Graficación de los CEROS (0)
if h(n) == 0
if h(n+1)==0
y=(t>n);
else
y=(t==n);
end
d=plot(t,y);grid on
title('Line code UNIPOLAR RZ');
set(d,'LineWidth',2.5);
hold on;
axis([0 length(h)-1 -1.5 1.5]);
disp('zero');
%Graficación de los UNOS (1)
else
if h(n+1)==0
y=(t<n-0.5);
else
y=(t<n-0.5)+1*(t==n);
end
d=plot(t,y);grid on;
title('Line code UNIPOLAR RZ');
set(d,'LineWidth',2.5);
hold on;
axis([0 length(h)-1 -1.5 1.5]);
disp('one');
end
n=n+1;
%pause;
end
end
Como ejemplo, ejecutamos lo que muestra la figura
3:
Fig. 3. Función URZ(h).
FUNCIÓN PNRZ(h)
El código Polar sin retorno a cero representa un 1 lógico (1L) con un nivel de +V
durante todo el periodo de bit y un cero lógico (0L) con un nivel de - V durante todo el
periodo de bit. La función siguiente simula esta codificación:
function PNRZ(h)
%Example:
%h=[1 0 0 1 1 0 1 0 1 0];
%PNRZ(h)
clf;
n=1;
l=length(h);
h(l+1)=1;
while n<=length(h)-1;
t=n-1:0.001:n;
if h(n) == 0
if h(n+1)==0
y=-(t<n)-(t==n);
else
y=-(t<n)+(t==n);
end
d=plot(t,y);grid on;
title('Line code POLAR NRZ');
set(d,'LineWidth',2.5);
hold on;
axis([0 length(h)-1 -1.5 1.5]);
disp('zero');
else
if h(n+1)==0
y=(t<n)-1*(t==n);
else
y=(t<n)+1*(t==n);
end
d=plot(t,y);grid on;
title('Line code POLAR NRZ');
set(d,'LineWidth',2.5);
hold on;
axis([0 length(h)-1 -1.5 1.5]);
disp('one');
end
n=n+1;
%pause;
end
Como ejemplo, ejecutamos lo que muestra la figura 4:
Fig. 4. Función PNRZ(h).
FUNCIÓN BRZ(h)
El código Bipolar con retorno a cero representa un 1 lógico (1L) con un nivel de +V
durante la mitad del periodo de bit y un cero lógico (0L) con un nivel de - V durante la
mitad del periodo de bit. La función siguiente simula esta codificación:
function BRZ(h)
%Example:
%h=[1 0 0 1 1 0 1 0 1 0];
%BRZ(h)
clf;
n=1;
l=length(h);
h(l+1)=1;
while n<=length(h)-1;
t=n-1:0.001:n;
if h(n) == 0
if h(n+1)==0
y=-(t<n-0.5)-(t==n);
else
y=-(t<n-0.5)+(t==n);
end
d=plot(t,y);grid on;
title('Line code BIPOLAR RZ');
set(d,'LineWidth',2.5);
hold on;
axis([0 length(h)-1 -1.5 1.5]);
disp('zero');
else
if h(n+1)==0
y=(t<n-0.5)-1*(t==n);
else
y=(t<n-0.5)+1*(t==n);
end
d=plot(t,y);grid on;
title('Line code BIPOLAR RZ');
set(d,'LineWidth',2.5);
hold on;
axis([0 length(h)-1 -1.5 1.5]);
disp('one');
end
n=n+1;
%pause;
end
Como ejemplo, ejecutamos lo que muestra la figura 5:
Fig. 5. Función BRZ(h).
FUNCIÓN AMINRZ(h)
El código AMI representa los unos lógico por medio de valores alternadamente
positivos (+V) y negativos (-V). Un cero lógico (0L) se representa con un nivel de 0 V. La
función siguiente simula esta codificación:
function AMINRZ(h)
%Example:
%h=[1 0 0 1 1 0 1 0 1 0];
%AMINRZ(h)
clf;
n=1;
l=length(h);
h(l+1)=1;
ami=-1;
while n<=length(h)-1;
t=n-1:0.001:n;
if h(n) == 0
if h(n+1)==0
y=(t>n);
else
if ami==1
y=-(t==n);
else
y=(t==n);
end
end
d=plot(t,y);grid on;
title('Line code AMI NRZ');
set(d,'LineWidth',2.5);
hold on;
axis([0 length(h)-1 -1.5 1.5]);
disp('zero');
else
ami=ami*-1;
if h(n+1)==0
if ami==1
y=(t<n);
else
y=-(t<n);
end
else
if ami==1
y=(t<n)-(t==n);
else
y=-(t<n)+(t==n);
end
end
d=plot(t,y);grid on;
title('Line code AMI NRZ');
set(d,'LineWidth',2.5);
hold on;
axis([0 length(h)-1 -1.5 1.5]);
disp('one');
end
n=n+1;
%pause;
end
Como ejemplo, ejecutamos lo que muestra la figura 6:
Fig. 6. Función AMINRZ(h).
FUNCIÓN AMIRZ(h)
El código AMI con retorno a cero representa los unos lógico por medio de valores
alternadamente positivos (+V) y negativos (-V) y un retorno a cero en la mitad del periodo
del bit. Un cero lógico (0L) se representa con un nivel de 0 V. La función siguiente simula
esta codificación:
function AMIRZ(h)
%Example:
%h=[1 0 0 1 1 0 1 0 1 0];
%AMIRZ(h)
clf;
n=1;
l=length(h);
h(l+1)=1;
ami=-1;
while n<=length(h)-1;
t=n-1:0.001:n;
if h(n) == 0
if h(n+1)==0
y=(t>n);
else
if ami==1
y=-(t==n);
else
y=(t==n);
end
end
d=plot(t,y);grid on;
title('Line code AMI RZ');
set(d,'LineWidth',2.5);
hold on;
axis([0 length(h)-1 -1.5 1.5]);
disp('zero');
else
ami=ami*-1;
if h(n+1)==0
if ami==1
y=(t<n-0.5);
else
y=-(t<n-0.5);
end
else
if ami==1
y=(t<n-0.5)-(t==n);
else
y=-(t<n-0.5)+(t==n);
end
end
d=plot(t,y);grid on;
title('Line code AMI RZ');
set(d,'LineWidth',2.5);
hold on;
axis([0 length(h)-1 -1.5 1.5]);
disp('one');
end
n=n+1;
%pause;
end
Como ejemplo, ejecutamos lo que muestra la figura 7:
Fig. 7. Función AMINRZ(h).
INFORME
• Realizar la comparación de gráficos obtenidos de la simulación, presentar el grafico
de los datos con los diferentes códigos en base a la definición de funcionamiento.
• Explicar la diferencia entre NRZ y RZ en forma general para los datos siguientes
000001110111000110011111
111100000110001100000111