Está en la página 1de 13

Teoría de codificación y manejo de información 2023

PRÁCTICA: CODIFICACIÓN DE FUENTES DISCRETAS


MEDIANTE EL CÓDIGO DE HUFFMAN

Integrantes:
Rojas López Miguel Ángel
Zamora Pérez Jonathan

Asignatura: Teoría de codificación y manejo de información

Grupo: 8CV1

Especialidad: Comunicaciones

Profesor: José Ernesto Rojas Lima

1 Prof. José Ernesto Rojas Lima


Teoría de codificación y manejo de información 2023

CONTENIDO

1. Objetivo
2. Equipo y material requerido
3. Introducción teórica
4. Desarrollo y resultados
4.1 Generación del diccionario de palabras código de Huffman
4.2 Proceso de codificación de una fuente de información discreta mediante el código
de Huffman
4.3 Proceso de decodificación de una fuente de información discreta codificada
mediante el algoritmo de Huffman
5. Preguntas
6. Conclusiones
7. Bibliografía

1. OBJETIVO
El alumno implementará un codificador y decodificador de Huffman mediante MATLAB para
codificar fuentes de información discretas
2. EQUIPO Y MATERIAL REQUERIDO
➢ Computadora Personal (PC)
➢ Software MATLAB

3. INTRODUCCIÓN TEÓRICA

Realizar una breve introducción teórica respecto al código de Huffman

4. DESARROLLO Y RESULTADOS

4.1 Generación del diccionario de palabras código de Huffman

4.1.1 Para generar mediante MALTAB, el diccionario de palabras código de Huffman se utiliza la
función “huffmandic”, la cual tiene la siguiente sintaxis:

[dict, L] = huffmandict(xi, Pxi, N, varianza)

donde

• dict es una celda de arreglos que contiene los símbolos de la fuente representados por
valores numéricos, así como las palabras código para cada símbolo.

• L contiene la longitud promedio de las palabras código en bits/símbolo

• xi es un vector que contiene a los símbolos de la fuente discreta representados mediante


valores numéricos

• Pxi es un vector que contiene las probabilidades para símbolo de la fuente de información

2 Prof. José Ernesto Rojas Lima


Teoría de codificación y manejo de información 2023

• N es un entero que debe estar entre 2 y 10, cuyo valor no debe exceder el número de
símbolos de la fuente. Para el caso de un código binario N = 2.

• varianza indica si se va a utilizar el algoritmo de mínima o máxima varianza, para el caso del
algoritmo de mínima varianza, en este campo debe especificarse ‘min’.

Por ejemplo, suponer que se quiere generar el código de Huffman con MATLAB usando el
algoritmo de mínima varianza para la fuente de información discreta mostrada en la tabla 4.1

Tabla 4.1 Fuente de información discreta


Representación Probabilidad del Palabras código Palabras código Palabras código
Símbolo mediante valor símbolo xi obtenidas del obtenidas con el obtenidas con el
xi numérico ejemplo visto en algoritmo de algoritmo de
clase mínima varianza máxima varianza
X1 1 0.4 0 0 00 1
X2 2 0.2 1 0 11 000
X3 3 0.2 1 1 10 01
X4 4 0.1 0 1 0 011 0011
X5 5 0.1 0 1 1 010 0010

El siguiente script en MATLAB genera el código de Huffman mediante el algoritmo de mínima


varianza para la fuente discreta mostrada en la tabla 4.1, determina la longitud promedio de las
palabras código, la eficiencia de codificación, la redundancia, la varianza y desviación estándar.

% Script para generar el código de Huffman mediante el algoritmo de mínima


% varianza

xi = [1 2 3 4 5]; % vector con alfabeto de la fuente en forma numérica


Pxi = [0.4 0.2 0.2 0.1 0.1]; % vector con probabilidades de los símbolos
[dict, L] = huffmandict(xi,Pxi,2,'min'); % genera el diccionario de Huffman

% Imprime el diccionario de Huffman


tempo = dict; % crea una variable temporal
for k = 1:length(tempo)
tempo{k,2} = num2str(tempo{k,2}); % Convierte valores en cadenas

