Está en la página 1de 10

Teoría de codificació n y manejo de informació n 2020

PRÁCTICA 1: FUENTES DE INFORMACIÓN DISCRETAS


1. OBJETIVO
El alumno analizará las estadísticas de fuentes de información discretas considerando una
fuente discreta sin memoria binaria y un texto.
2. INTRODUCCIÓN TEÓRICA
Realizar una breve introducción sobre las fuentes de información discretas.

3. DESARROLLO Y RESULTADOS

3.1 Modelado de una fuente discreta sin memoria binaria

3.1.1 Diseñar una función en MATLAB que permita modelar una fuente de información discreta
sin memoria binaria X = {x1, x2}={0, 1} con estadísticas P(X = x1) = Px1 y P(X = x2) = Px2 y que emita
símbolos estadísticamente independientes. Cada símbolo de salida puede ser 0 ó 1.

● Datos de entrada: Probabilidades de los símbolos Px1 y Px2 donde Px1 + Px2 = 1.

● Datos de salida: El símbolo generado X = xk.

La función debe invocarse desde un procedimiento que servirá como programa principal.

3.1.2 Diagrama de flujo para realizar el modelado de la fuente binaría

Un método útil para el modelado y simulación de sistemas de comunicaciones, son las


herramientas de programación. Para realizar la función en MATLAB que simule el
comportamiento de una fuente binaria, planteamos el diagrama de flujo mostrado en la figura
2.2. En la tabla 2.1 se describen las variables involucradas.

Figura 2.2 Diagrama de flujo para modelar una fuente de información binaria.

1 Prof. José Ernesto Rojas Lima


Teoría de codificació n y manejo de informació n 2020

Diagrama de flujo para la fuente binaria

Inicio

Datos de entrada:
Px1 y Px2

Generar número aleatorio entre 0 y 1 con


distribución uniforme U

No Si
Si U<=Px1
X = 1; X = 0;
Nota: Para desarrollar la función en MATLAB que permita modelar la fuente de información, utilizar la declaración functi

Regresa
X

T
abla 2.1 Descripción de las variables Termina

Variable Descripción
PX1 Probabilidad de que la fuente emita un símbolo X1=0 ó P(X=0)
PX2 Probabilidad de que la fuente emita un símbolo X2=1 ó P(X=1)
U Almacena un valor aleatorio entre 0 y 1 con distribución uniforme
X Variable donde se guarda el símbolo X1 = 0 ò X2 = 1 emitido por la fuente binaria

3.1.3 Implementación de la función diseñada mediante programación en MATLAB

Matlab permite la programación de procedimientos y funciones. Para crear una función


usamos la declaración function que tiene la siguiente sintaxis general:

function [Arg1, Arg2,…,ArgN] = nombre_funcion(arg1, arg2, …,argM);

Cuerpo de la función:
• Comandos
• Expresiones
• Variables, etc.

Donde Arg 1, Arg 2,……, ArgN son argumentos de salida de la función y arg1, arg2,
………, argM son los argumentos de salida. El intercambio de variables con el espacio de
trabajo se realiza mediante los argumentos de entrada y los argumentos de salida.

2 Prof. José Ernesto Rojas Lima


Teoría de codificació n y manejo de informació n 2020

3.1.4 Abrimos el editor de MATLAB el cual se muestra en la barra menú debajo de File

>> Editor de MATLAB

Fig. 2.3

Se abrirá una nueva ventana que es el editor de texto de MATLAB y realizamos el


siguiente código (ver la correspondencia de la sintaxis con el diagrama de flujo
mostrado en la figura 2.2):

function [X] = fuente_binaria(PX1, PX2);


U = rand; % Genera un numero aleatorio entre 0 y 1 con distribución uniforme
if U<=PX1,
X = 0; % genera un cero si el numero aleatorio es menor o igual a PX1
else
X = 1; % En caso contrario genera un 1
end;

En la función anterior X es el argumento de salida, será un O ó 1 cada vez que la


