Sunteți pe pagina 1din 44

ESCUELA MILITAR DE INGENIERIA

MCAL. ANTONIO JOSE DE SUCRE


BOLIVIA
INGENIERA ELECTRNICA

Procesamiento
del sonido
En MATLAB
Integrantes del grupo:
Jael Mnica Mancilla Rivas
CI.6148335
Gersy Veimar Dvila Suarez
CI.8324996
Materia:
Electroacstica

Ing. Miguel Jaime


Flores Mujica

NDICE
1.

INTRODUCCIN.. 3

2.

OBJETIVOS.. 4

2.1.

OBJETIVO GENERAL...

2.2.

OBJETIVOS ESPECFICOS....

3.

MARCO TERICO..... 5

3.1.

SONIDO.... 5

3.2.

COMPONENTES DEL SISTEMA... . 6

3.3.

MATLAB. 10

3.4.

SEAL DE VOZ. 11

3.5.

FORMANTES. 14

3.6.

PROCESAMIENTO DIGITAL DE SEALES.... 15

3.6.1. TRANSFORMADA DISCRETA DE FOURIER (DFT).. ... 15


3.6.2. MFCC..... 16
3.7.

PROCEDIMIENTO PARA RECONOCER VOZ....... 17

4.

MARCO PRCTICO..... 19

5.

CONCLUSIONES.. 39

6. BIBLIOGRAFIA.. 40

PROCESAMIENTO DE
SONIDO EN MATLAB
RECONOCIMIENTO DE VOZ
1. Introduccin
El habla es una de las partes ms importantes de la expresin humana, es algo
que nos diferencia del resto de seres vivos en planeta, ya que sin el habla el
pensamiento mismo del hombre no sera posible.
4

No se trata simplemente de un sistema para transmitir informacin, aunque sea


claro una de sus funciones. Pero es por medio de los sonidos que se presenta la
esencia espiritual del hombre.
Dada la importancia del habla, el presente trabajo pretende crear una interaccin
entre una de las expresiones esenciales del hombre con la computadora, creando
as un Sistema de Reconocimiento de Voz.
El procesamiento digital de seales de voz tiene una gran variedad de
aplicaciones, existe una base para el tratamiento digital de seales, que puede ser
implementada para lograr obtener lo que nos interese segn la aplicacin.
El Sistema de Reconocimiento de Voz es una de las aplicaciones del
procesamiento digital de seales de voz. El sistema consiste en obtener una seal
de voz que permita reconocer qu palabra se esta hablando.
Consta de una interfaz grfica que permite la interaccin del usuario por medio de
un micrfono con la computadora, la que procesa automticamente los datos
adquiridos.

2. OBJETIVOS
2.1.

OBJETIVO GENERAL

Brindar un sistema que proporcione el reconocimiento de seales de voz,


por medio de la interaccin entre el usuario y la computadora utilizando la
interfaz grfica de Matlab, Guide.

2.2.

OBJETIVOS ESPECFICOS

Explorar algoritmos de procesamiento digital de voz, que permitan un


tratamiento sencillo de informacin relevante de las seales de voz.

El objetivo del proyecto es estudiar la forma de detectar patrones


especficos de la voz y realizar una comparacin para determinar a la
persona que est hablando, la toma de una seal de voz con su respectiva
frecuencia, el manejo de la interface grfica Guide de Matlab.

Obtener la

capacidad de disear programas extras que nos ayuden a

estudiar de manera ms especifica las caractersticas del sonido.

3. MARCO TERICO
3.1. SONIDO
La voz es una seal que lleva informacin consciente, inteligente, producida por
los humanos para que las personas que la escuchan obtengan informacin
directa, sin la necesidad de otra fuente adicional como imgenes o texto.
El lenguaje es la frontera que limita el captar la informacin que se emite. Es la
forma universal de comunicacin entre las personas.

Cuando en un medio, algo vibra movindose de un lado a otro, genera ondas de


presin, las cuales se dispersan en el medio (como el aire) y si esas ondas
alcanzan un rango de vibracin que nuestros odos pueden percibir, lo que
detectamos es sonido.

En el aire, el sonido se propaga alrededor de 1200 kilmetros por hora; lo que se


conoce como Match 1 al nivel del mar. Las ondas sonoras varan en el ruido o
volumen (medido en decibeles o dB)1 y la frecuencia o el grado de vibraciones por
segundo (medido en Hertz o Hz). Muchas ondas sonoras se mezclan formando
sonidos ms complejos.
Como se muestra en la siguiente figura la representacin de una onda (sonido)
producido por un instrumento metlico (diapasn) que viaja por el aire a
determinada frecuencia y que nuestros odos pueden percibirla como una nota
musical.
7

3.2.
COMPONENTES DEL SISTEMA
Micrfono
Es un transductor electroacstica, que tiene como funcin transformar o traducir la
presin acstica ejercida sobre su capsula por las ondas sonoras en energa
elctrica.
La calidad de cada micrfono viene dada por sus caractersticas, las cuales se
describen a continuacin:

