Você está na página 1de 17

Ejercicio 1: Ejecutamos el siguiente script en matlab proporcionado por el profesor durante la clase, al cual agregamos los comentarios dentro

del script para tener un mejor entendimiento.


%MATLAB script pra_3_cap_can_1_1 %Borrar todas las variables que tenga declaradas matlab clear all %Cerrar cualquier ventana que tenga abierta matlab close all %Apagar la funcion echo la cual hace que se impriman todos los comandos %mientras matlab los va ejecutando echo off %Declaracion de vector ancho de banda w=[1:5:20,25:20:100,130:50:300,400:100:1000,1250:250:5000,5500:500:10000] ; %declaracion del vector relacion seal a ruido(en decibeles) pn0_db=[-20:1:30]; %calculo de del vector relacion seal a ruido (adimensional) pn0=10.^(pn0_db/10); %Inicio de un for para calcular la capacidad de canal. for i=1:45 for j=1:51 %calculo de la capacidad de canar de la forma: %C=B*log2(1+S/N) c(i,j)=w(i)*log2(1+pn0(j)/w(i)); end end %Activar nuevamente la funcion echo echo on %Comando que hace una pausa dentro de la ejecucion del programa pause %presiona una tecla para ver C vs W y P/No %Constantes difusion para el comando surfl k=[.9,.8,.5,.6]; %Direccion de fuente de iluminacion para surfl s=[-70,35]; %Comando surfl similiar al comando surfl pero se basa en la superficie con %ciertos destellos de luz provenientes de una fuente de luz, el comando %surf genera un grafico en 3D coloreado surfl(w,pn0_db,c',s,k) %Titulo para el grafico title('Capacidad de canal vs. ancho de banda y SNR') %Etiqueta para el eje X xlabel('Ancho de banda') %Etiqueta para el eje Y ylabel('Relacion seal a ruido') %Etiqueta para el eje Z zlabel('Capacidad del canal')

Del script anterior obtuvimos el siguiente resultado: (Grafica 1)

Analizamos la grfica obtenida desde diferentes puntos de vista, en este caso tenemos la relacin entre la capacidad de canal y el ancho de banda: (Grafica 2)

Nuestra tercera grafica obtenida tenemos la relacin entre capacidad de caal y relacin seal a ruido: (Grafica 3)

Ejercicio 2: Nuevamente utilizamos un script proporcionado por el profesor, mediante el uso de este cdigo realizamos la codificacin huffman binaria de una cadena de nmeros y posteriormente una vez generado el diccionario, codificamos y decodificamos dos diferentes cadenas de nmeros. En este caso, nuevamente comentamos el cdigo para un mejor entendimiento.
%MATLAB script pra_3_huff_cod_2_1 %Borrar todas las variables que tenga declaradas matlab clear all %Cerrar cualquier ventana que tenga abierta matlab close all %Apagar la funcion echo la cual hace que se impriman todos los comandos %mientras matlab los va ejecutando echo off %Definicion del vector que contiene los simbolos a codificar simb=[1 2 3]; %Vector que contiene las probabilidades de los simbolos a codificar p=[0.4 0.3 0.3]; %Variable donde se guardara el diccionario del codigo Huffman a generar el %codigo que genera es binario. dicc=huffmandict(simb,p); %Muestra en la pantalla de comandos la codificacion de cada simbolo dicc{1,:}

dicc{2,:} dicc{3,:} %Declara el vector que contendra una cadena a codificar cadena_fte=[3 2 1 1]; %Variable donde se guarda la codificacion huffman de la cadena fuente, %mediante el uso de la funcion huffmanenco enviando como parametros la %cadena a codificar y el diccionario a utilizar. cadena_cod=huffmanenco(cadena_fte,dicc) %Declara el vector que contenga una cadena a decodificar cadena_enco=[1 0 1 0 0 0 0 1 1 ]; %Variable donde se guarda la decodificacion huffman de la cadena a %decodificar, usando la funcion huffmandeco enviando como parametros la %cadena a codificar y el diccionario a utilizar cadena_dec=huffmandeco(cadena_enco,dicc)

Una vez ejecutado el script anterior obtenemos estos resultados: Diccionario de codificacin huffman: Smbolo 1 2 3 Cdigo 1 01 00

Codificacin de la cadena: 3 2 1 1

Decodificacin de la cadena : 1 0 1 0 0 0 0 1 1

Ejercicio 3: En esta ocasin, nos dan el objetivo de a partir de una cadena de nmeros proporcionada, obtener las probabilidades en base a la frecuencia de aparicin dentro de dicha cadena; una vez obtenidas dichas probabilidades, generamos el cdigo huffman de la serie de nmeros que aparecen en la cadena, llevamos a cabo la codificacin y decodificacin de dos cadenas diferentes.
%MATLAB script pra_3_huff_cod_3_1 %Borrar todas las variables que tenga declaradas matlab clear all %Cerrar cualquier ventana que tenga abierta matlab close all %Apagar la funcion echo la cual hace que se impriman todos los comandos %mientras matlab los va ejecutando echo off %Variable que guarda el vector con el listado de simbolos de los cuales se %obtendra la frecuencia y posteriormente la probabilidad cad1=[4 4 5 6 6 5 7 7 7 8 8 9 8 8 7 6 7 5 4 7 6 5 4 5 6 7 6 7 6 8 9 8 7 8 7 6 7 6 7 8 7 6 8 9 8 7 6 7 8 7 6 7 8 6 5]; %Variables donde se guardaran el numero de apariciones de cada simbolo n4=0; n5=0; n6=0; n7=0; n8=0; n9=0; %For que recorre el total de la cadena for y=1:length(cad1) %If que en caso if cad1(y)==4 n4=n4+1; end %If que en caso if cad1(y)==5 n5=n5+1; end %If que en caso if cad1(y)==6 n6=n6+1; end %If que en caso if cad1(y)==7 n7=n7+1; end %If que en caso if cad1(y)==8 n8=n8+1; end %If que en caso if cad1(y)==9 n9=n9+1; de cumplir aumenta una unidad a la variaba n4

de cumplir aumenta una unidad a la variaba n5

de cumplir aumenta una unidad a la variaba n6

de cumplir aumenta una unidad a la variaba n7

de cumplir aumenta una unidad a la variaba n8

de cumplir aumenta una unidad a la variaba n9

end end %Variables que contienen las probabilidades de los simbolos, calculadas de %la siguiente forma: %p(x)=no.de veces que aparece x / longitud total de la cadena. p4=n4/length(cad1); p5=n5/length(cad1); p6=n6/length(cad1); p7=n7/length(cad1); p8=n8/length(cad1); p9=n9/length(cad1); %Declaracion del vector que contiene los simbolos a codificar simb=[4 5 6 7 8 9]; %Probabilidades de los simbolos a codificar p=[p4 p5 p6 p7 p8 p9]; %Variable que contendra el diccionario de la codificacion hecha dicc=huffmandict(simb,p); %Muestra en la pantalla de comandos la codificacion de cada simbolo % dicc{4,:} % dicc{5,:} % dicc{6,:} % dicc{7,:} % dicc{8,:} % dicc{9,:} %Declara el vector que contendra una cadena a codificar cadena_fte=[4 5 5 7 6 8 7 7 9 6]; %Variable donde se guarda la codificacion huffman de la cadena fuente, %mediante el uso de la funcion huffmanenco enviando como parametros la %cadena a codificar y el diccionario a utilizar. cadena_cod=huffmanenco(cadena_fte,dicc) %Declara el vector que contenga una cadena a decodificar cadena_enco=[1 0 1 1 0 0 1 0 0 0 0 1 0 1 ]; %Variable donde se guarda la decodificacion huffman de la cadena a %decodificar, usando la funcion huffmandeco enviando como parametros la %cadena a codificar y el diccionario a utilizar cadena_dec=huffmandeco(cadena_enco,dicc)

Los resultados obtenidos del cdigo anterior son: Probabilidades de los smbolos Smbolo 4 5 6 7 8 9

Probabilidad 0.0727 0.1091 0.2364 0.3091 0.2182 0.0545

Diccionario Huffman smbolo 4 5 6 7 8 9 Cdigo 1000 101 01 00 11 1001

Codificacin de cadena 4 5 5 7 6 8 7 7 9 6

Decodificacin de cadena 1 0 1 1 0 0 1 0 0 0 0 1 0 1

Ejercicio 4: Por ultimo tenemos la finalidad de mediante el uso del nombre de uno de los integrantes del equipo, lo tomamos como el nuevo listado de smbolos, en este caso es necesario obtener los smbolos fuente, la probabilidad de dichos smbolos, la codificacin huffman de estos y codificar la palabra telemtica con base en el diccionario que se obtenga. Escribimos los nombres de los integrantes de equipo cada uno en su propio archivo de texto y creamos un tercer archivo que contiene los nombres combinados. Cabe mencionar que este script debe colocar una letra t en lugar de los espacios entre cada nombre u apellido.
%Abrimos el archivo en el cual nos va a guardar nuestro nombre ya depurado. %Si se escribe asi significa que lo va a guardar en nuestra carpeta por %default MatLab nombre1destino = fopen('nombre_cdepur.txt','a'); %Pedimos nuestra cadena a convertir en tiempo real nombre_cad = input('Nombre: ','s'); %Nuestro vector de minusculas abcminusculas = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','','o','p','q', 'r','s','t','u','v','w','x','y','z',' '];

%Se llena otro arreglo de vocales vocales = ['a','e','i','o','u']; letraminus = 0; %Iniciamos nuestro for para recorrer el arreglo de origen %caracter por caracter iniciamos en uno hasta la longitud de la cadena a %convertir for x = 1: length(nombre_cad) %Verificamos si es minuscula si es asi lo sobrescribimos en el otro %archivo if(isminusse(nombre_cad(x)) == 0) fprintf(nombre1destino, '%c',nombre_cad(x)); else %De lo contrario buscamos si es mayuscula letraminus = ismayusse(nombre_cad(x)); if(letraminus ~= 0) fprintf(nombre1destino, '%c',abcminusculas(letraminus)); end %O una vocal acentuada vocalacen = isvocalacentuada(nombre_cad(x)); if(vocalacen ~= 0) fprintf(nombre1destino, '%c',vocales(vocalacen)); end if(nombre_cad(x) == ' ') fprintf(nombre1destino, '%c', 't'); end end %No revisamos si hay numeros o signos de puntuacion dado que esos van a %ser eliminados. end %Se cierra el archivo destino fclose(nombre1destino);

%MATLAB script pra_3_huff_cod_34 %Borrar todas las variables que tenga declaradas matlab clear all %Cerrar cualquier ventana que tenga abierta matlab close all %Apagar la funcion echo la cual hace que se impriman todos los comandos %mientras matlab los va ejecutando echo off %Abrir el archivo que contiene la cadena a procesar %leer=fopen('G:\7mo semestre\TInformacion\practica3\aby.txt','r'); %Pasando a valores enteros todo el contenido de la cadena a procesar %cad1= fscanf(nombre,'%d'); %nombre aby %cad1=[10 1 3 5 4 12 11 8 12 16 9 12 13 5 19 16 1 2 8 15 1 18 16 1 9 8]; %nombre migue

%cad1=[8 19 10 1 18 1 16 1 14 5 9]; %combinados %cad1=[8 19 10 1 18 1 16 10 1 9 12 13 5 19 16 10 8 6 17 5 9 16]; %Variables donde se guardaran n1=0; n2=0; n3=0; n4=0; n5=0; n6=0; n7=0; n8=0; n9=0; n10=0; n11=0; n12=0; n13=0; n14=0; n15=0; n16=0; n17=0; n18=0; n19=0;

3 7 17 11 4 8 1 16 10 8 6 17 5 9 16 1 11 6 3 5 4 12 11 8 12 16 1 14 3 7 17 11 4 8 1 16 16 1 2 8 15 1 18 16 1 11 6 5 9 16 1 9 8 el numero de apariciones de cada simbolo

%For que recorre el total de la cadena for y=1:length(cad1) %If que en caso de cumplir aumenta una unidad a la variaba n1 if cad1(y)==1 n1=n1+1; end %If que en caso de cumplir aumenta una unidad a la variaba n2 if cad1(y)==2 n2=n2+1; end %If que en caso de cumplir aumenta una unidad a la variaba n3 if cad1(y)==3 n3=n3+1; end %If que en caso de cumplir aumenta una unidad a la variaba n4 if cad1(y)==4 n4=n4+1; end %If que en caso de cumplir aumenta una unidad a la variaba n5 if cad1(y)==5 n5=n5+1; end %If que en caso de cumplir aumenta una unidad a la variaba n6 if cad1(y)==6 n6=n6+1; end %If que en caso de cumplir aumenta una unidad a la variaba n7

if cad1(y)==7 n7=n7+1; end %If que en caso if cad1(y)==8 n8=n8+1; end %If que en caso if cad1(y)==9 n9=n9+1; end %If que en caso if cad1(y)==10 n10=n10+1; end %If que en caso if cad1(y)==11 n11=n9+1; end %If que en caso if cad1(y)==12 n12=n12+1; end %If que en caso if cad1(y)==13 n13=n13+1; end %If que en caso if cad1(y)==14 n14=n14+1; end %If que en caso if cad1(y)==15 n15=n15+1; end %If que en caso if cad1(y)==16 n16=n16+1; end %If que en caso if cad1(y)==17 n17=n17+1; end %If que en caso if cad1(y)==18 n18=n18+1; end %If que en caso if cad1(y)==19 n19=n19+1; end end

de cumplir aumenta una unidad a la variaba n8

de cumplir aumenta una unidad a la variaba n9

de cumplir aumenta una unidad a la variaba n10

de cumplir aumenta una unidad a la variaba n11

de cumplir aumenta una unidad a la variaba n12

de cumplir aumenta una unidad a la variaba n13

de cumplir aumenta una unidad a la variaba n14

de cumplir aumenta una unidad a la variaba n15

de cumplir aumenta una unidad a la variaba n16

de cumplir aumenta una unidad a la variaba n17

de cumplir aumenta una unidad a la variaba n18

de cumplir aumenta una unidad a la variaba n19

%Variables que contienen las probabilidades de los simbolos, calculadas de %la siguiente forma: %p(x)=no.de veces que aparece x / longitud total de la cadena.

10

p1=n1/length(cad1); p2=n2/length(cad1); p3=n3/length(cad1); p4=n4/length(cad1); p5=n5/length(cad1); p6=n6/length(cad1); p7=n7/length(cad1); p8=n8/length(cad1); p9=n9/length(cad1); p10=n10/length(cad1); p11=n11/length(cad1); p12=n12/length(cad1); p13=n13/length(cad1); p14=n14/length(cad1); p15=n15/length(cad1); p16=n16/length(cad1); p17=n17/length(cad1); p18=n18/length(cad1); p19=n19/length(cad1); %Declaracion del vector que contiene los simbolos a codificar simb=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]; %Probabilidades de los simbolos a codificar p=[p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 p16 p17 p18 p19]; %Variable que contendra el diccionario de la codificacion hecha dicc=huffmandict(simb,p); %Muestra en la pantalla de comandos la codificacion de cada simbolo % dicc{1,:} % dicc{2,:} % dicc{3,:} % dicc{4,:} % dicc{5,:} % dicc{6,:} % dicc{7,:} % dicc{8,:} % dicc{9,:} % dicc{10,:} % dicc{11,:} % dicc{12,:} % dicc{13,:} % dicc{14,:} % dicc{15,:} % dicc{16,:} % dicc{17,:} % dicc{18,:} % dicc{19,:} %Declara el vector que contendra una cadena a codificar cadena_fte=[16 5 9 5 10 1 16 8 3 1 ]; %Variable donde se guarda la codificacion huffman de la cadena fuente, %mediante el uso de la funcion huffmanenco enviando como parametros la %cadena a codificar y el diccionario a utilizar. cadena_cod=huffmanenco(cadena_fte,dicc)

