Professional Documents
Culture Documents
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)
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]
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.
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.
c)
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.
III.
CONCLUSIONES
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]
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.
% --- 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');
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 ');