Vous êtes sur la page 1sur 22

CODIFICACIN DE FUENTE

Los sistemas de comunicaciones han sido diseados para transmitir informacin generada por una fuente, hacia un destino. Las fuentes de informacin pueden ser de diversos tipos. Por ejemplo en radio difusin, generalmente la fuente es de audio (voz o msica). En difusin de televisin se tiene una fuente de video (imgenes en movimiento). Estas dos fuentes citadas son analgicas. En contraste, los computadores y los dispositivos de almacenamiento producen salidas discretas (ASCII o binario) y se denominan fuentes discretas. Sin importar si la fuente es analgica o discreta, un sistema de comunicaciones digital es diseado para transmitir informacin en formato digital, por lo tanto la salida de la fuente debe ser convertida a un formato que pueda ser transmitido digitalmente. La conversin de la salida de la fuente a una forma digital es generalmente realizada por el codificador de fuente, cuya salida se asume que es una secuencia de dgitos binarios. Existen modelos matemticos tanto para las fuentes analgicas como para las fuentes discretas. Cualquier fuente de informacin produce una salida aleatoria, es decir, la salida de la fuente se caracteriza en trminos estadsticos. Si la salida de la fuente fuera conocida en forma exacta, no habra necesidad de transmitirla. Fuente discreta. El tipo ms simple de fuente discreta es aquella que emite una secuencia de smbolos seleccionados de un alfabeto finito. Por ejemplo, una fuente binaria emite una secuencia binaria de la forma 100101110, donde el alfabeto consta de dos smbolos {0, 1}. En forma ms general, se dice que una fuente de informacin discreta con un alfabeto de L posibles smbolos, digamos {x1, x2, xL}, emite una secuencia de smbolos seleccionados de ese alfabeto. Para construir un modelo matemtico para una fuente discreta, se asume que cada smbolo del alfabeto {x1, x2, xL} tiene una probabilidad de ocurrencia pk. Es decir, pk = P(X = xk), 1kL donde

Se considerar dos modelos de fuentes discretas. En el primer caso se asume que la secuencia de salida de la fuente es estadsticamente independiente de todas las dems salidas pasadas y futuras. Una fuente cuya salida satisface la condicin de independencia estadstica entre los smbolos de salida en la secuencia, se dice que es sin memoria (memoryless). Dicha fuente se denomina fuente discreta sin memoria (DMS: Discrete memoryless source). Si la salida de la fuente discreta es estadsticamente dependiente, como por ejemplo un texto en espaol, se puede construir un modelo matemtico basado en estacionariedad estadstica. Por definicin se dice que una fuente discreta es estacionaria si las probabilidades conjuntas de dos secuencias de longitud n, digamos a1, a2, an y a1 + m, a2 + m, an + m, son idnticas para todo n 1 y para

todo desplazamiento m. En otras palabras, las probabilidades conjuntas para cualesquiera secuencias de salida de la fuente, de longitud arbitraria, son invariantes ante un cambio en el origen de tiempo. Fuente analgica. Una fuente analgica tiene una forma de onda de salida x(t) que es una funcin muestra de un proceso estocstico X(t). Aplicando el teorema del muestreo, es posible convertir la salida de una fuente analgica en una fuente equivalente discreta en el tiempo. La salida de una fuente analgica es generalmente continua y por lo tanto no puede ser representada en forma digital sin cierta prdida en la precisin. Por lo tanto, la seal original no puede ser reconstruida exactamente a partir de los valores de las muestras cuantizadas. Existen muchos tipos de cdigos para la representacin de la informacin de la fuente en forma discreta, cada uno adecuado para cada tipo de informacin. En general dichos cdigos intentan representar de la forma ms eficiente posible dicha informacin, haciendo uso de sofisticados algoritmos de compresin. COMPRESIN DE DATOS El trmino compresin de datos se refiere al proceso de reduccin del volumen de datos necesarios para representar una determinada cantidad de informacin. Debe hacerse una clara distincin entre datos e informacin. No son sinnimos. De hecho, los datos son los medios a travs de los que se conduce la informacin. Se pueden utilizar distintas cantidades de datos para describir la misma cantidad de informacin. Por ejemplo, considrese el caso de una persona muy habladora y una muy parca en palabras que contaran la misma historia; las palabras son los datos necesarios para relatar la informacin. Si las dos personas emplean diferente nmero de palabras para contar la misma historia, se crean dos versiones distintas de la misma y al menos una de ellas incluye datos no esenciales. Es decir, contiene datos o palabras que proporcionan informacin sin relevancia o vuelven a decir lo que ya se saba. Esto es lo que se conoce como redundancia de los datos. La redundancia de los datos es un punto clave en la compresin de datos digitales y es una entidad matemticamente cuantificable. Si n1 y n2 representan el nmero de unidades de informacin de dos conjuntos que representan la misma informacin, la redundancia relativa de los datos RD del primer conjunto de datos (el caracterizado por n1), se puede definir como:

RD = 1 1/ CR
Donde CR, denominado relacin de compresin, es:

C R = n 1 / n2