11

Las letras las asignamos de la siguiente forma: Letra Smbolo Letra Smbolo a 1 n 11 b 2 o 12 c 3 p 13 d 4 r 14 e 5 s 15 g 6 t 16 h 7 u 17 i 8 y 18 l 9 z 19 m 10 Cabe mencionar que para agilizar tiempos de ejecucin dentro del script, solo tomamos en cuenta los smbolos que existen en los nombres de los integrantes del equipo; con lo cual los listados de los nombres quedan de la forma: Nombre Macedonio Lpez Abisay Al Izmaya Archundia Miguel ngel Izmaya Macedonio Archundia Lpez Miguel Abisay ngel Ali Listado 10 1 3 5 4 12 11 8 12 16 9 12 13 5 19 16 1 2 8 15 1 18 16 1 9 8 8 19 10 1 18 1 16 1 14 3 7 17 11 4 8 1 16 10 8 6 17 5 9 16 1 11 6 5 9 8 19 10 1 18 1 16 10 1 3 5 4 12 11 8 12 16 1 14 3 7 17 11 4 8 1 16 9 12 13 5 19 16 10 8 6 17 5 9 16 1 2 8 15 1 18 16 1 11 6 5 9 16 1 9 8 16

Y la palabra telemtica en secuencia de nmeros es: 16 5 9 5 10 1 16 8 3 1 Probabilidades de los smbolos para integrante macedonio Smbolo 1 2 3 4 5 6 7 8 9 10 Probabilidad 0.1538 0.0385 0.0385 0.0385 0.0769 0 0 0.1154 0.769 0.0385 Smbolo 11 12 13 14 15 16 17 18 19 Probabilidad 0.0385 0.1154 0.0385 0 0.0385 0.1154 0 0.0385 0.0385

