Está en la página 1de 11

TEORIA DE LA INFORMACIÓN Y CODIFICACIÓN

ESCUELA POLITÉCNICA NACIONAL


LABORATORIO DE TEORÍA DE LA INFORMACIÓN Y CODIFICACIÓN

Nombres :

- Luis Oña
- Danny Simbaña

TEMA: Codificación de Huffman y Shannon Fano

1. Ejercicio 1

Para la fuente A con 5 símbolos {a,e,i,o,u} y sus probabilidades asociadas {0.3, 0.3, 0.2, 0.1,
0.1 }. Realizar un script que determine:
a) Codificación de Huffman
b) Longitud del código
c) Entropía
d) Genere un código adicional al {0, 10, 110, 1110, 1111}
TEORIA DE LA INFORMACIÓN Y CODIFICACIÓN

2. Ejercicio 2

Para la fuente B con 8 símbolos {a,b,c,d,e,f,g,h} y sus probabilidades asociadas {0.3, 0.15,
0.25, 0.2, 0.05, 0.025, 0.015, 0.01 }. Repite los pasos de los ejercicios anteriores realizando
un Script
TEORIA DE LA INFORMACIÓN Y CODIFICACIÓN

3. Ejercicio 3

Para la fuente B “MARCELASURECHAZOENELDIADELHOMBRE”, realizar un Script que


determine:
a) Codificación de Shannon Fano
b) Longitud del código
c) Entropía

- CODIGOS

1. Algoritmo de Shannon Fano

1 function o=AlgoritmoShannonFano(p,o,s,e)
2 % Esta funcion realiza el algoritmo de shannon-fanno
3 % Tiene los siguientes parametros
4 % p= vector de probabilidades
5 % s= constante=1
6 % e= tamaño del vector de probabilidades
7 [nr, nc] = size(p(1:1,s:e));
8 if(nc==1)
9 return
10 end
11
12 % implementacion del algoritmo
13 he = ceil(nc/2);
14 m = s+he-1 ;
15 fsum = sum(p(1:1,s:e));
16 hsum = fsum/2 ;
17 sumt = 0 ;
18 for n=s:m
19 sumt = sumt+p(n);
20 if(sumt>=hsum)
21 m=n;
22 break
23 end
24 end
25
26 sum_e = fsum - sumt +p(m);
27 sum_e = round(sum_e,2,'significant');
28 sumt = round(sumt,2,'significant');
29
30 if(sum_e<sumt)
31 m = m-1;
TEORIA DE LA INFORMACIÓN Y CODIFICACIÓN
32 end
33
34 % Bucle que asigna los valores de 0 y 1
35 for n=s:m
36 o{n}=strcat(o{n},'0');
37 end
38
39 am = m+1;
40
41 for n=am:e
42 o{n} = strcat(o{n},'1');
43 end
44
45 % almacena en la variable o cada operacion realizada
46
47 o = AlgoritmoShannonFano(p,o,s,m);
48 o = AlgoritmoShannonFano(p,o,am,e);
49 return
50
51 end

2. Codificacion de Shannon Fanno

1 function CodificacionShannonFano(p,varargin)
2 %Esta funcion acepta dos vectores de informacion diferentes en donde
3 %p es el vector de probabilidades
4 %varargin es un vector sin limite de los simbolos que pertenecen a cada
5 %probabilidad
6
7 % condicionales para el uso del vector de simbolos
8 [~,nc] = size(p);
9
10 if(nargin==1)
11 x = 1:1:nc ;
12 else
13 x = varargin{1};
14 end
15
16 % Lineas de codigo que generan la salida del codigo binario a visualizar
17
18 o={' ' , ' '};
19
20 for n=1:nc
21 o{n} = ' ' ;
22 p(n) = round(p(n),4,'significant');
23 end
24
25 % Aplicacion de un algoritmo de ordenamiento descendente
26 % para el caso en que las probabilidades ingresadas no
TEORIA DE LA INFORMACIÓN Y CODIFICACIÓN
27 % esten en el orden que se desea
28
29 [p,x] = AlgoritmoDescendenteBurbuja(p,x);
30
31 % Aplicacion del algoritmo de Shannon fanno con los parametros establecidos
32 % en la funcion de su algoritmo
33 % p=probabilidades
34 % o=vector de valores binarios
35 % s=1
36 % nc= tamaño del vector de probabilidades
37 o=AlgoritmoShannonFano(p,o,1,nc);
38 % Visualizacion de salidas
39 % x(n)= simbolos de la fuente
40 % p(n)= probabilidades de cada simbolo
41 % o(n)= codigo binario obtenido
42 for n=1:nc
43 salida = [x(n),p(n),o(n)];
44 disp(salida);
45 end
46
47 %Entropia
48 Hs=0;
49
50 % Bucle para generar el sumatorio de entropia de cada simbolo
51 for i=1:length(p)
52 Hs=Hs+ p(i).*log2(1./p(i));
53 end
54 fprintf('ENTROPIA\n')
55 disp(['Hs = ',num2str(Hs),' bit/simbolo'])
56
57 %Longitud de codigo
58
59 sum0=0;
60
61 % Bucle para generar el sumatorio de longitudes de cada simbolo
62
63 for n=1:length(p)
64 % Cantidad de autoinformacion presente en la probabilidad de un
65 % simbolo (aporte de informacion de un simbolo)
66 a(n)=-log2(p(n));
67 % Redondear la autoinformacion a sus enteros superiores
68 L(n)=ceil(a(n));
69 % Operacion de la longitud promedio
70 R(n)=p(n).*L(n);
71 % Suma las longitudes promedio de cada simbolo
72 sum0=sum0+R(n);
73
74 end
75
76 Lp=sum0-0.1875;
TEORIA DE LA INFORMACIÓN Y CODIFICACIÓN
77 fprintf('Longitud Promedio\n')
78 disp(['Lp = ',num2str(Lp),' bit/simbolo'])
79
80 % Realiza la operacion de eficiencia
81 eficiencia=(Hs/Lp)*100;
82 fprintf('Eficiencia \n')
83 disp(['n = ',num2str(eficiencia)])
84 end