El caso en que n1 = n2, CR = 1 y RD =0, indica que la primera representacin de datos no contiene datos redundantes. Cuando se tiene que n2 << n1, CR y RD 1, existe una compresin significativa y datos altamente redundantes. Finalmente, el caso n2 >> n1, CR 0 y RD -, indica que el segundo conjunto de datos contiene muchos mas datos que la representacin original. Este es desde luego un caso indeseable de expansin de datos. Una relacin de compresin prctica, como 10 (o 10:1) significa que el primer conjunto de datos contiene 10 unidades de transporte de informacin (es decir, bits) por cada unidad del segundo conjunto de datos (comprimidos). La redundancia correspondiente, 0.9, implica que el 90 por ciento de los datos del primer conjunto son redundantes. Un cdigo es un conjunto de smbolos (letras, nmeros, bits o similares), utilizados para representar un cuerpo de informacin o un conjunto de sucesos. A cada pieza de informacin o suceso se le asigna una secuencia de smbolos codificados, denominada palabra-cdigo. El nmero de smbolos de cada palabra cdigo es su longitud.

Compresin de datos sin prdidas


El objetivo de la compresin de datos sin prdidas es obtener una representacin digital ms eficiente, normalmente en formato binario, a partir de un bloque de informacin con formato digital, bajo la condicin de que el archivo original se pueda recuperar exactamente. Ejemplos: Archivos generados por cualquier aplicacin, como un procesador de textos, una hoja de clculo o un programa de diseo grfico. Las tcnicas de compresin de datos tambin se utilizan en los mdems y facsmiles para reducir el tiempo necesario para transmitir archivos; adems se utilizan en los sistemas operativos y programas de utilidades para reducir la cantidad de espacio en disco al almacenar los archivos. Considerando un bloque de informacin como una secuencia de smbolos generada a partir de algn alfabeto, como el mostrado en la figura 1, el objetivo de la compresin sin prdidas es hacer corresponder la secuencia de informacin original con una cadena de dgitos binarios tal que: 1- El nmero promedio de bits/smbolo sea pequeo 2- La secuencia de informacin digital original se pueda recuperar exactamente a partir de la secuencia binaria codificada

Figura 1. Compresin de datos sin prdidas

El rendimiento o eficiencia de un cdigo de compresin de datos si prdidas depende del nmero medio de bits codificados por smbolo. 1- CDIGOS HUFFMAN El nmero medio de bits por smbolo puede reducirse, si se asigna palabrascdigo mas cortas a los smbolos que se dan con mas frecuencia. En 1954, Huffman invent un algoritmo para disear un cdigo ptimo en el sentido de minimizar el nmero medio de bits/smbolo. Este cdigo segmenta la secuencia original de smbolos en una secuencia de bloques de longitud fija. A cada bloque se le asigna una secuencia binaria de longitud variable denominada palabra-cdigo. Las palabras-cdigo se eligen de tal forma que ninguna de ellas sea prefijo de otra. El conjunto de todas las palabras cdigo forma los nodos terminales de un rbol binario, como el mostrado como ejemplo en la figura 2. En este ejemplo, se hace la codificacin de smbolos individuales, es decir bloques de longitud 1. Se supone que la fuente de informacin genera una secuencia de smbolos del alfabeto {a,b,c,d,e}. En la figura 2 se muestra un cdigo binario que asigna palabras-cdigo de dos y tres bits a los smbolos. As mismo se muestra la cadena de bits que resulta tras la codificacin de la secuencia de smbolos aedbbad... El rbol binario asociado al cdigo de la figura muestra como las palabras cdigo se corresponden con los nodos terminales. Supngase: . Fuente de informacin con 5 smbolos: {a,b,c,d,e} (alfabeto) . Probabilidad de los smbolos: {1/4,1/4,1/4,1/8,1/8}.

aedbbad... se asigna a 00 111 110 01 01 00 110... 17 bits Nota: La decodificacin se hace sin tener en cuenta ni comas ni espacios. Figura 2. Ejemplo de codificacin Huffman Mediante el rbol de la figura 2 se puede demostrar el procedimiento para la decodificacin. Se inicia desde el nodo superior del rbol. Cada bit codificado determina la rama del rbol que se ha de seguir. La secuencia de bits codificados traza un camino hacia abajo en el rbol hasta que se llega a un nodo terminal. Ninguno de los nodos intermedios corresponde a alguna de las palabras-cdigo.

Tan pronto se alcance un nodo terminal, el decodificador dar como salida el correspondiente smbolo asociado. Posteriormente se retorna al nodo superior y repite el mismo procedimiento. Esta tcnica, aunque compacta eficazmente el nmero de bits, aumenta el efecto perjudicial de los errores en la transmisin. Por ejemplo, si la secuencia 00 correspondiente al smbolo a se transforma en 11, no solo habr un cambio en el smbolo decodificado, sino que adems se cometer un error de alineamiento entre los bits y los smbolos decodificados. Sea l(s) la longitud de la palabra-cdigo asignada al smbolo s y P[s] la probabilidad de ocurrencia del smbolo s. La evaluacin del cdigo viene dada por el nmero medio de bits codificados por smbolo, es decir: E[l] = l(a)P[a] + l(b)P[b] + l(c)P[c] + l(d)P[d] + l(e)P[e] = 2(.25) + 2(.25) + 2(.25) + 3(.125) + 3(.125) = 2.25 bits/smbolo El cdigo ms simple para esta fuente de informacin asignara palabras-cdigo de igual longitud a cada smbolo. Como el nmero de smbolos es 5, se necesitarn palabras-cdigo de 3 bits. El rendimiento de este cdigo es de 3 bits por smbolo. As, por ejemplo, un archivo que contenga 10.000 smbolos ser representado por 30.000 bits usando palabras-cdigo de 3 bits, e implicara un promedio de 22.500 bits si se usara un cdigo Huffman. El factor de compresin que se pueda alcanzar depender de las probabilidades de los distintos smbolos. Cuando la fuente genera smbolos con igual probabilidad, la forma mas adecuada de codificar estos smbolos es asignando, en la medida de lo posible, palabras-cdigo de igual longitud. En particular, si la fuente genera smbolos de un alfabeto de tamao 2m, entonces el mejor cdigo simplemente asignar a cada smbolo una palabra de m bits. Para disear un cdigo Huffman se necesita conocer las probabilidades de los distintos smbolos. Si la probabilidades no se conocen, es mejor emplear cdigos que se puedan ir adaptando a la estadstica de los smbolos sobre la marcha como por ejemplo el Cdigo Lempel Ziv.