Sensibilidad:
Es la eficiencia del micrfono, la relacin entre la presin sonora que incide
(expresada en Pascales) y la tensin elctrica de salida (expresada en voltios).
O sea, expresa que tan bien convierte el micrfono la presin acstica en voltaje
de salida. La sensibilidad se expresa en milivoltios por Pascal.
Al utilizar el milivoltio, la sensibilidad puede ser representada en un voltmetro de
la siguiente manera: a mayor voltaje, mayor sensibilidad.
Fidelidad:
Indica la variacin de sensibilidad con respecto a la frecuencia.
8

Adems, la fidelidad, viene definida como la respuesta en frecuencia del


micrfono, cuanto mas lineal sea la respuesta en frecuencia mayor fidelidad tendr
el micrfono. La fidelidad se expresa en dB.
En funcin de esta respuesta en frecuencia o fidelidad se elabora la llamada
Curva de respuesta de un micrfono, que es la representacin grfica del nivel
obtenido en la captacin de sonidos de igual intensidad, pero de distinta
frecuencia.
Directividad:
Esta caracterstica determina en que direccin capta mejor el sonido un micrfono,
es decir indica la sensibilidad del micrfono a las diferentes direcciones.
El diagrama polar es una representacin grfica que indica qu tan sensitivo es un
micrfono a los sonidos que llegan a el desde diferentes ngulos alrededor de su
eje central.

Dependiendo de la directividad se encuentran diferentes tipos de micrfonos:


Omnidireccionales: captan todos los sonidos, sin importar la direccin
desde donde lleguen.
Bidireccionales: captan tanto el sonido que llega por su parte frontal,
como por su parte posterior.
Unidireccionales o direccionales: captan el sonido en una sola
direccin mientras que son relativamente sordos a las otras direcciones.

Ruido de fondo: es la tensin que entrega el micrfono sin que exista


ningn sonido incidiendo sobre l. Este ruido se produce por el movimiento
trmico de los electrones en la carcasa que no tiene masa.

El ruido de fondo debe estar en torno a los 60dB, pero mientras ms bajo sea,
mejor calidad ofrece el micrfono.
9

Rango dinmico: se puede definir de dos maneras:


o La primera definicin es el margen que hay entre el nivel de
referencia de salida mxima y el ruido de fondo de un determinado
sistema, medido en decibelios. En este caso, el rango dinmico y
relacin seal/ruido son sinnimos.
o Como segunda definicin es el margen que hay desde el nivel de
pico y el nivel de ruido de fondo, tambin indicado en dB. En este
caso, rango dinmico y relacin seal/ruido no son igualables.

Las dos maneras son validas, por lo que generalmente los fabricantes incluyen la
referencia de salida mxima y la referencia de nivel de pico en las
especificaciones del micrfono. Para aclarar mejor esta caracterstica nos
referiremos a los siguientes dos trminos.

La relacin seal/ruido: esta es la relacin entre la seal til dada, o sea,


la seal de referencia, y el ruido de fondo del micrfono.

Nivel mximo o nivel de pico: es la diferencia entre el nivel mximo


admisible y el nivel del ruido de fondo expresada en dB. Se trata del nivel
mximo admisible por el micrfono correspondiente a una distorsin

armnica de la seal de 0.5% a 1000Hz.


Impedancia interna: es la resistencia que opone el micrfono al paso de
la corriente. La impedancia segn su valor viene caracterizada por baja,
alta y muy alta impedancia.
Lo-Z Baja impedancia (alrededor de 200 Ohmios)
Hi-Z Alta impedancia (1 K o 3 K e incluso 600 )
VHi-Z Muy alta impedancia (ms de 3 K ).
Si el micrfono es de alta impedancia y se tiene un cable largo se produce una
prdida muy grande. Si se tiene una impedancia baja se puede utilizar un cable
muy largo y no se pierde tanto la seal. Por ltimo, se puede bajar la resistencia
para evitar prdidas en altas frecuencias.

10

Factor de directividad: es la relacin entre la intensidad sonora del sonido


directo con respecto a la del ruido ambiente recogido en todas las

3.3.

direcciones.
MATLAB

MATLAB es el nombre abreviado de MATrix LABoratory. Es un lenguaje de alto


nivel y de ambiente interactivo que permite realizar tareas intensas y con una
mayor velocidad que los lenguajes de programacin comnmente usados.
MATLAB se especializa en clculos numricos con vectores y matrices, como
casos particulares puede trabajar tambin con otras estructuras de informacin.
Aunque cada objeto es considerado como un arreglo.
El lenguaje esta construido por cdigo llamado M-code que puede ser fcilmente
ejecutado en la ventana de comandos. Con lo cual se pueden crear funciones, etc.

