You are on page 1of 9

ESCUELA MILITAR DE INGENIERÍA

Sistemas y Servicios Digitales II


Tarea No. 0

CODIFICACIÓN BASADA EN ENTROPÍA (Huffman)


CODIFICACIÓN BASADA EN LA FUENTE (Transformada)

Alumno:

Cap. Inf. Guery De la Barra

Docente:

Msc. Ing. Cesar E. Castellón

18/02/2018

La Paz - Bolivia
TAREA No. 0
1. OBJETIVO
Realizar una investigación bibliográfica acerca de la Codificación basada en
Entropía (Codificación Huffman) y la Codificación basada en la fuente
(Transformada), describir sus principales características conocer los fundamentos
de los algoritmos.

2. DESARROLLO DEL TEMA.


2.1. CODIFICACIÓN BASADA EN ENTROPÍA (Codificación Huffman)
En compresión, buscamos ser capaces de representar un conjunto de símbolos (o
cadena de símbolos) obtenidos a partir de un cierto alfabeto, usando el menor
número de bits posible, pero preservando en todo momento la capacidad de
descomprimir o decodificar la información. En general, el sistema que realiza el
proceso directo lo llamamos compresor o codificador, mientras que el que
reconstruye los datos originales (o una aproximación a ellos si realizamos
compresión con pérdidas) lo llamamos descompresor o decodificador.

El algoritmo de codificación/compresión Huffman se propuso en 1952 como una


forma sencilla y óptima de mapear cada símbolo de un alfabeto con un código
(codeword) de longitud óptima. De esta forma, para comprimir cada símbolo de la
cadena, simplemente debemos usar el código que se ha calculado mediante
Huffman. Para conseguir esta asignación óptima, los símbolos se representan con
códigos cuya longitud es inversamente proporcional a la probabilidad del símbolo.
De esta forma, los símbolos menos probables se representan con códigos más
largos, y los más probables con códigos más cortos.

El proceso de asignación de códigos se lleva a cabo mediante la construcción de un


árbol binario, desde las hojas hacia la raíz, de manera que los nodos hoja son los
símbolos del alfabeto. En la construcción del árbol, los nodos menos probables se
unen sucesivamente para formar otro nodo de mayor probabilidad, de forma que
cada uno de los enlaces añade un bit al código de los símbolos que estamos
juntando. Este proceso termina cuando sólo se dispone de un nodo, de forma que
éste representa la raíz del árbol.

2
Para mejorar su comprensión, veamos un ejemplo sobre este proceso.
Supongamos que queremos codificar la siguiente cadena de símbolos:
S={aabaacc}
que usa el alfabeto:
A={a, b, c}

La probabilidad de cada uno de los símbolos vendrá dada por las siguientes
expresiones:

P(a)=4/7 P(b)=1/7 P(c)=2/7

Como es lógico, el símbolo “a”, que se repite mucho, nos interesa representarlo
con el menor número de bits posibles.

El primer paso del algoritmo será plantear un grafo no conexo de nodos que
representan cada uno de los símbolos del alfabeto, junto con su probabilidad
asociada. Para mejorar su comprensión y facilitar el cálculo, en lugar de usar
directamente las probabilidades P(a), P(b), P(c), usaremos una cuenta de
repeticiones, a modo de histograma, de forma que
H(a)=4 H(b)=1 H(c)=2

El grafo inicial será el siguiente:

a b c

H(a)=4 H(b)=1 H(c)=2

El primer paso será juntar los nodos menos probables en un nuevo nodo,
asignando un bit distinto a cada uno de los enlaces. El grafo resultante es el
siguiente:

bc
H(bc)=3
0 1

a b c

H(a)=4

3
A continuación nos quedan dos nodos por unir, repetimos la misma operación y
obtenemos ya el árbol final.
abc
H(abc)=7
1
0
bc

0 1

a b c

Para obtener los códigos a usar en la codificación, simplemente debemos recorrer


el árbol de la raíz a cada una de las hojas, asignando a cada símbolo el código
resultante de unir las etiquetas asociadas a cada uno de los enlaces que se han
recorrido. De esta forma, los códigos finales en el ejemplo son los siguientes:

C(a)=0 C(b)=10 C(c)=11