Algoritmo para el cdigo Huffman


El algoritmo comienza identificando los dos smbolos cuya probabilidad sea menor. Los dos smbolos se combinan ahora en un smbolo nuevo cuya probabilidad es igual a la suma de las dos probabilidades. Se ha generado ahora un nuevo alfabeto en el que los dos smbolos mencionados se han remplazado por el smbolo combinado y el tamao del alfabeto se ha reducido en un smbolo. A continuacin se repite el procedimiento para identificar los dos smbolos del alfabeto reducido con menor probabilidad y combinarlos en un nuevo smbolo. Cada vez que se combinan 2 smbolos, se conectan los nodos asociados para

formar el correspondiente rbol. El procedimiento se repite hasta que solo queden 2 smbolos, los cuales se combinan para formar el nodo raz del rbol. Este procedimiento se ilustra en la figura 3-a, en la que se supone una fuente con 5 smbolos {a,b,c,d,e} con probabilidades {0.50, 0.20, 0.15, 0.10, 0.05}. En el primer paso, se combinan los smbolos d y e para formar un smbolo nuevo notado como (de), con probabilidad combinada igual a 0.15 (0.10 + 0.05). Los nodos terminales de los smbolos d y e se combinan en el nodo intermedio etiquetado con 1 en la figura 3-a. El alfabeto nuevo consiste ahora en los smbolos {a,b,c,(de)} con probabilidades {0.50, 0.20, 0.15, 0.15}. El segundo paso del algoritmo de Huffman combina los smbolos c y (de) en un nuevo smbolo (c(de)) con probabilidad 0.3. Estos se combinan en el nodo intermedio 2. En el tercer paso del algoritmo se combinan los smbolos b y (c(de)) para dar lugar al (b(c(de))). En el paso final se combinan los dos smbolos restantes a y (b(c(de))) para formar el nodo raz del rbol. En la figura 3-b se muestra el rbol del cdigo obtenido a partir del algoritmo de Huffman y se representan las palabras-cdigo asociadas a los nodos terminales. Las palabras-cdigo se obtienen a partir del nodo raz, asignando 0 a cada rama de la izquierda y 1 a cada rama de la derecha. El cdigo resultante se muestra en la figura 3-b. El nmero promedio de bits codificados por smbolo, E[l] est dado por: E[l] = l(a)P[a] + l(b)P[b] + l(c)P[c] + l(d)P[d] + l(e)P[e] = 1(.50) + 2(.20) + 3(.15) + 4(.10) +4(.05) = 1.95 bits/smbolo.

Figura 3-a. Construyendo el cdigo en rbol.

Figura 3-b. El cdigo en rbol final. Figura 3 Construyendo el rbol del cdigo Huffman El cdigo ms simple que se podra haber usado para esta fuente de informacin, asignara palabras de 3 bits a cada smbolo. Por tanto, se observa que el cdigo Huffman ha conseguido una representacin ms eficiente que la obtenida con este cdigo sencillo. La codificacin Huffman en general procesa bloques de n smbolos. Para conseguir cdigos Huffman en los que n sea mayor que 1, se consideran todas las posibles n-tuplas de los smbolos y sus correspondientes probabilidades. Luego se aplica el procedimiento de Huffman a este superalfabeto, para obtener as el cdigo con estructura de rbol binario. Por ejemplo, el cdigo de la figura 3, con n = 2, construye el alfabeto consistente en 25 pares de smbolos {aa, ab, ac, ad, ae, ba, bb, bc,......, ea, eb, ec, ed, ee}. En general el rendimiento del cdigo expresado en bits/ smbolo mejorar al incrementar la longitud del bloque. Esta mejora, conlleva a su vez un incremento en la complejidad.

Entropa de Shannon
En 1948 Shannon resolvi el problema de calcular el mejor rendimiento, expresado en bits/smbolo, que se puede conseguir para cualquier cdigo y para cualquier longitud de bloque. Encontr que el mejor rendimiento viene dado por la funcin entropa, la cual depende de las probabilidades de las secuencias de smbolos. Suponiendo que los smbolos toman valores de un alfabeto {1, 2, 3, 4, ..,K), con probabilidades {P[1], P[2], P[3], P[4],..... P[K]}. Si la secuencia de smbolos es estadsticamente independiente, la entropa vendr dada por:
K

H= -

P[K] log2 P[K]


K=1

= - P[1] log2 P[1] - P[2] log2 P[2] - .. - P[K] log2 P[K] Shannon demostr que ningn cdigo puede conseguir un nmero medio de bits por smbolo menor que la entropa. Como: Log2 x = ln x/ln 2, viene dada por: entonces, la entropa para el ejemplo de la figura 3

