You are on page 1of 20

RECONOCIMIENTO DE

UNA VOCAL EN BASE A


UN DOMINIO DE
FRECUENCIAS
EMPLEANDO MATLAB

ESCUELA PROFESIONAL DE INGENIERÍA MECATRÓNICA


UNIVERSIDAD NACIONAL DE TRUJILLO
MATRICES ORTOGONALES

Una matriz A se dice matriz ortogonal o simplemente ortogonal si es


una matriz cuadrada y las columnas de A forman un conjunto
ortonormal.
A n x n: A es ortogonal si AT. A = I.

 Observe que el teorema anterior se deduce de que para dos


vectores x y y en Rn, x • y = x’.y:
SERIE DE FOURIER

En cada intervalo de 2π todos los senos y cosenos son mutuamente ortogonales


Para poder encontrar los coeficientes de esta serie se multiplica en ambos lados
por 1 , cos kx , sen kx e integrar desde –π a π.
La ortogonalidad nos permite eliminar una gran cantidad de integrales y quedarnos
Con solo una, la que necesitamos.
SERIE DE FOURIER COMPLEJA

Para encontrar ck multiplicamos ambos lados por e-ikx e integramos de –π a π


MATRIZ DE FOURIER

Matriz de Fourier FN para N=4:

En general:
TRANSFORMADA DISCRETA DE
FOURIER
La matriz de Fourier FN y FN-1 produce la transformada discreta de
Fourier y su inversa. Una función de serie infinita se convierte en un
vector con sumas finitas.
TRANSFORMADA RAPIDA DE
FOURIER

I: matriz identidad IN/2


D: matriz diagonal DN/2
FN/2: matriz de Fourier con la mitad de valores distintos de zero
La ultima matriz e una de permutación par e impar
TEORÍA DE FILTROS

 Filtro pasa bajo


 Filtro pasa alto
 Filtro pasa banda
 Filtro de banda eliminada
DISEÑO DE FILTRO
En la ventana de comando de matlab, escribir fdatool, presionar
enter.
Se selecciona como tipo de respuesta un pasabanda digital, el método de diseño sera un filtro
digital de tipo análogo (IR=infinitas entradas de respuesta) .
En fiter order seleccionamos «minimum order» . Esto nos permite que MATLAB
calcule el numero de orden del filtro
Colocamos las especificaciones del filtro y seleccionamos disign fiter, para
generar el filtro.
Exportar como objetos.

El filtro aparecerá en el espacio de trabajo


MATLAB genera la respuesta para los parámetros del filtro que se quiere diseñar
Exportaremos nuestro filtro a workspace
METODOLOGÍA
PROGRAMACIÓN
Código para la grabación de vocales:
Fs=44100;
a=audiorecorder(Fs,8,1);
disp('comenzar a');
recordblocking(a,5);
disp('terminó a');
y=getaudiodata(a);
audiowrite('a.wav',y,Fs);

a=audiorecorder(Fs,8,1);
disp('comenzar e');
recordblocking(a,5);
disp('terminó e');
y=getaudiodata(a);
audiowrite('e.wav',y,Fs);

a=audiorecorder(Fs,8,1);
disp('comenzar i');
recordblocking(a,5);
disp('terminó i');
y=getaudiodata(a);
audiowrite('i.wav',y,Fs);

a=audiorecorder(Fs,8,1);
disp('comenzar o');
recordblocking(a,5);
disp('terminó o');
y=getaudiodata(a);
audiowrite('o.wav',y,Fs);

a=audiorecorder(Fs,8,1);
disp('comenzar u');
recordblocking(a,5);
disp('terminó u');
y=getaudiodata(a);
audiowrite('u.wav',y,Fs);
Código para el reconocimiento de vocales:
% --- Outputs from this function are returned to the command line.
function varargout = interfaz_OutputFcn(hObject, eventdata, handles)
global transfvocala;
global transfvocale;
global transfvocali;
global transfvocalo;
global transfvocalu;
global filtrovoz;
global ya;
global ye;
global yi;
global yo;
global yu;
v1=audioread('a.wav');
v2=audioread('e.wav');
v3=audioread('i.wav');
v4=audioread('o.wav');
v5=audioread('u.wav');

ya=filter(filtrovoz,v1);
ye=filter(filtrovoz,v2);
yi=filter(filtrovoz,v3);
yo=filter(filtrovoz,v4);
yu=filter(filtrovoz,v5);

vocala=norm(ya);
vocale=norm(ye);
vocali=norm(yi);
vocalo=norm(yo);
vocalu=norm(yu);

transfvocala=abs(fft(vocala));
transfvocale=abs(fft(vocale));
transfvocali=abs(fft(vocali));
transfvocalo=abs(fft(vocalo));
transfvocalu=abs(fft(vocalu));
% --- Executes on button press in GRABAR.
function GRABAR_Callback(hObject , eventdata, handles)
% hObject handle to GRABAR (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global transfvocala;
global transfvocale;
global transfvocali;
global transfvocalo;
global transfvocalu;
global filtrovoz;
global ya;
global ye;
global yi;
global yo;
global yu;
Fs=44100;
a=audiorecorder(Fs,8,1);
disp('comenzar1');
recordblocking(a,5);
disp('terminó1');
y=getaudiodata(a);
audiowrite('voz.wav',y,Fs);
voz_usuario=audioread('voz.wav');
yuser=filter(filtrovoz,voz_usuario);
usuario=norm(voz_usuario);
global yu;
Fs=44100;
a=audiorecorder(Fs,8,1);
disp('comenzar1');
recordblocking(a,5);
disp('terminó1');
y=getaudiodata(a);
audiowrite('voz.wav',y,Fs);
voz_usuario=audioread('voz.wav');
yuser=filter(filtrovoz,voz_usuario);
usuario=norm(voz_usuario);
transfusuario=abs(fft(usuario));
axes(handles.axes4);
plot(abs(fft(yuser(1:floor(end/2)))));
ylim([0 600]);
error(1)=mean(abs(minus(transfvocala,transfusuario)));
error(2)=mean(abs(minus(transfvocale,transfusuario)));
error(3)=mean(abs(minus(transfvocali,transfusuario)));
error(4)=mean(abs(minus(transfvocalo,transfusuario)));
error(5)=mean(abs(minus(transfvocalu,transfusuario)));

min_error=min(error);
disp(min_error);
disp(error);
if(min_error==error(1))
vocal='A';
end
axes(handles.axes2);
plot(abs(fft(ya(1:floor(end/2)))));
hold on;

if(min_error==error(2))
vocal='E';
axes(handles.axes2);
subplot(2,1,1);
plot(abs(fft(ye(1:floor(end/2)))));
hold on;
end

if(min_error==error(3))
vocal='I';
axes(handles.axes2);
subplot(2,1,1);
plot(abs(fft(yi(1:floor(end/2)))));
hold on;
end

if(min_error==error(4))
vocal='O';
axes(handles.axes2);
subplot(2,1,1);
plot(abs(fft(yo(1:floor(end/2)))));
hold on;

end
if(min_error==error(5))
vocal='U';
axes(handles.axes2);
subplot(2,1,1);
plot(abs(fft(yu(1:floor(end/2)))));

end
disp(vocal);

MOSTRAR_Callback(hObject, eventdata, handles)

You might also like