end
tempo % imprime la celda de arreglos con el diccionario de Huffman
L % Imprime la longitud promedio de las palabras código
H=-sum(Pxi.*log2(Pxi)); % calcula la entropía de la fuente
efi = H/L % Calcula la eficiencia
red = 1-efi % calcula la redundancia

El siguiente script, genera el código de Huffman mediante el algoritmo de máxima varianza

3 Prof. José Ernesto Rojas Lima


Teoría de codificación y manejo de información 2023

4 Prof. José Ernesto Rojas Lima


Teoría de codificación y manejo de información 2023

% Script para generar el código de Huffman mediante el algoritmo de mínima


% varianza
xi = [1 2 3 4 5]; % vector con alfabeto de la fuente en forma numérica
Pxi = [0.4 0.2 0.2 0.1 0.1]; % vector con probabilidades de los símbolos
[dict, L] = huffmandict(xi,Pxi,2,'max'); % genera el diccionario de Huffman

% Imprime el diccionario de Huffman


tempo = dict; % crea una variable temporal
for k = 1:length(tempo)
tempo{k,2} = num2str(tempo{k,2}); % Convierte valores en cadenas

end
tempo % imprime la celda de arreglos con el diccionario de Huffman
L % Imprime la longitud promedio de las palabras código
H=-sum(Pxi.*log2(Pxi)); % calcula la entropía de la fuente
efi = H/L % Calcula la eficiencia
red = 1-efi % calcula la redundancia

5 Prof. José Ernesto Rojas Lima


Teoría de codificación y manejo de información 2023

Reportar el código de Huffman obtenido con MATLAB en la tabla 4.1 y en la tabla 4.2 reportar la
longitud promedio de las palabras código obtenidas en cada caso para el algoritmo de mínima
varianza y máxima varianza, así como la eficiencia de codificación y la redundancia. Calcular la
varianza de las palabras código en cada caso.

Recordar que la varianza de las palabras código está dada por

𝜎 2 = ∑𝑀 (𝑛𝑖 − 𝐿̅)2 𝑃( 𝑥𝑖 ) (4.1)


𝐿 𝑖=1

𝜎𝐿2 𝑀𝐼𝑁 = (2 − 2.2)2(0.40) + (2 − 2.2)2 (0.20) + (2 − 2.2)2(0.20) + (3 − 2.2)2 (0.10) + (3 − 2.2)2(0.10) = 0.16

𝜎𝐿 = √0.16 = 0.4

𝜎𝐿2𝑀𝐴𝑋 = (2 − 2.2)2(0.40) + (2 − 2.2)2 (0.20) + (2 − 2.2)2(0.20) + (3 − 2.2)2(0.10) + (3 − 2.2)2 (0.10) = 1.36

𝜎𝐿 = √0.16 = 1.16

6 Prof. José Ernesto Rojas Lima


Teoría de codificación y manejo de información 2023

Tabla 4.2 Comparación de la eficiencia de codificación de ambos algoritmos

Algoritmo de mínima varianza Algoritmo de Máxima varianza

Longitud Eficiencia Redundancia Longitud Eficiencia de Redundancia de


promedio de las de de codificación promedio de las codificación codificación
palabras código codificación palabras código
̅ (bits/símbolo)
𝑳 𝐿̅(bits/símbolo)

2.2 0.9645 0.0355 2.2 0.9645 0.0355


Varianza obtenida 𝝈𝟐=0.16 Varianza obtenida 𝝈𝟐=1.36
𝑳 𝑳

Desviación estándar obtenida 𝝈𝑳=0.4 Desviación estándar obtenida 𝝈𝑳=1.166

¿Qué ocurre con la eficiencia de codificación en cada caso? Explicar

La entropía de la fuente es la misma en ambos casos. Por lo tanto, la eficiencia de


codificación es la misma porque la longitud promedio de las palabras código es la
misma en ambos casos.

Indicar si el código obtenido es libre de prefijo

Sí, el código obtenido es libre de prefijo.

