Está en la página 1de 8

MATEMÁTICA PARA LAS REDES DE

COMUNICACIONES

III Ciclo

Laboratorio 12

Comparación entre técnicas de


codificación
Alumnos:
• Achata Chávez Lucia Camila
• Gómez Villanueva Darío Gabriel
• Philco Apaza Danilo Jorge
• Quispe Mamani Flor Angela
• Sucasaire Castillo Jamilet Pamela

Ciclo
LABORATORIO 12: Comparación entre técnicas de codificación

Comparación entre técnicas de codificación


Objetivos

1. Utilizar del Matlab u Octave para codificación.


2. Codificar con el algoritmo Huffman
3. Codificar con el algoritmo Shanon-Fano
4. Codificar con el algoritmo Lempel Ziv

Introducción
Codificación de la Fuente.
Técnicas de codificación de la fuente.

Equipos y Materiales

• Computadora.
• Matlab u Octave.

Desarrollo del laboratorio

1. Conceptos de codificación Huffman, Shanon Fano y Lempel-ziv

Codificacion Huffman: se refiere al uso de una tabla de códigos de longitud


variable para codificar u determinado símbolo donde la tabla ha sido
rellenada de una manera específica basándose en la probabilidad estimada
de aparición de cada posible valor de dicho símbolo.

Codificacion Shanon Fano: se refiere a la probabilidad de aparición de


cada símbolo en un mensaje. El teorema de Shannon dice que el numero
promedio de bits esperable para un conjunto de letras y probabilidades
dadas se aproxima a la entropía del alfabeto.

Codificacion Lempel-Ziv: se basa en el reconocimiento de cadenas de


símbolos ya existentes en esa porción previa del mensaje, en otras palabras,
el parsing y es análogo al análisis gramatical de una palabra o frase. Su
comprensión es adaptable, a medida que la comprensión avanza, el
algoritmo añade nuevas cadenas para ser utilizadas posteriormente como
códigos.

2. Implementar el algoritmo para la codificación Huffman, el programa


además debe mostrar la longitud promedio del código L, eficiencia y
redundancia. Tomar de referencia una cadena de texto ingresada y
analizar los resultados.

clear all; clc; close all;

P=[0.20 0.15 0.30 0.05 0.04 0.01 0.25]


huff=[P 0 0];
code=[];
minim=[];
codey=[];
for x=1:length(P)-1
huff=flip(sort(huff));
huff=huff(1:length(huff)-2);

AERG Pag. 2
LABORATORIO 12: Comparación entre técnicas de codificación

if sum(minim)<= min(huff)||(sum(minim)==max(huff)&&length(huff)>2)
for n=1:length(code)
code(n)=strcat('1',code(n));
endfor
else
for n=1:length(code)
code(n)=strcat('0',code(n));
endfor
endif
minim=[huff(length(huff)-1) huff(length(huff))];
codey=[codey;{minim(2)};{minim(1)}];
huff=[huff sum(minim)];
code=[code;{"1"};{"0"}];
endfor
codene=codeyne=[];
for n=1:length(codey)
x=cell2mat(codey(n));
if find(P==x)
if x==cell2mat(codey(n+1))
if bin2dec((code(n)))< bin2dec(code(n+1))
code(n+1)=0;
else
codey(n)=code(n)=0;
endif
endif
x=cell2mat(code(n));
y=cell2mat(codey(n));
if length(x)==2
codene=[codene; x];
codeyne=[codeyne; y ];
elseif length(x)==1
codene=[codene];
else
codene=[codene; int2str(str2num(x))];
codeyne=[codeyne; y ];
endif
else
codey(n)=code(n)=0;
endif
endfor
codeyne=flip(codeyne)
codene=flip(codene)

AERG Pag. 3
LABORATORIO 12: Comparación entre técnicas de codificación

3. Implementar el algoritmo de Shanon Fano, el programa además debe


mostrar la longitud promedio del código L, eficiencia y redundancia.
Tomar de referencia una cadena de texto ingresada y analizar los
resultados.

AERG Pag. 4
LABORATORIO 12: Comparación entre técnicas de codificación

clc;clear all;close all;

P=[0.20 0.15 0.30 0.05 0.04 0.01 0.25]


ss=P;
ss=sort(ss,'descend');
siling=log2(1/ss(1));
siling=round(siling);
sf=fano=0;
n=1;Hx=0;

for i=1:length(ss)
Hx=Hx+ ss(i)*log2(1/ss(i));
info(i)=-(log2(ss(i)));
endfor

for j=1:length(ss)-1
fano=fano+ss(j);
sf=[sf 0]+[zeros(1,j) fano];
siling=[siling 0]+[zeros(1,j) round(info(j+1))];
endfor

if siling(1)~=siling(2)
siling(1)=siling(2)=2;
endif
if siling(length(siling))~=siling(length(siling)-1)
siling(length(siling))=siling(length(siling)-1)=5;
endif

