Laboratorio # 3: Codificacion Shannon-Fano

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 10

UNIVERSIDAD MAYOR DE SAN ANDRÉS

ETN-1016
FACULTAD DE INGENIERÍA
INGENIERÍA ELECTRÓNICA

LABORATORIO # 3
CODIFICACION
SHANNON-FANO

DOCENTE: ING JOSE CAMPERO


MATERIA: TELECOMUNICACIONES II
ESTUDIANTE: LAURA MERCADO EDILSON
BYRON
FECHA DE PRESENTACION
28/10/2019

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.

OBJETIVO DEL PROYECTO


GENERAL
Utilizar Matlab para codificar una palabra de 2 hasta 16 símbolos, determinar la entropía, la
longitud promedio, eficiencia del mismo

ESPECIFICO
Comprobar que la probabilidad de ocurrencia de cada símbolo se codifique de manera
adecuada

Verificar los resultados de la entropía, eficiencia y longitud promedio de palabra

INGENIERIA DEL PROYECTO

clc; %RENUEVA LA PANTALLA


clear all;
close all;
m=input('Ingrese el número de simbolos: '); %INGRESO DEL NUMERO
DE SIMBOLOS O MENSAJES
if m<2 || m>16 %ANALISIS DEL NUMERO
DE SIMBOLOS O MENSAJES
fprintf('\n***EL NUMERO DE SIMBOLOS DEBE ESTAR ENTRE 2 Y 16\
n\n');
else
display('Ingrese la probabilidad de ocurrencia para cada
símbolo:');
for i=1:m %CICLO FOR PARA
INGRESO DE PROBABILIDADES 1
pu(i)=input('');
end
for uv=1:m %2
prob(uv)=pu(uv);
end
%Ordenamos de mayor a menor
for i=1:m
for j=1:m-i
if pu(j)<pu(j+1)
aux=pu(j);
pu(j)=pu(j+1);
pu(j+1)=aux; %ordenar el vector pu
end
end
end
for uv=1:m
prob2(uv)=pu(uv); %vector ordenado en prob2
end
s=0;
for i=1:m
s=s+pu(i); %SUMATORIA TOTAL DE
PROBABILIDADES
end
if (0.99999>s)||(1.00001<s) %CONTROL QUE SI CUMPLE
LA CONDICION
no=fprintf('\n\nLAS PROBABILIDADES NO SUMAN 1\n\n');
else %EN CASO DE CUMPLIR LA
SUMA CONTINUA CON LA ASIGNACION DE ESTE VALOR
termino=1;

for k=1:m % CICLO FOR PARA


ANALISAR EL ORDEN DE LAS PROB
p(k)=termino;
termino=termino+1;
end
res=1;
%% ETAPA DE CODIFICACIÓN
for i=1:m a=0;
b=0;
for j=1:i
a=a+pu(j);
end
for k=i+1:m % Primera columna de 0s y 1s
b=b+pu(k);
end
res2=abs(a-b);
if res2<res
res=res2;

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;

% EN ESTE ETAPA LOS CICLOS FOR HACEN EL ANALISIS


DE LOS RESULTADOS
% MAS QUE TODO PARA LO QUE ES LA CREACION DE LA
LONGITUDES DE PALABRAS
% INDIVIDUALES Y POSTERIOR SUMA

%%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)

(bucle que resta módulo A-B


comparando con A-B siguientes )
Guardando en pu[i,j]
PU[i,j]= 0 ó 1 (Matriz codificada)

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

Se usaron estas tres


fórmulas para realizar el
cálculo correspondiente en
OBSERVACIONES Y
RECOMENDACIONES
 En la práctica de laboratorio se usaron los arreglos matriciales
y vectoriales, dominando de mejor forma la programación con
arreglos
 En esta práctica se logró verificar que los elementos más
probables siempre se codifican con menos bits y en cambio los
menos probables lo hacen con más bits
 La eficiencia mostro valores muy buenos cercanos al 100% en
la mayoría de los casos
 Conclusión
Matlab nos ayuda a calcular de forma eficiente las
codificaciones que son más adecuadas para un conjunto de
palabras, además se logró verificar que cuando se tiene un
conjunto de palabras con la misma probabilidad la eficiencia
es del 100%, la longitud promedio esta en función al
número de datos introducido y la entropía alcanza un valor
máximo
RESPUESTAS AL CUESTIONARIO
Definir la “teoría de la información”
La teoría de la información, también conocida como teoría
matemática de la comunicación (inglés: mathematical theory of
communication) o teoría matemática de la información. Esta
teoría está relacionada con las leyes matemáticas que rigen la
transmisión y el procesamiento de la información y se ocupa de la
medición de la información y de la representación de la misma,
así como también de la capacidad de los sistemas de
comunicación para transmitir y procesar información.1 La teoría
de la información es una rama de la teoría de la probabilidad y de
las ciencias de la computación que estudia la información y todo
lo relacionado con ella: canales, compresión de datos y
criptografía, entre otros.
Explicar en qué consiste la corrección de errores por
redundancia de bits
La posibilidad de corregir errores se consigue añadiendo al
mensaje original unos bits de redundancia. La fuente digital envía
la secuencia de datos al codificador, encargado de añadir dichos
bits de redundancia. A la salida del codificador obtenemos la
denominada palabra código. Esta palabra código es enviada al
receptor y éste, mediante el decodificador adecuado y aplicando
los algoritmos de corrección de errores, obtendrá la secuencia de
datos original.
Explicar en qué condiciones la eficiencia del código
Shannon Fano es máxima (100%)
La eficiencia de la codificación Shannon Fano es máxima cuando
todos los elementos tienen la misma probabilidad o sea son
equiprobables
Explicar en qué consiste la entropía “a priori” y a
“posteriori “de la información
La entropía a priori se da cuando realizamos la transmisión ya que
conocemos el dato que se va a mandar y está dado por

La entropía a posteriori se da cuando realizamos la recepcion ya


que no conocemos el dato que se va a recibir y está dado por
BIBLIOGRAFIA
 CAPÍTULO 3 (TEORÍA DE LA INFORMACIÓN)
 DIAPOSITIVAS DE LA MATERIA

También podría gustarte