Sie sind auf Seite 1von 75

INTRODUCCION

El reconocimiento de voz es básicamente un proceso de clasificación de patrones. El


objetivo es adquirir un patrón de entrada, en este caso es la señal de voz, y clasificarla
como adelante, atrás, izquierda, etc. Los patrones de entrada, pueden ser tratados como
palabras, sílabas o fonemas. La principal dificultad del reconocimiento es que la señal de
voz es muy variable, debido a la gran cantidad de locutores, diferentes velocidades a la hora
de hablar, condiciones acústicas y ambientales, e incluso el estado anímico del locutor.

El reconocimiento de voz ha despertado un inusitado interés, tanto en empresas


tecnológicas como en Universidades. Basta señalar una gran cantidad de diferentes
productos de interacción por voz para entender la creciente necesidad: control de acceso,
robots industriales, sistemas de ayuda a discapacitados, acceso y navegación por base de
datos, operaciones y transacciones comerciales, etc. Un sistema de reconocimiento puede
ser clasificado según sus características así: reconocimiento de palabras aisladas,
identificación de palabras clave en discurso continuo, reconocimiento de palabras
conectadas, reconocimiento de discurso continúo, con dependencia o independencia del
locutor, según el tamaño del vocabulario y si el reconocedor esta en la capacidad de
responder en presencia de ruido solamente en un ambiente controlado. Los sistemas de
reconocimiento dependiente del locutor, deben ser entrenados para responder a las
características particulares de la voz de una persona en particular, es decir, para un solo
locutor.

En este proyecto se da a conocer nuestra experiencia en el desarrollo de un prototipo de


reconocimiento de palabras aisladas dependiente del locutor. El prototipo fue desarrollado
para ser utilizado en el desarrollo e implementación de una silla de ruedas comandada por
voz. La implementación del prototipo, se divide en tres etapas: entrenamiento del codebook
o libro de códigos, entrenamiento del Modelo Oculto de Markov de cada palabra y
reconocimiento de palabras aisladas.

8
1. TÍTULO

DISEÑO E IMPLEMENTACIÓN DE UN PROTOTIPO DE RECONOCIMIENTO


DE VOZ BASADO EN MODELOS OCULTOS DE MARKOV PARA COMANDAR
EL MOVIMIENTO DE UNA SILLA DE RUEDAS EN UN AMBIENTE
CONTROLADO.

8
2. ANTECEDENTES

2.1 A NIVEL NACIONAL

Diseño e Implementación de un Prototipo que realice la Verificación Automática de


Personas por su Voz. Tesis de grado, autores: Edgar de Jesús Cabás Vanegas, Yecid
Fernando Barrera Alarcón. Grupo de Procesamiento Digital de Señales DSP, Ingeniería
Electrónica, Universidad Pedagógica y Tecnológica de Colombia, Seccional Sogamoso.
Año 2004.

Aplicaciones en Reconocimiento de Voz Utilizando HTK: Tesis de grado, autor: Iván


Horacio Villamil Espinosa, director: Pedro Raúl Vizcaya Guarín PHD. Pontificia
Universidad Javeriana. Emplea la herramienta de software HTK o “Hidden Markov Model
Toolkit”, conjunto de programas, módulos y librerías en lenguaje C desarrollado por el
Departamento de Ingeniería de la Universidad de Cambridge. Implementa dos aplicaciones
un reconocedor de palabras aisladas y un reconocedor para una cadena de 6 dígitos
conectados. Año 2005.

La estadística como herramienta para el desarrollo de sistemas automáticos


reconocedores del habla. Autor: José Luciano Maldonado. Instituto de Estadística
Aplicada y Computación Facultad de Ciencias Económicas y Sociales Universidad de los
Andes.

Propuesta, validación y prueba de una arquitectura para modelado de portales WEB


semánticos basados en interacción por voz. Investigación de los ingenieros Freddy
Méndez Ortiz y Hugo Vecino Pico. Grupo de tecnologías de información Línea de
Ingeniería de software y sistemas de información, Universidad Autónoma de Bucaramanga.
Año 2006.

Selección de características para el Reconocimiento de Voz con Modelos Ocultos de


Markov. Autores: Mauricio Álvarez, Julio F. Suarez, Germán Castellanos Grupo de
Control y Procesamiento Digital de señales Universidad Nacional de Colombia . Sede
Manizales. Evalúa tres alternativas de selección de características de la señal de voz:
Análisis de componentes principales, Análisis Factorial y Análisis Discriminante Factorial.
Año 2003.

2.2 A NIVEL IBEROAMÉRICA

8
Reconocedor de dígitos: Proyecto independiente de ITZAR GORETTI ALONSO
GONZÁLEZ Ingeniero Técnico de telecomunicaciones Universidad de Las Palmas de
Gran Canaria. Año 2002. España. En este proyecto se hace uso del análisis de voz,
clasificación de patrones y reconocimiento de palabras aisladas dependiente del locutor.

Arquitectura y Métodos en Sistemas de Reconocimiento Automático de Habla de


Gran Vocabulario. Tesis de grado, Código: GTH-98-1 Autor: Javier Macías Guarasa.
Directores de la Tesis: José Manuel Pardo Muñoz y Javier Ferreiros López. octubre1998.
Grupo de Tecnología del Habla. Departamento de Ingeniería Electrónica, Universidad
Politécnica de Madrid.

Silla de Ruedas Inteligente Controlada por Voz. Proyecto desarrollado por: J.M.
Alcubierre, J. Minguez, L. Montesano, L. Montano, O. Saz, E. Lleida. Trabajo conjunto
entre el Instituto de Investigación en Ingeniería de Aragón, Departamento de Informática e
Ingeniería de Sistemas, Departamento de Ingeniería Electrónica y Comunicaciones de la
Universidad de Zaragoza, España. Presentado en el Primer Congreso Internacional de
Domótica y Robótica y en la revista de Tele asistencia para todos Fundación ONCE.
Muestran una silla de ruedas en donde se aplica reconocimiento de voz, reconocimiento de
imágenes y navegación en un entorno controlado. Año 2005.

9
8
3. PLANTEAMIENTO DEL PROBLEMA

3.1 DESCRIPCIÓN DEL PROBLEMA

El oído humano esta habilitado para desarrollar variadas tareas de procesamiento a las
señales que le llegan. Por ejemplo, posee mecanismos auditivos para realizar seguimiento
de señales en ambientes ruidosos, cambios finos de intensidad y de frecuencia pueden ser
medidos por el oído. El oído procesa una señal de presión acústica transformando esta en
patrones de vibraciones mecánicas en la membrana basilar, y representando dicho patrón
por una serie de pulsos a ser transmitidos al nervio auditivo. En la corteza auditiva se
reciben los impulsos sonoros y se interpretan como sonidos distintos. Sin embargo, las
señales deben transmitirse a las áreas auditivas de asociación circundantes, para dilucidar
su significado. Este proceso de identificación le es fácil al ser humano, sin embargo crear
un prototipo computacional de reconocimiento automático del habla no es una tarea
sencilla.

Para implementar un prototipo de reconocimiento de voz en un computador, es necesario


realizar varias tareas, estas tareas son: adquisición de la señal de voz, pre-énfasis, ventaneo,
parametrización, cuantificación, calculo del codebook, entrenamiento y reconocimiento.
Sin embargo la realización de estas no garantiza el buen funcionamiento del prototipo, que
depende de la rigurosidad del entrenamiento y de factores externos como la pronunciación,
la velocidad de producción del sonido y las limitantes de comunicación que pueda presentar
el usuario.

La posibilidad de comunicarnos verbalmente con el computador posibilita la


implementación de sistemas convertidores texto-voz, tareas multi-linguisticas, sistemas de
ayuda a discapacitados entre otros, estas aplicaciones han impulsado la realización de
trabajos sobre el reconocimiento de voz. La elaboración de trabajos sobre reconocimiento
automático del habla permite ejecutar aplicaciones como: a partir de textos identificar
estructuras fonéticas y convertirlas en señales de voz audibles, en tareas multi-linguisticas
realizando los dos procesos, la identificación de palabras, la conversión texto-voz y en
sistemas de ayuda a discapacitados reconociendo palabras aisladas para generar ordenes a
un sistema móvil (silla de ruedas).

El proyecto se basa en la detección de palabras aisladas a partir de la identificación de los


parámetros de cada una. El esquema global utilizando Modelos Ocultos de Markov (HMM)
queda resumido de la siguiente forma: adquisición de datos, muestreo y cuantificación, pre-
énfasis, ventaneo, parametrización, calculo del codebook, cuantificación vectorial,
entrenamiento del HMM de cada palabra y el reconocimiento. La eficiencia en el
reconocimiento de palabras aisladas utilizando HMM depende de varios factores como la

9
rigurosidad del entrenamiento del codebook, la elección de parámetros iníciales en el
entrenamiento de los modelos de cada palabra, las condiciones del ambiente etc.

3.2 FORMULACIÓN DEL PROBLEMA

¿Que eficiencia se obtiene en el reconocimiento de palabras aisladas utilizando los Modelos


Ocultos de Markov?

10
4.

11
5. JUSTIFICACIÓN

El procesamiento digital de voz ha constituido un campo de investigación muy importante


desde la aparición de los primeros computadores, así como su utilización en diferentes
campos de la industria, este proyecto busca además de apropiar conocimientos en el área de
procesamiento de señales , ejecutar una aplicación del prototipo que pueda representar un
beneficio social y económico. En este caso la aplicación del prototipo de reconocimiento de
palabras aisladas será el comando del movimiento de una silla de ruedas, a partir de órdenes
generadas por el usuario para su ubicación en un espacio determinado.

Este estudio tiene la finalidad de fortalecer la línea de investigación en procesamiento


digital de imágenes y voz del Grupo de Investigación en Procesamiento de Señales DSP-
UPTC de la escuela de Ingeniería Electrónica, además de adquirir conocimientos en un
área que no esta incluida en el pensum de la carrera, complementando así la formación que
tendremos como Ingenieros Electrónicos.

12
6. OBJETIVOS

5.1 OBJETIVO GENERAL

• Diseñar e Implementar un prototipo de reconocimiento de palabras aisladas basado


en Modelos Ocultos de Markov para comandar el movimiento de una silla de ruedas.

5.1 OBJETIVOS ESPECÍFICOS

• Establecer los modelos de las palabras a ser reconocidas por el prototipo de


reconocimiento de palabras aisladas.

• Implementar el algoritmo de reconocimiento de palabras aisladas utilizando Modelos


Ocultos de Markov.

• Implementar la interfaz de comunicación entre el computador y el microcontrolador


encargado de comandar el movimiento de la silla de ruedas.

• Establecer la eficiencia del algoritmo de palabras aisladas utilizando Modelos


Ocultos de Markov.

13
6. MARCO TEÓRICO

6.1 FUNDAMENTOS DE LA VOZ

6.1.1 Aparato fonador humano

La señal de voz es una onda de presión acústica que se genera voluntariamente a partir de
movimientos de la estructura anatómica del sistema fonador humano. La producción de la
voz comienza en el cerebro con la conceptualización de la idea que se desea transmitir, la
cual se asocia a una estructura lingüística, seleccionando las palabras adecuadas y
ordenándolas de acuerdo con unas reglas gramaticales. A continuación el cerebro produce
los comandos nerviosos que mueven los órganos vocales para producir los sonidos. La
unidad mínima de una cadena hablada es el fonema, el cual posee un carácter distintivo en
la estructura de la lengua. La combinación de los fonemas da origen a las sílabas, las cuales
conforman las palabras, y estas a su vez, las oraciones [13].

El tracto vocal empieza a la salida de la laringe y termina a la entrada de los labios. El


tracto nasal empieza en el paladar y termina en los orificios nasales. Los parámetros
principales del sistema articulatorio son: las cuerdas vocales, el paladar, la lengua, los
dientes, los labios y las mandíbulas. Los distintos sonidos se producen al pasar el aire
emitido por los pulmones, a través de todo el sistema de producción, en una determinada
posición del aparato articulatorio.

Desde el punto de vista de la ingeniería es lógico pensar que este sistema físico puede
representarse como un filtro, cuya función de transferencia depende del sonido articulado y,
por tanto, de la posición de los distintos órganos involucrados en la generación de la voz.
La entrada del filtro se puede modelar mediante una señal de excitación, que corresponde al
paso del aire generado por los pulmones a través de la tráquea y las cuerdas vocales, y
también será dependiente del sonido generado [9].

6.1.2 Modelo “Source-filter”

En él se considera a la voz producida por una señal de excitación en forma de impulsos que
provienen de la acción de las cuerdas vocales, alternado de forma aleatoria con ruido
blanco, que alimenta a un filtro de características variables, aunque con una constante de
tiempo mucho mas lenta. De esta manera se puede incorporar al modelo la información del
tracto vocal, cuyas piezas móviles están consideradas con las características variables del
filtro. La información del tracto vocal esta contenida en la envolvente del espectro
resultante.

14
Figura 1. Modelo Source-Filter

6.2 MUESTREO Y CUANTIFICACIÓN

Según Nyquist sabemos que es necesaria una frecuencia de muestreo de por lo menos el
doble del ancho de banda de la señal a caracterizar, sobre esta base y para un análisis
mínimo (en lo que respecta a frecuencia) de la señal de voz se utiliza una frecuencia de
muestreo fs de 8khz, aunque se suele usar 16khz si se desea obtener mayor detalle en
frecuencia lo que mejora la resolución para tratamiento de la señal.