Y por tanto la cadena original S={aabaacc} quedaría codificada como sigue:

C(aabaacc)= 0 0 10 0 0 11 11

El resultado final de la compresión es que hemos empleado 10 bits para codificar


los 7 símbolos originales, así que se han usado 10/7 = 1,43 bits por símbolo.

Un inconveniente del proceso de decodificación Huffman es que es necesario


disponer del árbol a partir del que se codifican los datos. Por lo tanto, no es
suficiente con almacenar la cadena final, sino que también hay que comunicar al
decodificador las probabilidades de la fuente (o el histograma asociado a los
símbolos), de forma que el decodificador sea capaz de reconstruir el árbol (otra
alternativa sería transmitir directamente la tabla de codewords). Este proceso no
sería necesario si la fuente que estamos codificando tuviera unas características
estadísticas bien conocidas a priori, tanto por el codificador como por el
decodificador.

El decodificador, una vez ha reconstruido el árbol, puede decodificar la cadena


original fácilmente. Para ello, debe recorrer el árbol desde la raíz hacia las hojas,
usando los bits de la cadena codificada para avanzar en el recorrido hacia las hojas.
Así, a partir de C(aabaacc), el primer bit es un 0, lo que nos dará directamente el
4
símbolo “a”, ya que se llega desde la raíz directamente a una de las hojas. Con el
siguiente 0 ocurre lo mismo. A continuación partimos nuevamente de la raíz, pero
tenemos un 1, con lo que nos situamos en el nodo “bc”, y necesitamos leer un bit
más, en este caso un 0, para llegar a una hoja, y decodificar así el símbolo “b”. Este
proceso continúa mientras tenemos bits que leer.

Por Entropía
La entropía es un concepto que representa los límites de la codificación basada en
la entropía, en la que se codifican los datos sin necesidad de conocer la naturaleza
de los mismos. Huffman es un ejemplo de codificación basada en la entropía. La
entropía denota el mínimo número de bits por símbolo necesarios para
representar una cadena. Es un índice que denota la cantidad de información que
existe en una fuente de datos (la cadena a codificar).

Aunque el cálculo de la entropía general no se puede calcular, de forma práctica se


suele emplear la entropía de primer orden como una aproximación. Esta entropía
viene definida

siendo ai cada uno de los símbolos del alfabeto A.

En el ejemplo del punto anterior, la entropía se puede calcular como:

Aunque la entropía nos dice que los datos se pueden codificar usando 1,38 bits por
símbolo, el resultado final usando Huffman es que han sido necesarios 1,43 bits
por símbolo, ya que la entropía indica una cota inferior de los bits por símbolo
necesarios.

Ejemplo práctico de comparación


Una sonda espacial ha sido lanzada al espacio para contar cierto tipo de
perturbaciones estelares. Ha de contar cuántas se producen en cada minuto, y
tiene cada día una ventana de tiempo bastante reducida para enviar los datos
a Tierra; por tanto, interesa reducir al máximo el tiempo de transmisión, y para ello
se recurre a codificar las muestras mediante un código de Huffman.

5
En la siguiente tabla se muestran los valores a transmitir, junto con sus frecuencias
relativas, su código en una codificación binaria de 3 bits, y su código en un posible
código Huffman para estos valores.

Valor Frecuencia Código binario Código Huffman

0 10% 000 010

1 20% 001 10

2 30% 010 00

3 25% 011 11

4 10% 100 0110

5 o más 5% 101 0111

Puede observarse que, en la codificación binaria, todos los posibles valores reciben
códigos del mismo número de bits, mientras que en la codificación Huffman, cada
valor tiene un número diferente de bits: los códigos más frecuentes poseen dos
bits, mientras que los menos frecuentes poseen cuatro bits.
A continuación se observa el código necesario para transmitir la siguiente serie de
valores:

5,4,2,3,2,2,1,0,1,3,2,4,3,4,3,2,3,4,2,4

Utilizando la codificación binaria, sería una serie de 60 bits; es decir, 3 bits por
símbolo.

101100010011010010001000001011010100011100011010011100010100

nota: se ha añadido la misma serie separada en bloques con la única razón de


facilitar una transcripción manual libre de errores para un estudio por parte del
lector interesado.

