Sie sind auf Seite 1von 4

DISE

NO Y PROGRAMACI

ON DE UN CODEC
HUFFMAN
Cristian Aguirre Esparza
cbaguirre@utpl.edu.ec
Edwin Castillo
eacastillo4@utpl.edu.ec
AbstractA medida que la necesidad de los usuarios de enviar
y recibir informaci on cada ves es mas extensa, surgio la necesidad
de comprimir dicha informaci on de tal manera que esta sea
posible enviarla y recibirla sin ocasionar perdidas pero a su ves
en un numero menor de datos, de esta manera facilitar en mucho
las comunicaciones. En base a esto la practica a desarrollarse,
es el de dise nar y programar un c odigo HUFFMAN ya sea
para audio, video o texto, y utilizando otro c odigo sin perdidas
comprobar el funcionamiento del c odigo HUFFMAN. En nuestro
caso hemos elejido texto, ya que consideramos que de los tres
campos, con texto se nos facilitaria ver y entender la operaci on y
el funcionamiento del c odigo, que es el objetivo de esta pr actica.
KeywordsComprensi on, matlab, texto, huffman, RLZ.
I. INTRODUCCI

ON
E
N ciencias de la computaci on y teora de la informaci on,
la codicaci on Huffman es un algoritmo usado para
compresi on de datos. El t ermino se reere al uso de una tabla
de c odigos de longitud variable para codicar un determinado
smbolo (como puede ser un caracter en un archivo), donde la
tabla ha sido rellenada de una manera especca bas andose en
la probabilidad estimada de aparici on de cada posible valor
de dicho smbolo. Fue desarrollado por David A. Huffman
mientras era estudiante de doctorado en el MIT, y publicado
en A Method for the Construction of Minimum-Redundancy
Codes. Para poder utilizar el algoritmo de Huffman es
necesario conocer de antemano las frecuencias de aparici on
de cada smbolo, y su eciencia depende de lo pr oximas
a las frecuencias reales que sean las estimadas. Algunas
implementaciones del algoritmo de Huffman son adaptativas,
actualizando las frecuencias de cada smbolo conforme
recorre el texto. [1]
II. OBJETIVOS
1) Dise nar un codec Huffman en base a la teora revisada.
2) Programar el codec Huffman.
3) Realizar pruebas de funcionamiento del codec.
4) Validar el codec Huffman (comparar con otro codec de
compresi on con/sin p erdidas).
III. MARCO TE

ORICO
A. COMPRESI

ON DE DATOS (TEXTO)
La compresi on es un caso particular de la codicaci on,
cuya caracterstica principal es que el c odigo resultante tiene
menor tama no que el original. En otras palabras la compresi on
de datos es la reducci on del volumen de datos tratables
para representar una determinada informaci on empleando una
menor cantidad de espacio. La compresi on se basa funda-
mentalmente en buscar repeticiones en series de datos para
despu es almacenar solo el dato junto al n umero de veces que se
repite. As, por ejemplo, si en un chero aparece una secuencia
como AAAAAA, ocupando 6 bytes se podra almacenar
simplemente 6A que ocupa solo 2 bytes.
En realidad, el proceso es mucho m as complejo, ya que
raramente se consigue encontrar patrones de repetici on tan
exactos (salvo en algunas im agenes). Se utilizan algoritmos
de compresi on.
Por un lado, algunos buscan series largas que luego codi-
can en formas m as breves, por otro lado, algunos algoritmos,
como el algoritmo de Huffman que es el que se utilizara
en esta pr actica, examinan los caracteres m as repetidos para
luego codicar de forma m as corta los que m as se repiten.
Otros, como el LZW, construyen un diccionario con los
patrones encontrados, a los cuales se hace referencia de manera
posterior, y por ultimo, la compresi on RLE o Run-length
encoding es una forma muy simple de compresi on de datos en
la que secuencias de datos con el mismo valor consecutivas
son almacenadas como un unico valor m as su recuento.
B. T

ECNICA DE CODIFICACI