La cuantificación más comúnmente usada, es de 8 bits, mínimo requerido para una calidad
baja, puede mejorarse su S/R con una técnica no lineal de cuantificación, se obtienen
excelentes resultados aumentando la cuantificación a 16 bits [13].

La siguiente etapa será aquella que se encargue de amplificar las señales a niveles que sean
manejables. A partir de la señal analógica obtenida se hace necesario convertir la señal a
formato digital para poder procesarla en la computadora lo que se realiza mediante dos
procesos: muestreo y cuantificación.

La señal vocal tiene componentes de frecuencia que pueden llegar a los 10 kHz., sin
embargo la mayor parte de los sonidos vocales tiene energía espectral significativa hasta los
5 kHz solamente los sonidos fricativos poseen componentes que pueden llegar a los 10
kHz.

6.3 PRE-PROCESAMIENTO

Se hace necesario para el análisis realizar un pre-procesamiento de la señal vocal. Esto se


realiza a través de técnicas que permitan extraer la información acústica directamente a
partir de la señal vocal emitida.

6.3.1 Pre-énfasis

La etapa de pre-énfasis se realiza con el propósito de suavizar el espectro y reducir las


inestabilidades de cálculo asociadas con las operaciones aritméticas de precisión finita.
Además se usa para compensar la caída de -6 dB que experimenta la señal al pasar a través
del tracto vocal. Se usa un filtro digital de primer orden cuya función de transferencia es:

15
Hz=1-az (6.1)
La ecuación de diferencias será:

yn=sn-a×sn-1 (6.2)

6.3.2 Ventaneo

En la etapa siguiente, la señal pre-acentuada se toma cada 10 o 20ms. por espacio de 20 o


40 ms. y se la somete a una ventana de Hamming con el objeto de suavizar la señal en los
bordes de dicha ventana. Esta es la ventana que generalmente se usa para el análisis de
señales de voz, y se define como:

wnT=0.54-0.46cos2nN 0≤n≤N (6.3)

6.3.3 Segmentación

En el reconocimiento de señales de voz, se hace necesario determinar con adecuada


precisión los puntos de inicio y final de cada palabra, es decir, se debe diferenciar las partes
de señal que llevan información de voz de aquellas que no llevan voz. Este procedimiento
evita gastar memoria y tiempo de cálculo en las tramas que no contienen información
evitando así obtener resultados erróneos en el análisis de las señales de voz.

Se han planteado diferentes maneras de clasificar eventos en una señal de voz. Quizá la más
simple y más empleada, está relacionada con la generación de la voz e incluye tres estados:
silencio cuando no hay voz; sonoro cuando se presenta vibración de las cuerdas vocales; y
sordo cuando las cuerdas vocales no vibran.

En general, un sistema de clasificación de voz puede tener inconvenientes en distinguir un


fonema sordo de baja amplitud y corta duración, del silencio; o un fonema sonoro de baja
amplitud de un fonema sordo o incluso del silencio. El error a su vez aumenta a medida que
la relación señal a ruido disminuye.

El problema de encontrar los puntos de inicio y fin de palabra es fundamental en


procesamiento de voz. Por ejemplo, en reconocimiento automático de palabras aisladas, es
necesario encontrar las regiones de la señal que corresponden a cada palabra a ser
analizada. De la correcta segmentación de la señal depende en gran medida la exactitud del
proceso de reconocimiento. De hecho, las fallas en la segmentación de la señal constituyen
una de las principales fuentes de error en los sistemas de reconocimiento de voz, ya que
algunos sonidos que pueden captarse, correspondientes a ruido de fondo, podrían
eventualmente confundirse con voz; por ejemplo, el espectro de la respiración tiene
semejanzas con el de un fonema fricativo (?). La detección de los límites de palabra
también se realiza con el fin de evitar cálculos innecesarios, al procesar únicamente las
partes de la señal que corresponden a voz [13].

16
6.4 COEFICIENTES DE PREDICCIÓN LINEAL

Para el reconocimiento de señales de voz la información relevante es la relativa al tracto


vocal, ya que es la que define el tipo de sonido que se ha emitido. Por el contrario, la
información relativa a la excitación no es útil, ya depende de factores altamente variables
como la entonación, sexo del locutor, estado emocional del locutor, etc. Por ello, una buena
manera de representar la información relativa exclusivamente al tracto vocal es mediante un
vector de parámetros que contenga los primeros L coeficientes cepstrales
(c(1);c(2); : : : ;c(L)), siendo L un numero pequeño (Típicamente entre 8 y 20). El primer
coeficiente cepstral c (0) tampoco se suele incluir en el vector, ya que está relacionado con
la energía de la señal, que es también un parámetro sometido a una alta variabilidad. El
cepstrum LPC proporciona mejores resultados que el cepstrum FFT, por lo que es
preferible su uso [8]. Este cepstrum puede obtenerse mediante la siguiente recursión:

(6.4)

6.5 CUANTIFICACIÓN VECTORIAL

Una parte importante en cualquier tipo de procesamiento de voz es la optimización de los


algoritmos en cuanto a velocidad y almacenamiento, entonces, la cuantificación de vectores
trae consigo la idea de clasificar un conjunto de vectores, luego de lo cual se buscarán los
mejores representantes para reducir el tamaño de la información a manejar. La forma de
medir la fidelidad de un cuantificador es determinar el error que éste produce al reemplazar
los datos de entrada que recibe por los vectores representantes o codewords, dicho
parámetro es llamado error por distorsión. La finalidad de un cuantificador es obtener un
conjunto de vectores representativos llamado codebook, que presente el menor error por
distorsión, por ejemplo para cuantificar los vectores de observación.

* Ventajas

Reduce el almacenamiento de la información de análisis.


Se reduce el cálculo para determinar distancias entre vectores espectrales. La
representación del VQ se limita a una tabla que contiene las distancias entre pares de
vectores del codebook.

17
Representación discreta de las señales de voz. Asociando una característica fonética con
cada vector del codebook, el proceso de elección del vector que mejor lo representa es
equivalente a asignar una característica fonética a cada segmento de voz.

* Desventajas

Distorsión en la representación del vector. Hay un número finito de vectores en el


codebook, el proceso de “elección" del mejor representante es equivalente a cuantificar el
vector y conduce a un cierto nivel de error de cuantificación. De cualquier modo con
cualquier codebook finito siempre habrá un nivel de ruido o error.

El almacenamiento requerido para los vectores del codebook no es pequeño. Cuanto más
grande sea el codebook menor es el error. Para un codebook de 1000 o más entradas, el
almacenamiento no es irrelevante. Hay que realizar un balance entre error de
cuantificación, procesamiento y almacenamiento del codebook.

* Componentes de un cuantificador vectorial

Para construir un cuantificador vectorial se necesita:

1. Un gran número de vectores de observación, V1, V2,....., Vn, que conforman el grupo de
entrenamiento. El grupo de entrenamiento se usa para crear el grupo de vectores del
codebook "optimo" que representa la variabilidad espectral observada en el grupo de
entrenamiento.

2. Una medición de distancia entre cada par de vectores espectrales de observación para
agrupar el conjunto de vectores de entrenamiento como así también para asociar o clasificar
vectores arbitrarios a cada entrada del codebook.

3. Un procedimiento de clasificación para ubicar y calcular los centroides. Sobre la base del
particionamiento que clasifica el grupo de n vectores en M clústeres o sectores primero
elegimos el número M, codewords del codebook, para luego proceder a la clasificación.

6.5.1 Distancia Euclidiana

Mide la línea recta que une dos puntos en un espacio Euclidiano. Si tomamos como
ejemplo un espacio unidimensional la distancia será la resta de ambas coordenadas: D (x1,
x2) = x2 – x1 en un plano será la hipotenusa del triángulo rectángulo formado por los
puntos (Pitágoras) en tres dimensiones y por extensión en un espacio multidimensional de
orden n, se calcula una "hipotenusa" n dimensional, lo que generaliza el cálculo de la
distancia mínima.

6.5.2 Vectores de Observación

18
Al final de los distintos pasos para el tratamiento de la señal de voz, se obtiene un vector
que contiene la información vocal que representa a la ventana temporal correspondiente, de
alguna manera una colección de características que describen de la mejor manera posible la
voz humana. Estos vectores son conocidos en la literatura del reconocimiento de voz como
vectores de observación.
Cabe aclarar que existen varias formas de representación de estas características como LPC
(Linear Prediction Code) o Auditory System, pero la que en la actualidad da los mejores
resultados es el análisis Cepstral, en particular los coeficientes MFCC (Mel Frecuency
Cepstral Coeficients). También suele incorporarse al vector de Observación la información
de la primera y segunda derivadas del Cepstrum con respecto al tiempo para agregar
información de las características dinámicas del sistema y el logaritmo de la energía total de
la ventana.

6.5.3 Clasificación de Vectores

El objetivo de un módulo clasificador es agrupar una cantidad de vectores característicos,


N, en una cantidad M (M<N), discreta, de sectores o celdas de clasificación logrando que
las características en cada sector sean similares. Existen muchos criterios para lograr dicho
objetivo y a continuación veremos algunos de los más comunes.

Imaginemos que la media multidimensional de un determinado sector i, es µi (con 1<i<M),


y a continuación ingresa al clasificador un vector de observación o, se puede clasificar
dicho vector calculando la "distancia" a la que se halla de cada una de las M medias y
asignándolo al sector más "cercano".

Este método de clasificación se denomina k-Means debido a que se agrupan los vectores en
torno a k valores medios, quedando formados k sectores (en nuestro caso k=M). Existe el
problema de inicialización de los valores de µi, y su reestimación a medida que progresa el
algoritmo.

* Algoritmos de Clasificación: Podemos decir, en general, que los N vectores originales


de tamaño D quedarán representados por M vectores, cada uno de los cuales es llamado
"palabra de código" o codeword (Cw), el grupo entero de dichos vectores, forma un "libro
de códigos" o codebook, quedan entonces delimitadas M regiones o sectores, llamados
regiones de Voronoi. Los principales algoritmos de clasificación de vectores son descritos a
continuación:

Algoritmo K-Means
1. Inicialización: Arbitrariamente elegimos M vectores o palabras de código, codewords,
como el grupo inicial del codebook.

2. Búsqueda del mas cercano: Por cada vector de observación, se busca el codeword en el
codebook que es el más cercano (en términos de distancia), y asigna a ese vector a la celda
correspondiente.

19
3. Actualización del centroide: actualiza el codeword en cada celda o sector usando el
centroide de los vectores de entrenamiento asignados a un sector.

4. Iteración: Repite los pasos 2 y 3 hasta que la distancia media caiga debajo de un umbral
prefijado.
La forma de cada sector o celda o partición es muy dependiente de la medida de distorsión
espectral y las estadísticas de los vectores en el grupo de entrenamiento. Este método es el
más simple y por tanto existen numerosas modificaciones y mejoras, algunos de sus puntos
débiles son:

1. Los resultados dependen en forma muy acentuada de los valores iníciales elegidos como
palabras de código.

2. También hay gran dependencia del número de sectores M así como de la implementación
de la "distancia" usada.

3. Puede suceder que algunos de los sectores resulten vacíos.

Algoritmo LBG

Se analizará con algún detalle debido a su buen desempeño, para eso comenzaremos por el
algoritmo fundamental LBG. El algoritmo LBG, lleva su nombre debido a sus autores Y.
Linde, A. Buzo y R. M. Gray, en él se elige 1 codeword inicial de entre los vectores de
datos a clasificar, luego se utiliza el algoritmo de división binaria para duplicar el número
de codewords, los vectores de observación se agrupan en torno a los codewords que les
presentan menor distancia, se recalculan los codewords como la media multidimensional de
cada sector y se agrupan nuevamente los datos, el proceso se detiene cuando el codebook
no presenta variación significativa y al llegar al número de codewords deseados.

Este algoritmo de gran popularidad (que utiliza el algoritmo k-Means) produce codebooks
que logran un mínimo local en la función de error por distorsión. Para generar un codebook
de M sectores o palabras de código:

En primer lugar designando un codeword inicial para luego utilizando una técnica de
división llegar a obtener un codebook inicial, luego iterando la misma técnica de división
en los codewords hasta que llegamos a obtener el número de codewords igual a M que va a
ser el tamaño del codebook deseado.

El procesamiento se denomina división binaria:

1. Designar 1 vector del codebook o codeword inicial, éste resulta ser el centroide del grupo
de los vectores de entrenamiento.

2. Calcular la media del grupo de entrenamiento:

20
2.1. Calcular el error o distancia media entre el codeword inicial y los vectores de
entrenamiento:

3. Duplicar el tamaño del codebook mediante la división de cada codeword:

4. Usar el algoritmo K-Means para tomar el mejor grupo de centroides para la separación
del codebook.
5. Iterar pasos 3 y 4 hasta llegar a un codebook de tamaño M.

Una de las causas que motivo el uso de un VQ fue la suposición que, en el límite, el
codebook debería idealmente tener 36 vectores, uno por cada fonema, suposición que es
incorrecta.

6.5.4 Utilización del cuantificador y del codebook

Una vez construido el codebook, el procedimiento para cuantificar vectores es básicamente


realizar una búsqueda completa a través del codebook para encontrar el mejor
representante. Si anotamos los vectores del codebook, de tamaño M, como Cw, 1≤ w ≤ M, y
tomamos al vector de observación a ser cuantificado como V, luego el vector representante
o codeword, Vm*, es:

Un procedimiento de cuantificación para señal de voz elige el vector más cercano del
codebook al vector de observación y utiliza ese vector denominado codeword, como la
representación resultante para etapas posteriores. Se refiere como al vector "vecino" más
cercano, toma como entrada, vectores de señal de voz y da como respuesta, a su salida, el
vector que mejor representa esa entrada [15].

