SlideShare una empresa de Scribd logo
2
Lo más leído
3
Lo más leído
4
Lo más leído
´
˜
DISENO Y PROGRAMACION DE UN CODEC
HUFFMAN
Cristian Aguirre Esparza
cbaguirre@utpl.edu.ec
Edwin Castillo
eacastillo4@utpl.edu.ec

Abstract—A medida que la necesidad de los usuarios de enviar
y recibir informaci´ n cada ves es mas extensa, surgio la necesidad
o
de comprimir dicha informaci´ n de tal manera que esta sea
o
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 disenar y programar un c´ digo HUFFMAN ya sea
o
para audio, video o texto, y utilizando otro c´ digo sin perdidas
o
comprobar el funcionamiento del c´ digo HUFFMAN. En nuestro
o
caso hemos elejido texto, ya que consideramos que de los tres
campos, con texto se nos facilitaria ver y entender la operaci´ n y
o
el funcionamiento del c´ digo, que es el objetivo de esta pr´ ctica.
o
a
Keywords—Comprensi´ n, matlab, texto, huffman, RLZ.
o

´
I. INTRODUCCION

E

N ciencias de la computaci´ n y teor´a de la informaci´ n,
o
ı
o
la codificaci´ n Huffman es un algoritmo usado para
o
compresi´ n de datos. El t´ rmino se refiere al uso de una tabla
o
e
de c´ digos de longitud variable para codificar un determinado
o
s´mbolo (como puede ser un caracter en un archivo), donde la
ı
tabla ha sido rellenada de una manera espec´fica bas´ ndose en
ı
a
la probabilidad estimada de aparici´ n de cada posible valor
o
de dicho s´mbolo. 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´ n
o
de cada s´mbolo, y su eficiencia depende de lo pr´ ximas
ı
o
a las frecuencias reales que sean las estimadas. Algunas
implementaciones del algoritmo de Huffman son adaptativas,
actualizando las frecuencias de cada s´mbolo conforme
ı
recorre el texto. [1]

II. OBJETIVOS
1)
2)
3)
4)

Dise˜ ar un codec Huffman en base a la teor´a revisada.
n
ı
Programar el codec Huffman.
Realizar pruebas de funcionamiento del codec.
Validar el codec Huffman (comparar con otro codec de
compresi´ n con/sin p´ rdidas).
o
e