función sea invocada, “fuente_binaria” es el nombre la función, PX1 y PX2 son
argumentos de entrada donde se almacenan las probabilidades de los símbolos X1 y X2
respectivamente, U almacena un valor aleatorio entre 0 y 1 con distribución uniforme
generado cada vez que el comando “rand” se invoca.

3.1.5 Guardamos la función creada en MATLAB, en la barra de menu seleccionamos


“File” y luego seleccionamos la opción “Save_as”.

●Nota Importante: Al momento de guardar la función, dejar el mismo nombre que se


le dió a la función cuando esta fue editada, en este caso “ fuente_binaria”, de otra
manera, si cambiamos alguna letra ó le cambiamos el nombre al momento de
guardarla, cuando la función es invocada por MATLAB, no la reconocerá y marcará un
error. También se recomienda guardarla en el directorio de trabajo actual.

En la siguiente figura (2.4) se muestra la barra de menu que se despliega cuando


guardamos una función.

Fig. 2.4

3 Prof. José Ernesto Rojas Lima


Teoría de codificació n y manejo de informació n 2020

3.1.6 Para invocar a la función que modela a la fuente binaria, nos vamos a la ventana
de comandos de MATLAB y tecleamos la siguiente secuencia de comandos:

>> PX1 = 0.5 % Asignamos una valor numérico a la probabilidad de X1


>> PX2 = 0.5 % Asignamos un valor numérico a la probabilidad de X2
>> [X] = fuente_binaria(PX1, PX2)
>>

3.1.7 Repetir el comando de la línea 3 ([X] = fuente_binaria(PX1, PX2) ), 10 veces y


anotar en la tabla 2.2 la secuencia de símbolos emitido por la fuente binaria en cada
una de las pruebas realizadas.

Tabla 2.2 Secuencia de Símbolos generados por la fuente binaria


Prueba 1a 2a 3a 4ª 5a 6a 7a 8a 9a 10a
Valor de X 1 1 1 1 0 1 0 1 1 1

¿Que se observa cada vez que la función se invoca desde la ventana de comandos?

¿Al observar la secuencia de símbolos reportados en la tabla 2.2, existe forma alguna
de predecir el símbolo siguiente que emitirá la fuente de información? Argumentar.

3.1.8 En este paso, realizaremos la invocación de la función editada en MATLAB desde


un procedimiento.

Los procedimientos son secuencias de comandos y expresiones guardados en archivos


*.m. Los archivos *.m, son archivos ASCII ordinarios y pueden editarse con cualquier
editor de textos.
Cuando un procedimiento se invoca, MATLAB ejecuta los comandos de manera
secuencial.
Los procedimientos operan globalmente en las variables definidas en el espacio de
trabajo de MATLAB. Las variables definidas en un procedimiento, quedan definidas para
operarse desde la ventana de comandos o por otros procedimientos.
De manera similar a lo desarrollado en el punto 4.1.4, abrimos nuevamente el editor
de MATLAB para programar ahora un procedimiento que invoque a la función
“fuente_binaria”.
% Procedimiento para invocar a la función fuente binaria
PX1 = 0.5; % Asigna un valor numérico a la probabilidad para X1
PX2 = 1-PX1; % Calcula el valor de la probabilidad para X2
N = 10; % Define el numero de símbolos a generar
for k = 1:N,
[X] = fuente_binaria(PX1, PX2); % Invoca a la función editada N veces
Xi(k)=X; % Guarda la secuencia de símbolos emitidos
end;
Xi

3.1.9 Una vez editado el procedimiento anterior, guardarlo de manera similar a lo


desarrollado en el punto 4.1.5. En el caso de los procedimientos se le puede dar
cualquier otro nombre diferente al de las funciones, por ejemplo
“proc_invoca_fuente_binaria”. Aquí es importante guardarlo en el mismo directorio
donde se encuentra la función que se invocará.
3.1.10 Desde la ventana de comandos escribimos el nombre del procedimiento.

4 Prof. José Ernesto Rojas Lima


Teoría de codificació n y manejo de informació n 2020

