Subido por guepardobeyond

Representación de un canal en Matlab

Anuncio
INSTITUTO POLITÉCNICO NACIONAL
ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA
UNIDAD PROFESIONAL CULHUACÁN
INGENIERÍA EN COMPUTACIÓN
INTEGRANTES:
AYALA GOMEZ CRISTIAN JOEL.
CISNERO CHACON DANALY.
RAMIREZ ROJAS DULCE IVON.
TEORIA DE LA INFORMACION Y CODIFICACION.
PRACTICA 8:
“Representación de un canal en matlab”
M E X I C O, CDMX, 21 DE M A Y O DEL 2018.
Página 1 de 13
Objetivo:
El alumno representara un canal simétrico binario de comunicación por medio de matrices en
Matlab.
Introduccion:
Un canal de comunicación puede ser definido, como la ruta o medio a través del
cual los símbolos fluyen para ser recibidos. Un canal discreto sin memoria (DMC)
es un modelo estadístico con una entrada “X” y una salida “Y” como se muestra.
X1
Y1
X2
.
.
.
Xm
Y2
.
.
.
Ym
X
P (Yj/Xi)
Y
Durante cada intervalo de señalización, el canal acepta una señal de entrada “X” y
este responde generando una salida de símbolo “Y”.
El canal es discreto cuando el alfabeto tanto de “X” como de “Y” son valores
finitos. Y es sin memoria cuando la salida actual únicamente depende de la
entrada actual y no de alguna entrada previa.
El diagrama de un DMC con “m” entradas y “n” salidas se muestra a continuación.
P(Y1 | X1)
P(Y1 | X2)
…………
…………
P(Y1 | Xm)
P(Y2 | X1)
P(Y2 | X2)
…………
…………
P(Y2 | Xm)
…………
…………
…………
…………
…………
P(Yn | X1)
P(Yn | X2)
…………
…………
P(Yn | Xm)
La entrada “X” consta de símbolos x1, x2, … xm. La salida “Y” consta de los
símbolos y1, y2, … yn. Cada posible ruta de entrada y salida es indicada con una
Página 2 de 13
probabilidad condicional P (Yj/Xi) la cual indica la probabilidad de tener una salida
“Y”, dada la entrada “X” y es llamada probabilidad de transición del canal.
Un canal es completamente especificado por el conjunto de probabilidades de
transición. Así un DMC usualmente se especifica por una matriz de probabilidad
de transición [P (y/x)].
La matriz [P (y/x)] es llamada matriz del canal, cada fila de la matriz especifica las
probabilidades de obtener y1, y2, … yn dada x1. Asi la suma de los elementos en
cualquier fila debe ser la unidad.
∑𝑛𝑗=1 𝑃 ( 𝑌𝑗 |𝑋𝑖) = 1
Si las probabilidades P(X) son representadas por las filas de la matriz, entonces
tenemos:
[ P(X) ] = [P (X1) P (X2) ……….P(Xm)]
Las probabilidades de salida P(y) están representadas por las filas de la matriz.
[ P(Y) ] = [P (Y1) P (Y2) ……….P(Yn)]
Las probabilidades de salida pueden ser representadas en términos de las
probabilidades de entrada.
[ P(Y) ] = [P ( X) ] [ P ( Y | X ) ]
Si [ P (x) ] es representada como una matriz diagonal.
P(X1)
0
……….
0
0
P(X2)
……….
0
……….
……….
……….
0
0
0
……….
P(Xm)
Entonces [P(X,Y)] = [P( X ) ]d
*
[ P ( Y | X )]
El elemento (i.j) de la matriz [ P ( X | Y )], tendrá la forma p(xi,yj). La matriz [P(X,Y)]
es conocida como la probabilidad articulada de la matriz y el elemento p(xi,yj) es la
probabilidad articulada de transmitir Xi y recibir Yj.
Página 3 de 13
Un canal descrito por una matriz del canal con solo un elemento distinto de cero
en cada columna se llama un canal sin perdidas.
En un canal sin perdidas si ninguna información de origen se pierde en la
transmisión.
Y1
X1
3/4
1/4
0
0
0
0
0
1/3
2/3
0
0
0
0
0
1
Y2
1/3
Y3
X2
Y4
X3
Y5
Un canal descrito por una matriz de canal con solo un elemento distinto de cero en
cada fila se llama un canal determinista.
X1
Y1
X2
X3
Y2
X4
Y3
X5
1
1
[𝑃 (𝑌|𝑋 )] = 0
0
[0
Página 4 de 13
0
0
1
1
0
0
0
0
0
1]
Dado que cada fila tiene un solo elemento en cada fila y en cada columna, y este
elemento es la unidad.
Cuando se envía un símbolo de origen dado a un canal determinista es evidente
que el símbolo de salida se recibe. Un canal es llamado sin ruido si no perdidas y
deterministas. La matriz del canal tiene un solo elemento en cada fila y en cada
columna, este elemento es la unidad. Los alfabetos de entrada y salida son del
mismo tamaño.
1
Y1
X1
1
X2
Y2
1
X3
Y3
1
Xm
Ym
CANAL BINARIO SIMETRICO.
Un canal binario simétrico se define por el diagrama del canal que se muestra a
continuación y su matriz de canal está dada por:
[𝑃 (𝑌|𝑋)] = [
X1=0
1−𝑝
𝑝
]
𝑝
1−𝑝
1-p
Y1=0
p
p
X2=1
1-p
Y2=1
La matriz de canal tiene 2 entradas 0 y 1 y 2 salidas 0 y 1.
Página 5 de 13
Este canal es simétrico por que la probabilidad de recibir un 1 si un 0 se envía es
la misma que la probabilidad de recibir un cero si un 1 se envía. Esta probabilidad
común de transferencia esta presentada por la probabilidad p.
EJEMPLOS:
1. A partir del siguiente diagrama:
0.9
p(X1)
Y1
0.1
0.2
p(X2)
0.8
Y2
a) Encuentre la matriz de canal, del canal binario.
b) Encuentra p(y1) y p(y2) cuando p(x1)=p(x2)=0.5
c) Encuentra las probabilidades de articulación p(x1,y2) and p(x2,y1)
cuando p(x1)=p(x2)=0.5
Solución:
𝑀𝐴𝑇𝑅𝐼𝑍 𝐷𝐸 𝐶𝐴𝑁𝐴𝐿
𝑝(𝑦1|𝑥1 )
𝑝 ( 𝑦 |𝑥 ) = [
𝑝(𝑦1|𝑥2 )
[𝑃(𝑌)] = [𝑃(𝑋)][𝑃(𝑋|𝑌 )]
𝑝(𝑦2|𝑥1 )
0.9 0.1
]= [
]
(
|
)
𝑝 𝑦2 𝑥2
0.2 0.8
0.9 0.1
= [ 0.5 0.5] (
) = [0.55 0.45]
0.2 0.8
𝑝(𝑦1) = 0.55 𝑝(𝑦2) = 0.45
Desarrollo:
Realiza un programa en Matlab que utilice como entrada una secuencia de bits
provenientes de una imagen a escala de grises (no utilices una imagen demasiado
grande), es probable que te sean de utilidad las funciones “reshape ()”, “rem()” y
“berr”, el canal por el que se transmitirá la secuencia de bits será un canal binario
simétrico. Los bits que se envían a través del canal no se deben de enviar de una
sola vez, estos se enviaran los grupos de 7 bits. Utiliza la función “randerr()” para
Página 6 de 13
generar errores en la transmisiones y agrupa los bits de salida de una sola
secuencia después compara los bits de entrada con los bits con los bits de salida y
cuenta la cantidad de bits de errores. Pasa el vector de salida a una matriz con
dimensiones iguales a la matriz de la imagen de entrada.
Por ultimo compara las imágenes de entrada y salida, comenta el efecto que tubo.
Resultados:
function varargout = Practica8(varargin)
% PRACTICA8 MATLAB code for Practica8.fig
%
PRACTICA8, by itself, creates a new PRACTICA8 or raises the
existing
%
singleton*.
%
%
H = PRACTICA8 returns the handle to a new PRACTICA8 or the handle
to
%
the existing singleton*.
%
%
PRACTICA8('CALLBACK',hObject,eventData,handles,...) calls the
local
%
function named CALLBACK in PRACTICA8.M with the given input
arguments.
%
%
PRACTICA8('Property','Value',...) creates a new PRACTICA8 or
raises the
%
existing singleton*. Starting from the left, property value pairs
are
%
applied to the GUI before Practica8_OpeningFcn gets called. An
%
unrecognized property name or invalid value makes property
application
%
stop. All inputs are passed to Practica8_OpeningFcn via varargin.
%
%
*See GUI Options on GUIDE's Tools menu. Choose "GUI allows only
one
%
instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help Practica8
% Last Modified by GUIDE v2.5 07-May-2018 19:42:08
% Begin initialization code - DO NOT
gui_Singleton = 1;
gui_State = struct('gui_Name',
'gui_Singleton',
'gui_OpeningFcn',
'gui_OutputFcn',
'gui_LayoutFcn',
'gui_Callback',
if nargin && ischar(varargin{1})
EDIT
mfilename, ...
gui_Singleton, ...
@Practica8_OpeningFcn, ...
@Practica8_OutputFcn, ...
[] , ...
[]);
Página 7 de 13
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before Practica8 is made visible.
function Practica8_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject
handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
% varargin
command line arguments to Practica8 (see VARARGIN)
% Choose default command line output for Practica8
handles.output = hObject;
filtroCell = {...
%Crea una cell con los valores para el
filtro al seleccionar un archivo
'*.bmp;*.jpg;*.jpeg;*.png','Imagenes'; ...
'*.*','Todos los archivos'};
handles.filtro = filtroCell;
% Guarda el filtro creado en la variable
'filtro' de handles
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes Practica8 wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = Practica8_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject
handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
function editExaminar_Callback(hObject, eventdata, handles)
% hObject
handle to editExaminar (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of editExaminar as text
Página 8 de 13
%
str2double(get(hObject,'String')) returns contents of
editExaminar as a double
cargar(hObject, eventdata, handles);
% Al dar enter al editText se
inicia la carga del archivo
% --- Executes during object creation, after setting all properties.
function editExaminar_CreateFcn(hObject, eventdata, handles)
% hObject
handle to editExaminar (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
empty - handles not created until after all CreateFcns
called
% Hint: edit controls usually have a white background on Windows.
%
See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in pushbuttonExaminar.
function pushbuttonExaminar_Callback(hObject, eventdata, handles)
% hObject
handle to pushbuttonExaminar (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
[archivo,ruta] = uigetfile(handles.filtro,'Seleciona un archivo de
Imagen');
if ~isequal(archivo,0) % Si se seleciono un archivo
set(handles.editExaminar,'string',[ruta,archivo]); % Se establce la
ruta del archivo en el editText
editExaminar_Callback(hObject, eventdata, handles); % Inicia la
funcion de dar Enter al editText Examinar
end
function cargar(hObject, eventdata, handles)
%% Si se seleccionó un archivo existente, se carga la imagen
dir = get(handles.editExaminar,'String');
if ~exist(dir,'file')
return
end
%% Si la imagen es a color la covierte a escala de grises
imagen = imread(dir);
if length(size(imagen)) == 3
k = [0.2989 0.5870 0.1140];
imagen = imagen(:,:,1)*k(1) + imagen(:,:,2)*k(2) +
imagen(:,:,3)*k(3);
end
%% Muestra la imagen original
axes(handles.axes1)
imshow(imagen);
errores = 0;
tam = size(imagen); % Dimesiones de la imagen
%% De la imagen genera un vector unidimensional con el total de bits de
la imagen
entrada = uint8([]);
Página 9 de 13
salida = uint8([]);
for i = 1 : 1 : tam(1)
for j = 1 : 1 : tam(2)
entrada = [entrada,dec2bin(imagen(i,j),8)-48];
end
end
%% Pasa los bits en grupos de 7 por el canal binario generado errores
aleatorios
try
for i = 1 : 7 : length(entrada)
if ~randi([0,1])
salida = [salida,canalbinario(entrada(i:i+7-1),7)];
errores = errores + 1;
else
salida = [salida,entrada(i:i+7-1)];
end
end
catch
salida = [salida,entrada(i:length(entrada))];
end
%% Compara los vectores de entrada y salida para contar los errores
errores = sum(xor(entrada,salida));
%% Convierte el vector salida en una nueva imagen
newImagen = uint8([]);
k = 1;
for i = 1 : tam(1)
for j = 1 : tam(2)
newImagen(i,j) = bin2dec(strrep(num2str(salida((k-1)*8+1:k*8)),'
',''));
k = k + 1;
end
end
%% Muestra la nueva imagen
axes(handles.axes2)
imshow(newImagen);
%% Muestra el total de errores encotrados
set(handles.text5,'string',errores);
function salida = canalbinario(entrada,nbits)
byte = xor(entrada,randerr(1,nbits));
% Se le resta 48 para que
este en valores de 0 y 1
% Se le hace un xor con un vector aleatorio con lo cual intercambia
un bit
salida = byte;
%salida = bin2dec(strrep(num2str(byte),' ',''));
% Se convierte el valor a string quitando los espacios para poder
convertirlo a entero
Página 10 de 13
Página 11 de 13
Página 12 de 13
Conclusion:
Con esta práctica podemos concluir que se aprendió varios conceptos, así como
también, funciones de MATLAB que nos ayudaron a resolver la práctica. Lo que
realizamos es que utilizamos un conjunto de secuencia en bits de una imagen de
escala de grises y utilizamos unas funciones que se mencionaron anteriormente el
cual nos ayudó a generar errores en la transmisión y así poderlo comprar con un
grupo de secuencias de bits de salida. Y utilizamos otra función para que un vector
de salida pase a una matriz que tiene dimensiones iguales a la matriz de la
imagen que insertamos desde el principio de que se ejecutó el programa.
Página 13 de 13
Descargar