Vous êtes sur la page 1sur 8

1

SISTEMA DE SEGURIDAD ACTIVADO POR VOZ, UTILIZANDO LA CORRELACIN Y LA FFT (Julio de 2010)
Jorge Padilla, Carlos Campoverde, Roger Alvarado, Profesionales en Formacin, EET, UTPL

Resumen En este documento se describe el funcionamiento de un sistema de seguridad activado por voz, mediante la utilizacin del programa MATLAB. Para la demostracin del funcionamiento del mismo se utilizara la interfaz grfica (GUIDE), y a su vez se har la comunicacin entre MATLAB y Proteus, utilizando el puerto serial. ndice de Trminos Sistema de Seguridad, Correlacin, Transformada Rpida de Fourier.
I. INTRODUCCIN

c)

Transforma Discreta de Fourier

La transformada de Fourier discreta, designada por la abreviatura DFT (del ingls discrete Fourier transform), y a la que en ocasiones se denomina transformada de Fourier finita, es una transformada de Fourier ampliamente empleada en tratamiento de seales y en campos afines para analizar las frecuencias presentes en una seal muestreada.[2]
d) Correlacin:

n la actualidad la mayora de empresas, corporaciones, instituciones se inclina a obtener sistemas de seguridad novedosos y seguros, los sistemas activados por voz han sido muy acogidos por los mismos. En el presente documento trata de demostrar de una manera sencilla y prctica una de entre muchas de las formas de realizar la activacin de estos sistemas. Utilizando herramientas de Matlab nos permitir ver una interfaz donde se ingresar las voces de los usuarios para ser registrados. Posteriormente para que el sistema se active tendr que identificar el usuario e ingresar su voz con la misma frase y sistema las comprara en caso de coincidir se activara caso contrario el sistema no se activar. II. A. Marco Terico:
a) Sistema de Seguridad:
DESARROLLO

Es una operacin matemtica que permite cuantificar el grado de similitud entre dos seales, aunque aparentemente no haya evidencias de coincidencia temporal entre ellas. Su aspecto recuerda la forma de la convolucin: formalmente la diferencia entre ambas operaciones est en el signo (reflexin temporal) de unos de los operndoos. Sin embargo, las propiedades y aplicaciones de las operaciones de correlacin y convolucin son distintas. Hay correlacin entre dos variables cuando stas cambian de tal modo que los valores que toma una de ellas son, hasta cierto punto, predecibles a partir de los que toma la otra.[3][4][5] B. Desarrollo
a) Matlab

El algoritmo desarrollado tiene una lgica sencilla y usa funciones bsicas en cuanto a programacin de Matlab. El algoritmo ingresado dentro de una interfaz creado por el GUIDE de esta aplicacin se muestra en la figura.1

Conjunto de elementos que cumplen funciones especficas pero que en conjunto tratan de llegar a un fin comn, como proteger, desviar, filtrar, comparar u otra accin dentro de temas especficos como la seguridad
b) Voz Humana La vox humana varia de 80 Hz a 1100 Hz aproximadamente Aunque el tono y la intensidad del habla estn determinados principalmente por la vibracin de las cuerdas vocales, su espectro est fuertemente determinado por las resonancias del tracto vocal.

[1]

Fig. 1. Interfaz creada en Guide de Matlab

2 consiste en 2 rutinas, la primera que me permite grabar la voz de los propietario de sistema de seguridad con el comando wavrecord donde se ir muestreando de acuerdo a la frecuencia y el tiempo dado, y se podr reproducirla con el comando sound que tambin la convertir en matriz para poder compararla y leemos la misma con el comando wavread, en la interfaz existirn 2 botones uno que me permita grabar y un segundo que me permitir reproducir lo grabado cuando presione el primero aparecer un cuadro de texto que nos indique que la grabacin est guardada figura 2.

Fig. 4. Interfaz que me permite ingresar la clave que va a ser comparada con la voz guardada

Al comparar las dos seales el programa nos mostrara la seal guardada y la seal ingresada. Y al aplicar la correlacin de las 2 seales nos mostrara quien se ha registrado en el programa.

Fig. 2. Interfaz permite visualizar que la grabacin de la voz del propietario ha sido realizada.

Posteriormente de grabar la voz la interfaz me permitir reproducir la seal ingresada, y graficar la seal de entrada como su espectro en frecuencia con la transformada rpida de Fourier.

Fig. 5. Interfaz que me permite visualizar la clave ingresada y la voz guardada.

Cuando las seales tiene un nivel de compatibilidad alto aparecer un cuadro de texto indicndome que el sistema este activado, y tambin se verificar el usuario registrado.
b) Comunicacin Matlab- Proteus

