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