.::MATLAB - CÓDIGOS DE LÍNEA::.

MATPIC.COM

MATLAB - CÓDIGOS DE LÍNEA

SIMULACIÓN DE CÓDIGOS DE LÍNEA EN MATLAB

RESUMEN: El presente artículo tiene como fin simular algunos de los códigos de línea en Matlab 7.1: 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.

INTRODUCCIÓN

           
            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.

codigos
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:

function UNRZ(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:

unrz
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:

function URZ(h)

%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:        

urz
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:        

pnrz
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:        

brz
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:        

aminrz
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:

amirz
Fig. 7. Función AMINRZ(h).

 

FUNCIÓN MANCHESTER(h)

            El código Manchester representa un 1 lógico (1L) con un nivel de +V durante la mitad del periodo de bit  y un nivel de  -V durante la otra mitad. Un cero lógico (0L)  se representa con un nivel de - V durante la primera mitad del periodo de bit y con +V durante la segunda mitad. La función siguiente simula esta codificación:

function MANCHESTER(h)

%Example:

%h=[1 0 0 1 1 0 1 0 1 0];

%MANCHESTER(h)

clf;

n=1;

h=~h;

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)+2*(t<n-0.5)+1*(t==n);

    else

        y=-(t<n)+2*(t<n-0.5)-1*(t==n);

    end

    d=plot(t,y);grid on;

    title('Line code MANCHESTER');

    set(d,'LineWidth',2.5);

    hold on;

    axis([0 length(h)-1 -1.5 1.5]);

    disp('one');

else

    if h(n+1)==0

        y=(t<n)-2*(t<n-0.5)+1*(t==n);

    else

        y=(t<n)-2*(t<n-0.5)-1*(t==n);

    end

    d=plot(t,y);grid on;

    title('Line code MANCHESTER');

    set(d,'LineWidth',2.5);

    hold on;

    axis([0 length(h)-1 -1.5 1.5]);

    disp('zero');

end

n=n+1;

%pause;

end

Como ejemplo, ejecutamos lo que muestra la figura 8:        

manchester
Fig. 8. Función MANCHESTER(h).

 

INTERFAZ GRÁFICA DE USUARIO

            La figura 9 muestra el entorno de la interfaz gráfica de usuario que simula varios códigos de línea.

guide
Fig. 9. Programa line_code.

            Esta interfaz trabaja de dos maneras. La primera es generando secuencias de bits aleatorios al presionar el botón Random y la segunda ingresando el propios usuario los bits a codificar.

Asimismo, la interfaz permite ver el espectro de algunos códigos de línea al presiona el botón Ver Espectros. Véase la figura 11:

espectro
Fig. 10. Espectro de códigos de línea.

Para bajar el programa pulsa el botón descargar:

descargar

©2017 MATPIC

Prohibida cualquier copia parcial o total del contenido de esta web