Escolar Documentos
Profissional Documentos
Cultura Documentos
Codificación de Datos
Nuevas Tecnologías en Comunicaciones Móviles.
Belén Lara Aznar.
Codificación de Datos.
Índice.
1. Introducción.
1.1. Criptografía.
2. Tipos de Procesamiento de la Información.
3. Códigos de Detección y Corrección de Error.
3.1. Códigos de Corrección de Error.
4. Código de Compresión de Datos LZW.
4.1. Compresión.
4.2. Descompresión.
5. Referencias.
1. Introducción.
En comunicaciones prácticamente todas las señales digitales producidas en la
actualidad llevan asociados el proceso de detección o corrección de errores. El primer
paso es reconocer la existencia de los mismos; es decir, debemos disponer de métodos
que permitan la evaluación del número de errores. Posteriormente el número de errores
se expresa como una Tasa de Error de Bit: BER (Bit Error Rate). Tras ser reconocida la
existencia de errores puede ser posible la identificación de los mismos y la corrección.
Para ello se han generado métodos correctores de errores.
Se disponen de diferentes tipos de códigos y de formas para corregir errores: la
retransmisión de un paquete de datos (pedido cuando el receptor detecta la presencia de
errores y solicita la retransmisión u obligada repitiendo la transmisión sin necesidad del
pedido) y la corrección de errores hacia adelante FEC (Forward Error Correction) que
envía suficiente cantidad de bits de redundancia como para detectar el bit errado. Una
guía de los tipos de codificación usados en comunicaciones se indica en el siguiente
apartado (entendemos por codificación una manipulación de la información con ciertos
objetivos).
La codificación se utiliza por razones de:
§ Contenido de corriente continua DC en conductores de cobre (por uso de
transformadores de capacitores en línea).
§ Temporización: para recuperación del reloj (independencia de la fuente y
eliminación de jitter).
§ Espectro (para reducir la banda de espectro, mejorar la eficiencia espectral y
obtener mayor longitud).
§ Mejora del rendimiento y seguridad (detección y corrección de errores, detectar
códigos prohibidos, etc).
El presente trabajo muestra varios de estos tipos de codificación. Además de algunas
de las comentadas en el apartado siguiente, se tratarán otras como el código Ziv-
Lempel LZ:
Un tipo de codificación especial es la basada en diccionarios. Se fundamenta en
ciertas secuencias que son más comunes y se guardan en diccionarios que pueden ser
estáticos o adaptativos. A este tipo de codificación pertenece el código Ziv-Lempel. El
algoritmo de 1977 determina el código LZ77 y la versión 1978 se denomina LZ78. La
variante de LZ78 debida a Welch se llama LZW. LZW se usa en el comando de
compresión de UNIX, GIF y V.42bis. Uno de los formatos que utiliza este código es
GIF (Graphic Interchange Format), formato diseñado por Compuserve para imágenes
gráficas. La norma ITU-T V.42 describe la compresión de datos mediante LZW para
modems de datos en la red telefónica. Utiliza un tamaño de diccionario mínimo de 512
(9 bits de largo) y recomendado de 2048 palabras.
El código Ziv-Lempel LZ es un formato especial que permite codificar las
secuencias repetitivas . La versión del algoritmo del año 1977 se denomina LZ77 y
utiliza el siguiente criterio:
§ Considerar la secuencia ...abracadabrarrarrad...
§ Resultado inicial: ...daabracadabrarrarradaab... (7,4); donde 7 indica la longitud
hacia atrás y 4 la longitud de la copia.
§ Es decir, indica la localización de la ocurrencia previa; y la longitud de la
secuencia respectivamente.
§ Resultado posterior: ...daabracadabrarrarradaab.... (3,5).
1.1 Criptografía.
La codificación criptográfica permite la protección contra ataques pasivos (sobre
la señal de datos PDU) a la comunicación. El término cipher y cryption se refiere al
proceso de “cifrado” o “encriptado” de datos. El desarrollo de estas técnicas ha venido
causado por su necesidad de uso. Ejemplos de estos usos que han contribuido a su
evolución son:
INTERNET.
La criptografía para Internet se inicia en 1976 por Diffie y Hellman cuando se
estableció el concepto de “criptografía de clave pública”. Para realizar este proceso
se recurre a un número público (g), dos números privados (x,y) y un módulo (p). El
extremo A envía la clave (gx) y el extremo B la clave (gy) en ambos casos módulo-
p. En recepción se realizan las operaciones (gx)y y (gy)x que son iguales y pasan a
ser la clave de criptografía secreta y única. El problema de la criptografía de clave
pública es la lentitud de cálculo y la posibilidad de ser descifrada mediante el
criptoanálisis. El método estándar utilizado en Internet se basa en segmentar la
información en bloques fijos de 64 o 128 bits de longitud para realizar una
criptografía por bloques. Para reducir la probabilidad de detección se realiza un
proceso de concatenación de forma que el resultado de un bloque influye sobre el
§ Corrección error. Los FEC son códigos para corrección de errores. Se disponen de
dos tipos de FEC a bloques y convolucional. El FEC a bloques es del tipo
Hamming, BCH o RS. El FEC convolucional da lugar al algoritmo de Viterbi. Son
aplicados en los servicios satelitales IDR-IBS, telefonía celular, CDROM, etc. Otra
forma de corregir errores es la retransmisión (ARQ) usada en redes de datos (no
aplicable a señales en tiempo real).
§ Spread Spectrum. Es un modo de codificación usado para acceso múltiple por
división de código CDMA. Utilizado en aplicaciones satelitales y celulares.
En el desarrollo en este trabajo se presentan algunos de estos códigos.
» Códigos de Bloque.
Los códigos de bloque toman un bloque de bits, de longitud k, denominado “secuencia
de información”, y lo codifican en una palabra de longitud n, con n>k. Los bits
adicionales en la palabra codificada son bits de paridad, n-k bits. Los bits de paridad se
usan para comprobar si la palabra codificada tiene errores una vez decodificada. Si hay
errores, el decodificador los detecta y los corrige. Un código de bloque muy común es el
código de Hamming que se ilustra en el siguiente ejemplo.
Ejemplo:
Queremos transmitir el dato (0011) de 4 bits de longitud. Para una secuencia de
longitud 4 (a0, a1, a2, a3), se añaden 3 bits de redundancia (b0,b1, b2) para formar la
palabra codificada. En este caso particular el código es (7,4), con k=4 y n=7, donde los
4 primeros bits de la palabra codificada son la misma secuencia que la palabra de
información. Los 3 últimos bits redundantes se calculan usando aritmética en módulo 2
en las siguientes ecuaciones:
b0=a1+a2+a3=0+1+1=0
b1=a0+a1+a3=0+0+1=1
b2=a0+a2+a3=0+1+1=0
Al concatenar con la secuencia, el bloque transmitido resulta:
Datos &Bits de Paridad= Bloque transmitido
0 0 1 1 & 0 1 0 = 0 0 1 1 0 1 0
Debido al ruido de interferencia del canal, el bloque recibido (d0, d1, d2, d3, d4, d5,
d6) puede no ser el mismo que el bloque transmitido (a0, a1, a2, a3, b0, b1, b2). Por
ejemplo supongamos que se transmite {0011010}pero se recibe {1011010}.
El decodificador no conoce el bloque original, por lo que debe resolver el siguiente
sistema de ecuaciones para detectar si hay error, y en ese caso dónde se produjo:
s0=d1+d2+d3+d4=0+1+1+0=0
s1=d0+d1+d3+d5=1+0+1+1=1
s2=d0+d2+d3+d6=1+1+1+0=1
Si (s0,s1,s2)=(0,0,0) entonces no hay error. Como en este caso (s0,s1,s2)=(0,1,1) el
decodificador sabe dónde está el error. Para corregir el error se busca este valor en la
tabla siguiente, que indica posición del error según estos valores:
000 NONE
001 d6
010 d5
011 d0
100 d4
101 d2
110 d1
111 d3
Para crear esta tabla, asumiendo error en un solo bit, el codificador determina qué
componentes de la ecuación están presentes en todas las ecuaciones de error (sx = 1) y
no presentes en las ecuaciones correctas (sx = 0). Por ejemplo, el síndrome (s0, s1, s2)
resultó arriba (0, 1, 1), por lo tanto el codificador determina qué componentes estaban
presentes en el cálculo de s1 y s2, pero no en el cálculo de s0. La respuesta es d0, por lo
que este bit es el error.
» Códigos convolucionales.
Otro método de codificación es la codificación convolucional, llamada también
codificación continua porque tan pronto como un bit es codificado, es transmitido. Al
contrario que los códigos de bloque, no se necesita la información entera para poder
codificar. Normalmente se utilizan en combinación con Viterbi y Viterbi de decisión
suave (SOVA). En la figura se muestra un ejemplo de codificador convolucional:
» Turbo Códigos.
Aunque son considerados códigos de bloque, no funciona exactamente igual. Son
como una mezcla entre los códigos de bloque y los convolucionales. Requieren, igual
que los códigos de bloque, que toda la información esté presente para codificar. Sin
embargo, en vez de calcular los bits de paridad, utilizan registros de desplazamiento,
como los códigos convolucionales.
Como se comentó anteriormente, son los que ofrecen las mejores prestaciones
debido a su eficacia ante baja SNR. Una razón para esta eficacia es porque estos códigos
producen palabras de mayores pesos ya que la salida de paridad segunda pasa por un
interleaver que “baraja” la secuencia de entrada, produciendo más probablemente una
palabra de mayor peso. Esto es ideal para el código porque palabras de mayor peso
significan mejores prestaciones al decodificar.
Aunque el codificador determina la capacidad para la correción de error, es el
decodificador el que determina las prestaciones reales. La eficacia depende, no obstante,
del algoritmo usado. Como la decodificación del Turbo Código es un proceso iterativo,
requiere un algoritmo de decisión suave, como el MAP (Maximum a Posteriori), o el de
Viterbi (SOVA) para la decodificación.
Un esquema del decodificador de Turbo Códigos se muestra a continuación:
a las cadenas. El algoritmo que se implementa en esta trabajo funciona con códigos de
12 bits. Esto significa que los códigos 0-255 se refieren a los bits individuales y los 256-
4095 se refieren a las subcadenas del texto original.
4.1 Compresión.
A continuación se muestra el algoritmo LZW. Como se puede observar intenta
adjudicar siempre códigos a las cadenas que ya se conocen, y cada vez que se añade un
nuevo código una nueva cadena entra en la tabla.
Rutina LZW_COMPRESION
CADENA = Toma carácter de entrada
WHILE hay caracteres en la entrada DO
CARACTER = toma carácter de entrada
IF CADENA+CARACTER está en la tabla de cadenas
CADENA = CADENA+caracter
ELSE
Sacar el código de CADENA
añade CADENA+CARACTER a tabla de cadenas
CADENA = CARACTER
END IF
END WHILE
Sacar el código de CADENA
/W / 256 /W
E W 257 WE
D E 258 ED
/ D 259 D/
/ E 261 E/
/ B 265 B/
EOF T
4.2 Descompresión.
El algoritmo compañero para la descompresión es el que se explica en este apartado.
Necesita tomar el flujo de códigos del algoritmo de compresión y usarlos para
recomponer exactamente la información de entrada. Una razón de la eficiencia del
algoritmo LZW es que no necesita que le sea pasada la tabla de cadenas para
descompresión del código. La tabla puede ser construida exactamente como fue
realizada en la compresión, usando el flujo de datos de entrada. Esto es posible porque
el algoritmo de compresión siempre saca la cadena y el carácter antes de usar su
posterior código de salida. Esto da lugar a que los datos comprimidos no están
masificados con la enorme tabla de traducciones de las cadenas.
Rutina LZW_DECOMPRESION
Leer COD_ANT
Sacar COD_ANT
WHILE hay caracteres de entrada DO
Leer COD_NUEVO
CADENA = realizar traducción del COD_NUEVO
Sacar CADENA
CARACTER = primer carácter en CADENA
añadir COD_ANT + CARACTER a la tabla de traducción
COD_ANT = COD_NUEVO
END WHILE
5. Referencias.
1. C. Berrou, A. Glavieux, and P. Thitimajshima, Near Shannon Limit Error-
Correcting Coding and Decoding: Turbo-Codes, IEEE 1993, pp.1064-1070.
2. Amin Shokrollahi, LDPC Codes: An Introduction, Digital Fountain, Inc., April
2003.
3. http://www.cambridge.org/0521642981, Convolutional Codes and Turbo Codes,
Cap.48, Cambridge University Press 2003.
4. Wei Mo, An Introduction to Turbo Codes, Iowa State Iowa State University, March
2003.