Laboratorio # 3: Codificacion Shannon-Fano
Laboratorio # 3: Codificacion Shannon-Fano
Laboratorio # 3: Codificacion Shannon-Fano
ETN-1016
FACULTAD DE INGENIERÍA
INGENIERÍA ELECTRÓNICA
LABORATORIO # 3
CODIFICACION
SHANNON-FANO
INTRODUCCION
Codificación Shannon-Fano, en el campo de la compresión de datos, la codificación Shannon-
Fano es una técnica para construir un código prefijo basado en un conjunto de símbolos y sus
probabilidades (estimadas o medidas). No es óptimo en el sentido de que no consigue la
menor longitud de palabra código esperada posible como en la codificación Huffman; aunque
a diferencia de la codificación Huffman, garantiza que todas las longitudes de palabras de
código están a un bit de su ideal teórico – logP(x). La técnica fue propuesta por Claude Elwood
Shannon, en “Una Teoría Matemática de la Comunicación”, su artículo de 1948 introduciendo
el campo de la teoría de la información. El método fue atribuido a Robert Fano, quien
posteriormente lo publicó como un informe técnico. La codificación Shannon-Fano no debe
confundirse con la codificación Shannon, método de codificación usado para probar el
teorema de Shannon de la codificación sin ruido, ni con la codificación Shannon-Fano-Elias
(también conocida como codificación Elias), el precursor de la codificación aritmética.
ESPECIFICO
Comprobar que la probabilidad de ocurrencia de cada símbolo se codifique de manera
adecuada
for jj=1:i
p(jj,2)=0;
end
for kk=i+1:m
p(kk,2)=1;
end
else
res=res;
end
end
for i=1:m % CICLO FOR PARA ANALISAR EL
ORDEN DE LAS PROB
for j=3:m+5
p(i,j)=5;
end
end
for ll=1:m
p(m+1,ll)=0;
end
for ii=3:m
nn=0;
for kk=1:m % AQUI MEDIANTE LA CREACION
DEL VECTOR P SE HACE LA COMPARACION
if p(kk,ii-1)~=p(kk+1,ii-1) % PARA LA RESPECTIVA
ASIGNACION DE CEROS O UNOS
if nn>0; % SON CICLOS FOR QUE
TERMINAN CUANDO YA NO EXISTA LA LA CONDICION
res3=1; % DE PODER DIVIDIR
for iii=kk-nn:kk
d=0;
e=0;
for jjj=kk-nn:iii
d=d+pu(jjj);
end
for kkk=iii+1:kk
e=e+pu(kkk);
end
res4=abs(d-e);
if res4<res3
res3=res4;
for jjjjj=kk-
nn:iii
p(jjjjj,ii)=0;
end
for
kkkkk=iii+1:kk
p(kkkkk,ii)=1;
end
else
res3=res3;
end
end
end
nn=0;
else
nn=nn+1;
end
end
end
for hh=1:m
for ss=1:m+5
pp(hh,ss)=p(hh,ss);
end
end
fprintf('\n');
fprintf('Mensaje\t\tX\t\t Prob Código');
fprintf('\n');
fprintf('\n');
ent=0;
long=0;
%%DESPLIEGUE DE LA TABLA%%
for tt=1:m
mm=0;
for uu=2:m+5
if mm==0
if pp(tt,uu)==5
for bb=1:m
if prob(bb)==prob2(tt)
fprintf('Mensaje %d\
t',bb);
end
end
fprintf('X%d\t
%10.3f',tt,pu(tt));
for xx=2:uu-1
fprintf(' %d',pp(tt,xx));
end
long=long+((uu-2)*pu(tt));
fprintf('\n');
mm=mm+1;
end
end
end
end
for zz=1:m
ent=ent+(pu(zz)*(log2(1/pu(zz)))); % CALULO DE LA ENTROPIA
end
fprintf('\n');
fprintf('Longitud Promedio de la Palabra: %10.3f',long) %
MUESTRA LA LONGITUD DE PALABRA
fprintf('\n');
fprintf('\n');
fprintf('Entropia: %10.3f',ent) % SE MUESTRA LA
ENTROPIA
fprintf('\n');
fprintf('\n');
fprintf('Eficiencia: %10.4f %',100*(ent/long)) %CALCULA Y
MUETSRA LA EFICIENCIA
fprintf('\n');
fprintf('\n');
end
end
DIAGRAMA DE FLUJO DEL PROGRAMA
INICIO
n
i
1 n
1
j
1 n-3
1
P(i,1) =P(i,2)
S=0
i
1 n
1
s=s+(P(i,2)*log2(1/
P(i,2)))
Longitud promedio de palabra,
matriz codificada PU, Eficiencia
E=L/S
FIN
ESPECIFICACIONES
Se utilizaron los siguientes comandos en Matlab
length(X): La longitud de la declaración (X) es equivalente a
max (tamaño (X)) para matrices no vacías y 0 para matrices
vacías. n = longitud (X) devuelve el tamaño de la dimensión
más larga de X. Si X es un vector, este es el mismo que su
longitud.
M = min(A) devuelve los elementos mínimos de una matriz.
Si A es un vector, min(A) devuelve el mínimo de A.
Si A es una matriz, min(A) es un vector de fila que contiene
el valor mínimo de cada columna.
Si A es una matriz multidimensional, min(A) opera a lo
largo de la primera cota de matriz cuyo tamaño no es igual a
1, tratando los elementos como vectores. El tamaño de esta
cota se convierte en 1 mientras que los tamaños de todas las
demás cotas permanecen iguales. Si A es una matriz vacía
con la primera dimensión 0, min(A) devuelve una matriz
vacía con el mismo tamaño que A.
M = max(A) devuelve los elementos máximos de un array.
Si A es un vector, max(A) devuelve el máximo de A.
Si A es una matriz, max(A) es un vector de fila que contiene
el valor máximo de cada columna.
Si A es un array multidimensional, max(A) opera a lo largo
de la primera dimensión del array cuyo tamaño no es igual a
1, tratando los elementos como vectores. El tamaño de esta
dimensión se convierte en 1, mientras que los tamaños de
todas las demás dimensiones permanecen iguales. Si A es un
array vacío cuya primera dimensión tiene una longitud de
cero, max(A) devuelve un array vacío con el mismo tamaño
que A.
B = sortrows (A) ordena las filas de una matriz en orden
ascendente basándose en los elementos de la primera columna.
Cuando la primera columna contiene elementos repetidos,
sortrows se clasifica de acuerdo con la siguiente columna y
repite este comportamiento para obtener valores iguales
sucesivos