ON HUFFMAN
La codicaci on Huffman usa un m etodo especco para
elegir la representaci on de cada smbolo, que da lugar a un
c odigo prejo (es decir, la cadena de bits que representa a
un smbolo en particular nunca es prejo de la cadena de
bits de un smbolo distinto) que representa los caracteres m as
comunes usando las cadenas de bits m as cortas, y viceversa.
Huffman fue capaz de dise nar el m etodo de compresi on m as
eciente de este tipo: ninguna representaci on alternativa de
un conjunto de smbolos de entrada produce una salida media
m as peque na cuando las frecuencias de los smbolos coinciden
con las usadas para crear el c odigo. Posteriormente se encontr o
un m etodo para llevar esto a cabo en un tiempo lineal si las
probabilidades de los smbolos de entrada (tambi en conocidas
como pesos) est an ordenadas. El codicador Huffman crea
una estructura arb orea ordenada con todos los smbolos y
la frecuencia con que aparecen. Las ramas se construyen
en forma recursiva comenzando con los smbolos menos
frecuentes.
Para un grupo de smbolos con una distribuci on de proba-
bilidad uniforme y un n umero de miembros que es potencia de
dos, la codicaci on Huffman es equivalente a una codicaci on
en bloque binaria, por ejemplo, la codicaci on ASCII. La
codicaci on Huffman es un m etodo para crear c odigos prejo
tan extendido que el t ermino codicaci on Huffman es am-
pliamente usado como sin onimo de c odigo prejo, incluso
cuando dicho c odigo no se ha producido con el algoritmo de
Huffman.
Aunque la codicaci on de Huffman es optima para una
codicaci on smbolo a smbolo dada una distribuci on de
probabilidad, su optimalidad a veces puede verse accidental-
mente exagerada. Por ejemplo, la codicaci on aritm etica y la
codicaci on LZW normalmente ofrecen mayor capacidad de
compresi on. Estos dos m etodos pueden agrupar un n umero
arbitrario de smbolos para una codicaci on m as eciente, y
en general se adaptan a las estadsticas de entrada reales. Este
ultimo es util cuando las probabilidades no se conocen de
forma precisa o varan signicativamente dentro del ujo de
datos.
C. T

ECNICA DE CODIFICACI

ON RLE
La compresi on RLE o Run-length encoding es una forma
muy simple de compresion de datos en la que secuencias de
datos con el mismo valor consecutivas son almacenadas como
un unico valor m as su recuento. Esto es m as util en datos que
contienen muchas de estas secuencias; por ejemplo, gr acos
sencillos con areas de color plano, como iconos y logotipos.
Por ejemplo, considera una pantalla que contiene texto en
negro sobre un fondo blanco. Habra muchas secuencias de
este tipo con pxeles blancos en los m argenes vacos, y otras
secuencias de pxeles negros en la zona del texto. Supongamos
una nica lnea (o scanline), con N representando las zonas en
negro y B las de blanco:
BBBBBBBBBBBBNBBBBBBBBBBBBNNNBBBB
BBBBBBBBBBBBBBBBBBBBNBBBBBBBBBBBBBB
Si aplicamos la codicaci on run-length a esta lnea, ob-
tendramos lo siguiente:
12B1N12B3N24B1N14B
Interpretado esto como 12 letras B, 1 letra N , 12 letras B,
3 letras N, etc. El c odigo run-length representa el original de
67 caracteres en tan s olo 16. Esto quiere decir que la lnea
original pesa 67 bytes y la cadena codicada pesa s olo 16
bytes.
IV. DISE

NO Y PROGRAMACI