´
III. MARCO TEORICO
´
A. COMPRESION DE DATOS (TEXTO)
La compresi´ n es un caso particular de la codificaci´ n,
o
o
cuya caracter´stica principal es que el c´ digo resultante tiene
ı
o
menor tama˜ o que el original. En otras palabras la compresi´ n
n
o
de datos es la reducci´ n del volumen de datos tratables
o
para representar una determinada informaci´ n empleando una
o
menor cantidad de espacio. La compresi´ n se basa fundao
mentalmente en buscar repeticiones en series de datos para
despu´ s almacenar solo el dato junto al n´ mero de veces que se
e
u
repite. As´, por ejemplo, si en un fichero aparece una secuencia
ı
como “AAAAAA”, ocupando 6 bytes se podr´a almacenar
ı
simplemente ”6A” que ocupa solo 2 bytes.
En realidad, el proceso es mucho m´ s complejo, ya que
a
raramente se consigue encontrar patrones de repetici´ n tan
o
exactos (salvo en algunas im´ genes). Se utilizan algoritmos
a
de compresi´ n.
o
Por un lado, algunos buscan series largas que luego codifican en formas m´ s breves, por otro lado, algunos algoritmos,
a
como el algoritmo de Huffman que es el que se utilizara
en esta pr´ ctica, examinan los caracteres m´ s repetidos para
a
a
luego codificar de forma m´ s corta los que m´ s se repiten.
a
a
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´ n RLE o Run-length
o
encoding es una forma muy simple de compresi´ n de datos en
o
la que secuencias de datos con el mismo valor consecutivas
son almacenadas como un unico valor m´ s su recuento.
´
a
´
´
B. TECNICA DE CODIFICACION HUFFMAN
La codificaci´ n Huffman usa un m´ todo espec´fico para
o
e
ı
elegir la representaci´ n de cada s´mbolo, que da lugar a un
o
ı
c´ digo prefijo (es decir, la cadena de bits que representa a
o
un s´mbolo en particular nunca es prefijo de la cadena de
ı
bits de un s´mbolo distinto) que representa los caracteres m´ s
ı
a
comunes usando las cadenas de bits m´ s cortas, y viceversa.
a
Huffman fue capaz de dise˜ ar el m´ todo de compresi´ n m´ s
n
e
o
a
eficiente de este tipo: ninguna representaci´ n alternativa de
o
un conjunto de s´mbolos de entrada produce una salida media
ı
m´ s peque˜ a cuando las frecuencias de los s´mbolos coinciden
a
n
ı
con las usadas para crear el c´ digo. Posteriormente se encontr´
o
o
un m´ todo para llevar esto a cabo en un tiempo lineal si las
e
probabilidades de los s´mbolos de entrada (tambi´ n conocidas
ı
e
como “pesos”) est´ n ordenadas. El codificador Huffman crea
a
una estructura arb´ rea ordenada con todos los s´mbolos y
o
ı
la frecuencia con que aparecen. Las ramas se construyen
en forma recursiva comenzando con los s´mbolos menos
ı
frecuentes.
Para un grupo de s´mbolos con una distribuci´ n de probaı
o
bilidad uniforme y un n´ mero de miembros que es potencia de
u
dos, la codificaci´ n Huffman es equivalente a una codificaci´ n
o
o
en bloque binaria, por ejemplo, la codificaci´ n ASCII. La
o
codificaci´ n Huffman es un m´ todo para crear c´ digos prefijo
o
e
o
tan extendido que el t´ rmino “codificaci´ n Huffman” es ame
o
pliamente usado como sin´ nimo de “c´ digo prefijo”, incluso
o
o
cuando dicho c´ digo no se ha producido con el algoritmo de
o
Huffman.
Aunque la codificaci´ n de Huffman es optima para una
o
´
codificaci´ n s´mbolo a s´mbolo dada una distribuci´ n de
o ı
ı
o
probabilidad, su optimalidad a veces puede verse accidentalmente exagerada. Por ejemplo, la codificaci´ n aritm´ tica y la
o
e
codificaci´ n LZW normalmente ofrecen mayor capacidad de
o
compresi´ n. Estos dos m´ todos pueden agrupar un n´ mero
o
e
u
arbitrario de s´mbolos para una codificaci´ n m´ s eficiente, y
ı
o
a
en general se adaptan a las estad´sticas de entrada reales. Este
ı
ultimo es util cuando las probabilidades no se conocen de
´
´
forma precisa o var´an significativamente dentro del flujo de
ı
datos.
´
´
C. TECNICA DE CODIFICACION RLE
La compresi´ n RLE o Run-length encoding es una forma
o
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´ s su recuento. Esto es m´ s util en datos que
´
a
a ´
contienen muchas de estas “secuencias”; por ejemplo, gr´ ficos
a
sencillos con areas de color plano, como iconos y logotipos.
´
Por ejemplo, considera una pantalla que contiene texto en
negro sobre un fondo blanco. Habr´a muchas secuencias de
ı
este tipo con p´xeles blancos en los m´ rgenes vac´os, y otras
ı
a
ı
secuencias de p´xeles negros en la zona del texto. Supongamos
ı
una ´nica l´nea (o scanline), con N representando las zonas en
ı
ı
negro y B las de blanco:
“BBBBBBBBBBBBNBBBBBBBBBBBBNNNBBBB
BBBBBBBBBBBBBBBBBBBBNBBBBBBBBBBBBBB”
Si aplicamos la codificaci´ n run-length a esta l´nea, obo
ı
tendr´amos lo siguiente:
ı
“12B1N12B3N24B1N14B”
Interpretado esto como 12 letras B, 1 letra N , 12 letras B,
3 letras N, etc. El c´ digo run-length representa el original de
o
67 caracteres en tan s´ lo 16. Esto quiere decir que la l´nea
o
ı
original pesa 67 bytes y la cadena codificada pesa s´ lo 16
o
bytes.

´
˜
IV. DISENO Y PROGRAMACION DEL CODEC
HUFFMAN
Procedemos a realizar la compresi´ n, codificaci´ n y deo
o
codificaci´ n de un archivo de texto, que fue previamente
o
almacenado en la carpeta del programa para evitar errores.
La realizaci´ n del c´ digo se lo lleva a cabo en el software
o
o
Matlab, en donde programamos la compresi´ n y codificaci´ n
o
o
en un scrip, con el fin de generar un resultado expl´cito del
ı
comportamiento del sistema.
A. Etapa de almacenamiento
Primeramente el mensaje a codificar se lo almacena en
un .txt con nombre mensaje.txt de manera que el usuario
unicamente debera ingresar en este su mensaje a codificar y
el programa accede a este txt para su codificaci´ n.
o
B. Etapa de asignaci´ n
o
El programa luego de ingresar al archivo txt procede a
“asignar” a cada letra su respectivo c´ digo “ASCII” y lo
o
almacena en un string de tal manera que se nos facilite trabajar
con n´ meros que representara cada letra.
u
C. Etapa de verificaci´ n
o
En esta etapa lo que realizamos es la comprobaci´ n de
o
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´ n
o
Hay dos funciones importantes que se encuentran incluidas
en Matlab, hablamos de la funci´ n ¡huffmamndict¿ que nos
o
permite crear el diccionario d´ nde la primera columna de listas
o
del dict son los valores de los s´mbolos y la segunda columna
ı
corresponde a las palabras c´ digo de cada s´mbolo. La funci´ n
o
ı
o
del huffmandict genera un c´ digo diccionario Huffman que
o
corresponde a una fuente con un modelo de probabilidad
conocido. Las entradas requeridas son los s´mbolos, que
ı
corresponde a los distintos valores se˜ alados que el mensaje
n
produce. Y tenemos tambien la funci´ n ¡huffmanenco¿, la
o
que nos permite codificar el mensaje con el diccionario
anteriormente obtenido , y la funci´ n ¡huffmandeco¿ la que
o
nos permite decodificar el mensaje para asi comprobar con el
mesanje asignado en un principio.
E. C´ digo en la herramienta MATLAB
o
%PRACTICA HUFFMAN CODE
clc
clear all
% LEER ARCHIVO
k=1;
fid = fopen(“Mensaje.txt”); % abrir el archivo
cadena = fscanf(fid,“%c”); % archivo guardado matriz cadena