>> proc_invoca_fuente_binaria

Reportar los resultados arrojados por el procedimiento en la tabla 2.3

Tabla 2.3 Secuencia de Símbolos generados por la fuente binaria desde un procedimiento
1 1 0 1 0 0 1 1 1 1
Valores de X

Comparar los resultados obtenidos en este punto con los obtenidos en el punto 4.1.7, ¿Qué es
lo que se puede observar?

3.1.11 Obtención de las estadísticas de la fuente binaria.

Para obtener las estadísticas de la fuente binaria generada, es necesario editar un


procedimiento que de manera general invoque a la función que modela a la fuente binaria e
acuerdo al número de símbolos a generar. Para esto será necesario recurrir a los ciclos o bucles
como “for” o “while”. Para conocer la sintaxis de estos ciclos desde la ventana de comandos
escribir

>> help for

>> help while

Para determinar la probabilidad de los símbolos generados por la fuente de información, aplicar
el concepto de frecuencia relativa o a posteriori, que de manera general nos dice:

Supongamos que un experimento aleatorio se repite N veces. Si en el experimento un evento A


ocurre NA veces, entonces la probabilidad del evento A se define como:

lim NA
P( A )≈ ( )
N →∞ N
(2.1)

Es decir, se requiere invocar a la función “ fuente_binaria” N veces, contar el número ceros y el


número de unos que se generan y calcular la probabilidad de 0 y 1.

% Procedimiento para invocar a la función fuente binaria y obtener sus


%estadísticas

PX1 = input('Probabilidad de ceros P(X=0): '); % Ingresa valor numérico para PX1
PX2 = 1-PX1; % Calcula el valor de la probabilidad para X2
N = input('Numero de simbolos a generar (N): '); %Ingresa el numero de símbolos
n_ceros = 0; % Inicializa el contador de ceros
n_unos = 0; % Inicializa el contador de unos
for k = 1:N,
[X] = fuente_binaria(PX1, PX2); % Invoca a la función editada N veces
Xi(k)=X; % Guarda la secuencia de símbolos emitidos
if X ==0, % Si la fuente emite un 0, incrementa contador de ceros
n_ceros = n_ceros+1;
else % Si la fuente emite un 1, incrementa contador de unos
n_unos = n_unos+1;
end;
end;
n_ceros
PX1fr = n_ceros/n % Calcula laProf.
probabilidad
José Ernesto Rojas de
Lima ceros por frecuencia relativa
5
n_unos
PX2fr = n_unos/n % Calcula la probabilidad de unos por frecuencia relativa
Teoría de codificació n y manejo de informació n 2020

3.1.12 Una vez editado el procedimiento anterior guardarlo en el directorio de trabajo como en
el punto 4.1.9 con algún nombre. En este caso se le asigno el nombre de
“estadisticas_fuente_binaria”. Invocar desde la ventana de comandos al procedimiento

>> estadísticas_fuente_binaria

Seguir las instrucciones, considerando los casos mostrados en la tabla 2.4.

Tabla 2.4 Valores de las estadísticas de la fuente de información obtenidas mediante el modelo de MATLAB
Valores obtenidos por Valores obtenidos por Valores obtenidos por
Valores teóricos frecuencia relativa para frecuencia relativa para frecuencia relativa para
100 símbolos 1000 símbolos 10000 símbolos
P(X=0 P(X=1) P(X=0) P(X=1) P(X=0) P(X=1) P(X=1) P(X=0)
)
0.1 0.9 8 92 97 903 8988 1012

0.2 0.8 16 84 183 817 7972 2028

0.3 0.7 36 64 300 700 6954 3046

0.4 0.6 48 52 397 603 6007 3993

0.5 0.5 62 38 506 494 4966 5034

0.6 0.4 54 46 597 403 3943 6057

0.7 0.3 66 34 712 288 3011 6989

0.8 0.2 77 23 811 189 1999 8001

0.9 0.1 89 11 897 103 999 9001

3.2 Obtención de la estadística de un texto como un caso particular de una fuente