Pero la razn principal para la eleccin de este lenguaje de programacin son las
herramientas que proporciona para el procesamiento de seales, y el conjunto de
funciones para el procesamiento digital.
Adems, para crear entornos grficos se puede utilizar el GUIDE de
MATLAB, que provee herramientas para crear GUIs, Graphical User Interface,
con lo cual se puede crear la forma del entorno grafico as como asociar funciones
a los elementos del GUI. MATLAB tambin incluye funciones para

manipular

archivos.
3.4.

SEAL DE VOZ

Breve anatoma del aparato fonatorio


La voz humana se produce por medio del aparato fonatorio.
Este esta formado por los pulmones como fuente de energa, en forma de flujo de
aire, la laringe que contiene las cuerdas vocales, la faringe, las cavidades oral y
11

nasal y una serie de elementos articulatorios: los labios, los dientes, el alveolo, el
paladar, el velo del paladar y la lengua.

Las cuerdas vocales son dos membranas dentro de la laringe orientadas de


adelante hacia atrs.
Por delante se unen en el cartlago tiroides, por detrs, cada una esta sujeta a uno
de los dos cartlagos aritenoides, los cuales pueden separarse voluntariamente por
medio de msculos. La abertura entre ambas cuerdas se denomina glotis.

.
Cuando las cuerdas vocales se encuentran separadas la glotis adopta una forma
triangular. El aire pasa libremente y casi no se produce sonido; este es el caso de
12

la respiracin. Cuando la glotis comienza a cerrarse, el aire que la atraviesa


proveniente de los pulmones experimenta una turbulencia, produciendo un ruido
conocido como aspiracin.
Ahora, al cerrarse ms, las cuerdas vocales comienzan a vibrar de modo audible,
producindose un sonido tonal, es decir peridico. La frecuencia de este sonido
depende de varios factores, entre otros del tamao y la masa de las cuerdas
vocales, de la tensin de las cuerdas vocales, de la tensin que se les aplique y de
la velocidad del flujo del aire proveniente de los pulmones.

A mayor tamao, menor frecuencia de vibracin, A mayor tensin la frecuencia


aumenta, siendo los sonidos ms agudos. Tambin aumenta la frecuencia al
crecer la velocidad del flujo de aire.
Finalmente, es posible obturar la glotis completamente, en cual caso no se
produce sonido. Sobre la glotis se encuentra la epiglotis, un cartlago de la faringe
que permite tapar la glotis durante la deglucin para evitar que el alimento ingerido
se introduzca en el tracto respiratorio.
La porcin que incluye las cavidades farngea, oral y nasal junto con los elementos
articulatorios se denomina cavidad supraglotica en tanto que los espacios por
debajo de la laringe, es decir la trquea, los bronquios y los pulmones, se
denominan cavidades infragloticas.
Varios de los elementos de la cavidad supraglotica se controlan a voluntad,
permitiendo modificar dentro de mrgenes muy amplios los sonidos producidos
por las cuerdas vocales o agregar partes distintivas a estos, y hasta producir
sonidos propios. Esto se efecta con dos mecanismos principales: el filtrado y la
articulacin.
13

El filtrado acta modificando el espectro del sonido. Tiene lugar en las cuatro
cavidades supragloticas principales: la faringe, la cavidad nasal, la cavidad oral y
la cavidad labial.
Las mismas constituyen resonadores acsticos que enfatizan determinadas
bandas frecuenciales del espectro generado por las cuerdas vocales, conduciendo
al concepto de formantes, es decir que se refuerza la amplitud de grupos de
armnicos situados alrededor de una determinada frecuencia.
En resumen, en el habla los formantes se determinan por el proceso de filtrado
que se produce en el tracto vocal por la configuracin de los articuladores.
Dada la anterior explicacin es necesaria una clasificacin acstica, como la que
se resume en la tabla I.:
Tabla I. Resumen de la clasificacin acstica de los sonidos.

3.5.

FORMANTES

Los formantes son elementos que sirven para distinguir componentes del habla
humana, principalmente, las vocales y sonidos sonantes. El formante con la
frecuencia ms baja se llama F1, el segundo F2, el tercero F3, etc.

14

Normalmente slo los dos primeros son necesarios para caracterizar una vocal,
aunque la pueden caracterizar ms formantes. Generalmente, los formantes
posteriores determinan propiedades acsticas como el timbre.
Los dos primeros formantes se determinan principalmente por la posicin de la
lengua. Sucediendo que F1 tiene una frecuencia ms alta cuanto mas baja esta la

lengua, es decir una mayor abertura. Para el F2 tiene mayor frecuencia cuanto
mas hacia delante esta posicionada la lengua.
No todos los sonidos se componen de formantes definidos. Solamente aparecen
en sonantes, que incluyen los sonidos pulmonares: vocales, aproximantes y
nasales. Las nasales tienen un formante adicional F3, en torno a los 1500 Hz.
Si la frecuencia fundamental es mayor que la frecuencia de los formantes,
entonces el carcter del sonido se pierde y se vuelven difciles de distinguir, por lo
cual son difciles de reconocer.
Aqu estn algunos anchos de banda entre los cuales se localizan las vocales:
Tabla II. Formantes Voclicos