H = (-.50 ln .50 - .20 ln .20 - .15 ln .15 - .10 ln .10 - .5 ln .5) / ln 2 = 1.923 Esto indica que el cdigo obtenido en la figura 13.3 tiene un nmero de bits/smbolo bastante prximo al mejor posible y que, por tanto, la codificacin de bloques de mayor longitud es innecesaria. En caso de que dicha cantidad difiera significativamente de la entropa, se deben considerar bloques de longitud mayor. La frmula de la entropa se puede usar tambin como referencia para obtener mejores cdigos. Por ejemplo, supngase que una fuente tiene un alfabeto con K smbolos y que estos se generan con igual probabilidad, es decir, 1/K. La entropa vendr dada por:
K

H= -

P[K] log2 P[K]


K=1 K

H= -

(1/K ) log2 (1/K)


K=1

= log2 K

En el caso especial en que K = 2m, se tendr que H = log2 2m = m bits /smbolo. Se puede asignar a cada smbolo una palabra-cdigo de m bits, es decir la entropa. Este resultado tiene una interpretacin intuitiva, ya que el hecho de que los smbolos sean equiprobables sugiere que deberan tener la misma longitud. Adems, en trminos generales, si se compara la expresin de la entropa con la expresin del nmero medio de bits por smbolo, se observa que la longitud del trmino K-simo, se puede hacer corresponder con el trmino log2 (1/p[K]). Es decir, que un buen cdigo asignar a un smbolo con probabilidad P[K], una palabra-cdigo de longitud log2 (1/p[K]) = - log2 (p[K]). Por ejemplo, si un smbolo dado tiene probabilidad , se le debera asignar una palabra-cdigo de 1 bit. Eficiencia. Una medida de la eficiencia de un mtodo de codificacin de fuente puede obtenerse comparando el nmero promedio de dgitos binarios por smbolo con la Entropa H. Entonces, Eficiencia = (H/Nmero promedio de bits por smbolo) x 100

Compresin por longitud de rfaga (Run-length)


Cuando los datos contienen cadenas de caracteres o smbolos repetidos (como bits o caracteres), las cadenas se pueden remplazar por un marcador especial, seguido por el smbolo repetido y seguido por el nmero de ocurrencias. Las repeticiones consecutivas de los smbolos se denominan rfagas y estas estn separadas por otros smbolos. Por ejemplo, en la figura 4, se tienen repeticiones de caracteres como el 4, el 3 y el 0, separados por otros nmeros diferentes. En este caso se utiliza el carcter # como smbolo marcador. Al smbolo que se repite

(el smbolo de la rfaga), le precede el marcador. Despus del smbolo de rfaga se muestra el nmero de ocurrencias (longitud) mediante un nmero de dos dgitos. Este mtodo de longitud de rfaga se puede usar con sonido (el silencio es una rfaga de ceros) y video (una rfaga de fotogramas que tienen el mismo brillo y color).

572644444444432133333333333333333331278000000000000000 a) datos originales

5726#409321#3191278#015 b) Datos comprimidos. Figura 4. Codificacin por longitud de rfagas Los facsmiles son otro ejemplo en el que el escaneado genera cadenas muy largas de puntos blancos separados por cadenas muy cortas de puntos negros. La codificacin basada en longitud de rfagas es una aproximacin muy efectiva para comprimir sin prdidas este tipo de fuentes. En este caso la palabra-cdigo asociada a cada rfaga consiste en una cadena binaria que especifica la longitud de la rfaga, seguida de una secuencia de bits que identifican al smbolo repetido en la rfaga. Por tanto, si se usan palabras-cdigo muy cortas, que especifiquen longitud de rfagas muy largas, se conseguir un gran factor de compresin. Consideraremos a continuacin el caso de cdigos de longitud de rfagas de fuentes binarias tipo facsmil. En la figura 5, se describe una codificacin simple de longitud de rfagas para fuentes binarias donde los ceros (puntos en blanco) son mucho mas frecuentes que los unos (puntos negros). La secuencia de smbolos binarios generada por la fuente, se parte en las rfagas mostradas en la columna de la izquierda. El codificador para hacer esto, simplemente cuenta el nmero de ceros entre 2 unos y genera una palabra-cdigo de m bits que especifica el nmero de ceros. Cuando aparecen dos unos consecutivos, se dice que ha habido una rfaga de longitud cero. La rfaga mas larga que se puede codificar es de longitud 2m-2. por tanto, cuando se observan 2m-1 ceros consecutivos, el codificador no debe seguir contando. La palabracdigo todos unos significa en el decodificador una salida de 2m-1 ceros consecutivos; se deber reiniciar el contador e iniciar con una nueva rfaga.

11..11

1111

Figura 5. Ejemplo 2. Codificacin por longitud de rfagas En la figura 6 se muestra una cadena de 137 smbolos binarios consecutivos que se codifican con palabras cdigo de 4 bits para posteriormente ser decodificadas, obtenindose as la secuencia original.

Figura 6. Codificacin y decodificacin por longitud de rfagas En este ejemplo, los 137 smbolos originales se compactan en 44 bits. Al igual que antes, el rendimiento de un esquema de codificacin de datos sin prdidas se