discreta con memoria

6 Prof. José Ernesto Rojas Lima


Teoría de codificació n y manejo de informació n 2020

3.2.1 Editar un programa en MATLAB que permita obtener la estadística de un texto.


Utilizar lectura por formato.

3.2.1.1 Para realizar la lectura de un archivo de texto, supongamos que tenemos el archivo
“texto1.txt”, cuyo contenido puede visualizarse desde el bloc de notas de Windows, como se
muestra en la siguiente figura

3.2.1.2 Cerrar el archivo de texto y colocarlo en el directorio de trabajo actual de MATLAB. En


este caso se colocó en C:\MATLAB6p5\work

3.2.1.3 Desde la ventana de comandos, realizar la lectura del archivo

>> fid = fopen('texto1.txt') %Abre un canal para lectura del archivo texto1.txt
>> contenido = fscanf(fid,'%c') %Realiza lectura por caracter del contenido
>> st = fclose(fid) %Cierra el canal de lectura

Reportar en la tabla el contenido de cada una de las variables


Tabla 2.5
Variable Descripción Contenido
fid Guarda el identificador del archivo a leer

contenido Guarda el contenido del archivo como


caracteres
st 0=Indica si se cerró el canal de lectura de
manera exitosa, -1 en caso contario

3.2.1.4 Para facilitar la obtención de la estadística de un texto, es necesario generar un arreglo


de caracteres ASCII cuyo contenido sean las letras del alfabeto de la A-Z. Creamos el arreglo
de la siguiente forma:
>>X=['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']

X =

ABCDEFGHIJKLMNOPQRSTUVWXYZ

Con lo anterior quedaría definida la fuente de información X. Para determinar el número total de
letras ó símbolos de la fuente invocamos el comando: >>length(X). Reportar el resultado en la
tabla 2.6
Tabla 2.6 Total de letras o símbolos del alfabeto
Total de letras o símbolos (M)

7 Prof. José Ernesto Rojas Lima


Teoría de codificació n y manejo de informació n 2020

3.2.1.5 También es posible obtener una correspondencia entre el conjunto de caracteres ASCII
(de la A-Z) y su valor numérico.

>> valores = 65:90


>> caracteres = char(valores)

Reportar en la tabla 2.6 la correspondencia entre los caracteres ASCII de la A - Z y su valor


numérico

Carácter A B C D E F G H I J
ASCII
Valor
numérico

Carácter K L M N O P Q R S T
ASCII
Valor
numérico

Carácter U V W X Y Z
ASCII
Valor
numérico

3.2.1.6 Suponer que se quiere determinar el número de veces que se repite la letra A en el
archivo “texto1.txt”. Para realizar lo anterior editar el siguiente procedimiento.

% Procedimiento determinar la frecuencia con la que se presenta la letra A en un


% texto
fid = fopen('texto2.txt'); % Abre un canal de lectura binaria
contenido=fscanf(fid,'%c'); % carga los caracteres del texto en contenido
X=['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']; % Define la fuente discreta X
caracter = X(1); % Asigna a caracter el contenido de X(1)
num_veces_caracter=length(strfind(contenido,caracter));
fprintf('Numero Total de letras %c = %d',caracter,num_veces_caracter);

Para acceder al primer elemento del arreglo se realiza la siguiente instrucción:


>> X(1)

3.2.1.7 Con el ejemplo anterior programar ahora una rutina que permita obtener el número de
veces que se repite cada una de las letras del alfabeto de la fuente de información. Utilizar
ciclos iterativos. Para iniciar y comprobar que la rutina realiza el conteo de manera adecuada,
se puede utilizar el archivo de texto1. txt.

La rutina deberá determinar adicionalmente el número total de letras o símbolos contenido en el


texto, para que a partir de estos valores se pueda calcular la probabilidad de cada letra o
símbolo.

Considerar un archivo de texto en inglés que tenga alrededor de

a) 1000 letras o símbolos


b) 5000 letras o símbolos
c) 10000 letras o símbolos.