Fig. 3. Interfaz permite visualizar la grafica de la grabacin de la voz del propietario y su espectro en Frecuencia.

Lo siguiente es establecer una comunicacin MatlabProteus, utilizaremos un cdigo sencillo de Matlab figura 6, para enviar los datos por el puerto serial virtual para el cual utilizaremos la aplicacin VIRTUAL SERIAL PORT.6 figura7, para crear un par de puerto virtuales que nos permitan la comunicacin.

Posteriormente de grabar la voz la interfaz me permitir que ingrese la clave con la cual quiero ingresar. En esta nueva interfaz, aparecer un botn el cual comparara la seal que se va a ingresar con las 4 seales antes grabadas. El string text visualiza qu usuario se ha registrado,

3
%ABRIR el puerto COM5 clc; disp('BEGIN') SerPIC = serial('COM5'); set(SerPIC,'BaudRate',4800); set(SerPIC,'DataBits',8); set(SerPIC,'Parity','none'); set(SerPIC,'StopBits',1); set(SerPIC,'FlowControl','none'); fopen(SerPIC); if F==0 texto='1' fprintf(SerPIC,'%s','0'); %Visualizar en la LCD enter=13; fwrite(SerPIC,enter); %Para cerrar le Puerto fclose(SerPIC); delete(SerPIC) clear SerPIC Fig. 6. Cdigo en Matlab que permite la comunicacin con Proteus por medio del puerto serial.

Fig. 9. Contador Binario de 4 Bits.

Fig. 7. VIRTUAL SERIAL PORT.6

c)

Comunicacin Matlab- Proteus

En este programa nos permita recibir los datos enviados desde Matlab, para el mismo utilizaremos un puerto serial virtual, un terminal virtual para visualizar los datos figura 8. Los datos sern recibidos y almacenados por un contador Binario de 4 bits sncrono, el integrado 74LS161.

Fig. 10. Compuertas AND y leds indicadores

III.

CONCLUSIONES

Fig. 8. Puerto serial virtual y Terminal Virtual

El pin de recepcin RX del puerto serial se conectar al CLK (reloj); del contador, el cual dependiendo de los datos enviados, almacenar un valor en Binario en sus salidas (Q0, Q1, Q2, Q3), las cuales se conectarn a compuertas AND para realizar la comparacin y en este caso se encender un Led indicador.

El reconocimiento de voz es el proceso de reconocer automticamente a una persona en base a la informacin emitida por su voz. En nuestro proyecto al realizar la FFT de la seal de voz ingresada, nos proporciona espectro de la seal, el cual brinda la informacin relevante de voz ingresada. Una vez aplicada la FFT de las seales del registro del usuario, se utiliz la correlacin, la cual es una operacin matemtica que permite cuantificar el grado de similitud entre dos seales, tanto la seal de voz almacenada, como la seal de voz ingresada. Al comparar las dos seales ingresadas el programa nos mostrar un mensaje de aviso. indicando que usuario se registr en el sistema. Para la comunicacin Matlab, Proteus se utiliz en puerto serial, adems un contador binario de 4 bits asncrono, el integrado 74LS161 que recibir los

4 datos enviados desde MatLab y los almacenar en sus registros. Una vez realizada la comunicacin Matlab Proteus, se prendera un Led indicador para mostrar que usuario se ha registrado en el sistema. IV.
[1] REFERENCIAS

[2]

[3] [4] [5]

La voz, [En Linea], <http://www.ehu.es/acustica/espanol/musica/vohues/vohues.html>, [Consulta Mayo 2010] Transformada de Fourier,[En Lnea], <http://es.wikipedia.org/wiki/Transformada de fourier>[Consulta Mayo 2010] Identificador de Voz, Revista En Corto Circuito Nro. 12, Marzo 2007, Artculo publicado por: Marcelo Valdivieso Lawrence P. Huelsman. Prentice-Hall, Seales y Sistemas. Segunda edicin. Hispanoamericana, S.A Joseph A. Edminister. Mahmood Nahvi, Seales y Sistemas. Tercera edicin. Mc Graw-Hill.

5 V. A. Cdigo del Programa:


function varargout = Sistema_Reconocimeinto_de_voz(varargin) % SISTEMA_RECONOCIMEINTO_DE_VOZ M-file for Sistema_Reconocimeinto_de_voz.fig % SISTEMA_RECONOCIMEINTO_DE_VOZ, by itself, creates a new SISTEMA_RECONOCIMEINTO_DE_VOZ or raises the existing % singleton*. % % H = SISTEMA_RECONOCIMEINTO_DE_VOZ returns the handle to a new SISTEMA_RECONOCIMEINTO_DE_VOZ or the handle to % the existing singleton*. % % SISTEMA_RECONOCIMEINTO_DE_VOZ('CALLBACK',hObject,e ventData,handles,...) calls the local % function named CALLBACK in SISTEMA_RECONOCIMEINTO_DE_VOZ.M with the given input arguments. % % SISTEMA_RECONOCIMEINTO_DE_VOZ('Property','Value',. ..) creates a new SISTEMA_RECONOCIMEINTO_DE_VOZ or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before Sistema_Reconocimeinto_de_voz_OpeningFunction gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to Sistema_Reconocimeinto_de_voz_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 Sistema_Reconocimeinto_de_voz % Last Modified by GUIDE v2.5 25-May-2010 15:46:35 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @Sistema_Reconocimeinto_de_voz_OpeningFcn, ... 'gui_OutputFcn', @Sistema_Reconocimeinto_de_voz_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) 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 ANEXOS function Sistema_Reconocimeinto_de_voz_OpeningFcn(hObject, eventdata, handles, varargin) %% Imagen Fondo del Proyecto axes(handles.Imagen) [x,map]=imread('ABSTRACTO32.jpg','jpg'); image(x),colormap(map),axis off,hold on %% Ttulo del Proyecto text(60,70,' SISTEMA DE SEGURIDAD','Fontname','Arial','Fontsize',20,'Fonta ngle','Italic', ... 'Fontweight','Bold','color','black'); text(55,120,' ACTIVADO POR VOZ','Fontname','Arial','Fontsize',20,'Fontangle', 'Italic', ... 'Fontweight','Bold','color','black'); %% % Choose default command line output for Sistema_Reconocimeinto_de_voz handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes Sistema_Reconocimeinto_de_voz wait for user response (see UIRESUME) % uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line. function varargout = Sistema_Reconocimeinto_de_voz_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; % --- Executes when user attempts to close figure1. function figure1_CloseRequestFcn(hObject, eventdata, handles) %% Mensaje Salir del Prograna salir=questdlg('Desea salir del programa?',... 'SALIR','Si','No','No'); if strcmp(salir,'No') return; end delete(hObject); % --- Executes on button press in ingresar. function ingresar_Callback(hObject, eventdata, handles) % ---------------------------------set(handles.ingresar,'Visible','off'); set(handles.registrar,'Visible','on'); set(handles.comparar,'Visible','on'); % ---------------------------------% --- Executes on button press in registrar. function registrar_Callback(hObject, eventdata, handles) % ---------------------------------set(handles.registrar,'Visible','off'); set(handles.comparar,'Visible','off'); set(handles.menu,'Visible','on');

% --- Executes just before Sistema_Reconocimeinto_de_voz is made visible.

6
set(handles.u1,'Visible','on'); set(handles.u2,'Visible','on'); set(handles.u3,'Visible','on'); set(handles.u4,'Visible','on'); % ---------------------------------y = wavrecord(t*Fs, Fs); wavwrite(y,Fs,'prueba4.wav'); msgbox(' Registrado',' Sistema de Seguridad '); % -------------------- Aplicacion de la Transformada Discreta de Fourier------------[prueba4,Fs,NBITS]=wavread('prueba4.wav'); TF4=abs(fft(prueba4)); % ---------------------------------handles.usuario4=y; guidata(hObject,handles) handles.TF4=TF4; guidata(hObject,handles) % ---------------------------------set(handles.repro4,'Visible','on'); % ---------------------------------%% % --- Executes on button press in menu. function menu_Callback(hObject, eventdata, handles) axes(handles.axes6); z =1; s = plot(z); axes(handles.axes7); z2=1; s1= plot(z2); % ---------------------------------set(handles.registrar,'Visible','on'); set(handles.comparar,'Visible','on'); set(handles.menu,'Visible','off'); set(handles.u1,'Visible','off'); set(handles.u2,'Visible','off'); set(handles.u3,'Visible','off'); set(handles.u4,'Visible','off'); % ---------------------------------set(handles.repro1,'Visible','off'); set(handles.repro2,'Visible','off'); set(handles.repro3,'Visible','off'); set(handles.repro4,'Visible','off'); set(handles.axes6,'Visible','off'); set(handles.axes7,'Visible','off'); % ---------------------------------%% ---- Opciones de Reproduccion y Graficacion % --- Executes on button press in repro1. function repro1_Callback(hObject, eventdata, handles) y1 = handles.usuario1; y2 = handles.TF1; % --------Reproduccion de la Seal Ingresada por Usuario 1 ------------z = wavread('prueba1.wav'); sound(z,11025) % --------Grafica de la Seal de Voz1 -----------axes(handles.axes6); a = plot(y1); % --------Grafica de la FFT de la Voz1 -----------axes(handles.axes7); b = plot(y2);