3.6.

PROCESAMIENTO DIGITAL DE SEALES


15

3.6.1. Transformada discreta de Fourier (DFT)


La transformada discreta de Fourier (DFT por sus siglas en ingls) permite evaluar
la transformada de Fourier de secuencias de duracin finita.
La DTF es una secuencia compleja que es obtenida por medio de muestrear un
perodo de la transformada de Fourier de la seal a un numero finito de puntos de
frecuencia, es decir, que corresponde a muestras igualmente espaciadas en
frecuencia de la transformada de Fourier de la seal discreta. La DFT es
importante por dos razones.
Primero, permite determinar el contenido frecuencial de la seal de voz, o sea,
realizar anlisis espectral. La segunda razn de importancia es realizar
operaciones de filtrado en el dominio de la frecuencia.
La eficiencia es la razn principal por la cual se procesan las seales en el
dominio de la frecuencia.
3.6.2. MFCC:
Los Mel Frequency Cepstral Coefficients (coeficientes cepstrales en las
frecuencias de Mel) son coeficientes para la representacin del habla basados en
la percepcin auditiva humana. Se derivan de la transformada de Fourier.

16

3.7.

Cmo es el procedimiento para reconocer voz?

La voz es una seal que posee informacin temporal dinmica, es una


seal isocrnica. La perdida de sincrona es perdida de informacin.

El mensaje est contenido en la dinmica de concatenacin de los


fonemas. Que a su vez forman las palabras y estas conforman frases.

La voz tiene informacin redundante y porta ruido.

Hay que eliminar el ruido, extraer la informacin importante.

La informacin importante est contenida en caractersticas paramtricas,


patrones bien definidos. Hay que extraer esas caractersticas o patrones.

Los patrones caractersticos se usan para reconocer, clasificar, la


informacin contenida.

Hay que utilizar modelos para reconocer, clasificar los patrones.

Hay que entrenar los modelos de reconocimiento, clasificacin.

17

4. MARCO PRCTICO
18

El Sistema de Reconocimiento de Voz es una de las aplicaciones del


procesamiento digital de seales de voz. El sistema consiste en obtener una seal
de voz que permita reconocer la voz mediante un mtodo de comparacin entre la
seal que se encuentra en la base de datos con la que queremos reconocer.
Consta de una interfaz grfica que permite la interaccin del usuario por medio de
un micrfono con la computadora, la que procesa automticamente los datos
adquiridos y te indica el nombre del usuario que tiene las mismas caractersticas
de voz dentro de la base de datos.

PROCESO1
Seal de
entrada

Seal
almacenada

Base de
datos

PROCESO 2

Seal de
entrada

Comparacin
con la sea de
la base de datos

19

Nombre del
usuario

GUI PRINCIPAL
ARCHIVO .FIG

ARCHIVO CORRIENDO

20

PROGRAMA PRINCIPAL DE RECONOCIMIENTO DE VOZ

21

CDIGO DEL PROGRAMA