6.6 MODELOS OCULTOS DE MARKOV (HMM)

6.6.1 Elementos de un HMM

Dado un modelo HMM pueden definirse sobre el mismo los siguientes elementos, que
caracterizan completamente al HMM:

• N: cantidad de estados del modelo. Si bien no son observables, para algunas aplicaciones
suelen tener algún significado físico asociado.

• M: el número de símbolos de observación distintos por estado. Corresponde a la salida


física del sistema modelado.

λ=A=aij 1≤i,j≤Naij=Pqt+1=jqt=i con j=1Naij=1 ∀ iB=bjk 1≤i≤N,


1≤k≤Mbjk=POt=kqt=j con k=1Mbjk=1 ∀jπ=πi 1≤i≤Nπi=Pq1=i prob.del estado
inicial, con i=1Nπi=1 (6.5)

21
Siendo los elementos aij comúnmente expresados por medio de la matriz de transiciones A,
matriz de probabilidad de transición entre estados y los elementos bjk comúnmente
expresados por medio de la matriz B, matriz de probabilidad de emisión de símbolos en un
estado cualquiera.

A partir de una secuencia de observaciones se puede inferir el modelo dinámico más


probable λ, resultando un modelo para el proceso deseado. Por lo tanto, un HMM puede
describirse como un modelo generativo que modela un proceso (en nuestro caso la voz)
como una sucesión de estados que se conectan por transiciones. Cada estado tiene asociada
una salida de una observación, con su correspondiente distribución de probabilidades. Cada
transición está asociada a una probabilidad que la caracteriza. El modelo lleva el nombre de
Markov debido a su restricción de que la probabilidad de un estado en el tiempo actual,
sólo depende del estado previo, y oculto ya que los estados no son observables en forma
directa, sino a través de sus observaciones que son los vectores correspondientes,
característicos de la señal. La probabilidad de dicha salida modela la imposición acústica y
la probabilidad de transición entre estados modela su duración.

6.6.2 HMM y problemas asociados

Desde el punto de vista del modelado de segmentos o símbolos de voz, los HMM son muy
versátiles, pudiéndose realizar el modelo de fonemas, palabras, y hasta frases enteras.

Provisto por el cuantificador de vectores el HMM tendrá una cantidad discreta de


observaciones M y también una cantidad N de estados.

Los problemas que se deben enfrentar son:

• En primer lugar es necesario obtener el modelo λ(A, B, π) para un determinado grupo de


observaciones que haga óptimo el calculo de P (O\ λ), es decir, que haga máxima la
probabilidad de haber generado dichas observaciones, proceso conocido como
entrenamiento del HMM.

• En segundo término calcular las probabilidades P (O\ λ), es decir que la secuencia de
observaciones O, haya sido generada por un dado modelo λ.

• Por último si se tiene un grupo de observaciones O, y el modelo λ, calcular la secuencia


de estados óptima, la que hace máxima P (secuencia\O, λ).

Si se quiere encarar el problema de reconocimiento de palabras aisladas y su número no


hace que computacionalmente sea irrealizable, puede calcularse el modelo (λ) de cada una
de ellas, con entrenamiento adecuado, y luego al llegar al sistema un conjunto de
observaciones desconocido, calcular las probabilidades P (O\ λi) y decidir por el modelo de
mayor probabilidad.

22
Si el sistema es de reconocimiento continuo o el número de palabras es grande, lo anterior
es imposible, ya sea el hecho de tener modelos de todas las palabras posibles como el de
calcular tal número de probabilidades. Una alternativa a esto es tratar de obtener la
secuencia de estados óptima, hecho que permite el ahorro de tiempo de cálculo.

6.6.3 Tipos de HMMs

Ergódico y de izquierda a derecha: Según su topología tenemos dos modelos útiles en


reconocimiento de voz:

• Ergódico

• De izquierda a derecha (o Bakis model).

El primero (modelo ergódico) se trata del modelo de una matriz de transiciones ergódica
para la cual cada estado puede alcanzarse desde cualquier otro estado en una cantidad finita
de pasos.

La topología de izquierda a derecha, tiene la característica que a medida que avanza el


índice de tiempo t, el índice de estados también avanza (nunca retrocede), o queda en el
mismo estado, lo que permite modelar adecuadamente señales cuyas propiedades varían
con el tiempo, como la voz. De esta manera, se considera al HMM progresando de
izquierda a derecha ya que la voz siempre adelanta en el tiempo, pudiendo también quedar
en un loop para permitir mayor duración a cada estado individual. Las modificaciones que
resultan son pocas, y tienen que ver con los estados iníciales y algunas probabilidades de
transición. Esto indica que el sistema no puede retroceder o producir una transición hacia
un estado con un índice menor al actual. Las probabilidades, para esta topología, quedan
restringidas con la siguiente expresión:

aij=0 ∀ j<i (6.6)

Normalmente se incluye otra restricción para que no ocurran grandes saltos durante el
avance de estados, y es la siguiente:

aij=0 j>i+Δ , con Δ=2 (6.7)


aNN=1 para su estado final

De esta manera no se darán saltos mayores a 2 estados en el sistema. Todo lo descripto para
el modelo de izquierda a derecha, no modifica en nada lo asumido para resolver un modelo
ergódico, ya que todas las restricciones realizadas a cualquier tipo de modelo son
automáticamente respetadas en la reestimación de parámetros. Todo lo dicho hace que éste
modelo sea muy utilizado en reconocimiento de voz de palabras aisladas ya que de esta
forma se puede asociar el tiempo y los estados de manera más clara para poder imaginar el
concepto físico de los estados por los que pasa el modelo, y luego mejorarlo. Una ventaja
de la topología de izquierda a derecha radica en que permite reducir la cantidad de

23
transiciones entre estados, hecho que trae como consecuencia el aumento de información
estadística asociada a los elementos del sistema.

6.6.4 Aplicaciones de HMM

Como se dijo anteriormente, los modelos ocultos de Markov son efectivos en la


caracterización de las señales de voz, en cuanto permiten modelar:

• La duración: mediante las probabilidades de transición entre estados.

• La variación acústica: mediante las probabilidades de emisión asociadas a cada estado.

Los HMM deben ser vistos como modelos generativos de las características vocales.
Podemos decir que por cada sonido emitido por una persona, se puede construir un HMM
que sea capaz de generar los mismos sonidos. Si bien este proceso no es sencillo, podemos
describirlo como se indica a continuación:

• una persona emite una palabra, la cual es caracterizada por una señal de voz que puede ser
descompuesta en una secuencia de observaciones características de la señal emitida.
• Por analogía, se puede obtener un modelo oculto de Markov, que genere tras un ciclo
determinado de tiempo, una secuencia de observaciones idéntica a la emitida por el ser
humano.

Ahora bien, esta analogía puede ser generada efectivamente, pero recordando las
definiciones del modelo descritas en las secciones anteriores, se concluye que, para obtener
dicho modelo es necesario caracterizarlo completamente, es decir, se deben obtener:

• Probabilidades de transición de estados (Matriz A)


• Probabilidades de emisión (Matriz B)
• Vector de probabilidad inicial

Es justamente la obtención de este modelo, el principal problema que se debe enfrentar al


intentar implementar un modelo HMM generativo de una secuencia de observaciones. Para
realizar esta tarea se debe tener en cuenta que, inicialmente tendremos un modelo HMM
completamente indefinido.

6.6.5 Entrenamiento de HMM

El proceso de entrenamiento de un modelo HMM, utiliza los algoritmos necesarios para


realizar el cálculo o estimación de los parámetros que definen al modelo. Se trata
básicamente de un proceso iterativo que maximiza en forma local la probabilidad de que
una secuencia de observación haya sido generada por un modelo particular [P (O| λ)] y que
garantiza en cierta forma la convergencia del proceso a partir de un modelo inicial
aleatorio.

24
Uno de los métodos más conocidos para realizar esta tarea es la técnica de maximización de
la Estimación, y como una especialización de la misma, el algoritmo de Baum – Welch.
Este último define los parámetros de un HMM como se muestra a continuación:

• Probabilidades de transición de estados (Matriz A)


• Probabilidades de emisión (Matriz B)
• Vector de probabilidad inicial
Entonces, dada una secuencia muestral, se busca, mediante el método de maximización de
la estimación, obtener el modelo HMM que tenga más probabilidad de generar la secuencia
indicada utilizando las fórmulas expuestas y el algoritmo general que se indica a
continuación:

• Obtención del modelo inicial: se obtiene en forma totalmente aleatoria, sujeto como es
de suponer a las restricciones de probabilidades comunes. Existe la posibilidad de
implementar mejoras que ayuden a obtener parámetros iníciales más exactos. Cabe aclarar
que cuanto más exacto o cercano al máximo global se encuentre el modelo inicial, más
exacto será el modelo final obtenido.

• Cálculo de P: la probabilidad de que la observación haya sido generada por el modelo


obtenido es calculada con la ayuda de algoritmos intermedios auxiliares que permiten
reducir la complejidad computacional del proceso (algoritmos forward y backward). Esta
probabilidad es calculada por cada uno de los modelos obtenidos hasta verificar que la
misma es máxima.

• Reestimación del modelo: se trata de recalcular los parámetros del modelo utilizando las
fórmulas anteriores, basándose para ello en el modelo obtenido en la iteración anterior.

• Modelo óptimo: una vez alcanzada la máxima probabilidad, se está en presencia del
modelo óptimo el cual debe ser guardado para su utilización posterior en lo que se da a
llamar el repositorio de modelos.

En resumen, el algoritmo de maximización de la estimación propone obtener en forma


iterativa modelos λn para una secuencia de observaciones muestra, e ir comparando las
probabilidades de generación de los mismos (las cuales, como es de suponer, son crecientes
hasta alcanzar el máximo) hasta detectar que se llegó a un máximo local para dicha
probabilidad. Alcanzado este máximo (paso garantizado por la convergencia del método) se
toma al modelo final como el que más probablemente pueda generar la secuencia de
observaciones caracterizada por la muestra.

Habiendo generado un modelo óptimo para una secuencia de observaciones dada, solo resta
determinar cómo interactuar para obtener un reconocedor de palabras aisladas a partir de lo
expresado [15].

25
7

26
6. DISEÑO E IMPLEMENTACIÓN DEL PROTOTIPO DE RECONOCIMIENTO
DE PALABRAS AISLADAS

En este capitulo se expone la estructura del algoritmo de reconocimiento y la construcción


del sistema móvil, incluyendo el software de programación que se utiliza. El prototipo de
reconocimiento presenta las siguientes características: vocabulario pequeño, dependiente
del locutor, palabras aisladas, reconocimiento en un ambiente controlado (el prototipo debe
utilizarse en un lugar con características similares a las del lugar donde se entrenó),
ejecución sobre AMD Athlon(tm)64 3.5GHz y plataforma de software, Matlab 7.0.4.

7.1 SOFTWARE

El software escogido para la implementación del algoritmo fue MATLAB 7.0.4, que
proporciona características necesarias a los requerimientos del prototipo como: adquisición
de datos, manejo de grandes grupos de datos, interfaces graficas etc. Matlab facilita la
manipulación de grandes grupos de datos (matrices o vectores), característica que para el
desarrollo del prototipo es muy importante, porque en el entrenamiento se realiza el
almacenamiento y procesamiento de un grupo muy grande de pronunciaciones de cada
palabra. Adicionalmente proporciona funciones muy útiles en el cálculo de distancias entre
vectores, herramienta imprescindible en el cálculo de los centroides, etc.

Las funciones pueden ser invocadas desde cualquier programa, con lo cual se disminuye el
número de líneas de código y la dificultad al programar, además posee una herramienta
llamada GUIDE (Graphical user interface develop enviroment) que sirve para implementar
interfaces graficas de usuario. Con esta herramienta se puede crear diferentes elementos
gráficos como: deslizadores, botones, cuadros de datos, pulsadores etc.

7.2 SELECCIÓN DE LAS PALABRAS A SER RECONOCIDAS

La selección de las palabras se realizó teniendo en cuenta aquellas cuyo significado se


identifique mejor con la acción asociada, además de poseer gran diferencia fonética,
característica fundamental para obtener un error promedio total bastante reducido.
Teniendo en cuenta las características anteriores las palabras escogidas fueron: adelante,
reversa, izquierda, derecha, frenar y markov. Las cinco primeras palabras se asocian al
movimiento deseado por el usuario y markov es la encargada de activar la salida de datos
por puerto.

7.3 ESTRUCTURA DEL ALGORITMO RECONOCIMIENTO

27
La implementación del algoritmo se divide en tres tareas específicas, tales como:
entrenamiento del codebook o libro de códigos, entrenamiento del Modelo Oculto de
Markov (HMM) de cada palabra y reconocimiento (Figura 2).

Figura 2. Estructura del prototipo de reconocimiento de palabras aisladas.

Entrenamiento del Modelo Oculto de Markov de cada palabra


Entrenamiento del codebook Reconocimiento

7.4 ENTRENAMIENTO DEL CODEBOOK O LIBRO DE CÓDIGOS

El entrenamiento del codebook se realizó de la siguiente forma: adquisición y muestreo de


la señal de voz, cuantificación, filtro pasa bajos, pre-procesamiento, extracción de
parámetros característicos y cálculo del codebook (Figura 3). Es necesario realizar una gran
cantidad de repeticiones de cada palabra y almacenar los parámetros característicos de cada
una en una matriz para el posterior cálculo de los centroides.

Figura 3. Estructura del algoritmo de generación del Codebook

Tarjeta de sonido