%% --- Registro de Voz de Usuarios (u1, u2, u3,u4) % --- Executes on button press in u1. function u1_Callback(hObject, eventdata, handles) Fs = 11025; t = 3; y = wavrecord(t*Fs, Fs); wavwrite(y,Fs,'prueba1.wav'); msgbox(' Registrado',' Sistema de Seguridad '); % -------------------- Aplicacion de la Transformada Discreta de Fourier------------[prueba1,Fs,NBITS]=wavread('prueba1.wav'); TF1=abs(fft(prueba1)); % ---------------------------------handles.usuario1=y; guidata(hObject,handles) handles.TF1=TF1; guidata(hObject,handles) % ---------------------------------set(handles.repro1,'Visible','on'); % ---------------------------------% --- Executes on button press in u2. function u2_Callback(hObject, eventdata, handles) Fs = 11025; t = 3; y = wavrecord(t*Fs, Fs); wavwrite(y,Fs,'prueba2.wav'); msgbox(' Registrado',' Sistema de Seguridad '); % -------------------- Aplicacion de la Transformada Discreta de Fourier------------[prueba2,Fs,NBITS]=wavread('prueba2.wav'); TF2=abs(fft(prueba2)); % ---------------------------------handles.usuario2=y; guidata(hObject,handles) handles.TF2=TF2; guidata(hObject,handles) % ---------------------------------set(handles.repro2,'Visible','on'); % ---------------------------------% --- Executes on button press in u3. function u3_Callback(hObject, eventdata, handles) Fs = 11025; t = 3; y = wavrecord(t*Fs, Fs); wavwrite(y,Fs,'prueba3.wav'); msgbox(' Registrado',' Sistema de Seguridad '); % -------------------- Aplicacion de la Transformada Discreta de Fourier------------[prueba3,Fs,NBITS]=wavread('prueba3.wav'); TF3=abs(fft(prueba3)); % ---------------------------------handles.usuario3=y; guidata(hObject,handles) handles.TF3=TF3; guidata(hObject,handles) % ---------------------------------set(handles.repro3,'Visible','on'); % ---------------------------------% --- Executes on button press in u4. function u4_Callback(hObject, eventdata, handles) Fs = 11025; t = 3;

% --- Executes on button press in repro2. function repro2_Callback(hObject, eventdata, handles) y3 = handles.usuario2; y4 = handles.TF2; % --------Reproduccion de la Seal Ingresada por Usuario 2 ------------z = wavread('prueba2.wav');

7
sound(z,11025) % --------Grafica de la Seal de Voz2 -----------axes(handles.axes6); a = plot(y3); axis normal % --------Grafica de la FFT de la Voz2 -----------axes(handles.axes7); b = plot(y4); axis normal % --- Executes on button press in repro3. function repro3_Callback(hObject, eventdata, handles) y5 = handles.usuario3; y6 = handles.TF3; % --------Reproduccion de la Seal Ingresada por Usuario 3 ------------z = wavread('prueba3.wav'); sound(z,11025) % --------Grafica de la Seal de Voz3 -----------axes(handles.axes6); a = plot(y5); axis normal % --------Grafica de la FFT de la Voz3 -----------axes(handles.axes7); b = plot(y6); axis normal % --- Executes on button press in repro4. function repro4_Callback(hObject, eventdata, handles) y7 = handles.usuario4; y8 = handles.TF4; % --------Reproduccion de la Seal Ingresada por Usuario 4 ------------z = wavread('prueba4.wav'); sound(z,11025) % --------Grafica de la Seal de Voz4 -----------axes(handles.axes6); a = plot(y7); axis normal % --------Grafica de la FFT de la Voz4 -----------axes(handles.axes7); b = plot(y8); axis normal % --- Executes on button press in comparar. function comparar_Callback(hObject, eventdata, handles) % ---------------------------------set(handles.registrarse,'Visible','on'); set(handles.menu1,'Visible','on'); set(handles.registrar,'Visible','off'); set(handles.comparar,'Visible','off'); % ---------------------------------% --- Executes on button press in menu1. function menu1_Callback(hObject, eventdata, handles) axes(handles.axes6); z =1; s = plot(z); axes(handles.axes7); z2=1; s1= plot(z2); % ---------------------------------set(handles.menu1,'Visible','off'); set(handles.registrarse,'Visible','off'); set(handles.registrar,'Visible','on'); set(handles.comparar,'Visible','on'); set(handles.axes6,'Visible','off'); set(handles.axes7,'Visible','off'); % ---------------------------------set(handles.text1,'String','') set(handles.text1,'Visible','off') % ---------------------------------% --- Executes on button press in registrarse. function registrarse_Callback(hObject, eventdata, handles) % Comparacion de la voz grabada e ingresada en el sistema X1 = handles.TF1; X2 = handles.TF2; X3 = handles.TF3; X4 = handles.TF4; Fs = 11025; t = 3; y = wavrecord(t*Fs, Fs); wavwrite(y,Fs,'prueba5.wav'); msgbox(' Registrado',' Sistema de Seguridad '); % -------------------- Aplicacion de la Transformada Discreta de Fourier------------[prueba5,Fs,NBITS]=wavread('prueba5.wav'); TF5=abs(fft(prueba5)); % ---------------------------------z = wavread('prueba5.wav'); sound(z,11025) % --------Grafica de la Seal de Voz2 -----------axes(handles.axes6); a = plot(TF5); axis normal S A B C D = = = = = TF5; (CORR(X1,S))*100; (CORR(X2,S))*100; (CORR(X3,S))*100; (CORR(X4,S))*100;