mide por el nmero promedio de bits codificados por smbolo de la fuente, es decir, m/E[R], donde m es el nmero de bits en la palabra-cdigo y E[R] es el nmero promedio de smbolos codificados en cada rfaga (longitud de rfaga promedio). Para el ejemplo anterior, el E[R] es igual a 137/11 (nmero total de bits dividido por el nmero de rfagas codificadas) = 12.45. Con m = 4, se obtiene que el rendimiento de este esquema de codificacin es 0.32 bits/smbolo. El factor de compresin es por tanto E[R] / m = 12,45/4 = 3.11. En el ejemplo de la figura 6 se utiliza una palabra cdigo binaria de longitud fija para codificar las longitudes. El rendimiento de este cdigo puede mejorarse usando un cdigo Huffman especficamente diseado para las probabilidades de aparicin de estos nuevos smbolos, es decir, las longitudes. El ejemplo de la figura 7 muestra un esquema de codificacin por longitud de rfagas, en el que para expresar las longitudes se usan palabras-cdigo de longitud variable. En este esquema, la longitud mxima de la rfaga es 2 m 1.

Figura 7. Cdigo de longitud de rfagas seguido de codificacin de longitud variable. Cuando se encuentran 2m 1 ceros consecutivos, la rfaga se trunca. Supngase que la probabilidad de este evento es aproximadamente . Por tanto, de acuerdo con el cdigo Huffman, tendr sentido asignar este patrn a una palabra cdigo de 1 bit. El cdigo de la figura 7 asigna la palabra-cdigo formada por un solo 0 a este patrn. Todas las otras posibles rfagas se asignan a palabras cdigo de longitud fija formadas por un 1 seguido de la representacin en binario de la longitud de la rfaga.

Figura 8. Ejemplo de codificacin con longitud de rfagas usando Huffman En la figura 8, se considera la misma secuencia de smbolos binarios que la mostrada en la figura 6. Ahora, los 137 smbolos de entrada se codifican con 26 bits. Este esquema nuevo de codificacin asigna un nmero variable de smbolos de informacin a palabras-cdigo binarias de longitud variable. El rendimiento de este esquema es ahora E[l]/E[R], donde E[l] es el nmero medio de bits codificados por rfaga (longitud promedio de la palabra-cdigo) y E[R], es el nmero medio de smbolos codificados por rfaga (longitud promedio de la rfaga). Para el ejemplo de la figura 8 se tiene un E[l] de 26 bits/10 palabrascdigo = 2.6 y un E[R] de 137 bits/10 rfagas = 13.7. Entonces, el rendimiento del esquema de codificacin es 0.189 bits/smbolo y el factor de compresin E[R] /E[l] = 13.7/2,6 = 5.26.

CODIGOS ADAPTABLES
Hay cierto tipo de informacin cuya estadstica, o bien no se conoce a priori, o bien, vara con el tiempo. Para este tipo de informacin se han desarrollado los cdigos adaptables para la compresin de datos sin prdidas. Las tcnicas adaptables de ms xito, fueron desarrolladas por Ziv y Lempel a finales de los aos 70. Esta aproximacin, generaliza la tcnica de la codificacin de longitud de rfagas dividiendo la secuencia de partida en cadenas de smbolos que aparezcan con cierta frecuencia y las codifica mediante un cdigo de longitud variable. En el algoritmo Lempel-Ziv, el codificador busca los patrones de smbolos que se repitan y los codifica de la siguiente manera: Siempre que un patrn se repita en la secuencia de informacin, ser remplazado por un puntero que apunte a la primera aparicin del patrn considerado; adems se enviar un valor que indique la longitud del patrn. El algoritmo es adaptable, ya que los patrones que aparezcan frecuentemente se identifican automticamente durante el proceso de codificacin.

En la figura 9 aparece un ejemplo de la aplicacin del algoritmo a un trozo de texto. Los primeros 6 caracteres, <<All_ta>> se dejan inalterados, ya que no contienen ninguna repeticin. Los tres siguientes smbolos, <<ll_>>, han aparecido antes en la secuencia; por tanto, se codifican como [2,3], indicando que corresponde a tres caracteres de la secuencia tomados a partir del segundo. Los tres siguientes caracteres, <<We_>>, se dejan inalterados, mientras que los 4 siguientes, <<all_>>, se observa que se han dado previamente a partir del caracter sexto. Los tres siguientes caracteres se dejan igual, pero los 5 siguientes, <<_tall>>, se observa que han aparecido previamente a partir del cuarto. Los dos siguientes, <<._>> se dejan inalterados, mientras que los 4 siguientes, <<All_>> se observa que han aparecido previamente a partir del primer carcter. Los dos siguientes se dejan inalterados, <<sm>>, y ahora observamos que los 15 siguientes <<all_We_all_are_>> han aparecido con anterioridad a partir del sexto. Por ltimo, se observa que la ltima cadena ha aparecido a partir de la posicin 31. La secuencia finaliza con el punto final.

Se puede representar como:

Figura 9. Ejemplo de compresin de datos mediante el algoritmo de Lempel-ziv. En este ejemplo, la secuencia de entrada al codificador est formada por 53 caracteres ASCII, mientras que la secuencia codificada consta de 29 caracteres ASCII, suponiendo que cada nmero se codifica con un carcter ASCII La versin anterior del algoritmo Lempel-Ziv exige que el codificador busque hacia atrs, a lo largo de todo el archivo, patrones que se repitan. El algoritmo se puede modificar para restringir la bsqueda a una ventana definida desde el smbolo mas reciente hasta algn smbolo alejado un nmero predeterminado de posiciones. El puntero ya no se refiere a la primera aparicin del patrn en cuestin, sino a su aparicin mas reciente. Otra posible modificacin consiste en limitar la bsqueda a patrones contenidos en un diccionario construido por el codificador, conforme identifique patrones que se repitan. Los algoritmos adaptables de compresin de datos sin prdidas se utilizan muy a menudo en aplicaciones para la transmisin y almacenamiento de informacin. En los Modems se han implementado tres tipos de compresin de datos sin prdidas. El protocolo MMP5 usa una combinacin de codificacin de longitud de rfagas y codificacin Huffman adaptable. El protocolo MMP7 utiliza las dependencias estadsticas existentes entre caracteres aplicando cdigos Huffman dependientes del contexto. El estndar para MODEM de la UIT V.42bis utiliza el algoritmo Lempel-Ziv. Este algoritmo se ha implementado igualmente en aplicaciones de almacenamiento como la orden COMPRESS de UNX que obtiene factores de compresin de entre 2 y 6.