Adquisición y muestreo de la señal de voz

Cuantificación

Filtro pasa-bajos

Pre-procesamiento

Extracción de parámetros característicos

Calculo del codebook


7.4.1 Adquisición

28
Consiste en captar mediante un micrófono la onda acústica producida por el locutor y
digitalizarla para poderla tratar en un computador (Figura 4). Es importante destacar que
tanto el micrófono usado como el lugar en el que se realiza la grabación pueden afectar las
tasas de reconocimiento. Especialmente si no son los mismos en el proceso de
entrenamiento (etapa de aprendizaje del sistema) y de reconocimiento (etapa de
funcionamiento del sistema).

7.4.2 Muestreo

La herramienta de adquisición de datos de Matlab (Matlab Data Acquisition Tool Box


version 2.6) está orientada a aprovechar el hardware de adquisición de datos para medir y
analizar fenómenos físicos.

Figura 4. Sistema de adquisición de datos

FENÓMENO
FÍSICO

SISTEMA DE
ADQUISICIÓN
ACONDICIONAMIEN
SENSOR TO DE SEÑAL
HARDWARE
DE COMPUTADOR SOFTWARE
ADQUISICIÓN
ACTUADOR

ANALISIS DE
DATOS

El sistema de adquisición de datos es una colección de objetos de software y hardware que


permite conectar el computador con el mundo físico. En la carpeta especificaciones del
anexo digital se muestra la hoja de especificaciones de la tarjeta de sonido y las
características del micrófono.

Según el hardware conectado, sea interno o expandido, se tienen dentro del Daq Toolbox
cuatro subsistemas:

– Entrada análoga. (Analog Imput Subsystem)


– Salida análoga
– Entrada y salida digital
– Timer y contadores

29
El subsistema de entrada análoga tiene como función muestrear y cuantificar la señal
análoga empleando uno o más canales, la señal análoga es continua en tiempo y amplitud,
el muestreo toma pequeñas muestras de la señal en tiempos discretos, mientras que la
cuantificación divide los valores de voltaje en amplitudes discretas.

* Muestreo con el DaqToolbox 2.5 Analog Input

El sistema toma muestras del sensor, micrófono, a intervalos constantes. En muchos


conversores Análogo/Digital, como los que se encuentran dentro de las tarjetas de sonido,
el muestreo se realiza mediante un circuito de muestreo y retención (Sampling and Hold)
S/H. Usualmente un S/H consiste de un buffer para la señal seguido de un selector
electrónico conectado a un capacitor. La operación de este sigue los siguientes pasos:

En un instante de muestreo dado, el selector conecta el buffer y el capacitor a una entrada.


El capacitor se carga al voltaje de la entrada. La carga se mantiene hasta que el conversor
A/D digitaliza la señal. El proceso completo se repite para el siguiente instante de muestreo.
Muy pocas tarjetas de sonido poseen conversores para cada canal y la mayoría multiplexan
las entradas a un solo conversor (Figura 5).

Figura 5. Hardware del sistema de adquisición. Tomado de la sección de ayuda del toolbox
de adquisición de datos de matlab.

Características del objeto AnalogInput empleado


Bits por muestra: 16
Buffer en modo: Automático
Canal empleado: 1
Retardo por canal (Skew): Cero
Modo del retardo por canal: Cero
Origen del Reloj: Interno
Tipo de entrada: Entrada acoplada en AC.
Modo de almacenamiento: En memoria.
Nombre interno del dispositivo: Winsound0-Ai.
Tasa de muestreo empleada: 8000 muestras por segundo.

30
7.4.3 Cuantificación con el DaqToolbox 2.5 Analog Input

Cuando se realiza la toma, la señal análoga muestreada debe ser convertida a un valor
binario que el computador pueda leer. La conversión de una amplitud infinitamente precisa
a un número binario es llamada cuantificación.

Durante la cuantificación, el conversor A/D emplea un número finito de valores


convenientemente espaciados para representar la señal análoga. El número de diferentes
valores es determinado por el número de bits empleados para la conversión. Por defecto el
sistema de adquisición realiza conversión a 16 bit. En el Anexo A se muestra en “Vocoder”
el código de programa de adquisición, muestreo y cuantificación

7.4.4 Filtro pasa-bajos

El ancho de banda útil de la voz es de 8KHz, pero la información relevante esta contenida
hasta los 4 kHz aproximadamente. Se utiliza un filtro pasa-bajos con frecuencia de corte en
4khz y ganancia de 0 dB’s, con el fin de eliminar la información en frecuencias superiores
a los 4 khz, con lo cual se ahorra tiempo de procesamiento, y se evita la producción de
aliasing. De esta manera, se impide que las réplicas del espectro de la señal, que se
producen como consecuencia del muestreo, se solapen ocasionando distorsión. El diagrama
de magnitud y fase se puede observar en la figura 6

Figura 6. Diagrama de magnitud (azul) y fase (verde) del Filtro Pasa Bajos.

M
agn
itud
e(dB
)an
dPhaseR
esp
onses
0 0

-80 -2

Phase (radians)
Magnitude (dB)

-160 -4

-240 -6

-320 -8

-400 -10
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5
F
req
uency(kH
z)

7.4.5 Pre-procesamiento

* Pre-énfasis

31
Antes de realizar el procesamiento digital de la señal, es necesario realizar un filtrado pasa
alto de pre-énfasis con el objetivo de aumentar la energía relativa de las componentes de
alta frecuencia en el espectro de la voz, y adicionalmente suavizar el espectro. El filtro de
pre-énfasis de primer orden con frecuencia de corte en 2500 Hz y ganancia de 6 dB´s
empleado tiene la forma:

H(z)=1-a(z) (7.1)

Donde 0.9 < a< 1. La respectiva ecuación de diferencias de H (z) será:

y(n)=s(n)-a×s(n-1) (7.2)
Luego de hacer pruebas con la constate del filtro se observo que el mejor funcionamiento se
obtuvo en la mitad del intervalo recomendado es decir (a = 0.95). El filtro de pre-énfasis
también compensa la caída de 6dB que sufre la voz cuando pasa a través del tracto vocal.

En la figura 7 se muestra el espectro de frecuencia de la palabra “adelante” antes y después


de ser pre-enfatizada. En ella se puede ver como después de aplicar el filtro de pre-énfasis
los componentes de frecuencia mayores a 2500 Hz son enfatizados, mientras que los
componentes de más baja frecuencia son atenuadas.

Figura 7. Espectro de frecuencia de la palabra “adelante”. (a).Antes del filtro, (b).Después


del filtro de pre-énfasis.

90 20

80 18

16
70

14
60
Magnitud (norm)

Magnitud (norm)

12
50
10
40
8
30
6

20
4

10 2

0 0
0 500 1000 1500 2000 2500 3000 3500 4000 0 500 1000 1500 2000 2500 3000 3500 4000
Frecuencia (Hz) Frecuencia (Hz)

(a) b)

* Ventaneo

La señal de voz varía lentamente en el tiempo, si se analiza en períodos entre 5 y 100ms,


puede observarse que su dinámica es altamente estacionaria, sin embargo, para intervalos
del orden de 100ms o más, las características de la señal de voz se modifican con cada
palabra que es pronunciada. Como consecuencia, el análisis de voz se acostumbra a realizar
en intervalos cortos de tiempo. Así la señal se procesa por tramas, como si cada una de ellas
tuviera propiedades estadísticas independientes.

32
En general, la aplicación de ventanas conduce al alisamiento y, por tanto, distorsión del
espectro original. Para mantener la distorsión espectral dentro de un mínimo, se requiere el
cumplimiento de las siguientes propiedades por parte de las ventanas:

– Lóbulo principal reducido, lo que requiere una ventana amplia en el tiempo.


– Pequeños o insignificantes lóbulos laterales que requiere una ventana de tiempo alisada
sin cortes abruptos o flancos.

Estos dos requerimientos no pueden alcanzarse simultáneamente, por lo cual en la


determinación de la ventana más adecuada debe realizarse un compromiso.

La ventana Hamming presenta una atenuación de −43dB aproximadamente. Al multiplicar


la señal por la ventana de Hamming la longitud efectiva del intervalo de análisis se redujo
aproximadamente en un 40% debido a la atenuación de la señal en los bordes de la ventana.
Por esta razón se emplearon ventanas deslizantes con traslape. La señal pre-acentuada se
dividió en tramas de 40ms, cada trama se traslapo con la trama vecina 20ms y se multiplico
por una ventana de Hamming con el objeto de suavizar la señal en los bordes de dicha
trama. La figura 8 indica el procedimiento de ventaneo de la señal de voz.

Esta es la ecuación de la ventana usada para el análisis de señales de voz, y se define


como:

wnT=0.54-0.46cos2nN 0≤n≤N (7.3)

Figura 8. Señal de voz dividida en Tramas de 40ms con traslape de 20ms y multiplicada por
la ventana Hamming.

* Segmentación

En el reconocimiento de señales de voz, se hace necesario determinar con adecuada


precisión los puntos de inicio y final de cada palabra, es decir, se debe diferenciar las partes
de señal que llevan información de voz de aquellas que no llevan voz. Este procedimiento

33
evita gastar memoria y tiempo de cálculo en las tramas que no contienen información
evitando así obtener resultados erróneos en el análisis de las señales de voz.
El algoritmo utilizado para detectar las regiones de silencio esta basado en el cálculo de las
variaciones de las muestras de la señal en una trama de voz con respecto a su media. Si la
variación es bastante grande, la trama es considerada como una trama de voz, de lo
contrario como de silencio. En la figura 9 se muestra el resultado de este procedimiento
para la palabra adelante.

La región de silencio es detectada de la siguiente forma: se calcula la media de las muestras


pertenecientes a una trama y se realiza la sumatoria del valor absoluto de la diferencia de
cada muestra y la media. Entonces si esta suma excede un umbral predefinido la trama es
considerada como una trama de voz, de lo contrario como una trama de silencio. Este
proceso se representa en las siguientes ecuaciones:

μ=1Nn=1NSkn (7.4)

Ω=n=1NSkn-μ (7.5)
Donde Sk(n) son las muestras de la señal de la trama k, µ es la media y Ω es el resultado
de la sumatoria la cual es comparada con el umbral.

El umbral se calcula observando los valores obtenidos de Ω para diferentes muestras de voz
(sonora y sorda) y muestras de silencio. En la tabla 1 se muestran los valores típicos
obtenidos de Ω.

Tabla 1. Valores típicos de Ω.

Muestras sonoras Muestras sordas Muestras de silencio

/a/ /e/ /u/ /f/ /s/ /g/ //

Ω 21.26 28.62 14.53 11.78 10.06 9.21 6.8

Como se observa el valor mínimo de Ω para las muestras de voz es 9.21, mientras que para
las muestras de silencio el máximo es de 6.8 por tanto el umbral que se toma es de 8.00
permitiendo así tolerar algunos niveles de ruido (13).

Figura 9. Segmentación de la palabra adelante a) antes de la segmentación, b) después de la


segmentación.

34
a) (b)

En el Anexo A se muestra en “Vocoder” el código de programa de el pre-procesamiento

7.4.6 Extracción de parámetros característicos

La extracción de características por medio de coeficientes LPCC permite parametrizar la


señal con un número pequeño de patrones con los cuales es posible reconstruirla
adecuadamente, además no requiere mucho tiempo de procesamiento, lo que es importante
a la hora de la implementación.

Para la selección del número de coeficientes LPCC se utilizo la siguiente recursión:

Una vez que la señal ha sido pre-procesada y segmentada en tramas se calculan los 10
primeros coeficientes LPC de cada trama por medio del método de autocorrelación y el
algoritmo Levinson Durbin. Luego calculamos los coeficientes LPC-Cepstrum con la
siguiente recursion en la cual partimos de los 10 coeficientes LPC hallados con la función
de Matlab LPC.

Donde los an son los coeficientes LPC de la trama analizada y los cn son los coeficientes
LPCC necesarios para caracterizar la señal de voz. En el Anexo A se muestra en
“Vocoder” el código de programa de la extracción de parámetros característicos

35
7.4.7 Modulo de Entrenamiento del Codebook

* Calculo del Coodebook

Anteriormente se consiguió reducir la información de la señal de voz que se adquirió a


8000 muestras por segundo cuantificadas a 16 bits/muestra, con tramas de 40ms (con 20ms
de solapamiento) y 10 coeficientes LPCC, se obtuvo una reducción de datos de 32
(8000*0.04/10). De esta forma disminuyo la complejidad computacional del proceso de
entrenamiento y reconocimiento. Sin embargo a pesar de esta reducción era necesario tener
una menor cantidad de datos en el sistema. En este caso, para reducir el volumen de
información necesario para transmitir o almacenar la información de los coeficientes LPC-
Cepstrum, se empleó cuantificación vectorial.

Se encontró que según el siguiente teorema, el proceso de cuantificación vectorial es la


forma más eficiente de cuantificar una señal vectorial.

Teorema: Para cualquier sistema de codificación dado que mapee una señal
vectorial dada en N palabras binarias y reconstruya el vector aproximación desde
alguna de estas palabras binarias, existe un cuantificador vectorial con tamaño de
Codebook N que tiene exactamente el mismo rendimiento, esto es, para cualquier
entrada produce la misma salida que el sistema de codificación dado[6].

Para realizar reconocimiento de palabras aisladas se entrenó el Codebook con las palabras
del vocabulario a reconocer. El proceso consiste en promediar vectores de características
semejantes, para formar un Codebook de 6 bits (64 vectores). El vector resultante de cada
uno de los promedios es el centroide (codeword o centro de masas) de la agrupación (o
clúster) de vectores usados para calcularlo, y será el que mejor los represente en su media.

