viernes, 23 de octubre de 2009

Codigos de linea en MATLAB

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.

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 else
y=(t 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

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 else
y=(t 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

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 else
y=-(t 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 else
y=(t 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
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 else
y=-(t 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 else
y=(t 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
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 else
y=-(t end
else
if ami==1
y=(t else
y=-(t 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
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 else
y=-(t end
else
if ami==1
y=(t else
y=-(t 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 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 else
y=-(t 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 else
y=(t 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
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.

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 es ingresando el propio 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.

Fig. 10. Espectro de códigos de línea.
Fuente Bibliográfica:

Codigos de Linea

Introducción

La transmisión analógica se basa en una señal continua de frecuencia constante denominada portadora. La frecuencia de la portadora se elige para que sea compatible con las características del medio que se vaya a utilizar. Los datos se pueden transmitir modulando la señal portadora, donde por modulación se entiende el proceso de codificar los datos generados por la fuente, en la señal portadora de frecuencia fc. Todas las técnicas de modulación implican la modulación de uno o más de los tres parámetros fundamentales de la portadora:

La amplitud
La frecuencia
La fase

La señal de entrada (que puede ser tanto analógica como digital) se denomina señal moduladora o también señal en banda base s(t). Como se indica en la figura 1, s(t) es una señal limitada en banda (pasabanda). La localización del ancho de banda asignado está relacionado con fc, estando usualmente centrado en torno a ésta. De nuevo, el procedimiento de codificación se elegirá para optimizar algunas de las características de la transmisión.

Las cuatro posibles combinaciones mostradas en la figura 1 se utilizan con frecuencia; si bien, las razones por las que se elige una u otra pueden ser de diversa índole, como las que se indican a continuación:

Datos digitales, señales digitales: en términos generales, el equipamiento para la codificación digital es menos complicado y menos costoso que el equipamiento necesario para transmitir datos digitales modulando señales analógicas.

Datos analógicos, señales digitales: la conversión de los datos analógicos en digitales permite la utilización de las técnicas mas recientes de equipos de conmutación para transmisión digital.

Datos digitales, señales analógicas: algunos medios de transmisión, como por ejemplo la fibra óptica y los medios no guiados, sólo permiten la propagación de señales analógicas.

Datos analógicos, señales analógicas: los datos analógicos de naturaleza eléctrica se pueden transmitir fácilmente y de una forma poco costosa en banda base. Esto por ejemplo es lo que se hace para la transmisión de voz en las líneas de calidad telefónica.

Figura 1 Técnicas de codificación y modulación.


Datos digitales, señales digitales.

Los códigos de línea surgen ante la necesidad de trasmitir señales digitales a través de diversos medios de transmisión. Una señal digital es una secuencia de pulsos de tensión discretos y discontinuos, donde cada pulso es un elemento de la señal. Los datos binarios se transmiten codificando cada bit de datos en cada elemento de señal. En el caso más sencillo, habrá una correspondencia uno a uno entre los bits y dichos elementos, un cero se representa mediante un nivel bajo de tensión y un uno se representa por un nivel de tensión mayor

Antes de nada se va a introducir un poco de terminología. Si todos los elementos de señal tienen el mismo signo algebraico, es decir si son todos positivos o todos negativos, la señal se dice unipolar. En una señal polar, por el contrario, un estado lógico se representará mediante un nivel positivo de tensión y el otro, mediante un nivel negativo. La razón de datos de una señal es la velocidad de transmisión, expresada en bits por segundo, a la que se transmiten los datos. La duración o longitud de un bit se define como el tiempo empleado en el transmisor para emitir un bit; para una razón de datos R, la duración de un bit es 1/R. La razón de modulación, por el contrario, es la velocidad o razón con la que cambia el nivel de la señal, que dependerá del esquema de codificación elegido. La razón o velocidad de modulación se expresa en baudios, que equivale a un elemento de señal por segundo.


Los códigos de línea fueron desarrollados para mejorar las prestaciones de los sistemas de transmisión, el esquema de codificación es simplemente la correspondencia que se establece entre los bits de los datos con los elementos de señal. A continuación se describen algunas de las más utilizadas.

Definición de los formatos de codificación digital de señales

No retorno a cero (NRZ-L)

0 = nivel alto

1 = nivel bajo

No retorno a cero invertido (NRZI)

0 = no hay transición al comienzo del intervalo (un bit cada vez)

1 = transición al comienzo del intervalo

Bipolar – AMI

0 = no hay señal

1 = nivel positivo o negativo, alternadamente

Pseudoternaria

0 = nivel positivo o negativo, alternadamente

1 = no hay señal

Manchester

0 = transición de alto a bajo en mitad del intervalo

1 = transición de bajo a alto en mitad del intervalo

Manchester diferencial

Siempre hay una transición en mitad del intervalo
0 = transición al principio del intervalo

1 = no hay transición al principio del intervalo

B8ZS

Igual que el Bipolar-AMI, excepto que cualquier cadena de ocho ceros se reemplaza por una cadena que tiene dos violaciones al código.

HDB3

Igual que el Bipolar-AMI, excepto que cualquier cadena de cuatro ceros se reemplaza por una cadena que contiene una violación al código




No retorno a cero (NRZ, “Nonreturn to Zero”)

La forma más frecuente y fácil de transmitir señales digitales es mediante la utilización de un nivel diferente de tensión para cada uno de los bits. Los códigos que siguen esta estrategia comparten la propiedad de que el nivel de tensión se mantiene constante durante la duración del bit; es decir, no hay transiciones (no hay retorno al nivel cero de tensión). Por ejemplo, la ausencia de tensión se puede usar para representar un 0 binario, mientras que un nivel constante y positivo de tensión puede representar al 1. Aunque es más frecuente usar un nivel negativo para representar un valor binario y una tensión positiva para representar al otro. Este último, mostrado en la figura 2, se denomina código Nivel no retorno a cero (NRZ-L “Nonreturn-to-Zero-Level”). NRZ-L se usa generalmente para generar o interpretar los datos binarios en los terminales y otros dispositivos. Si se utiliza un código diferente , éste se generará usualmente a partir de la señal NRZ-L


No retorno a cero, invertido (NRZI, “Nonreturn to Zero, invert on ones”).

Una variante de NRZ se denomina NRZI. Al igual que NRZ-L, el NRZI mantiene constante el nivel de tensión mientras dura un bit. Los datos se codifican mediante la presencia o ausencia de una transición de la señal al principio del intervalo de duración del bit. Un 1 se codifica mediante la transición (bajo a alto o alto a bajo) al principio del intervalo del bit, mientras que un cero se representa por la ausencia de transición.


NRZI es un ejemplo de codificación diferencial. En la codificación diferencial, en lugar de determinar el valor absoluto, la señal se decodifica comparando la polaridad de los elementos de señal adyacentes. Una ventaja de este esquema es que en presencia de ruido puede ser más seguro detectar una transición en lugar de comparar un valor con un umbral. Otra ventaja es que en un sistemas complicado de transmisión, no es difícil perder la polaridad de la señal. Por ejemplo, en una línea de par trenzado, si los cables se invierten accidentalmente, todos los 1 y 0 en el NRZ-L se invertirán. Esto no pasa en un esquema diferencial.


La principal limitación de las señales NRZ es la presencia de una componente dc continua y la ausencia de capacidad de sincronización. Para ilustrar esta última desventaja, téngase en cuenta que una cadena larga de unos y ceros en un esquema NRZ-L o una cadena de ceros en el NRZI, se codificará como un nivel de tensión constante durante un largo intervalo de tiempo. En estas circunstancias, cualquier fluctuación entre las temporizaciones del transmisor y el receptor darán lugar a una pérdida de sincronización entre ambos.


Debido a su sencillez y a la respuesta en bajas frecuencias, los códigos NRZ se usan con frecuencia en las grabaciones magnéticas. No obstante, sus limitaciones hacen que estos códigos no sean atractivos para aplicaciones de transmisión de señales.


Binario Multinivel.

Las técnicas de codificación denominadas binario multinivel subsanan algunas de las deficiencias mencionadas para los códigos NRZ. Estos códigos usan más de dos niveles de señal. En la figura 2 se muestran dos ejemplos, el “Bipolar-AMI” (“Alternate mark inversión”) y el pseudoternario.


En el caso del esquema bipolar-AMI, un 0 binario se representa por ausencia de señal y el 1 binario se representa como un pulso positivo o negativo. Los pulsos correspondientes a los 1 deben tener una polaridad alternante. Este tipo de esquema tiene las siguientes ventajas. En primer lugar, no habrá problemas de sincronización en el caso de que haya una cadena de 1. Cada 1 fuerza una transición, por lo que el receptor se puede sincronizar en dicha transición. Una cadena larga de ceros, todavía es un problema. En segundo lugar, ya que los elementos de señal correspondientes a 1 alternan el nivel de tensión, no hay componente continua. Además, el ancho de banda de la señal resultante es considerablemente menor que el correspondiente a NRZ. Por último, la alternancia entre los pulsos proporciona una forma sencilla de detectar errores. Cualquier error aislado, tanto si elimina como si introduce un pulso, significa un incumplimiento de dicha propiedad.


Los comentarios del párrafo anterior son también trasladables a los códigos pseudoternarios. En este caso, el bit 1 se representa por la ausencia de señal, y el 0 mediante pulsos de polaridad alternante. No hay ventajas particulares de esta codificación respecto de la anterior, si bien es la base de muchas aplicaciones.


No obstante, el grado de sincronización proporcionado por estos códigos todavía presenta algunos problemas (una cadena larga de ceros en el caso del AMI o de unos en el pseudoternario). Así pues, con las modificaciones pertinentes, el esquema binario multinivel supera los problemas de los códigos NRZ. Como desventaja se tiene que el receptor de señales codificadas con binario multinivel se ve obligado a distinguir entre tres niveles, en lugar de los dos niveles de los otros esquemas presentados anteriormente. Por lo tanto, la señal de un código binario multinivel necesita mayor potencia que las señales bivaluadas para la misma probabilidad de error.


Bifase

Hay otro conjunto de técnicas de codificación alternativas, agrupadas bajo el término bifase, que superan las limitaciones encontradas en los códigos NRZ. Dos de estas técnicas, denominadas Manchester y Manchester diferencial, se usan frecuentemente.


En el código Manchester, siempre hay una transición en mitad del intervalo de duración del bit. Esta transición en la mitad del bit sirve como un procedimiento de sincronización a la vez que se transmiten los datos: una transición de bajo a alto representa un 1, y una transición de alto a bajo representa un 0. En Manchester diferencial, la transición a mitad del intervalo se utiliza tan solo para proporcionar sincronización. La codificación de un 0 se representa por la presencia de una transición al principio del intervalo del bit, y un 1 se representa mediante la ausencia de transición. El Manchester diferencial tiene como ventajas adicionales las derivadas de la utilización de una aproximación diferencial.


Todas las técnicas bifase fuerzan al menos una transición por cada bit pudiendo tener hasta dos en ese mismo periodo. Por lo tanto, la máxima velocidad de modulación es el doble que en los NRZ; esto significa que el ancho de banda necesario es mayor. No obstante, los esquemas bifase tienen varias ventajas:

Sincronización: debido a la transición que siempre ocurre durante el intervalo de duración correspondiente a un bit, el receptor puede sincronizarse usando dicha transición. Debido a esta característica, los códigos bifase se denominan también auto-sincronizados.
No tienen componentes en continua: con todas las implicaciones que antes se mencionaron.
Detección de Errores: se pueden detectar errores si se detecta la ausencia de la transición esperada en mitad del intervalo. Para que el ruido produjera un error no detectado tendría que invertir la señal antes y después de la transición.

Los códigos bifase se usan con frecuencia en los esquemas de transmisión de datos. Uno de los más conocidos es el código Manchester que se ha elegido como parte de la especificación de la normalización IEEE 802.3 para la transmisión en redes LAN con bus CSMA/CD usando cable coaxial en banda base o par trenzado. El Manchester diferencial se ha elegido en la normalización IEEE802.5 para redes LAN en anillo con paso de testigo, en las que se usan pares trenzados apantallados.

Fuente bibliografica:
Comunicaciones y Redes de Computadoras, de William Stallings