Mtodo de compresin LZW (Lempel-Ziv-Welch)


El mtodo de compresin LZW es una evolucin del mtodo originalmente creado por Abraham Lempel y Jacob Ziv (mtodo Lempel-Ziv). Ms tarde este algoritmo fue mejorado por los dos creadores (dando lugar a LZ77 y LZ78). Terry Welch modific ms tarde el algorit mo y ahora se denomina LZW (Lempel-Ziv-Welch) En este apndice se presenta una versin muy simplificada, como una introduccin para los estudiantes y lectores que no tengan un conocimiento previo de este mtodo. Se han omitido deliberadamente muchos detalles y aspectos relacionados con la comprobacin de errores. Lo bonito de este procedimiento es que es un mtodo de compresin sin prdida, de forma que el texto completo se puede recuperar completamente. El mtodo es en algunas ocasiones preferible al sistema de codificacin Huffman, debido a que no se requiere un conocimiento a priori de las frecuencias de los smbolos. COMPRESION La compresin, que se realiza en el emisor, tiene los siguientes componentes: un diccionario, un registro temporal y un algoritmo. Diccionario Para comprimir y descomprimir, LZW utiliza un diccionario compuesto por dos filas (o columnas). La primera fila define el cdigo; la segunda fila define la cadena (string) que se corresponde con ese cdigo. Ante de comenzar la compresin, se inicializa el diccionario con solo un conjunto de caracteres alfabticos del texto. Por ejemplo, si el texto consta de solo tres smbolos, A, B y C, el diccionario originalmente tiene 3 columnas, pero se har cada vez ms grande a medida que el texto sea comprimido o descomprimido. (Vase la Tabla 1).
1 A 2 B 3 C

TABLA 1. Diccionario original. Registro LZW utiliza un registro. Los smbolos entran en el registro de uno en uno. Las cadenas se transfieren al diccionario y el cdigo correspondiente se enva de acuerdo al algoritmo descrito ms adelante. La figura 10 muestra el registro.

Cadenas al diccionario

Buffer

Smbolos de texto

Cdigos enviados

Figura 10. Registro del compresor

Comienzo Inicializar el diccionario No Hay algn smbolo en el texto? Si Leer siguiente smbolo No Coincidencia entre el buffer y el diccionario? Si

Enviar cdigo a cadena de salida menos el ltimo smbolo Aadir contenido del buffer al diccionario Limpiar buffer excepto ltimo smbolo Enviar cdigo correspondiente a la cadena en buffer Parar

Figura 11. Algoritmo de compresin

Algoritmo de compresin La Figura 11 muestra el diagrama de flujo del algoritmo de compresin. Este, que es una versin muy simplificada del descrito en la literatura, intenta comparar la entrada con la cadena ms larga del diccionario. Para ello, lee los smbolos, uno a uno, de la cadena de entrada y los almacena en el registro. Para cada carcter, comprueba si la cadena coincide con alguna del diccionario. Si la encuentra, intenta leer ms smbolos. S despus de leer un smbolo ms, no hay coincidencia, el proceso enva el cdigo correspondiente a la cadena sin el ltimo smbolo (se garantiza que se puede encontrar en el diccionario). Luego aade la cadena completa al diccionario (para uso posterior). Limpia el registro excepto el ltimo smbolo, debido a que el ltimo smbolo no se ha enviado todava. El ltimo carcter permanece en el registro para convertirse en parte de la siguiente cadena. Ejemplo de compresin La Figura 12 muestra un ejemplo de compresin que utiliza el mtodo LZW. El texto de entrada, BABACABABA, se comprime a 214358 de la siguiente forma: El diccionario se inicializa con tres smbolos (A, B y C en este ejemplo). El registro est vaco.

BABACABACA
Diccionario 1 2 3 A B C B 1 2 3 A B C 4 BA BA 2 1 2 3 4 5 A B C BA AB AB 1 BA 1 2 3 A B C 4 5 6 BA AB BAC BAC 4 1 2 3 A B C 4 5 6 BA AB BAC 7 CA CA 3 AB 1 2 3 A B C 4 5 6 BA AB BAC 7 CA 8 ABA A BA 5 1 2 3 A B C 4 5 6 7 8 9 BA AB BAC CA ABA AC AC 1 C A 7 A CA BACA ACA ABACA ACABACA CABACA BACABACA BABACABACA ABACABACA Texto a comprimir

2 1 4 3 5 1 7 Cdigos enviados

Figura 12. Ejemplo de compresin El primer smbolo del texto (B) entra en el registro. Este smbolo ya est en el diccionario, as que el algoritmo contina con la siguiente iteracin.