for r=1:length(sf)
esf=sf(r);
for p=1:siling(r)
esf=mod(esf,1)*2;
h(p)=esf-mod(esf,1);
endfor
hh(r)=h(1)*10^(siling(r)-1);
for t=2:siling(r)
hh(r)=hh(r)+h(t)*10^(siling(r)-t);
endfor
endfor

c={'0','1'};
disp('Codigo');
codex={0};
for i=1:length(hh)
u=1;
for t=siling(i):-1:1
f=floor(hh(i)/10^(t-1));
hh(i)=mod(hh(i),10^(t-1));
if f==1
if u==1
d=c{2};
else
d=[d c{2}];
endif
else

AERG Pag. 5
LABORATORIO 12: Comparación entre técnicas de codificación

if u==1
d=c{1};
else
d=[d c{1}];
endif
endif
codex{i,:}={d};
u=u+1;
endfor
disp([d])
endfor

tao=siling(1)*ss(1);

for u=1:length(ss)-1
tao=tao+siling(u+1)*ss(u+1);
endfor

T=tao/n;
B=[flipud(rot90(ss)),flipud(rot90(siling))];
disp(["\nProbabilidad",' Largo'])
disp(B)
disp(["\nEntropia H(X) = ",num2str(Hx)])
disp(['Longitud Promedio,L = ',num2str(T)])
eff=((Hx/T)*100);
disp(['Eficiencia=',num2str(eff),'%'])
redu=100-eff;
disp(['Redundancia=',num2str(redu),'%'])

4. Realizar la implementación del algoritmo Lempel zip. Tomar de referencia


una cadena de texto ingresada y analizar los resultados.

M="thisisthe"
M=[toascii(M)]
dic=unique(M);
temp=[]; ndic=[]; code=[]; numdic=[];
ind=0;
x=1;
for n=1:(length(M))-1
if find(temp==M(n))
if find(ndic(:,1)==M(n))==find(ndic(:,2)==M(n+1))
code=[code numdic(find(ndic(:,1)==M(n)))];
endif
elseif find(dic==M(n))
ndic=[ndic; M(n) M(n+1)];
numdic=[numdic 255+x];
code=[code M(n)];
temp=ndic(:,1);
x=x+1;
endif
endfor
code=[code M(length(M))]
codebin=dec2bin(code)

AERG Pag. 6
LABORATORIO 12: Comparación entre técnicas de codificación

01110100 01101000 01101001 01110011 01101001 01110011 01101000 01110100 01100101

5. Resultados de la comparación.

Este una página de codificación de texto a binario

Comparando los resultados de la página con los de Lempel zip nos podemos
fijar que la cadena a transmitir es mas corta

AERG Pag. 7
LABORATORIO 12: Comparación entre técnicas de codificación

6. Observaciones y conclusiones

Observaciones:

• Solo el algoritmo Lempel-Ziv permite que el código se comprima además de


codificarlo.
• Cuando se usa el algoritmo Lempel-Ziv, el resultado puede ser expresado de
forma decimal o binaria, el tamaño de bit por elemento será lo que aumente,
mientras el número de elementos disminuirá.

• La longitud de los códigos no varía entre la codificación con Huffman y


Shannon-Fano

Conclusiones:

• Se concluye que los algoritmos usados para la codificación de mensajes


ejecutados en este laboratorio permiten la comprensión de datos en la
cantidad de información, eliminando la redundancia existente. En el algoritmo
Huffman se hizo la asignación del código de atrás hacia adelante cumpliendo
la condición de los prefijos. En el caso del algoritmo Shannon-fano se
determinó la probabilidad de ocurrencia por medio de la tabla de codificación.
Y por último el código Lempel-Ziv a diferencia de Huffman funciona con
cadenas de símbolos por medio de códigos de longitud prefijada.

• Se logró realizar la codificación Huffman mediante el orden de probabilidades


de manera decreciente, seguido de la suma de las 2 últimas probabilidades
que formó un mensaje que se agregó en una nueva columna reducida
decreciente, hasta que la columna quedó con dos probabilidades, de esta
manera se hizo la asignación del código de atrás hacia adelante cumpliendo la
condición de los prefijos

• Se realizó la codificación Shannon-Fano mediante el orden decreciente de


probabilidades, se dividió en dos conjuntos de probabilidades donde se asignó
a la mitad superior 0 y a la mitad inferior 1, subdividiendo en grupos y se
añadió los bits del código a lo largo de la recursión.

• Se realizó la codificación con el algoritmo Lempel-Ziv, haciendo uso de la


conversión de los elementos a ASCII y posteriormente a binario, se generará
un diccionario juntando el elemento actual con el siguiente, mientras se realiza
el proceso de codificación de a uno por vez, se comparará con los valores que
se guardaron en el diccionario, si se encuentra se reemplazará con el código
generado, en lugar de ASCII, este código es más o menos eficiente dependiendo
de la redundancia del mensaje a codificar.

Los códigos debidamente comentados.


Adjuntar los archivos .m

AERG Pag. 8

También podría gustarte