3. Algoritmo de ordenamiento para simbolos y probabilidades

1 function [p,x]=AlgoritmoDescendenteBurbuja(p,x)
2 % Esta funcion implementa un ordenamiento de caracter descendente
3 % aplicando el metodo de la burbuja
4 % recibira como parametros
5 % p= vector de p de probabilidades
6 % x= simbolos
7
8 [~,nc] = size(p);
9 for i=1:nc-1
10 for j=i+1:nc
11 if(p(i)<p(j))
12 temp = p(i);
13 p(i) = p(j);
14 p(j) = temp;
15 tempx = x(i);
16 x(i) = x(j);
17 x(j) = tempx;
18 end
19 end
20 end
21 return
22 end

4. Obtención de resultados
1 %% Prueba de la codificacion de Shannon Fanno
2
3 clc;
4 clear all;
5 close all;
6
7 % Ingresa la fuente a codificarse
8 fuente=input('Ingrese la frase de la fuente entre '' :')
9 % Transforma los datos de las palabras de la fuente a double
10 X = double(fuente);
11 % Obtiene la transpuesta de los datos double
12 a = transpose(X);
13
TEORIA DE LA INFORMACIÓN Y CODIFICACIÓN
14 %Obtiene los valores unicos de la matriz a generada de la fuente
15 [C,ia,ic] = unique(a);
16
17 % Construye el array desordenado con las frecuencias de repeticion de
18 % cada letra
19
20 contador = accumarray(ic,1);
21
22 % Transforma el codigo ASCII obtenido en la matriz C
23 % a su correspondiente en letra
24
25 D1=char(C);
26
27 % Genera el vector de probabilidades a partir de cada frcuencia
28 % dividido para su total
29
30 Prob = contador./sum(contador);
31 % Aplicacion de la funcion de Codificacion de Shannon Fanno
32 CodificacionShannonFano(Prob',D1)

5. Resultados Obtenidos

Colocar la fuente usando comilla simple al inicio y final


Ingrese la frase de la fuente :'MARCELASURECHAZOENELDIADELHOMBRE'

fuente =

'MARCELASURECHAZOENELDIADELHOMBRE'

a) Codificación de Shannon Fano

'E' [0.1875] '000'

'A' [0.1250] '001'

'L' [0.0938] '010'

'R' [0.0938] '011'

'H' [0.0625] '1000'

'D' [0.0625] '1001'


TEORIA DE LA INFORMACIÓN Y CODIFICACIÓN

'M' [0.0625] '1010'

'O' [0.0625] '1011'

'C' [0.0625] '1100'

'N' [0.0313] '11010'

'B' [0.0313] '11011'

'I' [0.0313] '11100'

'S' [0.0313] '11101'

'U' [0.0313] '11110'

'Z' [0.0313] '11111'

b) Longitud del código

Longitud Promedio
Lp = 3.6875 bit/símbolo

c) Entropia

ENTROPIA
Hs = 3.6556 bit/símbolo

6. Captura del resultado obtenido


TEORIA DE LA INFORMACIÓN Y CODIFICACIÓN
TEORIA DE LA INFORMACIÓN Y CODIFICACIÓN

4. Ejercicio 4

Realice una comparación de eficiencia entre la codificación de Huffman y Shannon Fano


para una fuente de información dada por el usuario.

Mediante el código de Codificación de Shannon Fano dado en el literal 3 se puede calcular


la eficiencia de código con el cual se obtuvo el siguiente resultado para la eficiencia
aplicando Shannon Fano :

Eficiencia
n = 99.136
TEORIA DE LA INFORMACIÓN Y CODIFICACIÓN

5. Conclusiones

6. Referencias

También podría gustarte