101.100.010.011.010.010.001.000.001.011.010.100.011.100.011.010.011.100.01
0.100

6
Utilizando, en cambio, la codificación Huffman, se tendría que enviar una
secuencia de 53 bits; es decir, 2,65 bits por símbolo.

01110110001100001001010110001101101101100110110000110

nota: la misma serie dividida en bloques de 4 bits para la misma observación


anterior.

0111.0110.0011.0000.1001.0101.1000.1101.1011.0110.0110.1100.0011.0

En este ejemplo, la media de bits por símbolo que cabría esperar de esta
codificación, en cadenas de valores más largas, es de 2,4.
Para su comparación, la entropía del conjunto de símbolos es de 2,366; es decir, el
mejor método de compresión sería capaz de codificar estos valores utilizando
2,366 bits por símbolo.
Es posible, también, apreciar cómo se pueden extraer sin ninguna ambigüedad los
valores originales a partir de la cadena codificada mediante Huffman.
Hay que añadir que la codificación de Huffman no puede ser aplicada a imágenes
en blanco y negro porque es incapaz de producir compresión sobre un
alfabeto binario.

2.2. CODIFICACIÓN BASADA EN LA FUENTE (Transformada)

Codificación basada en la fuente. Se basan fundamentalmente en las propiedades de la


fuente de datos a codificar. Suelen tolerar pérdidas en la codificación (lossy codecs) que
perceptualmente pasan inadvertidas para el usuario. Son codificadores de propósito
específico. Por término general obtienen mayores prestaciones que los codificadores
basados en la entropía.

Todos los sistemas de compresión de la información utilizados actualmente pueden


descomponerse en tres módulos o elementos: Transformación de Datos, Codificador y
Codificador entrópico.

7
El bloque de transformación de datos es un procedimiento genérico que se utiliza para
representar la información en una forma alternativa y en la que resulta más evidente la
redundancia existente en los datos originales. Es necesario que esta trasformación sea
invertible, es decir, que a partir de los datos transformados, podamos reproducir
exactamente la información original.

Todas las transformaciones utilizadas en los estándares actuales de compresión de audio


y video son invertibles, lo que significa que en este bloque concreto, no se introduce
ningún tipo de pérdida.

Consideremos como ejemplo que aplicamos una transformada de Fourier a las señales que
representan la información de un fragmento de audio. Es posible que resulte más eficiente
codificar los datos resultantes de esta transformación que los datos originales. En efecto,
en el dominio transformado de Fourier, es más fácil identificar las regiones espectrales
que tienen una energía por debajo del umbral de audición, o analizar las bandas que
resultarán enmascaradas por otras señales y que, por lo tanto, no serían audibles. Si este
análisis de la señal es factible, no tendrá sentido codificar toda aquella información que el
sistema auditivo humano es incapaz de escuchar y resultará más rentable dedicar los bits
a las zonas audibles. El resultado final es que, en este dominio transformado, podemos
codificar la información de forma más eficaz. El sistema MP3 utiliza los principios de
codificación expuestos para realizar la compresión de señales de audio de alta fidelidad.

La transformación de los datos puede ser de naturaleza muy distinta (Fourier, Coseno,
Wavelet, Diferencia, etc.) o incluso puede no resultar necesario realizar la transformación
si es que existen procedimientos eficientes para la compresión directa o los recursos
computacionales de la aplicación son escasos. En algunos casos, es posible que existan
varias transformaciones realizándose simultáneamente para diferentes componentes de
la señal y que la codificación se realice tomando datos parciales de cada una de ellas. Éste
es el caso, por ejemplo, del estándar MPEG-2 vídeo, en el cual se combinan distintas
estrategias de codificación en función del tipo de información y de las características de la
señal.

8
3. CONCLUSIONES
Ambos tipos de codificación estudiados buscan, a través de sus procedimientos
específicos, eliminar la redundancia y/o la información innecesaria, de este modo se
minimiza los recursos necesarios para la transmisión de la información y, por consiguiente,
se optimiza el sistema de comunicación.

4. BIBLIOGRAFÍA
 Benedetto, S., & Biglieri, E. (1999). Principles of Digital Transmission. Kluwer
Academic Press.

 Proakis, J. G. (2003). Digital Communications. McGraw Hill.

You might also like