SlideShare una empresa de Scribd logo
PROGRAMA DE RECONOCIMIENTO DE VOZ.
INTERFAZ GRÁFICA DE USUARIO (GUI).
El ambiente de desarrollo de interfaz gráfica de usuario (GUIDE, por sus siglas en inglés
Graphical User Interfase Development Environment) es una serie de herramientas que
se extienden por completo en el software de MATLAB, diseñadas para crear
interfaces graficas de usuario (GUI´s, por sus siglas en inglés Graphical User Interfaces)
de manera fácil, pues no existe la necesidad de que el programador tenga que
agregar código para el desarrollo de la misma, debido a que MATLAB
automáticamente realiza esta acción, y rápida, ya que presta ayuda en el diseño y
presentación de los elementos de la interfaz, reduciendo la labor al grado de
seleccionar, tirar, arrastrar y personalizar propiedades. Los elementos que se usan son:
botones (push buttons), ejes (axes), texto estático (static text), panel (panel) texto
editable (edit text), que serán explicados más adelante. Una vez que los elementos están
en posición se editan las funciones de llamada “callback” de cada uno de ellos,
escribiendo el código de MATLAB que se ejecutará cuando el elemento sea utilizado.
Cabe destacar que el orden del programa con el que trabaja la GUI, está determinado por
el usuario, pues no existe un flujo establecido como en el caso de un programa
común de MATLAB, dándole al usuario la opción de elegir qué elementos y en qué
momento usarlos, sin ser esto motivo para que la GUI termine su funcionamiento, a
menos de que el usuario así lo desee. El desarrollo de la GUI se realiza en dos etapas:
 Diseño de los componentes (botones, textos, paneles y ejes) que la
formarán.
 Programación de cada uno de los componentes ante la interacción del