ON DEL CODEC
HUFFMAN
Procedemos a realizar la compresi on, codicaci on y de-
codicaci on de un archivo de texto, que fue previamente
almacenado en la carpeta del programa para evitar errores.
La realizaci on del c odigo se lo lleva a cabo en el software
Matlab, en donde programamos la compresi on y codicaci on
en un scrip, con el n de generar un resultado explcito del
comportamiento del sistema.
A. Etapa de almacenamiento
Primeramente el mensaje a codicar se lo almacena en
un .txt con nombre mensaje.txt de manera que el usuario
unicamente debera ingresar en este su mensaje a codicar y
el programa accede a este txt para su codicaci on.
B. Etapa de asignaci on
El programa luego de ingresar al archivo txt procede a
asignar a cada letra su respectivo c odigo ASCII y lo
almacena en un string de tal manera que se nos facilite trabajar
con n umeros que representara cada letra.
C. Etapa de vericaci on
En esta etapa lo que realizamos es la comprobaci on de
cada caracter, de tal manera que vayamos almacenando el
numero de veces que se repite cada caracter y de esta manera
obtener la probabilidad del mismo, de esta manera sabremos
la ocurrencia de cada uno, todas estas probabilidad se van
almacenando en otro nuevo string.
D. Etapa de compresi on
Hay dos funciones importantes que se encuentran incluidas
en Matlab, hablamos de la funci on huffmamndict que nos
permite crear el diccionario d onde la primera columna de listas
del dict son los valores de los smbolos y la segunda columna
corresponde a las palabras c odigo de cada smbolo. La funci on
del huffmandict genera un c odigo diccionario Huffman que
corresponde a una fuente con un modelo de probabilidad
conocido. Las entradas requeridas son los smbolos, que
corresponde a los distintos valores se nalados que el mensaje
produce. Y tenemos tambien la funci on huffmanenco, la
que nos permite codicar el mensaje con el diccionario
anteriormente obtenido , y la funci on huffmandeco la que
nos permite decodicar el mensaje para asi comprobar con el
mesanje asignado en un principio.
E. C odigo en la herramienta MATLAB
%PRACTICA HUFFMAN CODE
clc
clear all
% LEER ARCHIVO
k=1;
d = fopen(Mensaje.txt); % abrir el archivo
cadena = fscanf(d,%c); % archivo guardado matriz cadena
fprintf(MENSAJE A CODIFICAR);
fprintf(salto de linea);
cadena %presenta el mensaje a codicar
mensaje=double(cadena) %Presenta el mensaje en codigo
ASCII
for i=32:255 %225 caracteres ASCII
datos=char(i); %char convierte el numero ASCCI a caracter
total=length(strnd(cadena,datos)); % formando una matriz
con la posicion donde
% fue encontrado, leghth calcula el tama no de la matriz
x=length(cadena);
probabilidad=total/length(cadena); % probablidad
if(total = 0) % s el total a sido diferente de cero (X,1)
L(k) = datos; % Almacena el mensaje
n=length(L);
V(k) = total; % Almacena las veces que se repite la letra en
el texto
P(k) = probabilidad; % Almacena las probabilidades de cada
letra
X(k) = cellstr(datos);
%fprintf (%c

, datos)
% fprintf (%f ,probabilidad)
fprintf(Caracter: %c aparece :

%d veces ,datos,total);
%fprintf(con probabilidad

%f ,probabilidad);
k=k+1;
end
end
fprintf(Tama no del texto de: %d carac-
teres,length(cadena));%tama no total del txt
fprintf(salto de linea); % ORDENAR DE MAYOR A
MENOR DEPENDIENDO SU PROBABILIDAD
b=P;
c=L;
fprintf (Simbolos de la fuente)
simbolos = double(c)
fprintf(

FUENTE ORDENADA);
fprintf(salto de linea);
for i=1:n
for j=1:n-i
if b(j) < b(j+1)
aux=b(j);
b(j)=b(j+1);
b(j+1)=aux;
aux=c(j);
c(j)=c(j+1);
c(j+1)=aux;
end
end
end
for i=1:n
fprintf (%c

, c(i))
fprintf (%f , b(i))
i=i+1;
end
bi=iplr(b);
nh=n ;
for i=1:nh-1
ph=bi(i)+bi(i+1);
end
matriz=[];
for i=1:n
matriz =[matriz, b(i)];
i=i+1;
end
while (length(matriz)2);
suma = matriz(length(matriz)) + matriz(length(matriz) - 1) ;
matriz( length(matriz) - 1 ) = suma;
matriz( length(matriz) ) = [];
matriz=sort(matriz, descend)
end
fprintf(DICCIONARIO)
dict = huffmandict(simbolos,b) %Asigna el diccionario
fprintf(MENSAJE CODIFICADO)
hcode =huffmanenco (mensaje,dict) %Codica el mensaje
dhsig = huffmandeco(hcode,dict) %Decodica el mensaje
fprintf(MENSAJE DECODIFICADO)
mensajedeco = char(dhsig)
tamano1=(length(cadena))*8
tamano2=length(hcode)
fprintf(Tama no del archivo original: %d bits ,tamano1)
fprintf(Tama no del archivo comprimido: %d bits,tamano2)
F. C odigo de comparaci on en la herramienta MATLAB
%CODIGO RLE
clc;
clear;
st = AABCDEABCDFGHTREFTFFDVD
codigo = ;
while length(st)
codigo = [codigo st(1)];
st = st(2:end);
count = 1;
while st & (codigo(end) == st(1))
st = st(2:end);
count = count + 1; end
codigo = [codigo num2str(count)];
end
Ncod=length(codigo)
Nor=length(st)
Tcrun=(Ncod/Nor)*100;
codigo
V. VALIDACI