¿Qué ocurre con la varianza de las palabras código en cada caso? Explicar

La varianza de las palabras código es mayor cuando la longitud promedio de las


palabras código es mayor. Esto se debe a que, en este caso, los símbolos con mayor
probabilidad tienen palabras código más largas, mientras que los símbolos con
menor probabilidad tienen palabras código más cortas.

7 Prof. José Ernesto Rojas Lima


Teoría de codificación y manejo de información 2023

4.2 Proceso de codificación de una fuente de información discreta mediante el código


de Huffman

Tomando como base a la fuente de información descrita en el punto 4.1.1, suponer que la
fuente de información emite la siguiente secuencia de símbolos

x2, x4, x1, x3, x2, x2, x5, x3, x1, x4, x3, x1

Para codificar esta secuencia de símbolos se utiliza la función huffmanenco predefinida


en MATLAB, la cual tiene la siguiente sintaxis

sec_cod = huffmanenco(sec_sim, dict)

donde

• sec_cod es la secuencia codificada

• sec_sim es la secuencia de símbolos a codificar representados mediante un valor


numérico

• dict es el diccionario de las palabras código de Huffman las cuales se generan con la
función huffmanenco empleada en el apartado 4.1.1

Para realizar la codificación de la secuencia de símbolos, es necesario crear un arreglo


con los valores numéricos para representar a los símbolos de la fuente.

% Script para generar el código de Huffman mediante el algoritmo de mínima


% varianza y realizar la codificación de Huffman de una secuencia de
%símbolos

xi = [1 2 3 4 5]; % vector con alfabeto de la fuente en forma numérica


Pxi = [0.4 0.2 0.2 0.1 0.1]; % vector con probabilidades de los símbolos
[dict, L] = huffmandict(xi,Pxi,2,'min'); % genera el diccionario de Huffman

% Imprime el diccionario de Huffman


tempo = dict; % crea una variable temporal
for k = 1:length(tempo)
tempo{k,2} = num2str(tempo{k,2}); % Convierte valores en cadenas

end
tempo % imprime la celda de arreglos con el diccionario de Huffman
L % Imprime la longitud promedio de las palabras código
H=-sum(Pxi.*log2(Pxi)); % calcula la entropía de la fuente
efi = H/L; % Calcula la eficiencia
red = 1-efi; % calcula la redundancia
sec_sim=[2 4 1 3 2x22
, x54,3 x11, 4x33, 1];
x2, x%Arreglo
2, x5, x3, con
x1, xsecuencia
4, x3, x1 de símbolos
sec_cod = huffmanenco(sec_sim,dict) % genera la secuencia codificada

Reportar en la tabla 4.3, el contenido de la variable sec_sim y verificar que exista


correspondencia con los valores numéricos de la secuencia de símbolos. Comprobar que la

8 Prof. José Ernesto Rojas Lima


Teoría de codificación y manejo de información 2023

secuencia de símbolos codificados la cual esta almacenada en la variable sec_cod corresponde


con las palabras código del diccionario de Huffman obtenido en el apartado 4.1.1, como en caso
el primer símbolo emitido por la fuente es x2, deberá aparecer la secuencia 1 1; después se emite
el símbolo x4 para el cual la secuencia correspondiente es 0 1 1 y así sucesivamente.

9 Prof. José Ernesto Rojas Lima


Teoría de codificación y manejo de información 2023

Tabla 4.3 Secuencia de símbolos emitidos por la fuente y secuencia codificada de símbolos
Símbolo x2 x4 x1 x3 x2 x2 x5 x3 x1 x4 x3 x1
xi
Valor
numérico 2 4 1 3 2 2 5 3 1 4 3 1

Contenido
de 11 011 00 10 11 11 010 10 00 011 10 00
sec_sim
Contenido
de 2 4 1 3 2 2 5 3 1 4 3 1
sec_cod

¿Existe correspondencia entre la secuencia de símbolos emitido por la fuente y la secuencia de


símbolos codificados?

4.3 Proceso de decodificación de una fuente de información discreta codificada


mediante el algoritmo de Huffman