%% IDENTIFICACION if A > B & A > C & A > D set(handles.text1,'String','SISTEMA ACTIVADO--USUARIO--JORGE') axes(handles.axes7); a1 = plot(X1); %ABRIR el puerto COM5 clc; disp('BEGIN') SerPIC = serial('COM5'); set(SerPIC,'BaudRate',4800); set(SerPIC,'DataBits',8); set(SerPIC,'Parity','none'); set(SerPIC,'StopBits',1); set(SerPIC,'FlowControl','none'); fopen(SerPIC); axis normal texto='1' fprintf(SerPIC,'%s','0\n'); %fprintf(SerPIC,'%c',char(48)); %Para cerrar le Puerto fclose(SerPIC); delete(SerPIC) clear SerPIC disp('STOP') elseif B > A & B > C & B > D set(handles.text1,'String','SISTEMA ACTIVADO--USUARIO--CARLOS') axes(handles.axes7); a2 = plot(X2); %ABRIR el puerto COM5 clc; disp('BEGIN') SerPIC = serial('COM5'); set(SerPIC,'BaudRate',4800); set(SerPIC,'DataBits',8);

8
set(SerPIC,'Parity','none'); set(SerPIC,'StopBits',1); set(SerPIC,'FlowControl','none'); fopen(SerPIC); texto='2' fprintf(SerPIC,'%s','1\n'); %Para cerrar le Puerto fclose(SerPIC); delete(SerPIC) clear SerPIC disp('STOP') elseif C > A & C > B & C > D set(handles.text1,'String','SISTEMA ACTIVADO--USUARIO--ROYER') axes(handles.axes7); a3 = plot(X3); %ABRIR el puerto COM5 clc; disp('BEGIN') SerPIC = serial('COM5'); set(SerPIC,'BaudRate',4800); set(SerPIC,'DataBits',8); set(SerPIC,'Parity','none'); set(SerPIC,'StopBits',1); set(SerPIC,'FlowControl','none'); fopen(SerPIC); texto='3' fprintf(SerPIC,'%s','11\n'); %fprintf(SerPIC,'%c',char(00)); %Para cerrar le Puerto fclose(SerPIC); delete(SerPIC) clear SerPIC disp('STOP') elseif D > A & D > B & D > C set(handles.text1,'String','SISTEMA ACTIVADO--USUARIO--') axes(handles.axes7); a4 = plot(X4); %ABRIR el puerto COM5 clc; disp('BEGIN') SerPIC = serial('COM5'); set(SerPIC,'BaudRate',4800); set(SerPIC,'DataBits',8); set(SerPIC,'Parity','none'); set(SerPIC,'StopBits',1); set(SerPIC,'FlowControl','none'); fopen(SerPIC); texto='4' fprintf(SerPIC,'%s','15\n'); %fprintf(SerPIC,'3'); %Para cerrar le Puerto fclose(SerPIC); delete(SerPIC) clear SerPIC disp('STOP') end % ---------------------------------set(handles.text1,'Visible','on'); % ---------------------------------% --- Executes on button press in integrantes. function integrantes_Callback(hObject, eventdata, handles) msgbox('Jorge Padilla - Carlos Campoverde - Roger Alvarado',' INTEGRANTES ');

Vous aimerez peut-être aussi