Se emplearon 6 bits o 64 centroides ya que experimentando con Codebooks más grandes


(128 centroides) se pudo obtener un mejor modelado como se puede observar en la prueba
3 de la sección 7.6.2,, pero se aumentó significativamente el número de símbolos en las
secuencias de entrenamiento de los HMM, y los tiempos necesarios para parametrizar y
reconocer las palabras. Esto es debido a que la estimación de cada centroide es equivalente
a la estimación de una media, y la variabilidad en la estimación de una media es
inversamente proporcional al número de vectores usado.

La dimensión del Codebook necesaria para conseguir una cuantificación adecuada es un


asunto esencial en su diseño y define la potencia de cálculo requerida.

Vectores de Observación: Se transformaron las palabras de entrenamiento (adelante,


reversa, izquierda, derecha, frenar y markov) en un conjunto de NumV vectores, siendo
NumV el número de tramas por palabra. Cada uno de estos vectores es de dimensión 10 y
contiene los coeficientes LPC-Cepstrum calculados para la trama correspondiente. Los

36
vectores de todas las palabras fueron almacenados en una matriz, llamada MAVECT que
constituye el grupo de entrenamiento.

En el transcurso de esta investigación se recopilaron varios grupos de entrenamiento, que se


almacenaron como bases de datos en archivos .mat, los archivos pueden consultarse en la
carpeta archivos.mat del anexo digital.

Vectos40.mat: Primer grupo de entrenamiento, 8 pronunciaciones de las siguientes


palabras: adelante, reversa, izquierda, derecha, frenar.
Vectos100.mat: Reunió 100 pronunciaciones de las palabras adelante, reversa,
izquierda, derecha, frenar, Markov de uno de los tesistas. Dentro de un ambiente
con poco ruido.
Vectos1000d.mat: Reúne 1000 pronunciaciones de las palabras del vocabulario
junto con otras que se podrían emplear como comandos de la silla. Se observó que
entrenar con palabras que no se van a reconocer produce centroides inútiles y hace
que la información que sí es necesario clasificar se organice con un número menor
de centroides.
Vectos180, Vectos240, vectos300, vectos360.mat: bases de datos empleada para
comprobar el desempeño del Codebook y del reconocedor con mayor número de
palabras de entrenamiento.
Vectos177hd.mat: 177 palabras del vocabulario pronunciadas entre los dos tesistas
para entrenar un Codebook con 2 locutores para un reconocedor con modelos HMM
que funciona con 2 locutores.
Vectos600h.mat: Base de datos definitiva con la que se alcanzó el funcionamiento
de la aplicación y se pudo establecer la eficiencia del reconocedor. Esta base de
datos esta compuesta de 100 repeticiones de cada palabra pronunciadas por un
locutor.

Medición de la distancia entre vectores: fue necesario introducir el concepto de distancia,


porque tanto en el entrenamiento de los Codebook como en el proceso de cuantificación se
precisó evaluar el parecido entre dos vectores de parámetros.

Para medir la distancia entre un par de vectores se utilizo la distancia Euclidea cuadrática,
dada por 7.10.

dV1,V2=A1-A22+B1-B22+…+Z1-Z22
Con:V1=A1,B1,…,Z1V2=A2,B2,...,Z2
(7.10)
Se encontró que esta medida de distancia requiere de cálculos sencillos, lo cual representa
un menor tiempo de procesamiento en comparación con otro tipo de medida de distancia
entre vectores. En la literatura sobre reconocimiento de voz se recomienda Mahalanobis
para la medida de distancias y la evaluación de la distorsión generada. Sin embargo, esta
requiere el cálculo de la inversa de la matriz de covarianza de cada par de vectores lo cual
significa mayor cantidad de operaciones y tiempo de procesamiento.

37
Procedimiento de clasificación: Se realizo la generación del codebook con dos métodos, el
algoritmo de clasificación k-means que, a parte de requerir un método de elección del
codebook inicial también deja muchos clústeres vacios y el algoritmo de clasificación LBG
que no deja clústeres y no requiere un algoritmo de elección del codebook inicial. Este
algoritmo realiza una distribución uniforme de vectores dentro de cada clúster por lo que
fue el algoritmo de clasificación elegido para realizar el entrenamiento del codebook.

El Algoritmo LBG fue aplicado en 6 iteraciones o niveles para producir 26 centroides.


Comenzamos con un centroide original calculado con la media de los vectores de
entrenamiento, en la primera iteración se obtuvieron 2 centroides provisionales sumando y
restando un vector aleatorio de norma menor que uno al centroide original. Luego, se
calculó la distancia de cada uno de los vectores de entrenamiento a estos nuevos centroides
y se reorganizó en dos nuevos clústeres. De la media de los vectores dentro de los nuevos
clústeres se hallaron los vectores definitivos de la primera iteración. En las siguientes
iteraciones a cada centroide que se calculó anteriormente se le sumó y restó un vector
aleatorio de magnitud menor que uno, se calcularon distancias, se reorganizaron los clúster
y se hallaron los nuevos centroides. Siguiendo este procedimiento, en cada iteración se
obtiene el doble de centroides que en la iteración anterior. (Principio de división binaria). El
procedimiento de división binaria se puede observar en la figura 10.

Figura 10. Principio de división binaria.

En el LBG de 6 niveles, además de realizar la división binaria, se realizaron varias pruebas


para hallar el vector aleatorio con el fin de obtener un vector que no dejara clústeres vacios
y entregara una buena distribución de centroides. Un método para realizar el splitting
simple calcula la desviación estándar y la media de los elementos de cada clúster para luego
obtener nuevos centroides sumando la desviación estándar a los antiguos centroides en la
dirección que nos indica la media. En la búsqueda del vector aleatorio se generó un arreglo
de números aleatorios escogidos dentro de una distribución normal con la media aritmética
y la desviación estándar del clúster y se dividió por 4 veces su valor máximo para que su

38
norma fuera mucho menor que uno. Este fue el que presento mejor desempeño dentro de
todas las pruebas realizadas. En el Anexo A se muestra en “LBG” el código de programa de
la construcción del codebook

7.5 ENTRENAMIENTO DEL HMM DE CADA PALABRA

El entrenamiento del HMM de cada palabra se realizo de la siguiente forma: adquisición y


muestreo de la señal de voz, cuantificación, filtro pasa bajos, pre-procesamiento, extracción
de parámetros característicos, cuantificación vectorial y entrenamiento del modelo de cada
palabra (Figura 11).

Figura 11. Estructura del entrenamiento del HMM de cada palabra.

Adquisición, cuantificación, muestreo, pre-procesamiento.

Extracción de parámetros característicos.

Cuantificación vectorial.

Entrenamiento del modelo de cada palabra.

7.5.1 Cuantificación Vectorial

En el proceso de cuantificación vectorial se asigno a cada vector de parámetros


característicos su correspondiente representante dentro del codebook de centroides. Esta
tarea consiste en calcular la distancia euclidea de cada centroide con el vector
correspondiente, recordemos que cada centroide es un vector de tamaño 1×10. Luego de
realizar el cálculo de las distancias se reemplaza el vector de características por el índice
correspondiente al centroide más cercano al vector, es decir reemplazamos 10 datos float
por un índice que cabe en un byte. Para el entrenamiento del HMM de cada palabra se
realiza la cuantificación de sus repeticiones, entonces los datos de entrada para el
entrenamiento son las repeticiones cuantificadas y la longitud de cada repetición. En el
Anexo A se muestra en “Codew” el código de programa de la cuantificación vectorial.

39
7.5.2 Entrenamiento del modelo de cada palabra.

Se emplearon HMM para modelar el mecanismo de producción del habla. Su capacidad de


discriminación se debe a que están constituidos por un conjunto de estados, comparables a
los estados que atraviesa el tracto vocal cuando hablamos. Cada uno de los estados produce
un conjunto de posibles salidas, asimilables a los sonidos que configuran la señal de voz.

Por cuestiones de funcionamiento del reconocedor empleamos dos modelos adicionales a


las instrucciones para el comando de la silla: un modelo basura y un modelo que reconoce
la respiración. En definitiva, se entrenaron los siguientes modelos:
- Modelo Adelante: Se destinó para activar el funcionamiento continuo de la silla en
dirección hacia adelante; Se entrenó en base a las secuencias de observación de la palabra
adelante almacenadas en una matriz dentro del archivo Observaha1.mat y a un vector
guardado en Longituha1.mat que contiene la duración de cada una de estas secuencias.
- Reversa: Fue escogido para activar la marcha hacia atrás de la silla, Se entrenó en base
Observahr1.mat y a Longituhr1.mat.
- Izquierda: fue escogido para activar el giro hacia la izquierda de la silla. Se entrenó en
base a las secuencias de observación de Observahi1.mat y a Longituhi1.mat que contiene
la duración de cada una de estas secuencias.
- Derecha: fue escogido para activar el giro hacia la derecha. Se entrenó en base a las
secuencias de observación almacenadas en Observahd1.mat y a Longituhd1.mat.
- Frenar: se destinó a deshabilitar las instrucciones anteriores y detener la silla. Se adiestró
con las secuencias de observación almacenadas en Observahf1.mat y a Longituhf1.mat.
- Markov: fue escogido para indicar cuando el programa debe comenzar a reconocer y
ejecutar las instrucciones. Se entreno en base a las secuencias de observación de la
palabra Markov almacenadas en una matriz dentro del archivo Observahm1.mat y a un
vector guardado en Longituhm1.mat que contiene la duración de cada una de estas
secuencias.
- Modelo Basura: esta destinado a reconocer como ‘basura’ palabras fuera del vocabulario
del reconocedor. Se entreno en base a las secuencias de observación de múltiples palabras
almacenadas en una matriz dentro del archivo Observaha1.mat y a un vector guardado en
Longituha1.mat que contiene la duración de cada una de estas secuencias.
- Modelo de la respiración: Se destinó a reconocer los sonidos propios de la respiración y
ruidos involuntarios al exhalar como ‘respiración’. Se entreno en base a las secuencias de
observación almacenadas en una matriz dentro del archivo Observaha1.mat y a un vector
guardado en Longituha1.mat que contiene la duración de cada una de estas secuencias.

En los modelos anteriores se consiguió el mejor desempeño del modelo con una
cuantificación a 64 centroides y 200 secuencias de observación en el entrenamiento de los
diferentes modelos, excepto para el Modelo basura donde se emplearon 300 secuencias de
observación en el entrenamiento del modelo.

Los archivos .mat pueden consultarse en la carpeta archivos.mat del anexo digital.

40
Para dar solución al problema del aprendizaje o entrenamiento se buscó maximizar la
probabilidad que una secuencia de observaciones haya sido generada por un HMM
optimizando sus parámetros. Esto significa que para entrenar los modelos se necesito algún
tipo de estimación inicial de los parámetros.

Se realizó una estimación de los parámetros iníciales distinta para cada uno de los HMM.
Esto dependiendo de la cantidad de estados, de la duración de la palabra y de cómo fue
reentrenado el modelo al comprobar su funcionamiento con el reconocedor. Los parámetros
A y B son probabilidades almacenadas en forma de matrices, Las primeras estimaciones se
hicieron con matrices equiprobables y aparecieron probabilidades muy pequeñas,
posteriormente se emplearon matrices con valores arbitrarios que se fueron refinando a
medida que se volvían a entrenar los modelos.

Por la topología empleada el entrenamiento debe realizarse con múltiples observaciones


O=O1,O2,O3,…,Ok. A continuación se describe como se implementó el algoritmo
Forward-Backward (adelante-atrás) para múltiples observaciones, también conocido como
el algoritmo de Baum-Welch para re estimar los parámetros del HMM.

Por conveniencia el parámetro π se tomó iniciando el modelo en el primer estado lo cual


permitió evadir su reestimación en el algoritmo Baum Welch [17].

Los valores re estimados de A y B se obtienen de:

aij=número esperado de transiciones desde el estado Si al estado Sj número


esperado de transiciones desde Si (7.11)

bij=número esperado de veces en el estado j viendo el simbolo Vknúmero


esperado de veces en el estado j (7.12)

Estas expectativas fueron calculadas a partir de las definiciones de la variable en avance (α)
y la variable en retroceso (β).

La Variable en avance se define como la probabilidad de la secuencia de observación


parcial (hasta un tiempo t) y estando en Si dado un modelo λ, y se calculó mediante un
procedimiento recursivo:

Inicialización: α1j=π1bjO1,1≤i≤N (7.13)

Inducción: αt+1j=i=1Nαtjaij1bjOt+11≤t≤T-1,1≤j≤N (7.14)

Terminación: PO/λ=i=1NαTi (7.15)

La Variable en Retroceso β se define como la probabilidad de la secuencia de observación


parcial (desde un tiempo t+1 hasta el final) dado un estado Sj y el modelo λ, al igual que α
se calcula mediante un procedimiento recursivo:

41
Inicialización: βTi=1, 1≤i≤N (7.16)

Inducción: βti=j-1NaijbjOt+1βt-1j,t=T-1,T-2,…,1,1≤j≤N, (7.17)

Las ecuaciones (7.11) y (7.12) en términos de Alfa y Beta para múltiples observaciones se
convierten en:

aij=k=1K1Pkt=1Tk-1αtkiaijbjOt+1kβt+1kjk=1K1Pkt=1Tk-1αtkiβtki
(7.18)

bjl=k=1K1Pkt=1siempre queOt=VkTk-1αtkiβtkik=1K1Pkt=1Tk-1αtkiβtki
(7.19)