12

Diccionario huffman para integrante macedonio

smbolo Cdigo smbolo Cdigo 1 000 11 00111 2 010110 12 100 3 01010 13 00110 4 00101 14 01011110 5 0100 15 11001 6 0101111111 16 011 7 010111110 17 0101110 8 101 18 11000 9 111 19 1101 10 00100 Y la palabra telemtica (16 5 9 5 10 1 16 8 3 1) codificada con este diccionario es:

Probabilidades de los smbolos para integrante izmaya smbolo 1 2 3 4 5 6 7 8 9 10 Probabilidad 0.1724 0 0.0345 0.0345 0.0690 0.0690 0.0345 0.1034 0.0690 0.0690 smbolo 11 12 13 14 15 16 17 18 19 Probabilidad 0.0690 0 0 0.0345 0 0.1034 0.0690 0.0345 0.0345

13

Diccionario huffman para integrante izmaya smbolo 1 2 3 4 5 6 7 8 9 10 Cdigo 11 010111111 010110 01010 0100 0111 00101 0000 0110 1001 smbolo 11 12 13 14 15 16 17 18 19 Cdigo 1000 010111110 01011110 00100 0101110 101 0001 00111 00110

Y la palabra telemtica (16 5 9 5 10 1 16 8 3 1) codificada con este diccionario es:

Probabilidades de los smbolos para los nombres combinados Smbolo 1 2 3 4 5 6 7 8 9 10 Probabilidad 0.1579 0.0175 0.0351 0.0351 0.0702 0.0351 0.0175 0.1053 0.0702 0.0526 Smbolo 11 12 13 14 15 16 17 18 19 Probabilidad 0.0526 0.0526 0.0175 0.0175 0.0175 0.1404 0.0351 0.0351 0.0351

14

Diccionario huffman para los nombres combinados smbolo 1 2 3 4 5 6 7 8 9 10 Cdigo 000 010011 01000 01011 0111 01010 010010 101 0110 1101 smbolo 11 12 13 14 15 16 17 18 19 Cdigo 1100 1001 111001 111000 11101 001 10001 10000 1111

Y la palabra telemtica (16 5 9 5 10 1 16 8 3 1) codificada con este diccionario es:

Con lo anterior la palabra telemtica (16 5 9 5 10 1 16 8 3 1) tuvo estas tres distintas codificaciones: Diccionario Macedonio Izmaya Combinados Codificacin 011010011101000010000001110101010000 101010001100100100111101000001011011 001011101100111110100000110101000000

15

Conclusiones: Grafica 2: Al aumentar el ancho de banda la capacidad del canal tambin aumenta, sin embargo esta relacin tiene un comportamiento no lineal, ya que el crecimiento en la capacidad de canal se comienza a estancar o tiene una variacin menos notable con respecto los valores menores a 5000 bits/smbolo. Grafica 3: Mientras la potencia de la seal sea mayor a la del ruido, la capacidad del canal ser mejor en esa proporcin. La funcin de huffmandict nos da una codificacin huffman binaria, pero dicha funcin tambin nos da la posibilidad, de obtener el cdigo n-ario de este tipo de encriptacin. En todos los casos obtuvimos un cdigo instantneo ya que ninguna palabra cdigo es prefijo de otra. Podemos notar que esta funcin invierte el orden de la codificacin a partir de que se procesan los smbolos con una codificacin fuente de longitud dos. Es decir si llevamos a cabo de forma manual la codificacin huffman el diccionario el ejercicio 2 quedara de este modo:

Smbolo 1 2 3

Cdigo 1 00 01

Como era de esperarse al aumentar el nmero de smbolos a codificar aumenta la longitud mxima de los smbolos codificados, por ejemplo, en el caso del cdigo del ejercicio dos el cdigo ms largo era de longitud 2 a comparacin con el ejercicio tres el valor se duplica. Aun cuando solo se pidi un nombre de los integrantes para el ltimo ejercicio dentro de la prctica, decidimos hacer un pequeo experimento, y como tal obtuvimos los resultados esperados, ninguna codificacin se repiti aun cuando la longitud de dos de los listados era la misma, en la ltima codificacin notamos que las probabilidades comenzaron a ser uniformes a comparacin de los dos primeros diccionarios, otra cosa que comprobamos en la prctica fue que aun cuando se tengan probabilidades nulas o cero, estas no le quitan la instantaneidad al cdigo.

16

17

Você também pode gostar