Para decodificar una secuencia de símbolos codificada mediante el algoritmo de


Hufmman se utiliza la función huffmandeco predefinida en MATLAB, la cual tiene la
siguiente sintaxis

sec_decod = huffmandeco(sec_cod, dict)

donde

• sec_decod es la secuencia decodificada

• sec_cod es la secuencia de símbolos codificados representados mediante vector

• dict es el diccionario de las palabras código de Huffman las cuales se generan con la
función huffmanenco empleada en el apartado 4.1.1

Para realizar la decodificación de la secuencia de símbolos, agregar las siguientes


líneas de comandos al script anterior

sec_decod = huffmandeco(sec_cod, dict)


iguales = isequal(sec_sim,sec_deco) % regresa 1 si la decodificacion fue
%correcta

El script completo que realiza la codificación y la decodificación quedaría

10 Prof. José Ernesto Rojas Lima


Teoría de codificación y manejo de información 2023

% Script para generar el código de Huffman mediante el algoritmo de mínima


% varianza y realizar la codificación y la decodificación de Huffman de una
%secuencia de símbolos

xi = [1 2 3 4 5]; % vector con alfabeto de la fuente en forma numérica


Pxi = [0.4 0.2 0.2 0.1 0.1]; % vector con probabilidades de los símbolos
[dict, L] = huffmandict(xi,Pxi,2,'min'); % genera el diccionario de Huffman

% Imprime el diccionario de Huffman


tempo = dict; % crea una variable temporal
for k = 1:length(tempo)
tempo{k,2}
4.2 Obtención de =lanum2str(tempo{k,2});
estadística de un texto%como
Convierte valores
un caso en cadenas
particular de una fuente
discreta con memoria
end
4.2.1 tempo % programa
Editar un imprime enlaMATLAB
celda que
de arreglos con la
permita obtener elestadística
diccionario
de un de Huffman
texto.
L % Imprime la
Utilizar lectura por formato. longitud promedio de las palabras código
H=-sum(Pxi.*log2(Pxi)); % calcula la entropía de la fuente
efi = H/L; % Calcula la eficiencia
red = 1-efi; % calcula la redundancia
sec_sim=[2 4 1 3 2 2 5 3 1 4 3 1]; %Arreglo con secuencia de símbolos
sec_cod = huffmanenco(sec_sim,dict) % genera la secuencia codificada
sec_decod = huffmandeco(sec_cod, dict)
iguales = isequal(sec_sim,sec_decod) % regresa 1 si decodificación correcta

Reportar en la tabla 4.4 el contenido de sec_sim donde están los valores numéricos de los
símbolos emitidos por la fuente así como el contenido de sec_decod, si la decodificación es
correcta debe existir correspondencia entre la secuencia de símbolos emitidos y la secuencia
decodificada.

Tabla 4.4 Secuencia de símbolos emitidos por la fuente y secuencia decodificada de símbolos
Símbolo x2 x4 x1 x3 x2 x2 x5 x3 x1 x4 x3 x1
xi
Valor
numérico 2 4 1 3 2 2 5 3 1 4 3 1

Contenido
de 11 011 00 10 11 11 010 10 00 011 10 00
sec_sim
Contenido
de 2 4 1 3 2 2 5 3 1 4 3 1
sec_decod

De acuerdo con los resultados obtenidos ¿Existe correspondencia entre los símbolos emitidos
por la fuente y la secuencia decodificada?

Sí, existe correspondencia entre los símbolos emitidos por la fuente y la secuencia
decodificada. La codificación de Huffman es un algoritmo de codificación de longitud variable
que asigna palabras código más cortas a los símbolos que ocurren con mayor frecuencia. Esto
significa que los símbolos que ocurren con mayor frecuencia en la secuencia original también
ocurrirán con mayor frecuencia en la secuencia codificada.

11 Prof. José Ernesto Rojas Lima


Teoría de codificación y manejo de información 2023

5. PREGUNTAS

1. ¿En qué consiste el principio de codificación de fuente?


