0% encontró este documento útil (0 votos)
187 vistas2 páginas

Huffman Matlab

Este documento describe la implementación de un codificador Huffman en MATLAB. Explica cómo crear un árbol de Huffman a partir de las probabilidades de los símbolos de entrada y asignar códigos binarios únicos a cada símbolo usando una estructura de celdas anidadas. Luego muestra cómo calcular la tasa de compresión logrando una representación más compacta de los datos originales. El algoritmo se prueba con un ejemplo de entrada.

Cargado por

Jose AG
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
187 vistas2 páginas

Huffman Matlab

Este documento describe la implementación de un codificador Huffman en MATLAB. Explica cómo crear un árbol de Huffman a partir de las probabilidades de los símbolos de entrada y asignar códigos binarios únicos a cada símbolo usando una estructura de celdas anidadas. Luego muestra cómo calcular la tasa de compresión logrando una representación más compacta de los datos originales. El algoritmo se prueba con un ejemplo de entrada.

Cargado por

Jose AG
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 2

Codificador Huffman

hnoguera.wordpress.com

Archivo asignar_codigos.m
function y = asignar_codigos(arbol, n_simbolos)
% Autor: Herminio Noguera Ruiz.
% Asignacin de cdigos a cada smbolo.
global y
y = cell(n_simbolos, 1);
asignar_codigos2(arbol, []);

Archivo asignar_codigos2.m
% Autor: Herminio Noguera Ruiz.
function asignar_codigos2(arbol, dum)
% Autor: Herminio Noguera Ruiz.
% Funcin llamada por asignar_codigos.
% Usa recursividad para ir asignando cdigos.
global y
if isa(arbol, 'cell')
asignar_codigos2(arbol{1}, [dum 0]);
asignar_codigos2(arbol{2}, [dum 1]);
else
y{arbol} = setstr(48+dum);
end

Archivo huff.m
% Autor: Herminio Noguera Ruiz.
function arbol = huff(Pi);
%
%
%
%
%
%
%
%
%

------------------------------------------------------------------------Autor: Herminio Noguera Ruiz.


Esta funcin crea el rbol de Huffman.
Simula una estructura de rbol usando estructura de celdas anidadas.
'Pi' es el vector con las probabilidades o nmero de apariencias de los
simbolos fuente.
'arbol' es el rbol de Huffman.
-------------------------------------------------------------------------

arbol = cell(length(Pi),1);
% Genera la estructura de celdas.
for i = 1:length(Pi)
% Rellena las celdas segn el nmero
arbol{i} = i;
% de smbolos en el alfabeto.
end
while size(arbol)-2
% Se repite hasta que solo haya dos ramas.
[Pi,i] = sort(Pi);
% Ordena las probabilidades de forma ascendente.
arbol = arbol(i);
% Reordena el rbol.
arbol{2} = {arbol{1},arbol{2}};
% Une las ramas 1 y 2
arbol(1)=[];
% y reduce.
Pi(2) = Pi(1)+Pi(2);
% Une probabilidades.
Pi(1)=[];
end

Archivo huffman.m
% Autor: Herminio Noguera Ruiz.
function [codigo, compresion] = huffman (Pi);
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%

------------------------------------------------------------------------Autor: Herminio Noguera Ruiz.


CODIFICADOR HUFFMAN
------------------Entrada:
-------'Pi' es el vector de probabilidades de los smbolos (ej. Pi=[0.4 0.2 0.2 0.1 0.1])
Tambin puede introducirse Pi como vector de ocurrencias de cada smbolo (ej. Pi=[45 5 6 80 23])
Salida:
------'codigo' matriz con el cdigo para cada smbolo en formato cadena de
ceros y unos.
'compresion' variable que almacena la tasa de compresin del cdigo.
-------------------------------------------------------------------------

Pi = Pi(:)/sum(Pi); % Normaliza las probabilidades y las coloca como vector columna.


arbol = huff(Pi);
codigo = char(asignar_codigos(arbol, length(Pi)));
compresion = ceil(log(length(Pi))/log(2))/ (sum(codigo' ~= ' ')*Pi);

Archivo test.m
% Autor: Herminio Noguera Ruiz.
% Test del algoritmo codificador de Cdigo Huffman.
% ------------------------------------------------Pi = [5 7 9 15 32 99 78];
fprintf('Nmero de apariencias de smbolos fuente:\n');
fprintf('-----------------------------------------\n\n');
for i=1:length(Pi)
fprintf('\tSmbolo %d: %d\n', i, Pi(i));
end
[codigo, compresion] = huffman (Pi);
codigo
compresion

hnoguera.wordpress.com

También podría gustarte