usuario.
A la herramienta GUIDE se accede de varias maneras, la primera de ellas es
tecleando “guide” en la ventana de comando.
El programa tiene una interfaz grafica, muy fácil de utilizar. Con una base de datos de
prueba de 4 nombres, esta base de datos puede ser aumentada en cualquier cantidad.
Los nombres en la base de datos son:
- Geno
- Flavio
- Rosa
- Andres
El entorno gráfico es como se muestra (véase figura 13).
Figura 13. Interfaz gráfica
Consta de 3 cuadros de selección, dos cuadros de mensaje y un plano donde serán
graficadas las señales de voz en tiempo continuo y el espectro de frecuencias de la señal
discreta ya procesada.
Grabación
En este cuadro nos aparece la opción de grabar la palabra para ingresarla al
reconocedor de voz, cuando la palabra es grabada aparece un cuadro de mensaje
indicando que la grabación ha sido terminada. Por otra parte en el plano aparece
una gráfica en el tiempo (eje X) y en amplitud (eje Y), de la señal de voz grabada por
el usuario (véase figura 14).
Figura 14. Entorno gráfico modo de grabación
Salir.
Este botón nos permite salir completamente del Sistema de Reconocimiento de Voz.
Reconocimiento
El cuadro de reconocimiento brinda los resultados del sistema, con un cuadro de
mensaje indicando cual palabra ha sido reconocida y la palabra grabada es
reproducida. Además, nos da una representación gráfica en el plano con la
información del espectro de frecuencias de la señal del usuario reconocido (véase
figura 14).
Figura 15. Entorno gráfico modo de reconocimiento
CODIGO DE MATLAB
% BASE DE DATOS
clc
Fs=11025;
y0=wavrecord(1*Fs,Fs,1)';
soundsc(y0);
word0=['geno'];
y0=chop_silencio(y0);
z0=enfasis(y0);
seg0=segmentos(z0);
c0=cepstrum(seg0);
f0=features(c0);
save geno.mat word0 f0 y0;
y1=wavrecord(1*Fs,Fs,1)';
soundsc(y1);
word1=['rosa'];
y1=chop_silencio(y1);
z1=enfasis(y1);
seg1=segmentos(z1);
c1=cepstrum(seg1);
f1=features(c1);
save rosa.mat word1 f1 y1;
y2=wavrecord(1*Fs,Fs,1)';
soundsc(y2);
word2=['flavio'];
y2=chop_silencio(y2);
z2=enfasis(y2);
seg2=segmentos(z2);
c2=cepstrum(seg2);
f2=features(c2);
save flavio.mat word2 f2 y2;
y3=wavrecord(1*Fs,Fs,1)';
soundsc(y3);
word3=['andres'];
y3=chop_silencio(y3);
z3=enfasis(y3);
seg3=segmentos(z3);
c3=cepstrum(seg3);
f3=features(c3);
save andres.mat word3 f3 y3;
% FUNCIÓN ELIMINACIÓN DEL RUIDO
%chop_silencio
%Corta el silencio en la señal completa
%y=chop_silencio(s)
function y = chop_silencio(s)
len = length(s); % length del vector
avg_e = sum(s.*s)/len; %promedio señal entera
THRES = 0.2;
y = [0];
for i = 1:80:len-80 % cada 10ms
seg = s(i:i+79); % segmentos
e = sum(seg.*seg)/80; % promedio de cada segmento
if( e> THRES*avg_e) % si el promedio energetico es mayor que la señal
%completa por el valor umbral
y=[y,seg(1:end)]; % almacena en y sino es eliminado como espacio en
blanco
end;
end;
% FUNCIÓN FILTRO DE PRE-ÉNFASIS
%enfasis
%filtro de enfasis para la señal
%enfasis(s)
function [y]=enfasis(x)
b=[1 -0.95];
y=filter(b,1,x);
% FUNCIÓN SEGMENTACIÓN
%segmentos
%segmenta la señal en tramas de 30ms
%[segs]=segmentos(y)
function [segs]=segmentos(y)
len = length(y); %longitud del vector
num_segments = floor(len/80) -2; % redondeamos el numero de
segmentos
segs = zeros(num_segments,240); % matriz de segmentos
num_segments x 240
win = hamming(240)'; % ventana hamming de 240 puntos(30ms)
win=coeficients (numero de muestras en el analisis )
for i = 0:num_segments-1
inicio = i*80+1;
segs(i+1,1:240) = (y(inicio:inicio+239).*win); %multiplicamos por la
ventana %hamming
end;
% FUNCIÓN CEPSTRUM
% (EXTRACCIÓN DE LOS COEFICIENTES CEPSTRALES)
%cepstrum
%Encuentra los coeficientes cepstrales de cada segmento
%[cc]=cepstrum(seg)
function [c] = cepstrum(segs)
%programa para encontral los coeficientes cepstrales de cada segmento
[M,N] = size(segs); % M filas, N columas, para definir Mo=output frame
size(# de %frecuencias a las que se aplica FFT)
[c] = zeros(M,10); % inicialiando el vector para guardar los coeficientes cepstrales. P=10
%calculando los coeficientes cepstrales reales
for i=1:M
% f = fft(segs(i,:));
% m = abs(f);
% l = log(m+1e-5);
% in = real(ifft(l));
% c(i,:)= in(1:10); o resumidamente
r = rceps(segs(i,:));
c(i,:)= r(1:10);
end
% normalizacion de los coeficientes cepstrales
sum_c = sum(c);
avg_c = sum_c/M;
%sustrayendole el minimo, solo las que estanarriba del promedio los
%fonemas
for i=1:M
c(i,:)= c(i,:)-avg_c; % smoothened spectrum
end
% FUNCIÓN FEATURES ( DE CARACTERISTICAS)
%features
%Encuentra los coeficientes polinomiales de la expansion correspondientes al los
coeficientes cepstrum
%[ftr]=features(c)
function ftr=features(c)
[M,N] = size(c);
ftr = zeros(M-8,20);
j = (1:9); %col vector
p1 = repmat((j-5)',1,10); %crea una matriz llena de P1j=j-5
sum_p1 = sum((j-5).*(j-5)); % suma total
for i = 1:M-8
%caracteristicas de orden cero (coeficientes cepstrales)
ftr(i,1:10)=c(i,1:10);
%caracteristicas de primer orden
b = zeros(1,10);
for j = 0:8 % aqui se sacan los coeficientes polinomiales para cada
segmento
b = b+ p1(j+1,:).*c(i+j,:); % numerador de la ecuacion
end;
ftr(i,11:20)=b/sum_p1; % dividiendolo en el denominador
end; %se obtienen los valores de b
% FUNCIÓN DE DISTANCIA
%distancia
%
%[dist]=distancia(ftr_a,ftr_b)
function tot_dist = spv_dis(ftr_a,ftr_b)
[m_a,n_a]=size(ftr_a);
[m_b,n_b]=size(ftr_b);
%establece the guide and slave
if(m_a < m_b )
guide = ftr_a;
slave = ftr_b;
m = m_b;
n = m_a;
else
guide = ftr_b;
slave = ftr_a;
m = m_a;
n = m_b;
end;
%computa la matriz de distancia
dist = zeros(m,n);
for i = 1:m
for j = 1:n
dist(i,j) = sqrt(sum(((guide(j,:)-slave(i,:)).*(guide(j,:)-slave(i,:))).^2));
end;
end;
% INICIALIZACION
function varargout = recvoc(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @recvoc_OpeningFcn, ...
'gui_OutputFcn', @recvoc_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
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
% PROGRAMA PRINCIPAL
function recvoc_OpeningFcn(hObject, eventdata, handles, varargin)
load geno.mat;
load rosa.mat;
load flavio.mat;
load andres.mat;
load 'handel';
wavwrite(y,'handel');
rec=reconociendovoz(y0);
handles.voz_grabada=y;
handles.feature_datos=rec
handles.feature_f0=f0;
handles.feature_f1=f1;
handles.feature_f2=f2;
handles.feature_f3=f3;
handles.feature_y0=y0;
handles.feature_y1=y1;
handles.feature_y2=y2;
handles.feature_y3=y3;
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% --- Outputs from this function are returned to the command line.
function varargout = recvoc_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 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)
% obtener la palabra del micrófono
Fs = 11025; % Sampling Frequency (Hz)
n = 20;
Nseconds = 2; % largo de la señal de voz
y = wavrecord(Nseconds*Fs, Fs, 1)';
rec1=reconociendovoz(y);
handles.voz_grabada = y;
handles.feature_datos=rec1
plot(y);
msgbox('Grabacion terminada');
guidata(hObject, handles);
%load rec.mat;
%handles.feature_voz=f;
% --- Executes on button press in identificar.
function identificar_Callback(hObject, eventdata, handles)
% hObject handle to identificar (see GCBO)
% eventdata reserved- to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
rec1=handles.feature_datos;
y0=handles.feature_y0;
y1=handles.feature_y1;
y2=handles.feature_y2;
y3=handles.feature_y3;
f0=handles.feature_f0;
f1=handles.feature_f1;
f2=handles.feature_f2;
f3=handles.feature_f3;
d1=distancia(f0,rec1)
d2=distancia(f1,rec1)
d3=distancia(f2,rec1)
d4=distancia(f3,rec1)
if (d1 < d2) & (d1 < d3) & (d1 < d4)
plot(abs(fft(y0)));
soundsc(y0);
msgbox('Usted dijo: Geno');
else if (d2 < d1) & (d2 < d3)& (d2 < d4)
plot(abs(fft(y1)));
soundsc(y1);
msgbox('Identificado: Rosa')
else if (d3 < d1) & (d3 < d2) & (d3 < d4)
plot(abs(fft(y2)));
soundsc(y2);
msgbox('Identificado: Flavio');
else if (d4 < d1) & (d4 < d2) & (d4 < d3)
plot(abs(fft(y3)));
soundsc(y3);
msgbox('Identificado: Andres');
end
end
end
end
% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved- to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
exit;
% FUNCIÓN RECONOCIENDOVOZ
function rec=reconociendovoz(y)
% load data
y=chop_silencio(y);
z=enfasis(y);
seg=segmentos(z);
c=cepstrum(seg);
f=features(c);
rec=f;
save('rec.mat','f','y');

Más contenido relacionado

PDF
GNUPlot una alternativa libre para graficar funciones
PPT
Taller processing arduino
PDF
Algoritmos - Funciones C++
PDF
Introducción a Processing
DOC
Practicas para slider Rene Dominguez
PDF
Introducción a Processing
PDF
UtplMadrid_Tutorías_MATLAB_IMAGENES MATLAB
PDF
Taller de programación
GNUPlot una alternativa libre para graficar funciones
Taller processing arduino
Algoritmos - Funciones C++
Introducción a Processing
Practicas para slider Rene Dominguez
Introducción a Processing
UtplMadrid_Tutorías_MATLAB_IMAGENES MATLAB
Taller de programación

La actualidad más candente (20)

DOCX
Manual de actividades
PDF
Manual octave
PDF
Practica 7(1) de ingeniería de control: Laboratorio de ingeniería de control(...
PPT
Matlab2009b -clase2
PPTX
CURSO DE PROGRAMACION BASICA - Cap 5
PDF
Programación de Videojuegos con Python y Pilas (VI)
DOCX
Estructura de datos
PDF
ESTRUCTURAS ARRAYS Y DATOS C++
DOCX
Practicas OpenglC++
PDF
Matlab robotica
PDF
Manejo de perifericos para microcontroladore
PDF
Intro PyGame Capitulo 5
PDF
Lugar geometrico
PDF
Programación de Videojuegos con Python y Pilas (VIII)
PDF
Intro PygameCapitulo 3
PDF
Convolucion Tiempo Discreto
PPSX
Colision por pixel
PDF
Tutorial de Simulink
PDF
Programación de Videojuegos con Python y Pilas (X)
Manual de actividades
Manual octave
Practica 7(1) de ingeniería de control: Laboratorio de ingeniería de control(...
Matlab2009b -clase2
CURSO DE PROGRAMACION BASICA - Cap 5
Programación de Videojuegos con Python y Pilas (VI)
Estructura de datos
ESTRUCTURAS ARRAYS Y DATOS C++
Practicas OpenglC++
Matlab robotica
Manejo de perifericos para microcontroladore
Intro PyGame Capitulo 5
Lugar geometrico
Programación de Videojuegos con Python y Pilas (VIII)
Intro PygameCapitulo 3
Convolucion Tiempo Discreto
Colision por pixel
Tutorial de Simulink
Programación de Videojuegos con Python y Pilas (X)
Publicidad

Similar a Programa voz (20)

PPTX
Presentación interfaz gráfica_matlab
PPSX
PPSX
PPSX
Graficas matlab
PDF
Guide
PDF
Guide
PDF
Guide
PPT
CreacióN De Una Interfaz GráFica Del Usuario(Gui)
PDF
2012 interfaz grafica en guide matlab
PPTX
DIAPOSITIVA - GUIDE.pptx-----------------------------
PDF
Sistema de-seguridad-por-reconocimiento-de-voz-tesis-de-ingenieria-esime
PPTX
Presentación de matlab electromagnetismo ...
PDF
Matlab
PPT
Tutorial p seint
PPT
Tutorial p seint
PPTX
Explicacion de Procesamiento digital de señales.pptx
PPTX
Interfaz grafica matlab
PDF
Copiade documento(2)
PPTX
Programacion en matlab
PPTX
Clase 10
Presentación interfaz gráfica_matlab
Graficas matlab
Guide
Guide
Guide
CreacióN De Una Interfaz GráFica Del Usuario(Gui)
2012 interfaz grafica en guide matlab
DIAPOSITIVA - GUIDE.pptx-----------------------------
Sistema de-seguridad-por-reconocimiento-de-voz-tesis-de-ingenieria-esime
Presentación de matlab electromagnetismo ...
Matlab
Tutorial p seint
Tutorial p seint
Explicacion de Procesamiento digital de señales.pptx
Interfaz grafica matlab
Copiade documento(2)
Programacion en matlab
Clase 10
Publicidad

Último (20)

PDF
6°-Básico-Matemática-Diagrama-de-tallo-y-hoja_y_probabilidades.pdf
PPTX
Status Proyecto CIVIX INTELIGENCIA ARTIFICIAL
PPT
2010_06 FSI_ASBA Pruebas de Stress de Riesgo de Crédito El Caso Peruano MLUY_...
PDF
Los 10 mayores Fondos Soberanos de Riqueza (2025).pdf
PDF
MAPAMENTALLa tendencia pedagógica basada en competencias hacia una.pdf
PPTX
Presentacion Capacitacion RC y RG (5).pptx
PDF
Pobreza por origen racial y zonas socialistas (1980, 2025 y 2030).pdf
PDF
Riesgos en Negociaciones_comercio exterior.pdf
DOCX
LAS DROGAS, SU CONSUMO Y LAS ADICCIONES.docx
PDF
2425_s9_1_Bitacora_para_la_reflexion.pdf
PDF
Manual de presentacion de la aplicacion Plugbot
PPTX
Tutoria 3. Unidad 2 PRUEBAS BIOLÓGICAS.pptx
PDF
EJERCICIOS RESUELTOS CON SOLVER EXCEL.pdf
PPTX
Inteligencia_Artificialdelosk_Mujer.pptx
PDF
Pobreza porcentual en el mundo y sistemas socioeconómicos (1945-2030).pdf
PDF
INFORME ESPECIAL BICENTENARIO DE BOLIVIA.pdf
PDF
dhjhfjhjcnjhghhhdfhuhhchchuuhuhduhduddyhdu
PDF
Presentacion Gestion de Recursos DIA 1.pdf
PDF
Rendición_Pública_de_Cuentas_Inicial_2019.pdf
PDF
Registro de Limpieza y Desinfección.pdf1
6°-Básico-Matemática-Diagrama-de-tallo-y-hoja_y_probabilidades.pdf
Status Proyecto CIVIX INTELIGENCIA ARTIFICIAL
2010_06 FSI_ASBA Pruebas de Stress de Riesgo de Crédito El Caso Peruano MLUY_...
Los 10 mayores Fondos Soberanos de Riqueza (2025).pdf
MAPAMENTALLa tendencia pedagógica basada en competencias hacia una.pdf
Presentacion Capacitacion RC y RG (5).pptx
Pobreza por origen racial y zonas socialistas (1980, 2025 y 2030).pdf
Riesgos en Negociaciones_comercio exterior.pdf
LAS DROGAS, SU CONSUMO Y LAS ADICCIONES.docx
2425_s9_1_Bitacora_para_la_reflexion.pdf
Manual de presentacion de la aplicacion Plugbot
Tutoria 3. Unidad 2 PRUEBAS BIOLÓGICAS.pptx
EJERCICIOS RESUELTOS CON SOLVER EXCEL.pdf
Inteligencia_Artificialdelosk_Mujer.pptx
Pobreza porcentual en el mundo y sistemas socioeconómicos (1945-2030).pdf
INFORME ESPECIAL BICENTENARIO DE BOLIVIA.pdf
dhjhfjhjcnjhghhhdfhuhhchchuuhuhduhduddyhdu
Presentacion Gestion de Recursos DIA 1.pdf
Rendición_Pública_de_Cuentas_Inicial_2019.pdf
Registro de Limpieza y Desinfección.pdf1

Programa voz

  • 1. PROGRAMA DE RECONOCIMIENTO DE VOZ. INTERFAZ GRÁFICA DE USUARIO (GUI). El ambiente de desarrollo de interfaz gráfica de usuario (GUIDE, por sus siglas en inglés Graphical User Interfase Development Environment) es una serie de herramientas que se extienden por completo en el software de MATLAB, diseñadas para crear interfaces graficas de usuario (GUI´s, por sus siglas en inglés Graphical User Interfaces) de manera fácil, pues no existe la necesidad de que el programador tenga que agregar código para el desarrollo de la misma, debido a que MATLAB automáticamente realiza esta acción, y rápida, ya que presta ayuda en el diseño y presentación de los elementos de la interfaz, reduciendo la labor al grado de seleccionar, tirar, arrastrar y personalizar propiedades. Los elementos que se usan son: botones (push buttons), ejes (axes), texto estático (static text), panel (panel) texto editable (edit text), que serán explicados más adelante. Una vez que los elementos están en posición se editan las funciones de llamada “callback” de cada uno de ellos, escribiendo el código de MATLAB que se ejecutará cuando el elemento sea utilizado. Cabe destacar que el orden del programa con el que trabaja la GUI, está determinado por el usuario, pues no existe un flujo establecido como en el caso de un programa común de MATLAB, dándole al usuario la opción de elegir qué elementos y en qué momento usarlos, sin ser esto motivo para que la GUI termine su funcionamiento, a menos de que el usuario así lo desee. El desarrollo de la GUI se realiza en dos etapas:  Diseño de los componentes (botones, textos, paneles y ejes) que la formarán.  Programación de cada uno de los componentes ante la interacción del usuario. A la herramienta GUIDE se accede de varias maneras, la primera de ellas es tecleando “guide” en la ventana de comando.
  • 2. El programa tiene una interfaz grafica, muy fácil de utilizar. Con una base de datos de prueba de 4 nombres, esta base de datos puede ser aumentada en cualquier cantidad. Los nombres en la base de datos son: - Geno - Flavio - Rosa - Andres El entorno gráfico es como se muestra (véase figura 13). Figura 13. Interfaz gráfica Consta de 3 cuadros de selección, dos cuadros de mensaje y un plano donde serán graficadas las señales de voz en tiempo continuo y el espectro de frecuencias de la señal discreta ya procesada. Grabación En este cuadro nos aparece la opción de grabar la palabra para ingresarla al reconocedor de voz, cuando la palabra es grabada aparece un cuadro de mensaje indicando que la grabación ha sido terminada. Por otra parte en el plano aparece
  • 3. una gráfica en el tiempo (eje X) y en amplitud (eje Y), de la señal de voz grabada por el usuario (véase figura 14). Figura 14. Entorno gráfico modo de grabación Salir. Este botón nos permite salir completamente del Sistema de Reconocimiento de Voz. Reconocimiento El cuadro de reconocimiento brinda los resultados del sistema, con un cuadro de mensaje indicando cual palabra ha sido reconocida y la palabra grabada es reproducida. Además, nos da una representación gráfica en el plano con la información del espectro de frecuencias de la señal del usuario reconocido (véase figura 14).
  • 4. Figura 15. Entorno gráfico modo de reconocimiento CODIGO DE MATLAB % BASE DE DATOS clc Fs=11025; y0=wavrecord(1*Fs,Fs,1)'; soundsc(y0); word0=['geno']; y0=chop_silencio(y0); z0=enfasis(y0); seg0=segmentos(z0); c0=cepstrum(seg0); f0=features(c0); save geno.mat word0 f0 y0; y1=wavrecord(1*Fs,Fs,1)'; soundsc(y1); word1=['rosa']; y1=chop_silencio(y1); z1=enfasis(y1); seg1=segmentos(z1); c1=cepstrum(seg1); f1=features(c1); save rosa.mat word1 f1 y1;
  • 5. y2=wavrecord(1*Fs,Fs,1)'; soundsc(y2); word2=['flavio']; y2=chop_silencio(y2); z2=enfasis(y2); seg2=segmentos(z2); c2=cepstrum(seg2); f2=features(c2); save flavio.mat word2 f2 y2; y3=wavrecord(1*Fs,Fs,1)'; soundsc(y3); word3=['andres']; y3=chop_silencio(y3); z3=enfasis(y3); seg3=segmentos(z3); c3=cepstrum(seg3); f3=features(c3); save andres.mat word3 f3 y3; % FUNCIÓN ELIMINACIÓN DEL RUIDO %chop_silencio %Corta el silencio en la señal completa %y=chop_silencio(s) function y = chop_silencio(s) len = length(s); % length del vector avg_e = sum(s.*s)/len; %promedio señal entera THRES = 0.2; y = [0]; for i = 1:80:len-80 % cada 10ms seg = s(i:i+79); % segmentos e = sum(seg.*seg)/80; % promedio de cada segmento if( e> THRES*avg_e) % si el promedio energetico es mayor que la señal %completa por el valor umbral y=[y,seg(1:end)]; % almacena en y sino es eliminado como espacio en blanco end; end;
  • 6. % FUNCIÓN FILTRO DE PRE-ÉNFASIS %enfasis %filtro de enfasis para la señal %enfasis(s) function [y]=enfasis(x) b=[1 -0.95]; y=filter(b,1,x); % FUNCIÓN SEGMENTACIÓN %segmentos %segmenta la señal en tramas de 30ms %[segs]=segmentos(y) function [segs]=segmentos(y) len = length(y); %longitud del vector num_segments = floor(len/80) -2; % redondeamos el numero de segmentos segs = zeros(num_segments,240); % matriz de segmentos num_segments x 240 win = hamming(240)'; % ventana hamming de 240 puntos(30ms) win=coeficients (numero de muestras en el analisis ) for i = 0:num_segments-1 inicio = i*80+1; segs(i+1,1:240) = (y(inicio:inicio+239).*win); %multiplicamos por la ventana %hamming end; % FUNCIÓN CEPSTRUM % (EXTRACCIÓN DE LOS COEFICIENTES CEPSTRALES) %cepstrum %Encuentra los coeficientes cepstrales de cada segmento %[cc]=cepstrum(seg) function [c] = cepstrum(segs) %programa para encontral los coeficientes cepstrales de cada segmento [M,N] = size(segs); % M filas, N columas, para definir Mo=output frame size(# de %frecuencias a las que se aplica FFT) [c] = zeros(M,10); % inicialiando el vector para guardar los coeficientes cepstrales. P=10
  • 7. %calculando los coeficientes cepstrales reales for i=1:M % f = fft(segs(i,:)); % m = abs(f); % l = log(m+1e-5); % in = real(ifft(l)); % c(i,:)= in(1:10); o resumidamente r = rceps(segs(i,:)); c(i,:)= r(1:10); end % normalizacion de los coeficientes cepstrales sum_c = sum(c); avg_c = sum_c/M; %sustrayendole el minimo, solo las que estanarriba del promedio los %fonemas for i=1:M c(i,:)= c(i,:)-avg_c; % smoothened spectrum end % FUNCIÓN FEATURES ( DE CARACTERISTICAS) %features %Encuentra los coeficientes polinomiales de la expansion correspondientes al los coeficientes cepstrum %[ftr]=features(c) function ftr=features(c) [M,N] = size(c); ftr = zeros(M-8,20); j = (1:9); %col vector p1 = repmat((j-5)',1,10); %crea una matriz llena de P1j=j-5 sum_p1 = sum((j-5).*(j-5)); % suma total for i = 1:M-8 %caracteristicas de orden cero (coeficientes cepstrales) ftr(i,1:10)=c(i,1:10); %caracteristicas de primer orden
  • 8. b = zeros(1,10); for j = 0:8 % aqui se sacan los coeficientes polinomiales para cada segmento b = b+ p1(j+1,:).*c(i+j,:); % numerador de la ecuacion end; ftr(i,11:20)=b/sum_p1; % dividiendolo en el denominador end; %se obtienen los valores de b % FUNCIÓN DE DISTANCIA %distancia % %[dist]=distancia(ftr_a,ftr_b) function tot_dist = spv_dis(ftr_a,ftr_b) [m_a,n_a]=size(ftr_a); [m_b,n_b]=size(ftr_b); %establece the guide and slave if(m_a < m_b ) guide = ftr_a; slave = ftr_b; m = m_b; n = m_a; else guide = ftr_b; slave = ftr_a; m = m_a; n = m_b; end; %computa la matriz de distancia dist = zeros(m,n); for i = 1:m for j = 1:n dist(i,j) = sqrt(sum(((guide(j,:)-slave(i,:)).*(guide(j,:)-slave(i,:))).^2)); end; end; % INICIALIZACION function varargout = recvoc(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @recvoc_OpeningFcn, ...
  • 9. 'gui_OutputFcn', @recvoc_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 %+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % PROGRAMA PRINCIPAL function recvoc_OpeningFcn(hObject, eventdata, handles, varargin) load geno.mat; load rosa.mat; load flavio.mat; load andres.mat; load 'handel'; wavwrite(y,'handel'); rec=reconociendovoz(y0); handles.voz_grabada=y; handles.feature_datos=rec handles.feature_f0=f0; handles.feature_f1=f1; handles.feature_f2=f2; handles.feature_f3=f3; handles.feature_y0=y0; handles.feature_y1=y1; handles.feature_y2=y2; handles.feature_y3=y3; handles.output = hObject; % Update handles structure guidata(hObject, handles); % --- Outputs from this function are returned to the command line. function varargout = recvoc_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
  • 10. % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output; % --- 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) % obtener la palabra del micrófono Fs = 11025; % Sampling Frequency (Hz) n = 20; Nseconds = 2; % largo de la señal de voz y = wavrecord(Nseconds*Fs, Fs, 1)'; rec1=reconociendovoz(y); handles.voz_grabada = y; handles.feature_datos=rec1 plot(y); msgbox('Grabacion terminada'); guidata(hObject, handles); %load rec.mat; %handles.feature_voz=f; % --- Executes on button press in identificar. function identificar_Callback(hObject, eventdata, handles) % hObject handle to identificar (see GCBO) % eventdata reserved- to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) rec1=handles.feature_datos; y0=handles.feature_y0; y1=handles.feature_y1; y2=handles.feature_y2; y3=handles.feature_y3; f0=handles.feature_f0; f1=handles.feature_f1; f2=handles.feature_f2; f3=handles.feature_f3;
  • 11. d1=distancia(f0,rec1) d2=distancia(f1,rec1) d3=distancia(f2,rec1) d4=distancia(f3,rec1) if (d1 < d2) & (d1 < d3) & (d1 < d4) plot(abs(fft(y0))); soundsc(y0); msgbox('Usted dijo: Geno'); else if (d2 < d1) & (d2 < d3)& (d2 < d4) plot(abs(fft(y1))); soundsc(y1); msgbox('Identificado: Rosa') else if (d3 < d1) & (d3 < d2) & (d3 < d4) plot(abs(fft(y2))); soundsc(y2); msgbox('Identificado: Flavio'); else if (d4 < d1) & (d4 < d2) & (d4 < d3) plot(abs(fft(y3))); soundsc(y3); msgbox('Identificado: Andres'); end end end end % --- Executes on button press in pushbutton3. function pushbutton3_Callback(hObject, eventdata, handles) % hObject handle to pushbutton3 (see GCBO) % eventdata reserved- to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) exit; % FUNCIÓN RECONOCIENDOVOZ function rec=reconociendovoz(y) % load data y=chop_silencio(y); z=enfasis(y); seg=segmentos(z); c=cepstrum(seg); f=features(c); rec=f; save('rec.mat','f','y');