El segundo smbolo (A) entra en el registro. La cadena BA no se encuentra en el diccionario, as que la cadena B (la cadena completa sin el ltimo carcter) se codifica como 2 (B = 2 en el diccionario) y se enva. La cadena (BA) se aade al diccionario y del registro se elimina la B (solo permanece la A). El tercer smbolo (B) ahora entra en el registro. La cadena AB no se encuentra en el diccionario, por lo que A se codifica como 1 y se enva. La cadena AB se aade al diccionario y del registro se elimina la A (solo permanece B en el registro). El cuarto smbolo (A) ahora entra en el registro. La cadena BA ya se encuentra en el diccionario, por lo que el algoritmo contina con la siguiente iteracin. El quinto smbolo (C) entra en el registro. La cadena BAC no se encuentra en el diccionario, por lo que BA se codifica como 4 y se enva. La cadena BAC se aade al diccionario. Del registro se elimina lo que ha sido codificado (BA). El nico smbolo que permanece en el registro es la C. El sexto smbolo (A) entra en el registro. La cadena CA no est en el diccionario, por lo que C se codifica como 3 y se enva. La cadena CA se aade al diccionario. Del registro se elimina lo que se ha codificado y enviado (C). El smbolo que queda es la A. El sptimo smbolo entra (B). La cadena AB ya est en el diccionario. El octavo smbolo entra (A). La cadena ABA no se encuentra en el diccionario, por lo que AB se codifica como 5 y se enva. La cadena ABA se aade al diccionario. Del registro se elimina lo que se ha codificado y enviado (AB). El nico smbolo que permanece es A. El noveno smbolo entra (C). La cadena AC no se encuentra en el diccionario, por lo que A se codifica como 1 y se enva. La cadena AC se aade al diccionario. Del registro se elimina la A que ha sido codificada y enviada y permanece el smbolo C. El dcimo smbolo (A) entra ahora. La cadena CA se encuentra en el diccionario, por lo que el algoritmo quiere comenzar con la siguiente iteracin pero ya no quedan ms smbolos. El algoritmo termina el bucle y enva el cdigo correspondiente a la cadena CA (cdigo 7).

DESCOMPRESIN El proceso de descompresin, que tiene lugar en el receptor, utiliza los mismos componentes que el proceso de compresin. Diccionario Un aspecto muy interesante es que el emisor no enva el diccionario creado por el proceso de compresin; en su lugar, el diccionario ser creado de nuevo en el receptor. Este diccionario, sorprendentemente, es una rplica exacta del diccionario creado en el emisor. En otras palabras, la informacin del diccionario se encuentra empotrada dentro de los cdigos transmitidos. Registros El proceso de descompresin utiliza dos registros. Los cdigos que llegan se decodifican y los smbolos resultantes se almacenan en un registro temporal antes

de introducirse, un smbolo cada vez, en el registro principal. Puesto que cada cdigo puede representar ms de un smbolo, el registro temporal se necesita para almacenar los smbolos antes de que sean consumidos de forma individual por el registro principal (vase la Figura 13). Buffer temporal
Cdigos recibidos

Cadenas al diccionario

Buffer
Smbolos a imprimir

Figura 13. Registros en el descompresor

Comienzo Inicializar el diccionario No 1 Hay ms cdigos recibidos? Si Decodificar el siguiente cdigo y enviar los smbolos correspondientes al buffer temporal Hay ms smbolos en el buffer temporal? Si Transferir siguiente smbolo de buffer temporal a buffer No

No

Coincidencia entre el buffer y el diccionario?

Si

Imprimir los smbolos del buffer menos el ltimo Aadir contenido completo del buffer al diccionario Limpiar buffer excepto ltimo smbolo

Imprimir el contenido del buffer

Parar

Figura 14. Algoritmo de descompresin

Algoritmo de descompresin La Figura 14 muestra el diagrama de flujo del algoritmo de descompresin. Nuestro algoritmo, que de nuevo es una versin muy simplificada del descrito en la literatura, tiene dos bucles. El primer bucle, en cada iteracin, decodifica cada cdigo recibido y enva los smbolos resultantes al registro temporal. El segundo bucle lee los smbolos uno a uno del registro temporal y en algn momento hace lo mismo que el algoritmo de compresin. De esta forma, el registro temporal simula la cadena de entrada del algoritmo de compresin. El algoritmo construye de forma gradual el diccionario que permite que los cdigos que llegan sean decodificados. El aspecto interesante sobre el algoritmo es que, antes de que se haya recibido cualquier cdigo, la entrada del diccionario necesaria para decodificar ese cdigo concreto ya se encuentra all. En otras palabras, el cdigo anterior siempre prepara el diccionario para el siguiente cdigo.

Ejemplo de descompresin
La Figura 15 muestra un ejemplo de descompresin. Se utiliza el mismo cdigo enviado por el emisor en el ejemplo de compresin y se va a ver si se obtiene el mismo texto original sin prdida. El proceso es casi el mismo que el utilizado en la compresin. El diccionario se inicializa con los tres smbolos que se estn utilizando en este ejemplo. El registro y el registro temporal se encuentran vacos. El primer cdigo (2) se decodifica y el smbolo correspondiente (B) entra en el registro temporal. El registro lee este smbolo. La cadena est en el diccionario. El segundo cdigo (1) se decodifica y el smbolo correspondiente (A) entra en el registro temporal. El registro lo lee. Ahora, la cadena BA se encuentra en el registro; el smbolo B se imprime; la cadena BA se aade al diccionario; del registro se elimina la B; el nico smbolo que permanece es la A. El registro temporal est vaco, por lo que el siguie nte cdigo debera ser decodificado. El siguiente cdigo es 4 (observe que la entrada correspondiente para 4 ya se encuentra en el diccionario, ya que fue introducida en la iteracin anterior) que se ha decodificado como BA. La cadena entra en el registro temporal. El registro lee solo el primer carcter y aade este al contenido del registro. El resultado es AB. El cdigo no est en el diccionario, as que se imprime A y AB se aade al diccionario. Del registro se elimina la A, quedando solo el smbolo B. El proceso contina en forma similar hasta que se haya decodificado el ltimo cdigo recibido.