BASE DE DATOS
function varargout = DataBaseAccess(varargin)
% DATABASEACCESS M-file for DataBaseAccess.fig
%
DATABASEACCESS, by itself, creates a new DATABASEACCESS or raises
the existing
%
singleton*.
%
%
H = DATABASEACCESS returns the handle to a new DATABASEACCESS or
the handle to
%
the existing singleton*.
%
%
DATABASEACCESS('CALLBACK',hObject,eventData,handles,...) calls
the local
%
function named CALLBACK in DATABASEACCESS.M with the given input
arguments.
%
%
DATABASEACCESS('Property','Value',...) creates a new
DATABASEACCESS or raises the
%
existing singleton*. Starting from the left, property value
pairs are
%
applied to the GUI before DataBaseAccess_OpeningFunction gets
called. An
%
unrecognized property name or invalid value makes property
application
%
stop. All inputs are passed to DataBaseAccess_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 DataBaseAccess
% Last Modified by GUIDE v2.5 25-Mar-2002 12:19:15
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',
mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @DataBaseAccess_OpeningFcn, ...
'gui_OutputFcn', @DataBaseAccess_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback',
[]);
if nargin & isstr(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

22

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 DataBaseAccess is made visible.

function DataBaseAccess_OpeningFcn(hObject, eventdata, handles,x,


varargin)
% This function has no output args, see OutputFcn.
% hObject
handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
% varargin
command line arguments to DataBaseAccess (see VARARGIN)
% Choose default command line output for DataBaseAccess
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
princp=[1 2 3 4];
intp=[1 2 3 4];
bal=[1 2 3 4];
x.data = [princp' intp' bal'];
x.rowheader = {'Period'};
x.collabels = {'Principal';'Interest';'Balance'};
x.top = 100;
x.left = 100;
datagrid(x);
% UIWAIT makes DataBaseAccess wait for user response (see UIRESUME)
% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.
function varargout = DataBaseAccess_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;

23

CONTROL DE LA BASE DE DATOS DESDE GUIDE MATLAB


function varargout = db_manage(varargin)
% DB_MANAGE M-file for db_manage.fig
%
DB_MANAGE, by itself, creates a new DB_MANAGE or raises the
existing
%
singleton*.
%
%
H = DB_MANAGE returns the handle to a new DB_MANAGE or the handle
to
%
the existing singleton*.
%
%
DB_MANAGE('CALLBACK',hObject,eventData,handles,...) calls the
local
%
function named CALLBACK in DB_MANAGE.M with the given input
arguments.
%
%
DB_MANAGE('Property','Value',...) creates a new DB_MANAGE or
raises the
%
existing singleton*. Starting from the left, property value
pairs are
%
applied to the GUI before db_manage_OpeningFunction gets called.
An
%
unrecognized property name or invalid value makes property
application
%
stop. All inputs are passed to db_manage_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
% Copyright 2002-2003 The MathWorks, Inc.
% Edit the above text to modify the response to help db_manage
% Last Modified by GUIDE v2.5 11-May-2008 21:57:13
% Begin initialization code - DO NOT
gui_Singleton = 1;
gui_State = struct('gui_Name',
'gui_Singleton',
'gui_OpeningFcn',
'gui_OutputFcn',
'gui_LayoutFcn',
'gui_Callback',

EDIT
mfilename, ...
gui_Singleton, ...
@db_manage_OpeningFcn, ...
@db_manage_OutputFcn, ...
[] , ...
[]);

24

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 db_manage is made visible.


function db_manage_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject
handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
% varargin
command line arguments to db_manage (see VARARGIN)
% Choose default command line output for db_manage
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes db_manage wait for user response (see UIRESUME)
% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.
function varargout = db_manage_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 selection change in list_name.


function list_name_Callback(hObject, eventdata, handles)
% hObject
handle to list_name (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
% Hints: contents = get(hObject,'String') returns list_name contents as
cell array

25

%
contents{get(hObject,'Value')} returns selected item from
list_name

% --- Executes during object creation, after setting all properties.


function list_name_CreateFcn(hObject, eventdata, handles)
% hObject
handle to list_name (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
empty - handles not created until after all CreateFcns
called
% Hint: listbox controls usually have a white background on Windows.
%
See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

% --- Executes on button press in bt_load.


function bt_load_Callback(hObject, eventdata, handles)
global mfcc_file
% hObject
handle to bt_load (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
[filename, pathname] = uigetfile('*.mat','Seleccione Archivo de Datos');
mfcc_file=[pathname filename];
if mfcc_file== 0
errordlg('ERROR! No se seleccion ningn archivo!');
return;
end
load(mfcc_file);
set(handles.list_name,'String',name);

% --- Executes on button press in bt_delete.


function bt_delete_Callback(hObject, eventdata, handles)
global mfcc_file
load(mfcc_file);
% hObject
handle to bt_delete (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
list_entries = get(handles.list_name,'String');

26

index_selected = get(handles.list_name,'Value');
delete_name = list_entries(index_selected(1),:);
index=index_selected(1);
selection = questdlg(strcat('Borrar la voz de nombre:',delete_name),...
'Close Request Function',...
'Si','No','Si');
switch selection,
case 'Si',
name(index,:)=[];
fea(index,:)=[];
no_of_fe=no_of_fe-1;
save(mfcc_file,'no_of_fe','name','fea');
if(no_of_fe==0)
set(handles.list_name,'String',' ');
else
set(handles.list_name,'String',name);
end
case 'No'
return
end

% -------------------------------------------------------------------function m_loadDB_Callback(hObject, eventdata, handles)


% hObject
handle to m_loadDB (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
bt_load_Callback(hObject, eventdata, handles);

% --- Executes on button press in bt_copy.


function bt_copy_Callback(hObject, eventdata, handles)
% hObject
handle to bt_copy (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
m_copy_Callback(hObject, eventdata, handles);
% -------------------------------------------------------------------function m_copy_Callback(hObject, eventdata, handles)
global mfcc_file
duplicate =0;
load(mfcc_file);
temp_name=name;
temp_no_of_fe=no_of_fe;
temp_fea=fea;

27

[filename, pathname] = uigetfile('*.mat','Obtener Datos desde');


copy_file=[pathname filename];
if copy_file== 0
errordlg('ERROR! No se Seleccion ningn archivo!');
return;
end
load(copy_file);
if no_of_fe==0
return;
end
for i=1:no_of_fe
if any(strcmp(temp_name,name)>0) % find if the new name already
exists in data base
duplicate=duplicate+1;
else
len=length(name(i,:));
temp_name(temp_no_of_fe+i,1:len)=char(name(i,1:len));
temp_fea{temp_no_of_fe+i,1}=fea{i,1};
temp_fea{temp_no_of_fe+i,2}=fea{i,2};
temp_fea{temp_no_of_fe+i,3}=fea{i,3};
end
end
temp_no_of_fe=temp_no_of_fe+no_of_fe;
name=temp_name;
fea=temp_fea;
no_of_fe=temp_no_of_fe;
save(mfcc_file,'no_of_fe','name','fea');
set(handles.list_name,'String',name);

% -------------------------------------------------------------------function m_Exit_Callback(hObject, eventdata, handles)


% hObject
handle to m_Exit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
delete(gcf);

28

FUNCIN COMPARACIN
% intial copy modified on 21-01-08
%to extract wavelet SBC feature and save into a file
%

function MFCC_feat_inject(sig,features_mfcc_file,na)

No_of_Gaussians=12;
load(features_mfcc_file);
% no_of_fe will have the no of saved feature
% fe matrix will have the feature
no_of_fe=no_of_fe+1;
LEN=length(na);
name(no_of_fe,1:LEN)=char(na);
f=statusbar('Injecting MFCC');
fe=melcepst(sig,8000);
[mu_train,sigma_train,c_train]=gmm_estimate(fe(:,5:12)',No_of_Gaussians,
20);

fea{no_of_fe,1}=mu_train;
fea{no_of_fe,2}=sigma_train;
fea{no_of_fe,3}=c_train;
save(features_mfcc_file,'no_of_fe','name','fea');
delete(statusbar);

% intial copy modified on 21-01-08


%to extract wavelet SBC feature and save into a file
%

function MFCC_feat_inject(sig,features_mfcc_file,na)

No_of_Gaussians=12;

29

load(features_mfcc_file);
% no_of_fe will have the no of saved feature
% fe matrix will have the feature
no_of_fe=no_of_fe+1;
LEN=length(na);
name(no_of_fe,1:LEN)=char(na);
f=statusbar('Injecting MFCC');
fe=melcepst(sig,8000);
[mu_train,sigma_train,c_train]=gmm_estimate(fe(:,5:12)',No_of_Gaussians,
20);

fea{no_of_fe,1}=mu_train;
fea{no_of_fe,2}=sigma_train;
fea{no_of_fe,3}=c_train;
save(features_mfcc_file,'no_of_fe','name','fea');
delete(statusbar);

PROCESO DE GRABACIN Y EDICIN DE SONIDO


function varargout = gui(varargin)
global signal RECT s_plot
global recording_duration % the value shown in the text box
global mfcc_file
% GUI M-file for gui.fig
%
GUI, by itself, creates a new GUI or raises the existing
%
singleton*.
%
%
H = GUI returns the handle to a new GUI or the handle to
%
the existing singleton*.
%
%
GUI('CALLBACK',hObject,eventData,handles,...) calls the local
%
function named CALLBACK in GUI.M with the given input arguments.
%
%
GUI('Property','Value',...) creates a new GUI or raises the
%
existing singleton*. Starting from the left, property value
pairs are
%
applied to the GUI before gui_OpeningFunction gets called. An
%
unrecognized property name or invalid value makes property
application
%
stop. All inputs are passed to gui_OpeningFcn via varargin.
%
%
*See GUI Options on GUIDE's Tools menu. Choose "GUI allows only

30

one
%
instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help gui
% Last Modified by GUIDE v2.5 19-Nov-2012 21:40:55

% signal speach signal


% Rect is the coordenates used for getting the waveform
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',
mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @gui_OpeningFcn, ...
'gui_OutputFcn', @gui_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback',
[]);
if nargin & isstr(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 gui is made visible.


function gui_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject
handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
% varargin
command line arguments to gui (see VARARGIN)
global recording_duration
global mfcc_file
recording_duration=1;
% Choose default command line output for gui
handles.output = hObject;

31

% Update handles structure


guidata(hObject, handles);
% UIWAIT makes gui wait for user response (see UIRESUME)
% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.
function varargout = gui_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;
% this code sets the max time for recordin
% --- Executes on button press in bt_record.
function bt_record_Callback(hObject, eventdata, handles)
global mfcc_file
global signal
R_samp_len = str2num(get(handles.tx_sec,'string'));
if isempty(R_samp_len)
warndlg('Seleccione Tiempo adecuado para Grabacin','Error');
else
set(handles.tx_msg,'ForegroundColor',[1 0 0],'string','Recording..');

data=wavrecord(8000*R_samp_len,8000);% recording the sound


set(handles.tx_msg,'ForegroundColor',[0 0 0],'String','Grabacin
Finalizada');
signal = 0.99*data/max(abs(data));
plot_sig;
load('config.mat');
load(mfcc_file) %contiene fea{} q tiene los datos estadisticos de las
voces
if (no_of_fe>2)
result=MFCC_feature_compare(signal,mfcc_file);
[per index]=max(result);
msgbox( strcat( 'Resultado Rapido : La persona puede ser ..',
name(index,:),' !!! Pero confirme en pagina prinicipal' ) );
end
% now code to plot
end

32

% hObject
% eventdata
% handles

handle to bt_record (see GCBO)


reserved - to be defined in a future version of MATLAB
structure with handles and user data (see GUIDATA)

% --- Executes on button press in bt_play_select.


function bt_play_select_Callback(hObject, eventdata, handles)
global signal
% hObject
handle to bt_del_select (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)

% Allow the user to draw a rectangle on the area


% they would like to zoom in on
RECT = getrect;
xmin
xmax
ymin
ymax

=
=
=
=

RECT(1);
RECT(1) + RECT(3);
RECT(2);
RECT(2) + RECT(4);

% Set maximum zoom limits to the data edges


xaxis_limits = get(handles.s_plot,'XLim');
yaxis_limits = get(handles.s_plot,'YLim');
yaxis_limits(2);
xaxis_limits(2);
if xmin < xaxis_limits(1)
xmin = xaxis_limits(1);
end
if xmax > xaxis_limits(2)
xmax = xaxis_limits(2);
end
if ymin < yaxis_limits(1)
ymin = yaxis_limits(1);
end
if ymax > yaxis_limits(2)
ymax = yaxis_limits(2);
yaxis_limits(2);
end

33

% if the choosen zoom range is acceptable...


if ~((ymin > ymax) | (xmin > xmax))

% zoom in on the frequency data by adjusting the xaxis


% limits to be the same as those of the time data
% define the zoomed in data (for playback purposes)
imin = round(xmin*8000)+1;
imax = round(xmax*8000)+1;
end
if length(signal(imin:imax) )~= 0
wavplay(signal(imin:imax),8000);
end

% deleting a part of the file--- Executes on button press in


bt_del_select.
function bt_del_select_Callback(hObject, eventdata, handles)
global signal
% hObject
handle to bt_del_select (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)

% Allow the user to draw a rectangle on the area


% they would like to zoom in on
RECT = getrect;
xmin
xmax
ymin
ymax

=
=
=
=

RECT(1);
RECT(1) + RECT(3);
RECT(2);
RECT(2) + RECT(4);

34

% Set maximum zoom limits to the data edges


xaxis_limits = get(handles.s_plot,'XLim');
yaxis_limits = get(handles.s_plot,'YLim');
yaxis_limits(2);
xaxis_limits(2);
if xmin < xaxis_limits(1)
xmin = xaxis_limits(1);
end
if xmax > xaxis_limits(2)
xmax = xaxis_limits(2);
end
if ymin < yaxis_limits(1)
ymin = yaxis_limits(1);
end
if ymax > yaxis_limits(2)
ymax = yaxis_limits(2);
yaxis_limits(2);
end
% if the choosen zoom range is acceptable...
if ~((ymin > ymax) | (xmin > xmax))|(size(signal)<10)

% zoom in on the frequency data by adjusting the xaxis


% limits to be the same as those of the time data
% define the zoomed in data (for playback purposes)
imin = round(xmin*8000)+1;
imax = round(xmax*8000)+1;
button = questdlg('Desea Eliminar?','Eliminar');
switch button
case {'Yes'}
signal(imin:imax)=[];
samp_len = length(signal)/8000;
delta_t = 1/8000;
t = 0:delta_t:(samp_len-delta_t);
% display the signal
plot(t,signal), xlabel('Tiempo [seg]'), ylabel('Amplitud')
axis([0 t(length(signal)-1) -1 1 ]);

end
end

35

% --- Executes on button press in bt_save.


function bt_save_Callback(hObject, eventdata, handles)
global signal
% hObject
handle to bt_save (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
[filename, pathname] = uiputfile('*.wav', 'Guardar como archivo wav');
if filename ~= 0
wavwrite(signal,8000,[pathname filename])
end

% --- Executes during object creation, after setting all properties.


function tb_save_CreateFcn(hObject, eventdata, handles)
% hObject
handle to tb_save (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
empty - handles not created until after all CreateFcns
called
% Hint: edit controls usually have a white background on Windows.
%
See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

36

% --- Executes during object creation, after setting all properties.


function tb_load_file_CreateFcn(hObject, eventdata, handles)
% hObject
handle to tb_load_file (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
empty - handles not created until after all CreateFcns
called
% Hint: edit controls usually have a white background on Windows.
%
See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

function tb_load_file_Callback(hObject, eventdata, handles)


% hObject
handle to tb_load_file (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of tb_load_file as text
%
str2double(get(hObject,'String')) returns contents of
tb_load_file as a double

% --- Executes on button press in bt_launch_load.


function bt_launch_load_Callback(hObject, eventdata, handles)
global signal
% hObject
handle to bt_launch_load (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
[filename, pathname] = uigetfile('*.wav','seleccione un archivo wav para
cargar');
if filename== 0
errordlg('ERROR! No se seleccion ningun archivo!');
return;
end
set(handles.tx_load_file,'String',[pathname filename]);
% check file is selected

37

signal = wavread([pathname filename]);


signal = 0.99*signal/max(abs(signal));
% displays the time graph of the voice signal
% s_plot = timedata(gui,signal,R_fs,0.06,0.50,0.88,0.30);
plot_sig;

% -------------------------------------------------------------------function mn_load_Callback(hObject, eventdata, handles)


% hObject
handle to mn_load (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)

% -------------------------------------------------------------------function Untitled_1_Callback(hObject, eventdata, handles)


% hObject
handle to Untitled_1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)

% --- Executes during object creation, after setting all properties.

% --- playing entire file


function bt_play_Callback(hObject, eventdata, handles)
global signal
% hObject
handle to bt_play (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
if length(signal) ~= 0
wavplay(signal,8000)
end

function plot_sig()
global signal
samp_len = length(signal)/8000;
delta_t = 1/8000;
t = 0:delta_t:(samp_len-delta_t);
% display the signal

38

plot(t,signal), xlabel('Time [sec]'), ylabel('Amplitude')


axis([0 t(length(signal)-1) -1 1 ]);

% --- Executes on button press in bt_increase.


function bt_increase_Callback(hObject, eventdata, handles)
global recording_duration;
recording_duration=recording_duration+1;
% hObject
handle to bt_increase (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
set(handles.tx_sec,'String',num2str(recording_duration));

% --- Executes on button press in bt_decrease.


function bt_decrease_Callback(hObject, eventdata, handles)
global recording_duration;
if recording_duration>1
recording_duration=recording_duration-1;
end
% hObject
handle to bt_decrease (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
set(handles.tx_sec,'String',num2str(recording_duration));

% --- Executes on button press in bt_double_decrese.


function bt_double_decrese_Callback(hObject, eventdata, handles)
% hObject
handle to bt_double_decrese (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
global recording_duration;
if recording_duration>10
recording_duration=recording_duration-10;
end
set(handles.tx_sec,'String',num2str(recording_duration));

% --- Executes on button press in bt_double_increase.


function bt_double_increase_Callback(hObject, eventdata, handles)
% hObject
handle to bt_double_increase (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB

39

% handles
structure with handles and user data (see GUIDATA)
global recording_duration;
recording_duration=recording_duration+10;
set(handles.tx_sec,'String',num2str(recording_duration));

% --- Executes on button press in bt_close.


function bt_close_Callback(hObject, eventdata, handles)
close;
Sharks()
% hObject
handle to bt_close (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)

% --- Executes on button press in pushbutton16.


function pushbutton16_Callback(hObject, eventdata, handles)
% hObject
handle to pushbutton16 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)

% --- Executes during object creation, after setting all properties.


function tx_sec_CreateFcn(hObject, eventdata, handles)
% hObject
handle to tx_sec (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
empty - handles not created until after all CreateFcns
called
% Hint: edit controls usually have a white background on Windows.
%
See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

function tx_sec_Callback(hObject, eventdata, handles)


% hObject
handle to tx_sec (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of tx_sec as text

40

%
str2double(get(hObject,'String')) returns contents of tx_sec as
a double

% --- Executes on button press in MENU.

5. CONCLUSIONES

Basado en los resultados de este sistema, se puede ver como se plantea la


base del procesamiento digital de seales de voz y queda a la libre
imaginacin como puede ser utilizado para otras aplicaciones, adems del
de reconocimiento de voz.

El reconocimiento de voz es el proceso de reconocer automticamente


quien est hablando sobre la base de la informacin que figura en las
ondas de voz.

Esta tcnica hace posible el uso de la voz del hablante para verificar su
identidad y control de acceso a servicios tales como la marcacin por voz,
banca por telfono, ir de compras telefnicas, servicios de base de datos de
acceso, servicios de informacin, correo de voz, control de seguridad para
las reas de informacin confidencial, y la distancia acceso a las
computadoras.

Este tipo de sistema en un futuro puede tener buenas repercusiones en el


mundo, debido a que las personas cada vez prefieren ms comodidad y
seguridad, por lo que la voz es el mtodo de comunicacin ms verstil y
cmodo que existe ya que gastamos menos energa al utilizarla.
41

42

6. Bibliografa
http://es.123rf.com/similarimages/7698469
http://www.youtube.com/watch?v=kcMRNq6HGk
http://es.scribd.com/doc/71767500/Practic
a-4-Reconocimiento-de-Voz-Matlab
http://biblioteca.usac.edu.gt/tesis/08/08_0
223_EO.pdf

43

44

S-ar putea să vă placă și