ON
Para la validaci on se procedio a comprimir un determinado
texto para luego comprobar el tama no en bits del mensaje
original con el mensaje codicado en Huffman y a su ves con
el c odigo RLE y de esta manera determinar que codicaci on
sera la mas adecuada y la mas eciente.
La relaci on de compresion se dene por el cociente entre
el tama no original del archivo que queremos comprimir y el
tama no del archivo comprimido.
RC =
To
Tc
(1)
El texto a comprimir tiene un tama no de 3416 bits. El
texto comprimido con Huffman tiene un tama no de 1975 bits.
El texto comprimido con RLE tiene un tama no de 6784 bits.
HUFFMAN
RC =
3416
1975
(2)
RC = 1.73 : 1
RLE
RC =
3416
6784
(3)
RC = 0.503 : 1
Podemos observar que la t ecnica de codicaci on Huffman
tiene una relaci on de compresi on mayor a la codicaci on
RLE, demas de esto comparando el tama no de cada t ecnica
de codicaci on, se puede observar claramente que la t ecnica
Huffman es la mas eciente. As mismo obtenemos el factor
de compresi on del c odigo Huffman.
FC =
1
RC 100%
(4)
FC =
1
1.73 100%
FC = 59%
VI. CONCLUSIONES
1) Se pudo observar y entender mas a fondo el proced-
imiento de la codicaci on Huffman.
2) Se logr o crear un algoritmo pr opio basado en la codi-
caci on Huffman con la ayuda de la herramienta matlab.
3) Se realiz o multiples pruebas de funcionamiento del codec
para vericar su validad.
4) Se valido el codec Huffman comparando el tama no de
los archivos tanto el original como el comprimido.
5) Se valido el codec Huffman comparandolo con el c odigo
RLE
6) La compresi o Huffman en matlab es sumamente compleja
por lo que ayudarse en las funciones propias de matlab
facilito mucho la tarea.
7) Al decodicar tanto utilizando Huffman como RLE se
pudo obtener el mensaje original sin error alguno, por lo
que se comprob o tambien la codicaci on sin p erdidas.
VII. RECOMENDACIONES
1) En la programaci on se debe tener mucho cuidado en la
asignaci on del codigo Huffman ya que se es propenso a
cometer errores en esta etapa.
2) Tener clara la idea sobre la codicaci on Huffman de esta
manera sabemos hacia donde deseamos llegar con nuestro
algoritmo.
3) Tener cuidado en el momento que se asigna la probabil-
idad a cada caracter.
4) Si es posible utilizar las funciones propias de matlab,
utilizarlas facilitan en mucho el trabajo.
VIII. REFERENCIAS
1) CODIFICACI

ON Codicaci on Huffman
con Matlab, Disponible en linea en:
[http://www.buenastareas.com/ensayos/Simulaci%C3%B3n-
En-Matlab-De-Codicacion-De/3052631.html],
consultado el [10-11-2013]
2) MATLAB CENTRAL Ascii to binary, Disponible en:
[http://www.mathworks.com/matlabcentral/answers/7245],consultado
el [10-11-2013].
3) KIOSKEA La compresi

On de datos, Disponible
en:[http://es.kioskea.net/contents/714-la-compresion-de-
datos], consultado el [10-11-2013].
4) KIOSKEA La compresi

On RLE, Disponible en
[http://es.kioskea.net/contents/713-la-compresion-rle],
consultado el [11-11-2013]
5) SLIDESAHRE, C odigos de Huffman Disponible en
[http://www.slideshare.net/gugaslide/codigo-de-huffman-
presentation], consultado el [11-11-2013]

Das könnte Ihnen auch gefallen