Con los anteriores cálculos se realizó el entrenamiento siguiendo los pasos:

1.- Estimar un conjunto inicial de parámetros {a,b}.


2.- Calcular las re estimaciones de a y b de acuerdo a las fórmulas
3.- Sustituir los antiguos valores de a y b por los valores re estimados.
4.- Aplicar las pruebas de optimización que se muestran en la sección 7.6.2.

7.5 RECONOCIMIENTO DE PALABRAS AISLADAS

La implementación de la etapa de reconocimiento se llevo a cabo de la siguiente forma:


adquisición y muestreo de la señal de voz, cuantificación, filtro pasa bajos, pre-
procesamiento, extracción de parámetros característicos, cuantificación vectorial, calculo
de probabilidad que la secuencia de entrada haya sido generada por el modelo, elección de
la mayor probabilidad y salida de datos por puerto paralelo (Figura 12).

Figura 12. Estructura del algoritmo de reconocimiento de voz.

Adquisición, cuantificación, muestreo, pre-procesamiento.

Extracción de parámetros característicos y cuantificación vectorial

Calculo de probabilidad

Elección de la mayor probabilidad

42
Salida de datos por el puerto paralelo

Teniendo en cuenta que el algoritmo de reconocimiento no solo tiene que ser capaz de
reconocer palabras aisladas sino también de rechazar palabras pronunciadas en una
conversación cotidiana, se entreno el modelo llamado modelo basura, modelo HMM de
seis estados y matriz aij mostrada a continuación:

Matriz aij para el modelo basura:

aij=0.70.20.10.00.50.30.00.00.60.00.00.00.20.00.00.10.30.00.00.00.00.00.00.
00.00.00.00.40.30.30.00.50.50.00.01

Este modelo garantiza que ninguna palabra ajena al vocabulario de comando de la silla de
ruedas vaya a generar un movimiento indeseado, estas palabras pronunciadas en una
conversación cotidiana son reconocidas como modelo basura sin generar ninguna orden en
el puerto paralelo.

Para evitar movimientos indeseados se entreno el modelo para la palabra Markov, una
palabra que no es usada frecuentemente. Al pronunciar Markov no se activa el
reconocimiento sino la salida de datos por puerto paralelo, mientras la palabra markov no
es pronunciada el sistema reconoce todas las palabras normalmente pero no envía ningún
comando de acción para el sistema móvil. Si el usuario en una conversación cotidiana
pronuncia la palabra adelante sin desear movimiento alguno la silla no se mueve porque
requiere del comando de activación del movimiento en este caso la palabra Markov.

Luego de la pronunciación del comando de activación el prototipo de reconocimiento de


palabras aisladas esta listo para comandar el movimiento de la silla de ruedas. Por ejemplo
si se pronuncia la palabra izquierda, el prototipo halla la probabilidad de que cada uno de
los modelos entrenados haya generado la secuencia de entrada creada por la pronunciación
de la palabra, se comparan las probabilidades obtenidas y se escoge la mayor, estas
probabilidades se encuentran organizadas en un vector y al escoger la mayor probabilidad
retornamos también su posición dentro del vector así al enviar los datos por puerto no hay
confusión.

Dependiendo de la palabra reconocida se envían los datos por el puerto paralelo:

Adelante → 0001
Reversa → 0010
Izquierda → 0100
Derecha → 1000

43
Frenar → 0000

7.6.1 Calculo de probabilidad

En esta sección se muestra como se calcula la probabilidad de que la secuencia haya sido
generada por alguno de los modelos de las palabras entrenados. Esta probabilidad se calcula
con el procedimiento forward [17] que se muestra a continuación:

Considerando la variable forward definida así:

∝ti=P(O1,O2,…..,Ot, qt=Si/λ) (7.20)

Se resuelve para ∝ti de la siguiente forma:

1) Inicialización: α1i=πibiO1, 1≤i≤N (7.21)

2) Inducción: ∝t+1j=i=1N∝tiaijbjOt+1, (7.22)


1≤t≤T-1, 1≤ i≤N

3) Terminación: P(O∕λ)=i=1N∝T(i) (7.23)

En este caso por definición tenemos que:

∝Ti=P(O1,O2,…..,Ot, qT=Si/λ)) (7.24)

Y como se observa en la ecuación 7.23, P(O∕λ) es justamente la suma de todos los ∝Ti's.
En la anterior recursión tenemos que aij es la matriz de probabilidad de transición entre
estados entrenada para cada palabra, πi es el vector de distribución de estado inicial el cual
se define así πi=[1,0,0,…..N], para asegurar que siempre empieza la secuencia en el
estado uno, condición importante en el reconocimiento de voz y bjOt matriz de
probabilidad de emisión de cada símbolo de la secuencia en un estado determinado. Para
determinar los elementos de esta matriz es necesario tener una secuencia de observaciones
de entrada compuesta por los centroides representativos de los vectores de cada
observación y bjk matriz de probabilidad de emisión de cada símbolo en un estado
cualquiera, entrenada para cada palabra. La matriz bjOt se obtiene de la siguiente forma:

Secuencia de observación = [7, 4, 18,45, 33,64,…Ot,……,45], 1≤t≤T

bjk)=b11 b12⋯b1k⋮⋱⋮bj1 bj2⋯bjk1≤ j≤N y 1≤k≤64


(7.25)

Siendo N el numero de estados y k el numero de centroides.

44
Según la secuencia de observación tenemos que O1=7,O2=4,O3=18 y OT=45, entonces
la matriz de probabilidad de emisión de cada símbolo de la secuencia en un estado
determinado es:

bjOt=b1 7 b1 4 b1 18⋯b1 45⋮⋱⋮bj 7 bj 4 bj 18⋯bj 45


(7.26)

Así obtenemos una matriz de dimensión N (numero de estados) por T (longitud de la


secuencia de entrada), donde cada elemento corresponde a la probabilidad determinada para
dicha observación en la matriz bjk.

7.6.2 Optimización del entrenamiento del HMM de cada palabra

Como se explico no hay un método analítico para determinar los parámetros iníciales del
Modelo Oculto de Markov de cada palabra, por lo tanto se realizaron pruebas variando los
siguientes parámetros:

– Numero de secuencias de observación para el entrenamiento de los HMM de


cada palabra.
– Cantidad de estados del modelo.
– Numero de centroides.
– Componentes de la matriz aij.

Se tomo un total de 240 muestras, 40 muestras de cada palabra y a partir de estas


pronunciaciones se calculo el error en el reconocimiento de cada palabra. Las
modificaciones se realizaron en el algoritmo de entrenamiento de los HMM y el algoritmo
de cálculo del codebook.

Prueba 1: esta prueba se realizo modificando la cantidad de secuencias de observación


para el entrenamiento del HMM de cada palabra, con matrices aij y bjk aleatorias, modelos
de 6 estados y un codebook de 64 centroides generado con la base de datos
Vectos600h.mat.

Tabla 2. Error en el reconocimiento de palabras aisladas modificando el número de


secuencias de observación para el entrenamiento de los HMM.

50 secuencias 100 secuencias 150 secuencias 200 secuencias


de observación de observación de observación de observación

Palabra Error (%) Error (%) Error (%) Error (%)

Adelante 50 41.18 20.59 2.94

Reversa 20.59 11.77 8.83 5.88

Izquierda 14.71 14.71 11.77 11.77

45
Derecha 41.18 17.65 5.88 5.88

Frenar 41.18 11.77 14.71 8.83

Markov 8.83 8.83 8.83 8.83

Error promedio 29.41 17.05 11.77 7.35


Total (E.P.T)

Figura 13. Comparativo de errores de la prueba1.

Observando los resultados de la tabla 2 y figura 13, se concluye que el error promedio total
mas bajo fue el obtenido con 200 secuencias de observación en el entrenamiento de los
HMM. Con un número elevado de secuencias de observación para el entrenamiento del
modelo de cada palabra se representa una mayor variabilidad, capacitando al modelo a
responder satisfactoriamente a cualquier modificación en el estilo de habla. Sin embargo
con más de 200 secuencias de observación no se obtiene una reducción del error promedio
considerable y se aumenta el tiempo de entrenamiento.

Prueba 2: esta prueba se realizo cambiando el número de estados de los HMM de cada
palabra en su entrenamiento, con matrices aij y bjk aleatorias, 200 secuencias de
observación y un codebook de 64 centroides generado con la base de datos
Vectos600h.mat.

Tabla 3. Error en el reconocimiento de palabras aisladas modificando el número de estados


de los HMM de entrenamiento de cada palabra.

5 estados 6 estados 7 estados 8 estados 9 estados 10 estados

Palabra Error (%) Error (%) Error (%) Error (%) Error (%) Error (%)

Adelante 5.88 2.94 11.77 23.59 11.77 2.94

Reversa 2.94 5.88 2.94 5.88 8.83 2.94

Izquierda 32.35 11.77 20.58 5.88 20.58 23.52

Derecha 0 5.88 2.94 17.64 2.94 11.77

Frenar 8.83 8.83 8.83 17.64 11.77 14.71

Markov 5.88 8.83 5.88 17.64 26.47 17.64

E.P.T 9.31 7.35 8.82 14.71 13.72 12.25

Figura 14. Comparativo de errores de la prueba 2.

46
Como se puede observar en la tabla 3 y figura 14, los mejores resultados en cuanto a
disminución total del error se obtuvieron entrenando los HMM de cada palabra con 6
estados. Sin embargo se realizo una prueba escogiendo el modelo entrenado para cada
palabra con la cantidad de estados que menor error promedio obtuvo. Es decir los modelos
de las palabras no tienen el mismo número de estados para su entrenamiento, eso depende
del promedio de error consignado en la tabla 3 para cada modelo. Esta prueba se realizo
con matrices aij y bjk aleatorias, 200 secuencias de observación y un codebook de 64
centroides generado con la base de datos Vectos600h.mat.

Tabla 4. Error en el reconocimiento de palabras aisladas utilizando modelos con número de


estados combinado.

Palabra # de estados del modelo Error (%)

Adelante 6 5.88

Reversa 5 0

Izquierda 8 14.79

Derecha 5 2.94

Frenar 6 5.88

Markov 5 8.83

E.P.T 6.37

Figura 15. Comparativo de errores utilizando modelos con numero de estados combinado.

Los promedios de error obtenidos en esta prueba no son los mismos de la prueba anterior
porque al combinar los modelos el cálculo de las probabilidades cambia es decir puede
aumentar o disminuir el error promedio en cada palabra, lo que sucede es que los
porcentajes de error de la tabla 3 se obtuvieron con el mismo numero de estados y al
realizar la prueba con número de estados diferente la interacción entre modelos varia.
Como se observa en la tabla 4 el mejor funcionamiento se obtiene utilizando una
combinación de modelos con distinto número de estados.

Prueba 3: esta prueba se realizo modificando el tamaño del codebook generado con la base
de datos Vectos600h.mat, con matrices aij y bjk aleatorias, 200 secuencias de observación y
una combinación de modelos con distinto numero de estados.

47
Tabla 5. Error en el reconocimiento de palabras aisladas modificando el número de
centroides en la generación del codebook.

32 centroides 64 centroides 128 centroides

Palabra Error (%) Error (%) Error (%)

Adelante 8.83 5.88 2.94

Reversa 5.88 0 0

Izquierda 20.59 14.79 14.79

Derecha 8.83 2.94 2.94

Frenar 11.77 5.88 5.88

Markov 8.83 8.83 8.83

E.P.T 10.79 6.37 5.89

Figura 16. Comparativo de errores de la prueba3.

Observando los resultados de la tabla 5 el mejor funcionamiento se obtiene utilizando un


codebook con 128 centroides característicos, pero para el reconocimiento su tiempo de
ejecución aumento casi al doble como se muestra en la tabla 6. Esta medida del tiempo de
ejecución se tomo desde el final del proceso de adquisición hasta la elección de la máxima
probabilidad, el tiempo de ejecución se encontró utilizando una herramienta de matlab
llamada Profiler que mide el tiempo de ejecución de cada instrucción del programa por
separado.

Tabla 6. Tiempo de ejecución del programa de reconocimiento generando el codebook con


64 centroides y 128 centroides.

64 centroides 128 centroides

Palabra Tiempo de ejecución (s) Tiempo de ejecución (s)

Adelante 1.079 1.903

Reversa 1.047 2.032

Izquierda 1.219 2.084

48
Derecha 1.172 2.045

Frenar 1.063 1.947

Markov 0.969 1.672

E.P.T 1.09 1.948

Como se observa en la tabla 6 una disminución tan pequeña en el error promedio no


justifica una elevación del tiempo de ejecución del 78.75% así que el codebook que mejor
cumplió con el compromiso entre funcionamiento y velocidad de ejecución fue el
implementado con 64 centroides característicos.

Prueba 4: se modifico el contenido de la matriz aij en el entrenamiento del modelo de cada


palabra, para poder obtener un mejor rendimiento en cuanto a eficiencia en el
reconocimiento de palabras aisladas. Esta prueba se realizo con 200 secuencias de
observación, una combinación de modelos con distinto número de estados, un codebook de
64 centroides generado con la base de datos Vectos600h.mat y una matriz bjk similar para
todas las palabras. La matriz bjk contiene componentes aleatorios que al modificarlos no
muestran un cambio sustancial en la disminución del error por lo cual todos los modelos se
entrenaron con la misma matriz bjk ver carpeta archivos.mat en el anexo digital. Luego de
realizar diferentes pruebas, las matrices aij utilizadas para el entrenamiento del modelo de
cada palabra son:

Matriz aij para “adelante”:

aij=0.300.400.300.000.250.450.000.000.400.000.000.000.300.000.000.400.20
0.000.000.000.000.000.000.000.000.000.000.200.400.400.000.200.800.000.00
1.00

Matriz aij para “reversa”:

aij=0.650.350.050.000.500.300.000.000.200.000.000.000.700.000.000.000.00
0.000.000.200.100.500.000.501.00

Matriz aij para “izquierda”:

aij=0.650.350.000.500.050.000.300.200.000.000.000.000.700.200.000.600.00
0.000.000.000.000.000.000.000.100.000.200.200.000.000.000.000.000.000.00
0.000.000.000.000.000.000.000.000.000.000.000.000.000.500.400.000.600.10
0.000.250.150.000.000.000.000.500.500.001.00

Matriz aij para “derecha”:

aij=0.650.350.050.000.500.300.000.000.200.000.000.000.700.000.000.000.00
0.000.000.200.100.500.000.501.00

49
Matriz aij para “frenar”:

aij=0.200.400.200.000.450.250.000.000.300.000.000.000.300.000.000.400.30
0.000.000.000.000.000.000.000.000.000.000.200.400.400.000.500.500.000.00
1.00

Matriz aij para “Markov”:

aij=0.650.350.050.000.500.300.000.000.200.000.000.000.700.000.000.000.00
0.000.000.200.100.500.000.501.00

El promedio de error para cada palabra y el error total se muestran en la tabla 7.

Tabla 7. Error en el reconocimiento de palabras aisladas modificando la matriz aij en el


entrenamiento de los HMM de cada palabra.

Palabra # de estados del modelo Error (%)

Adelante 6 0

Reversa 5 2.94

Izquierda 8 5.88

Derecha 5 5.88

Frenar 6 5.88

Markov 5 2.94

E.P.T 3.92

Se puede observar que la disminución del error total es significativa así que el algoritmo de
reconocimiento de palabras aisladas que se implemento presenta las siguientes
características:

– 10 coeficientes característicos.
– Codebook de 64 centroides.
– Coeficientes LPCC.
– Algoritmo LBG para el entrenamiento del codebook.
– 200 secuencias de observación para el entrenamiento de los HMM de cada palabra.
– Numero de estados combinados para el entrenamiento de los HMM de cada palabra.
– Las matrices aij mostradas en la prueba 4 para el entrenamiento de los HMM de
cada palabra.

La matriz bjk utilizada que se utilizo para el entrenamiento se muestra en la carpeta


archivos.mat del anexo digital.

50
La eficiencia del algoritmo de palabras aisladas utilizando HMM es de 96.08%. Se obtuvo
una eficiencia muy alta teniendo en cuenta que para el comando de un sistema móvil por
medio de palabras aisladas es necesario que el prototipo cumpla un compromiso entre
velocidad de procesamiento y eficiencia en el reconocimiento.

7.7 CONSTRUCCIÓN DE LA SILLA DE RUEDAS

La silla de ruedas se construyo con materiales rígidos y livianos, para el armazón se


emplearon perfiles de aluminio estructural acoplado con ángulos de juntura y remaches. El
sistema funciona con tracción independiente en cada rueda trasera (ruedas de bicicleta de
12” de diámetro) y dos ruedas libres (rodachinas de caucho de 6” de diámetro) en la parte
delantera, esto permite combinar tracción y dirección con solo dos motores DC de
características similares.

Los motores son de imán permanente de 24 voltios DC del tipo utilizado en los
limpiavidrios de vehículos grandes. La potencia mecánica de estos motores es de ¼HP. Los
motores están acoplados a las ruedas por medio de cajas reductoras de velocidad que
proporcionan una ventaja mecánica en fuerza suficiente para mover la silla de ruedas y el
usuario. Planos y fotos de la silla de ruedas se muestran en el Anexo D.

Para la inversión de giro de los motores se emplearon dos puentes H implementados con
relés de 24 voltios y 10 amperios, los motores y los relés están alimentados con dos baterías
de 12 voltios de plomo-acido recargables, para recuperar la potencia de las baterías se
construyo un cargador y se acopló a la estructura de la silla. Esquemas de los circuitos ver
Anexos B y C.

La velocidad de los motores no es similar por lo que los movimientos hacia adelante y
hacia atrás no son totalmente rectos, para corregir este problema se ensambló un modulador
de ancho de pulso sobre el motor más rápido. Esquemas de estos circuitos en el Anexo C.

7.8 INTERFAZ DE COMUNICACIÓN ENTRE EL COMPUTADOR Y LA SILLA


DE RUEDAS

La interfaz de comunicación entre el computador y el sistema móvil propuesta inicialmente


con un microcontrolador, fue modificada teniendo en cuenta aspectos como la reducción en
la circuitería y en los costos de construcción, se observo que desde el computador se podía
transmitir completamente una instrucción a la silla y era innecesario retener instrucciones
en el microcontrolador. La instrucción correspondiente a la palabra reconocida se carga en
el registro del puerto paralelo, el cual está conectado a una tarjeta de acople de tierras y

51
posteriormente a los relés de los puente H, que dependiendo de la orden pronunciada se
encargan de alimentar los motores.

Al encender el computador se cargan datos en el puerto paralelo sobre los que no se tiene
control, por lo que fue necesario conectar un interruptor que se encargue de activar y
desactivar la conexión entre el puerto y la tarjeta de acople de tierras. Un dato cargado en el
puerto paralelo no correspondiente a una instrucción propia del comando de la silla de
ruedas puede dañar las baterías y/o los relés. Cuando el prototipo de reconocimiento esta
funcionando se garantiza que ningún dato no valido va a ser cargado en el puerto, sin
embargo esto no ocurre durante el arranque del computador y en los periodos de
hibernación. Esquemas de la interfaz ver Anexo C.

7.9 INTERFAZ GRÁFICA

Para ejecutar el programa de entrenamiento del codebook y entrenamiento del HMM de


cada palabra, es necesario ejecutar el comando CAS en el espacio de trabajo de matlab, la
pantalla de trabajo se muestra en la figura 17.

En esta pantalla se configura el número de centroides y el número de repeticiones de cada


palabra para la generación del codebook, el HMM de acuerdo a la palabra que se va a
entrenar y el número de estados de cada modelo.

Figura 17. Pantalla de trabajo para el entrenamiento del codebook y el HMM de cada
palabra.

52
53
8

54
CONCLUSIONES

Se observo que el principio básico de la cuantificación vectorial es comprimir la cantidad


de datos a procesar por medio del uso de un codebook con un número relativamente
pequeño de centroides. Cada centroide adquiere una característica fonética que relaciona
directamente a los vectores de observación, clasificando estos según la información
espectral que representen. Sin embargo en la generación del codebook se debe llegar a un
compromiso entre error por distorsión, almacenamiento y costo computacional. Según los
resultados obtenidos el codebook generado con 64 centroides es el que mejor cumple este
compromiso.

Se escogieron palabras de forma que entre ellas exista una gran diferencia fonética. Esto
hace que discriminar entre una palabra u otra sea más fácil. Así la representación
cuantificada de cada palabra se diferenciara completamente de las otras, logrando que en el
entrenamiento de los HMM de cada palabra se obtengan modelos que representen una
mayor probabilidad de generar una determinada secuencia de observación.

La eficiencia del algoritmo de palabras aisladas utilizando Modelos Ocultos de Markov es


de 96.08%. El error promedio total es pequeño teniendo en cuenta que el prototipo no solo
requiere eficiencia en el reconocimiento sino velocidad de procesamiento. En una
aplicación que no demande cumplir este compromiso se podría llegar a una eficiencia
cercana al 100%, porque se podría generar un codebook con un mayor número de
centroides y así representar más características fonéticas con cada uno.

El manejo de todas las probabilidades se hace en forma decimal (0<=P<=1) y no en


fracción o en porcentaje, por lo cual al hacer operaciones el resultado puede ser muy
pequeño y el software lo aproxima a cero, esto causa inconvenientes para nuevos cálculos y
errores en la ejecución de los programas. Trabajando con aproximaciones, normalizando o
limitando con algún tipo de umbral se puede solucionar el problema de división por cero,
pero reduce la capacidad de discriminar. Se decidió emplear saltos condicionales en la
implementación de los programas para rechazar los eventos que producían probabilidades
iguales a cero.

Los parámetros LPCC funcionan de manera excelente con un número reducido de


coeficientes, típicamente entre 8 y 12 dependiendo de la frecuencia de muestreo, y se
obtiene un modelamiento eficiente de las características del tracto vocal. Los coeficientes
LPCC requieren un costo computacional reducido, característica primordial a tener en
cuenta en el momento de la aplicación, porque el prototipo requiere un compromiso entre
eficiencia y velocidad para su correcto funcionamiento.

Se observo que el entrenamiento de los HMM hecho a partir de múltiples observaciones


(varias repeticiones de la misma palabra) es capaz de producir buenos resultados con una

55
iteración en el algoritmo de avance y retroceso. El modelo en proceso de entrenamiento se
va acercando al modelo definitivo a medida que se re estiman parámetros con cada nueva
repetición de la palabra, a diferencia del entrenamiento con una sola pronunciación en el
cual el modelo definitivo se logra cuando convergen los parámetros re estimados en
muchas iteraciones del algoritmo. Inicialmente se probo con un número pequeño de
observaciones que se incrementaron para aumentar el numero de veces que se hacia el
proceso de re estimación y así encontrar los parámetros del modelo. El modelo definitivo se
alcanza después de probar el reconocedor en funcionamiento, si el error de reconocimiento
se acerca a cero no se incrementa el número de observaciones y se archivan los parámetros.
Se empleó 200 repeticiones y la optimización mostrada en la sección 7.6.2.

El algoritmo de clasificación de vectores LBG funciona de manera excelente en


comparación con k-means debido a que parte del principio de división binaria sin memoria,
es decir a medida que aumenta el número de clústeres los anteriores desaparecen y se
realiza la reubicación de vectores con respecto a los centroides de los nuevos clústeres. Esto
garantiza que la distorsión por cuantificación va a ser mínima.

56
RECOMENDACIONES

Implementar el prototipo de reconocimiento de palabras aisladas sobre un sistema


autónomo (DSP, DSPIC o FPGAA) que aumente la eficiencia en cuanto a tiempo de
procesamiento.

Utilizar otro método de reconocimiento diferente al utilizado en este trabajo como los
modelos ocultos de Markov continuos, alineamiento temporal dinámico o un hibrido entre
modelos ocultos de Markov y redes neuronales.

Para optimizar el funcionamiento del prototipo de reconocimiento y su aplicación en el


comando de un sistema móvil se recomienda implementar un sistema de reconocimiento de
palabras clave dentro de un discurso continuo.

Un sistema de ayuda a discapacitados implementado en un computador puede ser más que


reconocimiento de voz por lo que se recomienda complementar el prototipo con otras
funciones como reconocimiento de imágenes y seguimiento de trayectorias.

57
LOGROS

Evento: XI Simposio de Tratamiento de señales, Imágenes y Visión Artificial.


Titulo: Diseño de un Prototipo de Silla de Ruedas Comandada por Voz. .
ISBN: 978-958-683-934-1
Organizador: Pontificia Universidad Javeriana.

Evento: V Congreso Internacional de Electrónica y Tecnologías de Avanzada.


Titulo: Diseño de un Prototipo de Reconocimiento de Voz Basado en HMM para
Comendar el Movimiento de una Silla de Ruedas.
ISBN: 958-97105-7-3
Organizador: Universidad de Pamplona.

Evento: IEEE Colombian Workshop on circuits and systems – Cartagena 2006.


Titulo: Diseño de un prototipo de Reconocimiento de Palabras Aisladas basado en HMM
para Comandar el movimiento de una silla de Ruedas.
ISBN: 978-958-695-259-0
Organizador: IEEE Colombia – Circuit and Systems Society.

Evento: Curso de Procesamiento Digital de Imágenes y Voz, Principios Básicos y


Aplicaciones.
Titulo: Conferencia “Prototipo de Silla de Ruedas Comandada por Voz
Organizador: Grupo de Investigación en Procesamiento de Señales DSP-UPTC

58
BIBLIOGRAFIA

[1] ALCUBIERRE J.M., Minguez J., Montesano L., Montano L., Saz 2º., Lleida 2E.
Silla de Ruedas Inteligente Controlada por Voz. Trabajo conjunto entre el Instituto de
Investigación en Ingeniería de Aragón, Departamento de Informática e Ingeniería de
Sistemas, Departamento de Ingeniería Electrónica y Comunicaciones de la Universidad de
Zaragoza, España. Año 2005.

[2] ALONSO Gonzales Itzar Goretti. Reconocedor de dígitos, Proyecto independiente


de Ingeniero Técnico de telecomunicaciones Universidad de Las Palmas de Gran Canaria.
Año 2002.

[3] ÁLVAREZ Mauricio, Suarez Julio F., Castellanos Germán. Selección de


características para el Reconocimiento de Voz con Modelos Ocultos de Markov. Grupo de
Control y Procesamiento Digital de señales Universidad Nacional de Colombia. Sede
Manizales. Año, 2003.

[4] BURTON David K., Text-Dependent Speaker Verification Using Vector Quantization
Source Coding, IEEE Transactions on Speech and Audio Processing, Vol 35, No 2,
Febrero, 1987.

[5] CABAS Vanegas Edgar de Jesús, Barrera Alarcón Yecid Fernando. Diseño e
Implementación de un Prototipo que realice la Verificación Automática de Personas por su
Voz. Tesis de grado, autores:. Grupo de Procesamiento Digital de Señales DSP, Ingeniería
Electrónica, Universidad Pedagógica y Tecnológica de Colombia, Seccional Sogamoso.
Año, 2004.