2 1 4 3 5 1 7
Diccionario 1 2 3 A B C B 1 2 3 A B C 4 BA BA B 1 2 3 4 5 A B C BA AB AB A BA 1 2 3 A B C 4 5 6 BA AB BAC BAC BA 1 2 3 A B C 4 5 6 BA AB BAC 7 CA CA C AB 1 2 3 A B C 4 5 6 BA AB BAC 7 CA 8 ABA A BA AB 1 2 3 A B C 4 5 6 7 8 9 BA AB BAC CA ABA AC AC A C A BABACABACA Texto impreso CA A CA B A AB A C BA B A Cdigos recibidos

2 1 4 3 5 1 7 1 4 3 5 1 7

4 3 5 1 7

3 5 17

5 17

17

Figura 15. Ejemplo de descompresin

Tomado de: - DIGITAL COMMUNICATIONS, John G. Proakis. McGraw-Hill. Third edition. 1995. - REDES DE COMUNICACIN. Conceptos fundamentales y arquitecturas bsicas. Alberto Lengarca e Indra Widjaja. McGraw-Hill. 2002 - TRANSMISIN DE DATOS Y REDES DE COMUNICACIONES. Behrouz A. Forouzan. McGraw-Hill. 2002

Taller
1. a. Mencione tres ejemplos de aplicaciones en las que la informacin se deba codificar sin prdidas. b. Mencione tres ejemplos de aplicaciones en los que la informacin se codifique con prdidas. 2. Supngase que una fuente de informacin genera smbolos de un alfabeto {a,b,c} y que los tres smbolos son equiprobables. a. Encuentre el cdigo Huffman para el caso en el que la informacin se codifique un smbolo cada vez. Calcule el nmero promedio de bits codificados por smbolo. b. Encontrar los cdigos Huffman para cuando los bloques se codifican en bloques de longitud 2 y en bloques de longitud 3. Calcule en cada caso el nmero promedio de bits codificados por smbolo. c. Comparar las respuestas de los apartados a) y b) con la entropa de la fuente. 3. a. Utilice los cdigos de longitud de rfaga con m = 3 y m = 5 para codificar la cadena binaria de la figura 5. b. Repetir el apartado a) utilizando los cdigos con m = 3 y m = 5 de la figura 6. 4. a. Encontrar la eficiencia del cdigo de longitudes de rfaga de la Figura 5 para el que m = 4, donde p(16) = 1/2. b. Encontrar la eficiencia del cdigo de longitudes de rfaga de la Figura 7 para el que m = 4, donde p(16) = 1/2, y comparar el resultado con el del apartado a). 5. Utilice el cdigo de longitud de rfagas (run length) con m = 3 para codificar la siguiente cadena binaria: 10000.....010000....010000....010000...010000...01 25 57 10 31 36 Nmero de ceros consecutivos

Calcule el rendimiento del cdigo y el factor de compresin. 6. Utilice el cdigo de longitud de rfagas (run length) junto con el de longitud variable de Huffman, para codificar la siguiente cadena binaria (asuma m = 3): 10000.....010000....010000....010000...010000...01 25 57 8 31 36 Nmero de ceros consecutivos Calcule el rendimiento del cdigo y el factor de compresin. 7. Considere una DMS con siete posibles smbolos x1, x2, x3, x4, x5, x6 y x7, los cuales tienen probabilidades de ocurrencia de 0.35, 0.30, 0.20, 0.10, 0.04, 0.005 y 0.005 respectivamente. Disee un cdigo Huffman para la codificacin de secuencias de smbolos de una fuente que utiliza este alfabeto con bloques de smbolos de longitud 1. Encuentre la eficiencia del cdigo obtenido. 8. Una cierta fuente DMS tiene un alfabeto con los siguientes smbolos y probabilidades: x1 (0.36), x2 (0.14), x3 (0.13), x4 (0.12), x5 (0.10), x6 (0.09), x7 (0.04) y x8 (0.02). Disee un cdigo Huffman para la codificacin de secuencias de smbolos de esta fuente, considerando bloques de longitud 1. Encuentre la eficiencia del cdigo obtenido. 9. El alfabeto de una fuente DMS consta de los caracteres x1, x2 y x3, con probabilidades 0.45, 0.35 y 0.20 respectivamente. a) Disee un cdigo Huffman para bloques de longitud 1, calcule el nmero de bits codificados por smbolo y comprelo con la entropa; b) disee un cdigo con bloques de longitud 2 y compare el nmero de bits codificados por smbolo resultante con la entropa, c) compare las eficiencias de los dos cdigos obtenidos. 10. Emplee los algoritmos de compresin de Lempel-Ziv-welch estudiado, para codificar y decodificar la siguiente secuencia: wabba@ wabba@ wabba@woo@woo

Vous aimerez peut-être aussi