cadena %presenta el mensaje a codificar
mensaje=double(cadena) %Presenta el mensaje en codigo
ASCII

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=32:255 %225 caracteres ASCII
datos=char(i); %char convierte el numero ASCCI a caracter
total=length(strfind(cadena,datos)); % formando una matriz
con la posicion donde
% fue encontrado, leghth calcula el tama˜ o de la matriz
n

for i=1:n
fprintf (’%c ⁀ c(i))
’,
fprintf (’%f , b(i))
i=i+1;
end

x=length(cadena);
probabilidad=total/length(cadena); % probablidad
if(total = 0) % s´ el total a sido diferente de cero (X,1)
ı

bi=fliplr(b);
nh=n ;
for i=1:nh-1
ph=bi(i)+bi(i+1);
end

fprintf(’MENSAJE A CODIFICAR”);
fprintf(’salto de linea’);

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);
⁀ ”,probabilidad);
%fprintf(“con probabilidad%f
k=k+1;
end
end
fprintf(“Tama˜ o
n
del
texto
de:
%d
caracteres”,length(cadena));%tama˜ o total del txt
n
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)

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) %Codifica el mensaje
dhsig = huffmandeco(hcode,dict) %Decodifica el mensaje
fprintf(“MENSAJE DECODIFICADO”)
mensajedeco = char(dhsig)
tamano1=(length(cadena))*8
tamano2=length(hcode)
fprintf(“Tama˜ o del archivo original: %d bits” ,tamano1)
n
fprintf(“Tama˜ o del archivo comprimido: %d bits”,tamano2)
n

F. C´ digo de comparaci´ n en la herramienta MATLAB
o
o
%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

VI. CONCLUSIONES
1) Se pudo observar y entender mas a fondo el procedimiento de la codificaci´ n Huffman.
o
2) Se logr´ crear un algoritmo pr´ pio basado en la codifio
o
caci´ n Huffman con la ayuda de la herramienta matlab.
o
3) Se realiz´ multiples pruebas de funcionamiento del codec
o
para verificar su validad.
4) Se valido el codec Huffman comparando el tama˜ o de
n
los archivos tanto el original como el comprimido.
5) Se valido el codec Huffman comparandolo con el c´ digo
o
RLE
6) La compresi´ Huffman en matlab es sumamente compleja
o
por lo que ayudarse en las funciones propias de matlab
facilito mucho la tarea.
7) Al decodificar tanto utilizando Huffman como RLE se
pudo obtener el mensaje original sin error alguno, por lo
que se comprob´ tambien la codificaci´ n sin p´ rdidas.
o
o
e

´
V. VALIDACION
Para la validaci´ n se procedio a comprimir un determinado
o
texto para luego comprobar el tama˜ o en bits del mensaje
n
original con el mensaje codificado en Huffman y a su ves con
el c´ digo RLE y de esta manera determinar que codificaci´ n
o
o
ser´a la mas adecuada y la mas eficiente.
ı
La relaci´ n de compresion se define por el cociente entre
o
el tama˜ o original del archivo que queremos comprimir y el
n
tama˜ o del archivo comprimido.
n
RC =

To
Tc

(1)

El texto a comprimir tiene un tama˜ o de 3416 bits. El
n
texto comprimido con Huffman tiene un tama˜ o de 1975 bits.
n
El texto comprimido con RLE tiene un tama˜ o de 6784 bits.
n
HUFFMAN

3416
1975
RC = 1.73 : 1
RC =

RLE
RC =

3416
6784

VII. RECOMENDACIONES
1) En la programaci´ n se debe tener mucho cuidado en la
o
asignaci´ n del codigo Huffman ya que se es propenso a
o
cometer errores en esta etapa.
2) Tener clara la idea sobre la codificaci´ n Huffman de esta
o
manera sabemos hacia donde deseamos llegar con nuestro
algoritmo.
3) Tener cuidado en el momento que se asigna la probabilidad a cada caracter.
4) Si es posible utilizar las funciones propias de matlab,
utilizarlas facilitan en mucho el trabajo.

1)

(2)
2)
(3)
3)

RC = 0.503 : 1
4)
Podemos observar que la t´ cnica de codificaci´ n Huffman
e
o
tiene una relaci´ n de compresi´ n mayor a la codificaci´ n
o
o
o
RLE, demas de esto comparando el tama˜ o de cada t´ cnica
n
e
de codificaci´ n, se puede observar claramente que la t´ cnica
o
e
Huffman es la mas eficiente. As´ mismo obtenemos el factor
ı
de compresi´ n del c´ digo Huffman.
o
o
1
RC ∗ 100%
1
FC =
1.73 ∗ 100%
F C = 59%
FC =