[6] LARUNBAT B. Cuantificación Vectorial, Disponible: www.ampere.iie.edu.uy/ens


e/asign/codif/papers/larunbat_cap_2.pdf, Consultado: Septiembre, 2006.

[7] DELLER John R., Proakis G., Hansen H.L., Discrete- time processing of speech
signals, Prentice-Hall, 1987.

59
[8] Departamento de Ingeniería Electrónica y Comunicaciones Centro Politécnico
Superior Universidad de Zaragoza, Tecnologías de la voz, Practica IV, Análisis y
Síntesis LPC de la señal de voz. Disponible en: www.physionet.eps.unizar.es/ Eduardo/
docencia/tvoz/practicas/pract4pdf. Consultado: Agosto 2006.

[9] FAUNDEZ Zanuy Marcos, Tratamiento digital de voz e imagen, Marcombo Editores,
2001.

[10] GOLD Ben., Morgan Nelson., SPEECH AND AUDIO SIGNAL PROCESSING,
Processing and Perception of Speech and Music, John Wiley & Sons, Inc.

[11] GUARASA Javier Macías. Arquitectura y Métodos en Sistemas de Reconocimiento


Automático de Habla de Gran Vocabulario. Grupo de Tecnología del Habla. Departamento
de Ingeniería Electrónica, Universidad Politécnica de Madrid. Octubre1998.

[12] HASEGAWA-JOHNSON Mark., Lectura Notes in Speech Production, Speech


Coding, and Speech Recognition. University of Illinois at Urbana-Champaign, Febrero.
2000.

[13]. Libro de voz, Reconocimiento de Voz en el Idioma Español, Informe Final de


Actividades. Universidad Nacional de Manizales Manizales, Septiembre 30, 2004.

[14] MALDONADO José Luciano La estadística como herramienta para el desarrollo de


sistemas automáticos reconocedores del habla. Instituto de Estadística Aplicada y
Computación Facultad de Ciencias Económicas y Sociales Universidad de los Andes. Año
2003.

[15]. MARTINEZ Fernando., Portale Gustavo., Klein Hernán., Olmos Osvaldo.,


Reconocimiento de voz, apuntes de cátedra para Introducción a la Inteligencia Artificial.
Disponible en: www.secyt.frba.utn.edu.ar/gia/IA1-IntroReconocimientoVozpdf .
Consultado: Agosto 2006.

[16]. MENDEZ Ortiz Freddy, Vecino Pico Hugo. Propuesta, validación y prueba de una
arquitectura para modelado de portales WEB semánticos basados en interacción por voz.
Grupo de tecnologías de información Línea de Ingeniería de software y sistemas de
información, Universidad Autónoma de Bucaramanga. Año 2006.

60
[17]. OWENS F.J., Signal Processing of Speech, McGraw Hill, Inc. 1993

[18]. RABINER L.R., “A Tutorial on Hidden Markov Models and Selected Applications in
Speech Recognition,” Proceedings of the IEEE, vol. 77, no. 2, Febrero, 1989.

[19]. SAITO Shuko., Nakata Kazuo., Fundamentals of Speech Signal Processing,


Academic Press, 1981.

[20]. SMITH Sreven W., “The Scientist and Engineer’s Guide to Digital Signal
Processing”. 2da edición, San Diego CA. California Technical Publishing,1999.

[21]. VILLAMIL Espinosa Iván Horacio. Aplicaciones en Reconocimiento de Voz


Utilizando HTK: Pontificia Universidad Javeriana. Año 2005.

61
62
ANEXO A

Vozilla: Código de programa de grabación de las muestras de voz (repeticiones de cada


palabra) para el entrenamiento del codebook.

Función que realiza la adquisición, cuantificación y muestreo, pre-procesamiento y


extracción de características.
Realizado por:
Diego Fernando Méndez Medina
Helberth Yesid Espitia Florez

%Adquisición muestreo y cuantificación

sd=1;
mavect=0;
ai = analoginput(‘winsound’);
addchannel(ai,1);
Fm=8000;
set(ai,’SampleRate’,Fm);
set(ai,’SamplesPerTrigger’,16000);
for f=1:600;
input(‘Enter...’);
start(ai);
ua = getdata(ai);
m=size(ua);

%pre-procesamiento

numd=0;demd=0;
[numd,demd] = butter(6,0.975,’low’);
x1=filter(numd,demd,ua);
t=1:1:m(1);
y= t*0;
l=size(t);y(1)=0;y(2)=0;

for k=3: l(2);


y(k)=x1(k)+0.95*x1(k-1);
end

Spve = 0.04;
NumM=fix(Fm*Spve);
NumV=fix(length(y)/NumM);

p=0;
s=0;
n1=1; n5=1;
n3=1;

63
n7=1;
prom=0;
var=0;
j=0;
vart=0;
v=8;

frame=0;
n=320;
n2=n; n4=n; n6=n;n8=n;
zeros=size(y);
sono=0;s=0;
while n2<=maximo(2)
frame=y(1,n1:n2);
prom=sum(frame)/size(frame,2);
var1=abs(prom-frame);
var=sum(var1);

if var>v
p(n3:n4,1)=frame;
n3=n3+n; n4=n4+n;
if var>15
sono(n7:n8,1)=frame;
n7=n7+n; n8=n8+n;
end
else
s(n5:n6,1)=frame ;
n5=n5+n; n6=n6+n;
end

n1=n1+n;
n2=n2+n;

end
voz=p;
silent=s;
xw=0;
NumV=fix(length(p)/NumM);

Tran=fix(NumM/2);
Avance = NumM-Tran;
inicio = 0; k=1;
for l=1:1;2*NumV-1);
for n=1:NumM;
xw(k)=p(n+inicio)*(0.54 – 0.46*cos(6.2832*n/(NumM-1)));
k = k + 1;
n+inicio;
end
inicio = inicio + Avance;
end

%extracción de caracterirsticas

NumV=fix(length(xw)/NumM);
num_ven=NumV;

64
tam_ven=320;
gra=9;
n=320;
n1=1;
n2=n;
E=0;
Am=0;
for i=1:NumV;
frame=xw(n1:n2);
% extraccion de caracteristicas

[Am(i,1:10),E(i)]=lpc(frame,gra);
n1=n1+n;
n2=n2+n;
end
c=0;
for j=1:NumV;
c(j,1)=fix(log(E(j)^2));
c(j,2)=-Am(j,1);
for i=2:10;
i1=i+1;
ut=0;
u=0;
for k=1:i-1;
u=k*c(j,k)*Am(j,i-k);
ut=u+ut;
end
c(j,i1)=fix(-Am(j,i)-ut/i);
end
end
fh=size I;
fg(f)=fh(1);

mavect(sd:sd+fh-1,1:10)=c(1:fh,1:10);
sd=sd+fh;
end
mav1=’vectos600h’;
save(mav1,’mavect’);

LBG: Código de programa que realiza el entrenamiento del codebook a partir de los
coeficientes de cada palabra almacenados en el programa Vozilla.

Función que realiza la generación del codebook utilizando el algoritmo LBG.


Realizado por:
Diego Fernando Méndez Medina
Helberth Yesid Espitia Flórez

load vectos600h
p=size(mavect);

65
centroide(1,1:10)=mean(mavect);
dc=normrnd(mean(mavect),std(mavect));
ds=max(abs(dc));
aleatorio(1,1:10)=dc/(4*ds);

n=1

for n=1:6

for h=1:2:2^n
ce1(h,1:10)=centroide((h+1)/2 ,1:10)-aleatorio((h+1)/2 ,1:10);
ce1(h+1,1:10)=centroide((h+1)/2 ,1:10)+aleatorio((h+1)/2 ,1:10);
end
for j=1:2^n

for i=1:p(1)
dist(j,i)=sqrt( sum( (ce1(j,1:10)-mavect(I,1:10)).^2) );
end
end

[a,b]=min(dist);
for m=1:2^n
ainc=0;
clos=0;
for k=1:p
if b(k)==m
ainc=ainc+1;
clos(ainc,1:10)=mavect(k,1:10);
end
end
centroide(m,1:10)=mean(clos);
aleat(m,1:10)=normrnd(mean(clos),std(clos));
aleatorio(m,1:10)=aleat(m,1:10)/(4*max(abs(aleat(m,1:10))));
tamc(m)=ainc;
end
end
cent00=centroide;
mav1=’centroides600h’;
save(mav1,’cent00’);

Leer: Código de programa que obtiene las muestras de cada palabra para el entrenamiento
de los modelos.

Función que obtiene las palabras cuantificadas y su longitud


Realizado por:
Diego Fernando Méndez Medina
Helberth Yesid Espitia Flórez

obs=zeros(200,100);

66
for z=1:200
be=0;
palabra=0;
vocoder
codew
tt(z)=size(be,2);
obs(z,1:tt(z))=be(1:tt(z));
end
maf1=’observaha1’;
maf2=’longituha1’;
save(maf2,’tt’);
save(maf1,’obs’);

Vocoder: función que realiza la adquisición, muestreo, cuantificación, pre-procesamiento y


extracción de características de una palabra.
Realizado por:
Diego Fernando Méndez Medina
Helberth Yesid Espitia Flórez

openDAQ=daqfind;
for i=1:length(openDAQ)
stop(openDAQ(i));
end
sd=1;
mavect=0;
ai = analoginput(‘winsound’);
addchannel(ai,1);
Fm=8000;
set(ai,’SampleRate’,Fm);
set(ai,’SamplesPerTrigger’,16000);
for f=1:1;
input(‘Enter...’);
start(ai);
ua = getdata(ai);
m=size(ua);
stop(ai);
delete(ai);
numd=0;demd=0;
[numd,demd] = butter(6,0.975,’low’);
x1=filter(numd,demd,ua);
t=1:1:m(1);
y= t*0;
l=size(t);y(1)=0;y(2)=0;

for k=3: l(2);


y(k)=x1(k)+0.95*x1(k-1);
end

Spve = 0.04;

67
NumM=fix(Fm*Spve);
NumV=fix(length(y)/NumM);

p=0;
s=0;
n1=1; n5=1;
n3=1;
n7=1;
prom=0;
var=0;
j=0;
vart=0;
v=8;

frame=0;
n=320;
n2=n; n4=n; n6=n;n8=n;
zeros=size(y);
sono=0;s=0;
while n2<=maximo(2)
frame=y(1,n1:n2);
prom=sum(frame)/size(frame,2);
var1=abs(prom-frame);
var=sum(var1);

if var>v
p(n3:n4,1)=frame;
n3=n3+n; n4=n4+n;
if var>15
sono(n7:n8,1)=frame;
n7=n7+n; n8=n8+n;
end
else
s(n5:n6,1)=frame ;
n5=n5+n; n6=n6+n;
end

n1=n1+n;
n2=n2+n;

end
voz=p;
silent=s;
xw=0;
NumV=fix(length(p)/NumM);

Tran=fix(NumM/2);
Avance = NumM-Tran;
inicio = 0; k=1;
for l=1:1:2*NumV-1);
for n=1:NumM;
xw(k)=p(n+inicio)*(0.54 – 0.46*cos(6.2832*n/(NumM-1)));
k = k + 1;
n+inicio;
end
inicio = inicio + Avance;

68
end
NumV=fix(length(xw)/NumM);
num_ven=NumV;
tam_ven=320;
gra=9;
n=320;
n1=1;
n2=n;
E=0;
Am=0;
for i=1:NumV;
frame=xw(n1:n2);
[Am(I,1:10),E(i)]=lpc(frame,gra);
n1=n1+n;
n2=n2+n;
end
c=0;
for j=1:NumV;
c(j,1)=fix(log(E(j)^2));
c(j,2)=-Am(j,1);
for i=2:10;
i1=i+1;
ut=0;
u=0;
for k=1:i-1;
u=k*c(j,k)*Am(j,i-k);
ut=u+ut;
end
c(j,i1)=fix(-Am(j,i)-ut/i);
end
end
fh=size I;
fg(f)=fh(1);
if p == 0;
else
palabra(sd:sd+fh-1,1:10)=c(1:fh,1:10);
sd=sd+fh;
end
end
mav1=’adelante’;
ero(mav1,’palabra’);

Codew: función que realiza la cuantificación vectorial de los coeficientes LPCC de una
palabra.
Realizado por:
Diego Fernando Méndez Medina
Helberth Yesid Espitia Flórez

load centroides600h
load adelante

69
p=size(palabra);

a=0;be=0;mtem=0;dis1=0;dist1=0;
if palabra == 0
be=0;
else
for i=1:p
mtem(1,1:10)=palabra(I,1:10);
mtem(2:65,1:10)=cent00(1:64,1:10);
dis1=pdist(mtem);
dist1=dis1(1:64);
[a(i),be(i)]=min(dist1);
end
end
maf1=’tira’;
save(maf1,’be’);

70
ANEXO B

Cargador de baterias

Cargador de baterias con vigilante de estado de carga

71
ANEXO C

Interfaz Silla – Computador

LPT1: Puerto paralelo del computador.


PC1-4: Opto Acopladores
Q1-Q4: Transistor TIP 31C
H1-H4: Relé de 4 contactos 24VDC.

Circuito de comunicación puerto paralelo – reles.

Circuito de Inversión de giro.

72
Modulador de ancho de pulso

En la carpeta especificaciones del anexo digital se encuentra la hoja de especificaciones del


TL494, TIP 31C, TIP 127 y el MOC.

73
ANEXO D

74
75
76
77
78

Das könnte Ihnen auch gefallen