-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsesion.m
151 lines (114 loc) · 5.42 KB
/
sesion.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
function varargout = sesion(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @sesion_OpeningFcn, ...
'gui_OutputFcn', @sesion_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
% --- Executes just before sesion is made visible.
function sesion_OpeningFcn(hObject, eventdata, handles, varargin)
% Choose default command line output for sesion
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes sesion wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = sesion_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
user= get(handles.edit1,'String' );
if isempty(user)
warndlg('Ingrese el nombre del usuario ', 'Mensaje');
else
ruta = strcat('grabaciones/',user, '.wav')
ruta
if exist(ruta) == 0 % Verifica que el usuario exista
warndlg('El usuario no existe', 'Mensaje');
else
% Graba segunda senal
tiempo_grabacion = 2;
frecuencia_sonido = 44100;
%frecuencia_sonido = 22050;
grabacion = audiorecorder(frecuencia_sonido, 24, 1); % audiorecorder(Fs,nBits,nChannels)
% Mensajes por consola para marcar inicio y final de la grabacion
grabacion.StartFcn = 'disp('' iniciando grabación '')';
grabacion.StopFcn = 'disp('' grabación finalizada '')';
%input (' Presione enter para grabar la segunda senal')
set(handles.text4,'String','Grabando...' );
recordblocking(grabacion, tiempo_grabacion);
set(handles.text4,'String','Terminado' );
sonido2 = grabacion.getaudiodata();
%audiowrite ( 'grabaciones/grabacion2.wav', sonido2, frecuencia_sonido );
%input ( 'Senal 2 capturada' );
ruta = strcat('grabaciones/',user, '.wav')
sonido1 = audioread(ruta);
%input ( 'Presione enter para escuchar la primera grabacion' );
pause(2)
sound ( sonido1, frecuencia_sonido );
%input ( 'Presione enter para escuchar la segunda grabacion' );
pause(2)
sound ( sonido2, frecuencia_sonido );
sonido1 = normalizar(sonido1);
voz1 = abs(fft (sonido1)); % Se obtiene la transforma de fourier de la primera grabacion
voz1 = voz1.*conj(voz1); % Se obtiene el conjugado
voz1f = voz1 (1:100); % Solo acepta las frecuencia arriba de 100Hz
voz1fn = voz1f/sqrt(sum (abs (voz1f).^2)); % Se normaliza el vector
sonido2 = normalizar(sonido2);
voz2 = abs(fft (sonido2)); % Se obtiene la transforma de fourier de la primera grabacion
voz2 = voz2.*conj(voz2); % Se obtiene el conjugado
voz2f = voz2 (1:100); % Solo acepta las frecuencia arriba de 100Hz
voz2fn = voz2f/sqrt(sum (abs (voz2f).^2)); % Se normaliza el vector
disp('Diferencia fft (transformada de fourier)');
disp(mean(abs(voz1-voz2)));
% Correlacion de pearson http://www.monografias.com/trabajos85/coeficiente-correlacion-karl-pearson/coeficiente-correlacion-karl-pearson.shtml
disp('Correlacion de Pearson');
disp(corr(voz1, voz2 ));
% disp('Coeficiente de error entre ambas grabaciones:')
% error(1) = mean(abs(voz2-voz1));
% disp(error(1))
figure(1)
subplot(2,3,1),plot(sonido1); % Relacion de posicion de la grafica
title ('Grabacion 1')
subplot(2,3,5), plot(voz1fn); % Espectro de la grabacion 1
title ('Espectro de la grabacion 1');
subplot(2,3,2),plot(sonido2); % Relacion de posicion de la grafica
title ('Grabacion 2')
subplot(2,3,4), plot(voz2fn); % Espectro de la grabacion 1
title ('Espectro de la grabacion 2');
Fmuestra = fft(sonido1);
Fusuario = fft(sonido2);
subplot(2, 3, 3)
plot(abs(Fusuario))
hold on
plot(abs(Fmuestra))
title('Frecuencias');
legend('Sesión','Registrada');
if corr(voz1, voz2 )< 0.4
errordlg('No pudo iniciar sesion ', 'Mensaje');
else
msgbox('Se ha iniciado sesion!! ', 'Mensaje');
end
end
end
function edit1_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
close
base;