Consisten en representar de una manera eficiente la salida de la fuente de información
mediante una secuencia de dígitos binarios.
2. Dar la clasificación de las técnicas de codificación de fuente para fuentes de
Información analógicas y para fuentes de información discretas:
Codificación de fuentes analógicas
• Codificación analógica a digital: Transformación de una señal analógica a una señal digital.
• Codificación digital de fuente: Codifica una señal digital usando técnicas de compresión.
• Codificación de fuente sin pérdidas: Garantiza que la señal original se pueda reconstruir de forma
exacta a partir de la señal codificada.
• Codificación de fuente con pérdidas: Permite reducir el tamaño de la señal codificada sacrificando
algo de precisión.

Codificación de fuentes discretas


• Codificación de fuente sin redundancia: No permite la compresión de la señal.
• Codificación de fuente con redundancia: Permite la compresión de la señal.

3. Explicar ¿qué es un código de longitud variable?


Un código de longitud variable es un código en el que la longitud del código para un
símbolo puede variar. Esto permite asignar códigos más cortos a los símbolos más
probables, lo que puede proporcionar una compresión significativa de los datos.

4. ¿Por qué es importante tener un esquema de codificación único?


Un esquema de codificación único es importante porque permite transmitir o
almacenar datos de forma eficiente y precisa.

5. ¿Cuáles son las ventajas de un código libre de prefijo?


Los códigos libres de prefijo son seguros y eficientes. Son seguros porque es
Imposible que un receptor interprete erróneamente un símbolo como otro. Son
eficientes porque se pueden decodificar de forma eficiente.

6. ¿Cuáles son las características que debe cumplir un código óptimo?


▪ Eficiencia al 100%
▪ Su redundancia es 0
▪ Libre de prefijo
▪ Instantáneo

12 Prof. José Ernesto Rojas Lima


Teoría de codificación y manejo de información 2023

7. ¿Cuál es el principio de codificación de los códigos de longitud variable?


Los códigos de longitud variable asignan códigos más cortos a los símbolos más
probables.

8. ¿Qué es la eficiencia de codificación?


La eficiencia de codificación es una medida de la cantidad de datos que se pueden
representar con un determinado número de bits.

9. ¿Qué es la redundancia de codificación?


La redundancia de codificación es la cantidad de información repetida en un flujo de
datos codificado.

10. ¿Cuál es el significado de la longitud promedio de las palabras código


La longitud promedio de las palabras código es la longitud media de los códigos
utilizados para representar los símbolos en el flujo de datos original.

11. ¿Cuál es el significado de la varianza y desviación estándar de las palabras


código?
La varianza y la desviación estándar de las palabras código indican cómo de dispersas
están las longitudes de las palabras código.

6. CONCLUSIONES

Rojas López Miguel Ángel:


El código de Huffman es un algoritmo de codificación de longitud variable que asigna longitudes
de palabras código más cortas a los símbolos con mayor probabilidad y longitudes de palabras
código más largas a los símbolos con menor probabilidad. Esto permite que el código de Huffman
sea más eficiente que los esquemas de codificación de longitud fija, que asignan longitudes de
palabras código fijas a todos los símbolos.

Zamora Pérez Jonathan :


El código de Huffman es un algoritmo de codificación óptimo en el sentido de que minimiza la
longitud promedio de las palabras código. Esto significa que el código de Huffman es el mejor
esquema de codificación de longitud variable posible para una fuente de datos dada. El árbol de
Huffman es una estructura de datos jerárquica que representa la relación entre los símbolos y sus
longitudes de palabras código.

7. BIBLIOGRAFÍA

1.- Haykin, Simon. Sistemas de Comunicación , Limusa, México, 2002, 685 págs.
2.- Sklar, Bernard, Digital Communications Fundamental and Applications,2ª ediciòn, Prentice Hall, USA,
2001 450 págs.
3. John G. Proakis, Digital Communications,. 3rd Edition, Mc Graw-Hill, Inc. International Editions 1995,
928 págs.
4. MATLAB, Manual del usuario

13 Prof. José Ernesto Rojas Lima

También podría gustarte