8 Prof. José Ernesto Rojas Lima


Teoría de codificació n y manejo de informació n 2020

Para realizar los incisos anteriores utilizar los siguientes archivos: texto2.txt, texto3.txt y
texto4.txt. Determinar la frecuencia con la cual se presenta cada letra del alfabeto en el
texto y reportarlo en las tablas 2.4, 2.5 y 2.6.

Tabla 2.4 Frecuencia con la que se presenta cada letra del alfabeto en el archivo texto2.txt
nA nB nC nD nE nF nG nH nI nJ nK

nL nM nN nO nP nQ nR nS nT nU nV

nW nX nY nZ Total de símbolos

Tabla 2.5 Frecuencia con la que se presenta cada letra del alfabeto en el archivo texto3.txt
nA nB nC nD nE nF nG nH nI nJ nK

nL nM nN nO nP nQ nR nS nT nU nV

nW nX nY nZ Total de símbolos

Tabla 2.6 Frecuencia con la que se presenta cada letra del alfabeto en el archivo texto4.txt
nA nB nC nD nE nF nG nH nI nJ nK

nL nM nN nO nP nQ nR nS nT nU nV

nW nX nY nZ Total de símbolos

Para calcular la probabilidad a posteriori de cada letra o símbolo, dividir los resultados de las
tablas 2.4, 2.5 y 2.6 entre el número total de letras o símbolos de cada uno de los textos
analizados y reportar los resultados en la tablas 2.7, 2.8 y 2.9.

Tabla 2.7 Probabilidad con la que se presenta cada letra del alfabeto en el archivo texto2.txt
P(A) P(B) P(C) P(D) P(E) P(F) P(G) P(H) P(I) P(J) P(K)

P(L) P(M) P(N) P(O) P(P) P(Q) P(R) P(S) P(T) P(U) P(V)

P(W) P(X) P(Y) P(Z) Total de símbolos

Tabla 2.8 Probabilidad con la que se presenta cada letra del alfabeto en el archivo texto3.txt
P(A) P(B) P(C) P(D) P(E) P(F) P(G) P(H) P(I) P(J) P(K)

9 Prof. José Ernesto Rojas Lima


Teoría de codificació n y manejo de informació n 2020

P(L) P(M) P(N) P(O) P(P) P(Q) P(R) P(S) P(T) P(U) P(V)

P(W) P(X) P(Y) P(Z) Total de símbolos

Tabla 2.9 Frecuencia con la que se presenta cada letra del alfabeto en el archivo texto4.txt
P(A) P(B) P(C) P(D) P(E) P(F) P(G) P(H) P(I) P(J) P(K)

P(L) P(M) P(N) P(O) P(P) P(Q) P(R) P(S) P(T) P(U) P(V)

P(W) P(X) P(Y) P(Z) Total de símbolos

¿Qué ocurre con las probabilidades de los símbolos al aumentar el número de caracteres en el
texto? Realizar observaciones

4. PREGUNTAS

1. ¿Qué es una fuente de información discreta?


2. Dar la clasificación de las fuentes de información discretas
3. ¿Qué es una fuente de información discreta sin memoria? dar algún ejemplo
4. ¿Qué es una fuente de información discreta con memoria? dar algún ejemplo
5. ¿En qué consiste el principio de estacionariedad estadística en las fuentes discretas con
memoria?
6. ¿Por qué es importante conocer la estadística de una fuente de información discreta?

5. CONCLUSIONES

6. BIBLIOGRAFÍA

1.- Haykin, Simon. Sistemas de Comunicación , Limusa, México, 2002, 685 págs.
2.- Sklar, Bernard, Digital Communications Fundamental and Applications,2ª ediciòn, Prentice Hall, USA,
2001 450 págs.
3. John G. Proakis, Digital Communications,. 3rd Edition, Mc Graw-Hill, Inc. International Editions 1995,
928 págs.
4. MATLAB, Manual del usuario

10 Prof. José Ernesto Rojas Lima

También podría gustarte