(4)

5)

VIII. REFERENCIAS
´
CODIFICACION
“Codificaci´ n
o
Huffman
con
Matlab”,
Disponible
en
linea
en:
[http://www.buenastareas.com/ensayos/Simulaci%C3%B3nEn-Matlab-De-Codificacion-De/3052631.html],
consultado el [10-11-2013]
MATLAB CENTRAL “Ascii to binary”, Disponible en:
[http://www.mathworks.com/matlabcentral/answers/7245],consultado
el [10-11-2013].
´
KIOSKEA “La compresiOn de datos”, Disponible
en:[http://es.kioskea.net/contents/714-la-compresion-dedatos], consultado el [10-11-2013].
´
KIOSKEA “La compresiOn RLE”, Disponible en
[http://es.kioskea.net/contents/713-la-compresion-rle],
consultado el [11-11-2013]
SLIDESAHRE, “C´ digos de Huffman” Disponible en
o
[http://www.slideshare.net/gugaslide/codigo-de-huffmanpresentation], consultado el [11-11-2013]

Más contenido relacionado

PDF
Informe laboratorio n°1
PDF
Problemariodigital3 bcd
PDF
Variables y tipos de datos - fundamentos de la programación
PPTX
Componentes electrónicos-análogos-y-digitales
PDF
Redes II Practica 5 OSPF
PDF
Algoritmos de Raster karen quiroga
PDF
Diagrama de bloque
DOC
Informe matlab
Informe laboratorio n°1
Problemariodigital3 bcd
Variables y tipos de datos - fundamentos de la programación
Componentes electrónicos-análogos-y-digitales
Redes II Practica 5 OSPF
Algoritmos de Raster karen quiroga
Diagrama de bloque
Informe matlab

La actualidad más candente (20)

PDF
Algoritmo codificador de huffman matlab
PDF
Investigación Técnicas de detección de errores de transmisión
PPT
Espectro Ensanchado - Telecomunicaciones III
PPTX
Modo de transferencia asíncrona (atm)
PPT
SISTEMAS LTI
PPT
Codificación Convolucional, Decodificador de Viterbi y Turbo Código
PPTX
4.TDM Multiplexacion por division de tiempo
PPT
Capacidad de un canal
PPTX
Fundamentos de Telecomunicaciones - Unidad 4: Técnicas de Conmutación
PPTX
Estandar de red
PDF
Filtros activos en general
PPTX
Teorema de muestreo
PPTX
2.Datos y señales en comunicaciones electrónicas
PPTX
Control de Flujo [Telecomunicaciones]
PPTX
TEORÍA DE LA INFORMACIÓN Y CODIFICACIÓN FUENTE
PPTX
Modulación qam
DOC
Fundamentos de Antenas
PDF
8 2 convertidor-analogico_-digital
PPTX
PPTX
Capas del modelo OSI y Protocolos que intervienen en cada capa
Algoritmo codificador de huffman matlab
Investigación Técnicas de detección de errores de transmisión
Espectro Ensanchado - Telecomunicaciones III
Modo de transferencia asíncrona (atm)
SISTEMAS LTI
Codificación Convolucional, Decodificador de Viterbi y Turbo Código
4.TDM Multiplexacion por division de tiempo
Capacidad de un canal
Fundamentos de Telecomunicaciones - Unidad 4: Técnicas de Conmutación
Estandar de red
Filtros activos en general
Teorema de muestreo
2.Datos y señales en comunicaciones electrónicas
Control de Flujo [Telecomunicaciones]
TEORÍA DE LA INFORMACIÓN Y CODIFICACIÓN FUENTE
Modulación qam
Fundamentos de Antenas
8 2 convertidor-analogico_-digital
Capas del modelo OSI y Protocolos que intervienen en cada capa
Publicidad

Destacado (13)

PPT
CODIGO DE HUFFMAN
DOCX
Algoritmos para matlab
PPSX
Inteligencia artificial y prcesamiento digital de imagenes
PPTX
Grafos 9.2 2016
PPT
Algoritimo de Huffman
PPTX
Código de Huffman
DOCX
Entropía y código de Huffman del mismo texto en diferentes idiomas.
PDF
Arbol De Huffman
PPTX
6.2 Propagacion de oonda en linea de transmision
PPTX
3.PCM Digitalizacion de señal analogica
PPTX
La formulacion de un problema en un Proyecto de Investigacion
CODIGO DE HUFFMAN
Algoritmos para matlab
Inteligencia artificial y prcesamiento digital de imagenes
Grafos 9.2 2016
Algoritimo de Huffman
Código de Huffman
Entropía y código de Huffman del mismo texto en diferentes idiomas.
Arbol De Huffman
6.2 Propagacion de oonda en linea de transmision
3.PCM Digitalizacion de señal analogica
La formulacion de un problema en un Proyecto de Investigacion
Publicidad

Similar a Codificacion HUFFMAN en matlab (20)

PDF
Presentacion Foro eulises brazon Josue Baez
PPTX
Algoritmos de compresión
PDF
Grafos 9.2 2016
PPTX
Algoritmo de compresión de huffman
PDF
Algoritmos de compresion
PPTX
TPerterterteertertrerterter terterterterterterN°7 - AB.pptx
PPTX
Grafos 9.2_2016
DOCX
Codigo huffman (yango colmenares)
PPTX
CODIGO HUFFMAN-1.pptx
DOCX
Algoritmos compresión Cubi-Romero-Toledo
PPT
Lecture 3 codificación fuente
PPTX
Compresion graficos
PPTX
Compresion de archivos
PPTX
Teoría de códigos saira isaac
PPTX
COMPRESION DE DATOS.pptx
PPTX
Huffman
PDF
Codificación de Huffman
PPT
Codigos De Huffman
PDF
Codificación de huffman
PDF
Codigos..
Presentacion Foro eulises brazon Josue Baez
Algoritmos de compresión
Grafos 9.2 2016
Algoritmo de compresión de huffman
Algoritmos de compresion
TPerterterteertertrerterter terterterterterterN°7 - AB.pptx
Grafos 9.2_2016
Codigo huffman (yango colmenares)
CODIGO HUFFMAN-1.pptx
Algoritmos compresión Cubi-Romero-Toledo
Lecture 3 codificación fuente
Compresion graficos
Compresion de archivos
Teoría de códigos saira isaac
COMPRESION DE DATOS.pptx
Huffman
Codificación de Huffman
Codigos De Huffman
Codificación de huffman
Codigos..

Más de Cristian Aguirre Esparza (20)

PDF
PDF
Funciones de Convolución
DOCX
Amplificador con transistor BJT (Microondas)
PDF
Unidad de Control
PDF
Hpcs conf poster
DOCX
FILTRO IRR MATLAB
DOCX
Que afecta a una comunicacion en hf
DOCX
AMPLIFICADOR DE AUDIO
DOCX
INVESTIGACIÓN CIELO DE LOJA
DOCX
Entorno Natural Del Cantón Loja
DOC
Generación de Computadores
DOC
Funciones del Procesador
PDF
Arquitectura RISC-CISC
PDF
Acceso Directo de Memoria
DOCX
Loja pionera de la generacion electrica
DOCX
Motor electrico
PPTX
Lcc cristian_aguirre_esparza
DOCX
Cristian aguirre
Funciones de Convolución
Amplificador con transistor BJT (Microondas)
Unidad de Control
Hpcs conf poster
FILTRO IRR MATLAB
Que afecta a una comunicacion en hf
AMPLIFICADOR DE AUDIO
INVESTIGACIÓN CIELO DE LOJA
Entorno Natural Del Cantón Loja
Generación de Computadores
Funciones del Procesador
Arquitectura RISC-CISC
Acceso Directo de Memoria
Loja pionera de la generacion electrica
Motor electrico
Lcc cristian_aguirre_esparza
Cristian aguirre

Último (20)

DOCX
TRABAJO GRUPAL (5) (1).docxjesjssjsjjskss
PPT
Protocolos de seguridad y mecanismos encriptación
PDF
capacitación de aire acondicionado Bgh r 410
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
DOCX
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
PPTX
Propuesta BKP servidores con Acronis1.pptx
PDF
Diapositiva proyecto de vida, materia catedra
PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
DOCX
Guía 5. Test de orientación Vocacional 2.docx
PDF
TRABAJO DE TECNOLOGIA.pdf...........................
PPTX
Curso de generación de energía mediante sistemas solares
DOCX
Trabajo grupal.docxjsjsjsksjsjsskksjsjsjsj
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PDF
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PDF
CyberOps Associate - Cisco Networking Academy
PPTX
Power Point Nicolás Carrasco (disertación Roblox).pptx
PPTX
Diapositivas Borrador Rocha Jauregui David Paolo (3).pptx
PPTX
CLAASIFICACIÓN DE LOS ROBOTS POR UTILIDAD
PDF
informe_fichas1y2_corregido.docx (2) (1).pdf
TRABAJO GRUPAL (5) (1).docxjesjssjsjjskss
Protocolos de seguridad y mecanismos encriptación
capacitación de aire acondicionado Bgh r 410
historia_web de la creacion de un navegador_presentacion.pptx
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
Propuesta BKP servidores con Acronis1.pptx
Diapositiva proyecto de vida, materia catedra
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
Guía 5. Test de orientación Vocacional 2.docx
TRABAJO DE TECNOLOGIA.pdf...........................
Curso de generación de energía mediante sistemas solares
Trabajo grupal.docxjsjsjsksjsjsskksjsjsjsj
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
CyberOps Associate - Cisco Networking Academy
Power Point Nicolás Carrasco (disertación Roblox).pptx
Diapositivas Borrador Rocha Jauregui David Paolo (3).pptx
CLAASIFICACIÓN DE LOS ROBOTS POR UTILIDAD
informe_fichas1y2_corregido.docx (2) (1).pdf

Codificacion HUFFMAN en matlab

  • 1. ´ ˜ DISENO Y PROGRAMACION DE UN CODEC HUFFMAN Cristian Aguirre Esparza cbaguirre@utpl.edu.ec Edwin Castillo eacastillo4@utpl.edu.ec Abstract—A medida que la necesidad de los usuarios de enviar y recibir informaci´ n cada ves es mas extensa, surgio la necesidad o de comprimir dicha informaci´ n de tal manera que esta sea o 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 disenar y programar un c´ digo HUFFMAN ya sea o para audio, video o texto, y utilizando otro c´ digo sin perdidas o comprobar el funcionamiento del c´ digo HUFFMAN. En nuestro o caso hemos elejido texto, ya que consideramos que de los tres campos, con texto se nos facilitaria ver y entender la operaci´ n y o el funcionamiento del c´ digo, que es el objetivo de esta pr´ ctica. o a Keywords—Comprensi´ n, matlab, texto, huffman, RLZ. o ´ I. INTRODUCCION E N ciencias de la computaci´ n y teor´a de la informaci´ n, o ı o la codificaci´ n Huffman es un algoritmo usado para o compresi´ n de datos. El t´ rmino se refiere al uso de una tabla o e de c´ digos de longitud variable para codificar un determinado o s´mbolo (como puede ser un caracter en un archivo), donde la ı tabla ha sido rellenada de una manera espec´fica bas´ ndose en ı a la probabilidad estimada de aparici´ n de cada posible valor o de dicho s´mbolo. 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´ n o de cada s´mbolo, y su eficiencia depende de lo pr´ ximas ı o a las frecuencias reales que sean las estimadas. Algunas implementaciones del algoritmo de Huffman son adaptativas, actualizando las frecuencias de cada s´mbolo conforme ı recorre el texto. [1] II. OBJETIVOS 1) 2) 3) 4) Dise˜ ar un codec Huffman en base a la teor´a revisada. n ı Programar el codec Huffman. Realizar pruebas de funcionamiento del codec. Validar el codec Huffman (comparar con otro codec de compresi´ n con/sin p´ rdidas). o e ´ III. MARCO TEORICO ´ A. COMPRESION DE DATOS (TEXTO) La compresi´ n es un caso particular de la codificaci´ n, o o cuya caracter´stica principal es que el c´ digo resultante tiene ı o menor tama˜ o que el original. En otras palabras la compresi´ n n o de datos es la reducci´ n del volumen de datos tratables o para representar una determinada informaci´ n empleando una o menor cantidad de espacio. La compresi´ n se basa fundao mentalmente en buscar repeticiones en series de datos para despu´ s almacenar solo el dato junto al n´ mero de veces que se e u repite. As´, por ejemplo, si en un fichero aparece una secuencia ı como “AAAAAA”, ocupando 6 bytes se podr´a almacenar ı simplemente ”6A” que ocupa solo 2 bytes. En realidad, el proceso es mucho m´ s complejo, ya que a raramente se consigue encontrar patrones de repetici´ n tan o exactos (salvo en algunas im´ genes). Se utilizan algoritmos a de compresi´ n. o Por un lado, algunos buscan series largas que luego codifican en formas m´ s breves, por otro lado, algunos algoritmos, a como el algoritmo de Huffman que es el que se utilizara en esta pr´ ctica, examinan los caracteres m´ s repetidos para a a luego codificar de forma m´ s corta los que m´ s se repiten. a a 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´ n RLE o Run-length o encoding es una forma muy simple de compresi´ n de datos en o la que secuencias de datos con el mismo valor consecutivas son almacenadas como un unico valor m´ s su recuento. ´ a ´ ´ B. TECNICA DE CODIFICACION HUFFMAN La codificaci´ n Huffman usa un m´ todo espec´fico para o e ı elegir la representaci´ n de cada s´mbolo, que da lugar a un o ı c´ digo prefijo (es decir, la cadena de bits que representa a o un s´mbolo en particular nunca es prefijo de la cadena de ı bits de un s´mbolo distinto) que representa los caracteres m´ s ı a comunes usando las cadenas de bits m´ s cortas, y viceversa. a Huffman fue capaz de dise˜ ar el m´ todo de compresi´ n m´ s n e o a eficiente de este tipo: ninguna representaci´ n alternativa de o un conjunto de s´mbolos de entrada produce una salida media ı m´ s peque˜ a cuando las frecuencias de los s´mbolos coinciden a n ı
  • 2. con las usadas para crear el c´ digo. Posteriormente se encontr´ o o un m´ todo para llevar esto a cabo en un tiempo lineal si las e probabilidades de los s´mbolos de entrada (tambi´ n conocidas ı e como “pesos”) est´ n ordenadas. El codificador Huffman crea a una estructura arb´ rea ordenada con todos los s´mbolos y o ı la frecuencia con que aparecen. Las ramas se construyen en forma recursiva comenzando con los s´mbolos menos ı frecuentes. Para un grupo de s´mbolos con una distribuci´ n de probaı o bilidad uniforme y un n´ mero de miembros que es potencia de u dos, la codificaci´ n Huffman es equivalente a una codificaci´ n o o en bloque binaria, por ejemplo, la codificaci´ n ASCII. La o codificaci´ n Huffman es un m´ todo para crear c´ digos prefijo o e o tan extendido que el t´ rmino “codificaci´ n Huffman” es ame o pliamente usado como sin´ nimo de “c´ digo prefijo”, incluso o o cuando dicho c´ digo no se ha producido con el algoritmo de o Huffman. Aunque la codificaci´ n de Huffman es optima para una o ´ codificaci´ n s´mbolo a s´mbolo dada una distribuci´ n de o ı ı o probabilidad, su optimalidad a veces puede verse accidentalmente exagerada. Por ejemplo, la codificaci´ n aritm´ tica y la o e codificaci´ n LZW normalmente ofrecen mayor capacidad de o compresi´ n. Estos dos m´ todos pueden agrupar un n´ mero o e u arbitrario de s´mbolos para una codificaci´ n m´ s eficiente, y ı o a en general se adaptan a las estad´sticas de entrada reales. Este ı ultimo es util cuando las probabilidades no se conocen de ´ ´ forma precisa o var´an significativamente dentro del flujo de ı datos. ´ ´ C. TECNICA DE CODIFICACION RLE La compresi´ n RLE o Run-length encoding es una forma o 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´ s su recuento. Esto es m´ s util en datos que ´ a a ´ contienen muchas de estas “secuencias”; por ejemplo, gr´ ficos a sencillos con areas de color plano, como iconos y logotipos. ´ Por ejemplo, considera una pantalla que contiene texto en negro sobre un fondo blanco. Habr´a muchas secuencias de ı este tipo con p´xeles blancos en los m´ rgenes vac´os, y otras ı a ı secuencias de p´xeles negros en la zona del texto. Supongamos ı una ´nica l´nea (o scanline), con N representando las zonas en ı ı negro y B las de blanco: “BBBBBBBBBBBBNBBBBBBBBBBBBNNNBBBB BBBBBBBBBBBBBBBBBBBBNBBBBBBBBBBBBBB” Si aplicamos la codificaci´ n run-length a esta l´nea, obo ı tendr´amos lo siguiente: ı “12B1N12B3N24B1N14B” Interpretado esto como 12 letras B, 1 letra N , 12 letras B, 3 letras N, etc. El c´ digo run-length representa el original de o 67 caracteres en tan s´ lo 16. Esto quiere decir que la l´nea o ı original pesa 67 bytes y la cadena codificada pesa s´ lo 16 o bytes. ´ ˜ IV. DISENO Y PROGRAMACION DEL CODEC HUFFMAN Procedemos a realizar la compresi´ n, codificaci´ n y deo o codificaci´ n de un archivo de texto, que fue previamente o almacenado en la carpeta del programa para evitar errores. La realizaci´ n del c´ digo se lo lleva a cabo en el software o o Matlab, en donde programamos la compresi´ n y codificaci´ n o o en un scrip, con el fin de generar un resultado expl´cito del ı comportamiento del sistema. A. Etapa de almacenamiento Primeramente el mensaje a codificar se lo almacena en un .txt con nombre mensaje.txt de manera que el usuario unicamente debera ingresar en este su mensaje a codificar y el programa accede a este txt para su codificaci´ n. o B. Etapa de asignaci´ n o El programa luego de ingresar al archivo txt procede a “asignar” a cada letra su respectivo c´ digo “ASCII” y lo o almacena en un string de tal manera que se nos facilite trabajar con n´ meros que representara cada letra. u C. Etapa de verificaci´ n o En esta etapa lo que realizamos es la comprobaci´ n de o 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´ n o Hay dos funciones importantes que se encuentran incluidas en Matlab, hablamos de la funci´ n ¡huffmamndict¿ que nos o permite crear el diccionario d´ nde la primera columna de listas o del dict son los valores de los s´mbolos y la segunda columna ı corresponde a las palabras c´ digo de cada s´mbolo. La funci´ n o ı o del huffmandict genera un c´ digo diccionario Huffman que o corresponde a una fuente con un modelo de probabilidad conocido. Las entradas requeridas son los s´mbolos, que ı corresponde a los distintos valores se˜ alados que el mensaje n produce. Y tenemos tambien la funci´ n ¡huffmanenco¿, la o que nos permite codificar el mensaje con el diccionario anteriormente obtenido , y la funci´ n ¡huffmandeco¿ la que o nos permite decodificar el mensaje para asi comprobar con el mesanje asignado en un principio. E. C´ digo en la herramienta MATLAB o %PRACTICA HUFFMAN CODE clc clear all % LEER ARCHIVO k=1;
  • 3. fid = fopen(“Mensaje.txt”); % abrir el archivo cadena = fscanf(fid,“%c”); % archivo guardado matriz cadena cadena %presenta el mensaje a codificar mensaje=double(cadena) %Presenta el mensaje en codigo ASCII 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=32:255 %225 caracteres ASCII datos=char(i); %char convierte el numero ASCCI a caracter total=length(strfind(cadena,datos)); % formando una matriz con la posicion donde % fue encontrado, leghth calcula el tama˜ o de la matriz n for i=1:n fprintf (’%c ⁀ c(i)) ’, fprintf (’%f , b(i)) i=i+1; end x=length(cadena); probabilidad=total/length(cadena); % probablidad if(total = 0) % s´ el total a sido diferente de cero (X,1) ı bi=fliplr(b); nh=n ; for i=1:nh-1 ph=bi(i)+bi(i+1); end fprintf(’MENSAJE A CODIFICAR”); fprintf(’salto de linea’); 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); ⁀ ”,probabilidad); %fprintf(“con probabilidad%f k=k+1; end end fprintf(“Tama˜ o n del texto de: %d caracteres”,length(cadena));%tama˜ o total del txt n 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) 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) %Codifica el mensaje dhsig = huffmandeco(hcode,dict) %Decodifica el mensaje fprintf(“MENSAJE DECODIFICADO”) mensajedeco = char(dhsig) tamano1=(length(cadena))*8 tamano2=length(hcode) fprintf(“Tama˜ o del archivo original: %d bits” ,tamano1) n fprintf(“Tama˜ o del archivo comprimido: %d bits”,tamano2) n F. C´ digo de comparaci´ n en la herramienta MATLAB o o %CODIGO RLE clc; clear; st = “AABCDEABCDFGHTREFTFFDVD”
  • 4. 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 VI. CONCLUSIONES 1) Se pudo observar y entender mas a fondo el procedimiento de la codificaci´ n Huffman. o 2) Se logr´ crear un algoritmo pr´ pio basado en la codifio o caci´ n Huffman con la ayuda de la herramienta matlab. o 3) Se realiz´ multiples pruebas de funcionamiento del codec o para verificar su validad. 4) Se valido el codec Huffman comparando el tama˜ o de n los archivos tanto el original como el comprimido. 5) Se valido el codec Huffman comparandolo con el c´ digo o RLE 6) La compresi´ Huffman en matlab es sumamente compleja o por lo que ayudarse en las funciones propias de matlab facilito mucho la tarea. 7) Al decodificar tanto utilizando Huffman como RLE se pudo obtener el mensaje original sin error alguno, por lo que se comprob´ tambien la codificaci´ n sin p´ rdidas. o o e ´ V. VALIDACION Para la validaci´ n se procedio a comprimir un determinado o texto para luego comprobar el tama˜ o en bits del mensaje n original con el mensaje codificado en Huffman y a su ves con el c´ digo RLE y de esta manera determinar que codificaci´ n o o ser´a la mas adecuada y la mas eficiente. ı La relaci´ n de compresion se define por el cociente entre o el tama˜ o original del archivo que queremos comprimir y el n tama˜ o del archivo comprimido. n RC = To Tc (1) El texto a comprimir tiene un tama˜ o de 3416 bits. El n texto comprimido con Huffman tiene un tama˜ o de 1975 bits. n El texto comprimido con RLE tiene un tama˜ o de 6784 bits. n HUFFMAN 3416 1975 RC = 1.73 : 1 RC = RLE RC = 3416 6784 VII. RECOMENDACIONES 1) En la programaci´ n se debe tener mucho cuidado en la o asignaci´ n del codigo Huffman ya que se es propenso a o cometer errores en esta etapa. 2) Tener clara la idea sobre la codificaci´ n Huffman de esta o manera sabemos hacia donde deseamos llegar con nuestro algoritmo. 3) Tener cuidado en el momento que se asigna la probabilidad a cada caracter. 4) Si es posible utilizar las funciones propias de matlab, utilizarlas facilitan en mucho el trabajo. 1) (2) 2) (3) 3) RC = 0.503 : 1 4) Podemos observar que la t´ cnica de codificaci´ n Huffman e o tiene una relaci´ n de compresi´ n mayor a la codificaci´ n o o o RLE, demas de esto comparando el tama˜ o de cada t´ cnica n e de codificaci´ n, se puede observar claramente que la t´ cnica o e Huffman es la mas eficiente. As´ mismo obtenemos el factor ı de compresi´ n del c´ digo Huffman. o o 1 RC ∗ 100% 1 FC = 1.73 ∗ 100% F C = 59% FC = (4) 5) VIII. REFERENCIAS ´ CODIFICACION “Codificaci´ n o Huffman con Matlab”, Disponible en linea en: [http://www.buenastareas.com/ensayos/Simulaci%C3%B3nEn-Matlab-De-Codificacion-De/3052631.html], consultado el [10-11-2013] MATLAB CENTRAL “Ascii to binary”, Disponible en: [http://www.mathworks.com/matlabcentral/answers/7245],consultado el [10-11-2013]. ´ KIOSKEA “La compresiOn de datos”, Disponible en:[http://es.kioskea.net/contents/714-la-compresion-dedatos], consultado el [10-11-2013]. ´ KIOSKEA “La compresiOn RLE”, Disponible en [http://es.kioskea.net/contents/713-la-compresion-rle], consultado el [11-11-2013] SLIDESAHRE, “C´ digos de Huffman” Disponible en o [http://www.slideshare.net/gugaslide/codigo-de-huffmanpresentation], consultado el [11-11-2013]