Sie sind auf Seite 1von 78

Segmentacin y Realce de Seales

de Voz Usando la Transformada


Wavelet y DSPs
por Doubert Geovanny Snchez Marn
Director:
Jorge Ivn Marn Hurtado
Modalidad: Proyecto de Grado
ARMENIA
UNIVERSIDAD DEL QUINDIO
FACULTAD DE INGENIERIA
PROGRAMA DE INGENIERIA ELECTRONICA
2004
2
ndice General
Agradecimientos iii
1 Introduccin 1
2 Caractersticas Acsticas 3
2.1 Realizacin Fontica 3
2.2 Clasificacin de los Fonemas . 4
2.2.1 Fonemas Consonnticos 4
2.2.2 Fonemas Voclicos . 6
2.3 Caractersticas del Odo . 7
2.3.1 El Odo como Analizador de Frecuencias 8
2.4 Audiometra . 9
2.4.1 Componentes de un audfono 11
3 Transformada Wavelet 13
3.1 Introduccin 13
3.2 Repaso a la Transformada de Fourier . 14
3.3 Qu Son Las Wavelet? . 15
3.4 Transformadas Wavelet .. 16
3.4.1 Transformada Wavelet Continua (CWT) 18
3.4.2 La Transformada Wavelet Discreta (DWT) 20
3.4.2.1 Transformada Wavelet Rpida (FWT) . 23
3.4.2.2 Algoritmo de la Transformada Wavelet Rpida 25
4 Sistema de Segmentacin 26
4.1 Implementacin del Sistema de Segmentacin de Fonemas
en MATLAB 27
4.1.1 Adquisicin de la Seal de Voz .... 30
4.1.2 Preprocesamiento .. 31
4.1.3 Extraccin de Caractersticas ... 32
4.1.3.1 Trasformada Wavelet . 32
4.1.3.2 Seleccin de la Wavelet Madre . 34
4.1.3.3 Wavelet Denoising 35
4.1.3.4 Normalizacin ... 35
4.1.3.5 Energas Sub-bandas . 36
3
4.1.4 Reglas de Seleccin .. 37
4.1.5 Realce de la Seal 44
4.1.6 Transformada Wavelet Inversa 44
5 Implementacin en el DSP 46
5.1 Captura y Pre-procesamiento de la Seal 48
5.2 Conversin de Datos ... 49
5.3 Funcin Procesar Segmento 49
5.4 Pruebas de Desempeo 52
6 Conclusiones 54
7 Proyecciones 55
Bibliografa 56
A Cdigo fuente para MATLAB 58
A.1 Cdigo fuente del programa principal .. 58
B Cdigo fuente para el DSP TMS320C6701 61
B.1 Cdigo fuente del programa principal 61
B.2 Cdigo fuente funcin que procesa el segmento 62
B.2.1 Archivo de cabecera segmentacin.h .. 62
B.2.2 Archivo fuente segmentacin.c 63
4
ndice de Figuras
1.1 Sistema de Segmentacin . 1
2.1a Esquema del Aparato Fonador Humano ....... 4
2.1b Esquema aproximado de la produccin de la voz 4
2.2 El Odo Humano 7
2.3 Membrana basilar "estirada" .. 8
2.4 Banco de filtros de escalas de Mel .. 9
2.5 Audiograma .. 10
2.6 Audfono Intracanal 11
3.1 Desplazamiento de ventana para la STFT . 15
3.2 Inconvenientes de la STFT . 15
3.3 Izquierda wavelet a diferentes escalas, derecha traslacin de wavelet . 16
3.4 Graficas de algunas wavelet madre. ... 18
3.5 Variable escala 20
3.6 Proceso de anlisis en diferente escala y traslacin
(a) escala fija a 1 y traslacin variante .. 21
(b) escala fija a 20 y traslacin variante . 21
3.7 Planos de Tiempo-Frecuencia analizado con la TW .. 22
3.8 Planos Tiempo-Frecuencia para (a) STFT (b) TW . 22
3.9 Transformada Wavelet Rpida (FWT) o Algoritmo de Mallat .. 24
3.10 Diagrama de bloques de la descomposicin multiresolucin de una seal
por medio de la transformada wavelet.
(a) Banco de anlisis .. 24
(b) sntesis . 24
3.11 Respuesta en frecuencia del banco de filtros Wavelet 25
4.1 Sistema de Segmentacin de Seales Propuesto en el Proyecto 195 . 27
4.2 Estructura del Sistema de Segmentacin .. 27
4.3 Esquema en memoria del vector de muestras a filtrar .. 28
4.4 Diagrama de flujo de la simulacin en MATLAB 29
4.5. Anlisis por bloque del filtro pre-nfasis 32
4.6 Bloque de Extraccin de Caractersticas .. 32
4.7 Anlisis de Descomposicin por nivel en Matlab 33
4.8 Descomposicin de un Bloque X = 512 datos de la seal en
niveles de detalle y uno de aproximacin . 33
4.9 Bloque de normalizacin 36
4.10 Palabra mata etiquetada 38
4.11 Deteccin de segmentos de silencio en la palabra mata 39
5
4.12 Esquema de la Transformada Wavelet Inversa, para recuperar un
bloque de 512 datos ... 45
4.13 Seal de la palabra mata recuperada ... 45
5.1 Tcnica de doble buffer usando DMA para captura de un bloque de 64ms
con su respectivo anlisis y reproduccin . 47
5.2 Diagrama de flujo del programa principal y la ISR .48
5.3 Esquema en memoria del vector de muestras a filtrar . 50
6
ndice de Tablas
2.1 Clasificacin de las consonantes de acuerdo a su articulacin .. 6
2.2 Clasificacin de los fonemas voclicos . 6
4.1 Ejemplos de algunas muestras de voz previamente capturadas . 31
4.2 Nmero de coeficientes entregados por cada nivel de la wavelet con los
coeficientes que se analizan y los que sirven de condiciones iniciales
para los siguientes bloques 34
4.3 Rango de frecuencias .. 34
4.4 Umbral de ruido para cada nivel . 35
4.5 Nmero de Coeficientes de cada nivel en un bloque de 512 muestras de la
seal para el Clculo de las Energas 36
4.6 Etiquetado Manual de la palabra mata 37
4.7 Cambio de energa entre segmentos por banda .. 38
5.1 Tiempos promedio de ejecucin de las funciones dentro de la rutina
del servicio de interrupcin .. 52
5.2 Tiempos promedio de ejecucin de conversin de los datos .. 53
5.3 Tiempo total de la ISR 53
7
Capitulo 1
Introduccin
Este trabajo plantea una aplicacin al sistema de segmentacin propuesto por el grupo
GDSPROC de la Universidad del Quindo. El objetivo fundamental es disear un sistema
automtico de realce de voz por medio de la segmentacin de seales utilizando la
Transformada Wavelet. El proceso de segmentacin juega un papel muy importante en
aplicaciones que corresponden a la construccin de sistemas de reconocimiento continuo de
voz y al realce de las seales de voz, en audfonos para personas con deficiencias auditivas,
en donde est enfocado nuestro trabajo. Partiendo de las investigaciones realizadas por el
Grupo de Procesamiento Digital de Seales GDSPROC en el proyecto 195, apndice D
[Hur03], en el cual plantean el sistema de segmentacin de seales mostrado en la figura
1.1, proponemos una aplicacin que realza los segmentos de la seal identificados, con el
fin de ser utilizados en sistemas de apoyo a personas con deficiencias auditivas.
El proyecto consiste en segmentar una seal de voz independiente del hablante y de las
condiciones de captura, con el fin de identificar segmentos de fonemas sonoros, sordos y de
silencio por medio de la Transformada Wavelet, la cual descompone la seal en diferentes
bandas de frecuencia, se analizan en sub-bloques de 4ms, la evolucin de la energa en cada
banda y se establecen reglas de seleccin para identificar los segmentos. Una vez
identificados estos segmentos se efecta en ellos un realce en las diferentes bandas de
frecuencia por medio de un factor de escala que depender del tipo de segmento
identificado y/o la banda a realzar, finalmente se recupera la seal con las caractersticas
antes mencionadas y libre de ruido, por medio de la transformada wavelet inversa.
Figura 1.1 Sistema de Segmentacin
8
Para la implementacin del proyecto en tiempo real se emple un DSP TMS320C6701 de
la Texas Instrument [Tex00]. Finalmente contaremos con el criterio de una persona con
limitaciones auditivas en cuanto al funcionamiento del sistema y las posibles mejoras para
el futuro.
El planteamiento del trabajo es el siguiente:
Captulo 2 (Caractersticas Acsticas): Analizaremos una visin global de cmo se
producen los sonidos, como estn clasificados los fonemas y cuales son las caractersticas
del odo.
Captulo 3 (Transformada Wavelet): Presentaremos la teora necesaria para comprender
las ventajas de la Transformada Wavelet con respecto a la Transformada de Fourier en el
anlisis de seales.
Captulo 4 (Sistema de Segmentacin): Se har una descripcin del sistema de
segmentacin, as como su implementacin en Matlab y los resultados obtenidos en la
simulacin con seales previamente capturadas.
Captulo 5 (Implementacin en el DSP): En este captulo explicaremos las rutinas
utilizadas en C++ para la implementacin en tiempo real del sistema, el costo
computacional del software y el criterio de un paciente con limitaciones auditivas.
Capitulo 6 (Conclusiones): Desarrollamos las conclusiones fundamentales del trabajo
presentado.
Captulo 7 (Proyecciones): Plantearemos los posibles trabajos futuros que se puedan
derivar de este proyecto o que sirvan de complemento para otros trabajos.
Apndice A (Cdigo Fuente para Matlab): Presentaremos todo el cdigo fuente en
Matlab para la simulacin del sistema expuesto en el captulo 4.
Apndice B (Cdigo Fuente del Sistema en Tiempo Real): Expondremos el cdigo en C
desarrollado para la implementacin del sistema en tiempo real en un DSP TMS320C6701.
9
Captulo 2
Caractersticas Acsticas
Un fonema es una unidad del habla y un conjunto de fonemas determina los sonidos con los
cuales se pueden construir palabras en un lenguaje determinado. Por otro lado, un alfono
es una de las diferentes pronunciaciones para un fonema en particular. El fonema es una
abstraccin y realmente no puede ser pronunciado excepto en trminos de uno de sus
alfonos [Dal69]. Tomando en cuenta lo anterior se puede decir que en cualquier lenguaje
el nmero de fonemas es obviamente ms pequeo que el nmero de fonos o alfonos.
Tenemos la idea ortogrfica de que es muy fcil separar la palabra mesa en cuatro
sonidos: /m/e/s/a/, pero fsicamente es un continuo de principio a final. Como
Consecuencia, en la vocal /e/ hay elementos de la /m/ y de la /s/. Adems, para poder hablar
de prisa no llegamos a efectuar los movimientos completos, y los dejamos a medias. Por
esas y otras razones, el reconocimiento automtico de fonemas no es tan fcil como uno
quisiera.
2.1 Realizacin Fontica
Los sonidos se producen cuando el aire espirado por los pulmones llega hasta la laringe,
donde se encuentran las cuerdas vocales. Estas cuerdas vocales son dos msculos gemelos,
elsticos, que vibran cuando el aire espirado pasa por ellas. Es entonces cuando se produce
el sonido que llamamos voz (figura 2.1a). La voz pasa a la cavidad bucal o la cavidad nasal,
donde los rganos, principalmente los de la boca, configuran y matizan los diversos sonidos
en el habla [Cas99].
Los fonemas se realizan por medio de sonidos. Los encargados de producir esos sonidos, de
realizarlos fonticamente son los rganos de fonacin.
La seal de voz se limita a una banda de frecuencias que va desde 300 Hz hasta 3300 Hz. A
pesar de esto, tal seal no est compuesta nicamente por tonos puros en esa gama de
frecuencias, ya que adicionalmente, la voz posee otro componente representado en un
proceso de ruido blanco gaussiano con una densidad espectral de potencia tambin ubicada
en la gama de 300 Hz a 3300 Hz. Los tonos puros, conocidos como pitchs, corresponden
a los fonemas sonoros (vocales); en cambio, la seal de ruido blanco, corresponde a los
fonemas sordos (consonantes), El tracto vocal es modelado como un sistema que modifica
la senal (sonora o sorda) proveniente de la laringe, actuando generalmente como un filtro
del tipo todo polos (AR) [DJH00] [PM98]. Finalmente el modelo aproximado que
representa la produccin de la seal de voz y el tracto vocal se muestra en la figura 2.1b.
10
2.2 Clasificacin de los Fonemas
Los sonidos estn divididos en dos grupos principales:
Consonantes: Si la corriente de aire es detenida u obstruida.
Vocales: Si el aire sale libremente.
Figura 2.1(a) Esquema del Aparato Fonador Humano
Figura 2.1b Esquema aproximado de la produccin de la voz
2.2.1 Fonemas Consonnticos
Se producen sonidos consonnticos cuando el aire al salir encuentra un obstculo, ya sea
cerrndole totalmente el paso, o dejndole una estrechez por donde pasa con friccin. Para
clasificar a las consonantes se tendr en cuenta el concepto de articulacin. Se entiende por
articulacin de un sonido la posicin adoptada por los rganos de la cavidad bucal en el
momento de producirse un sonido.
11
En la produccin y clasificacin de las consonantes hay que tener en cuenta los siguientes
factores:
1. Lugar de articulacin.
2. Manera de articulacin.
3. Articulaciones sonoras o sordas.
Lugar de Articulacin
Para el idioma Espaol hay nueve lugares de articulacin para las
consonantes:
1. Bilabial. El labio inferior contra o cerca del labio superior. Ejemplo: [m] en ms.
2. Labiodental. El labio inferior contra o cerca del borde de los dientes frontales
superiores. Ejemplo: [f] en fuente.
3. Dental. Posicin de la lengua contra el borde o atrs de los dientes superiores
frontales. Ejemplo: [d] en dar.
4. Alveolar. Posicin de la lengua contra o cerca de la zona alveolar. Ejemplo: [l] en
luna.
5. Palatal. Posicin de la lengua contra o cerca del paladar duro. Ejemplo: [c] en
chico.
6. Velar. Dorso de la lengua contra o cerca del velo. Ejemplo: [k] en calor.
7. Bilabiovelar. El labio inferior cerca del labio superior y al mismo tiempo el dorso
de la lengua cerca del velo. Ejemplo: [w] en hueso.
8. Uvular. Dorso de la lengua contra el uvula. Ejemplo: [rr] en carro.
9. Glotal. Movimiento de cuerdas vocales. Ejemplo: [h] en jardn.
Manera de Articulacin
Independientemente de cual sea la zona o punto de articulacin, los rganos adoptan una
postura o una posicin al producir los fonemas. A esto se le llama modo de articulacin. En
espaol hay seis maneras de articulacin en las consonantes.
1. Oclusivas. En algn punto de la articulacin del sonido la corriente de aire queda
detenida y despus es liberada con una pequea explosin. Ejemplo: [p] en pasar.
2. Fricativas. La corriente de aire, sin ser detenida, es forzada a travs del tracto vocal
existiendo un cierre parcial, provocando que el aire salga con turbulencia.
3. Africativas (Oclusiva + Fricativa). La corriente de aire es detenida como en una
oclusiva; pero en lugar de ser liberada abruptamente, es liberada con friccin como
en un fricativo.
4. Nasales. El velo es bajado y la corriente de aire pasa a travs de la cavidad nasal con
gran resonancia. Ejemplo: [m] en ms.
5. Semivocales. La cavidad oral es cerrada a la mitad, pero la corriente de aire escapa
por ambos lados del lugar de articulacin. [l] en luna.
6. Vibrantes. La posicin de la lengua, bajo tensin, conecta el alveolar una vez que la
corriente de aire pasa a travs del tracto vocal. Ejemplo: [r] en pero y [rr] en perro.
Articulaciones Sonoras o Sordas
Todo fonema, sea cual sea su punto o manera de articulacin, puede producirse con
vibraciones de las cuerdas vocales o sin ellas.
12
Sonoros, si las cuerdas vocales se aproximan y comienzan a vibrar. Tendremos que
separar los sonidos voclicos, de los consonnticos.
Sordos, si las cuerdas vocales se acercan entre si pero no llegan a vibrar.
Fonemas Sonoros Fonemas Sordos
s, j, f, ch, p, t, k b, d, g, m, n, , l, r, rr, y
Tabla 2.1 Clasificacin de las consonantes de acuerdo a su articulacin
2.2.2 Fonemas Voclicos
Con las vocales, la posicin de la lengua y la forma en que se posiciona la boca determinan
su timbre. Debido a que el aire no es bloqueado o detenido, no hay contacto entre los
articuladores superiores e inferiores. En su lugar, la posicin de la lengua es significante
debido a que cambia el tamao y forma de la cavidad oral.
Acsticamente, cuando pronunciamos una vocal hay unas bandas de frecuencia que se
amplifican ms segn donde pongamos la lengua: una A, por ejemplo, se articula de forma
ms estrecha en la zona de la faringe y ms ancha en la zona de la boca, lo cual lleva a la
amplificacin de un tramo de frecuencia que est alrededor de los 700Hz, y otro de los
1300Hz. Estos tramos se conocen como formantes.
Hay tres posiciones verticales de la lengua, las cuales determinan el grado de abertura de la
cavidad oral: Alto, cuando la lengua est cerca del paladar; medio, cuando la lengua se
encuentra a la mitad de la boca; y bajo. Tambin hay tres posiciones de la lengua de frente
hacia atrs: Anterior, cuando la parte alta de la lengua est muy cerca del alveolar; central,
cuando la parte ms alta de la lengua est en el centro de la cavidad oral; y posterior, donde
la parte ms alta de la lengua, el dorso, est muy cerca del velo.
Por esto se puede clasificar a las vocales en un cuadro bidimensional. En espaol hay cinco
posiciones principales.
Anterior Central Posterior
Alto i u
Medio e o
Bajo a
Tabla 2.2 Clasificacin de los fonemas voclicos
Las vocales son de mayor duracin que las consonantes y estn bien definidas
espectralmente. Por esto las vocales usualmente son fciles de reconocer y contribuyen
significativamente al proceso de reconocimiento de voz. De acuerdo a la manera en que el
tracto vocal se configure se determinan las frecuencias de resonancia del tracto (las
formantes) y por ello el sonido se produce. Las vocales se identifican por sus formantes, las
cuales son muy fuertes durante todo el fonema.
13
El principal motivo para la clasificacin de los fonemas de acuerdo a su manera y lugar de
articulacin es para poder ms adelante hacer experimentos en los cuales se agrupan los
fonemas para efectos de mejoras en el reconocimiento.
2.3 Caractersticas del Odo
La audicin es el resultado de una serie de procesos acsticos, mecnicos, nerviosos y
mentales dentro de la combinacin odo/cerebro que dan a una persona la impresin de
sonido [Ber69].
El odo consta de tres partes principales (figura 2.2):
El odo externo
El odo medio
El odo interno

Figura 2.2: El Odo Humano
El odo externo
Los sonidos del mundo exterior son recogidos por el odo externo, el cual est formado por
el pabelln auricular (la oreja) y el conducto auditivo externo. Cuando las ondas sonoras
penetran en el odo, el conducto auditivo externo incrementa la sonoridad de los tonos que
nos ayudan a comprender el habla. Al mismo tiempo el conducto auditivo externo (1)
protege otra parte importante del odo: el tmpano (2) una membrana flexible, circular que
vibra cuando es alcanzada por las ondas sonoras.
El odo medio
Las vibraciones del sonido continan su viaje hacia el odo medio, que contiene tres
pequeos huesos llamados yunque, martillo y estribo (3, 4, 5). Estos hacen de puente entre
el tmpano y el odo interno. Incrementan y amplifican las vibraciones del sonido an mas,
antes de transmitirlas sin peligro hacia el odo interno va la ventana oval.
14
El odo interno
El odo interno o cclea, similar a la concha circular de un caracol, alberga un sistema de
tubos que estn rellenos de un fluido acuoso. Cuando las ondas sonoras pasan a travs de la
ventana oval (6), el fluido empieza a moverse, haciendo que unos pequeos cilios se
muevan a su vez. Posteriormente, estos cilios transforman las vibraciones en impulsos
elctricos que viajan por el nervio auditivo (9) hasta el mismo cerebro. An se desconoce
cmo traduce el cerebro estos impulsos nerviosos.
2.3.1 El odo como analizador de frecuencias
Como se ve en la figura 2.3, la membrana basilar se estira por la cclea. Esta membrana
vara en masa y rigidez a lo largo de su longitud. En el extremo ms prximo a la ventana
oval y al tmpano, la membrana es rgida y ligera, as que su frecuencia de resonancia es
alta. En el extremo distante, prximo al pice, la membrana es pesada y suave, y resuena a
baja frecuencia. El rango de frecuencias de resonancia disponible determina el rango de
frecuencias de la audicin humana, que va desde los 20Hz hasta los 20KHz, sin embargo,
en la prctica slo llega hasta los 16 KHz, siendo las frecuencias ms audibles las ubicadas
en el medio del espectro, aproximadamente entre 1 KHz y 4 KHz..
Figura 2.3. Membrana basilar "estirada"
Frecuencias diferentes en la entrada de sonido causan que diferentes reas de la membrana
basilar vibren. Cada rea tiene diferentes terminaciones nerviosas para permitir discriminar
el tono. El comportamiento resonante de la membrana basilar es un paralelo exacto con el
comportamiento de un analizador de espectros; la parte de dicha membrana que resuena
como resultado de la aplicacin de un sonido es una funcin de la frecuencia.
Segn estudios realizados por Bark y Mel [MMO95], encontraron una relacin no lineal
entre la frecuencia entrante al odo y la que ste realmente percibe. Tales estudios se
resumen en dos ecuaciones empricas que relacionan estas dos frecuencias:
( )
2
2
7500
arctan 5 . 3
100
76 . 0
arctan 13
f f
f f
bark
+ = (2.1)
15
700
1
log 2595
f
f
mel
+
= (2.2)
Donde esta ltima es la ms usual en aplicaciones del tratamiento de la voz. A partir de esta
concepcin caprichosa adoptada por nuestro odo, es posible desarrollar un banco de filtros
que analice la seal de voz, no en una escala lineal, sino usando las escalas de Mel. La
respuesta en frecuencia del banco de filtros de Mel se muestra en la figura 2.4.
Figura 2.4: Banco de filtros de escalas de Mel
2.4 Audiometra
Es un conjunto de pruebas para medir la audicin, se lleva a cabo de dos formas [Mar99]:
Va area: Se llama de esta manera cuando se evala la habilidad para or sonidos
transmitidos a travs del aire. Se usan unos auriculares para presentar los sonidos.
Va sea: Evala la capacidad para or el sonido a travs de los huesos de la cabeza. Se usa
un altavoz especial que transmite vibraciones.
La audiometra convencional suele usar tonos puros. Un tono puro se compone de una
nica frecuencia de estimulacin. Se suelen utilizar las frecuencias correspondientes a las
octavas comprendidas entre 125 y 8000 Hertzios o Hz (125, 250, 500, 1000, 2000, 4000 y
8000 Hz), en total 8 frecuencias. Las frecuencias medias, es decir, las comprendidas entre
500 y 2000 Hz, son las ms importantes para la audicin de la palabra ya que en dicho
rango se sitan la mayora de los fonemas que componen la voz humana.
La audiometra se realiza mediante la utilizacin de un aparato electrnico denominado
audimetro. Dicho aparato se compone de un generador de estmulos que son transmitidos
al individuo a travs de unos auriculares aplicados estrechamente al odo, o un vibrador
aplicado al hueso situado inmediatamente detrs del mismo (mastoides).
En cualquier audiometra se van a realizar dos tipos de mediciones. Por un lado vamos a
estudiar el umbral audiomtrico a travs de la va area, esto es, utilizando el auricular
aplicado al pabelln auditivo, y por otro a travs de la va sea, mediante la aplicacin de
un vibrador al hueso de la mastoides.
En el primero de los casos, el ruido debe transmitirse a travs del conducto auditivo externo
(donde se forman los tapones de cera), a travs del odo medio (donde estn los huesecillos
ms pequeos del cuerpo), y del odo interno, ms conocido como caracol, hasta llegar al
16
nervio auditivo y al cerebro. En el caso de la estimulacin por va sea se prescinde tanto
del odo externo como del medio, producindose una estimulacin directa del odo interno a
travs de los huesos del crneo.
Para realizar una audiometra, bien mediante la estimulacin area (con auriculares) u sea
(con vibrador), se introduce normalmente a la persona en una cabina aislada acsticamente,
de forma que el ruido de estimulacin no se mezcle con el ruido ambiente de la sala de
exploracin. Seguidamente se le van presentando al paciente correlativamente ruidos (tonos
puros) de diferentes frecuencias, como hemos mencionado anteriormente, comprendidas
entre 125 y 8000 Hz. El explorador solicita a la persona que es explorada que levante la
mano o bien apriete un indicador cuando oiga, por poco que sea, cada una de las
estimulaciones, de forma que para cada una de las frecuencias vamos obteniendo su umbral
auditivo.
La audiometra se representa en una grfica llamada audiograma la cul viene definida por
un eje de ordenadas dividido en intervalos de 10 dBs. y un eje de abscisas donde se sitan
los diferentes tonos que utilizamos para estimular, desde los ms graves (125 y 500 Hz)
hasta los ms agudos (4000 y 8000 Hz). Una vez realizadas las 8 mediciones, stas se
anotan en el audiograma (ver figura 2.5).
Figura 2.5 Audiograma
La audiometra es normal cuando cumple dos premisas:
Todos los umbrales audiolgicos se sitan en todas las frecuencias por debajo de los
20 dBs.
No hay una diferencia superior a 5 dBs. entre las respuestas obtenidas mediante la
estimulacin con los auriculares por va area y el vibrador seo.
17
Evidentemente la audiometra es anormal cuando no se cumple alguna de las dos premisas
anteriores. Si los umbrales se sitan por encima de 20 dBs estaremos hablando de una
prdida auditiva, o hipoacusia que podr afectar:
A las frecuencias graves (125-250 Hz).
A las frecuencias intermedias (500-2000 Hz).
A las frecuencias agudas (2000-8000 Hz).
A todas ellas (hipoacusia pantonal).
El grado de dicha prdida puede denominarse:
Leve (umbral entre 20 y 40 dBs.).
Moderada (umbral entre 40 y 60 dBs.).
Severa (umbral entre 60 y 80 dBs.).
Profunda (umbral mayor de 80 dBs.).
Cuando los umbrales en el audiograma se sitan por encima de los 20 dBs. las diferencias
de la conduccin sea y la va area nos van a permitir intuir que porcin, de todos los
elementos que intervienen en la audicin, no est funcionando de forma correcta.
2.4.1 Componentes de un audfono
Todos los audfonos (figura 2.6) constan de tres componentes importantes. Permanecen
juntos en una funda protectora que suele ser de plstico.
Figura 2.6 Audfono Intracanal
Micrfono El micrfono recoge los sonidos del aire y los convierte en seales
elctricas.
Amplificador El amplificador aumenta la intensidad de las seales del micrfono.
Los filtros modifican los sonidos de modo que slo se amplifican aquellos que son
importantes para la persona.
Altavoz El tercer componente bsico es el "altavoz" (receptor). Convierte las seales
elctricas en acsticas, que la persona puede or.
18
Microordenador Estos tres componentes se encuentran en todos los audfonos.
Adems, en los audfonos digitales, por ejemplo, se puede programar un
microordenador para manipular las seales y adaptarse a la prdida de audicin de
la persona con una deficiencia de audicin en particular.
Algunos audfonos estn equipados con controles de volumen y otras funciones de
control, que se pueden utilizar para realizar ajustes individuales.
19
Captulo 3
TRANSFORMADA WAVELET
3.1 INTRODUCCIN
Durante la ltima dcada, la transformada wavelet ha sacudido las matemticas aplicadas y
la investigacin en ingeniera, demostrado ser de gran utilidad como herramienta de
procesamiento. El inters en la transformada wavelet ha aumentado conforme las
aplicaciones se han hecho ms numerosas y se est convirtiendo en parte de los futuros
estndares en el anlisis de seales y compresin de imagen y video. La teora de las
wavelets es una herramienta matemtica reciente, basada en la Teora de Conjuntos y la
representacin en funciones integrables cuadrticas, que permiten presentar una seal o un
campo tanto en escala, espacio y posibles direcciones [Jal00].
La Transformada Wavelet es tambin conocida como el microscopio matemtico
[ADJ03], que tiene como antecedente la Transformada de Fourier, la cual es til cuando se
estudian seales con propiedades estadsticas constantes en el tiempo o en el espacio, dado
que sta representa una seal como una superposicin de sinusoides (con duracin infinita
en el tiempo), con diferentes frecuencias, donde los coeficientes de Fourier miden la
contribucin de las sinusoides a esas frecuencias. De forma similar, la transformada de
wavelet representa una seal como una suma de wavelet con diferentes localizaciones y
escalas. Los coeficientes de wavelet esencialmente cuantifican la fuerza de la contribucin
de las wavelets a esas localizaciones y escalas, su caracterstica principal es la multi-
resolucin, lo que permite el cambio de escala, constituyendo un medio adecuado para el
anlisis de seales no estacionarias, sobre todo aquellas que presentan transiciones
abruptas.
Sin embargo, las seales reales tienen usualmente propiedades estadsticas que cambian con
el tiempo y parece ms natural emplear funciones localizadas o wavelet para representar
estas seales en lugar de funciones seno y coseno. De esta manera, la representacin de
seales no estacionarias como suma de un conjunto de funciones base localizadas
20
temporalmente permite obtener una representacin ms compacta y precisa de las
propiedades de la seal que la obtenida utilizando series de Fourier.
Existen dos tipos de wavelet: las continuas y las discretas. El tratamiento con wavelet
discretas analiza la seal a diferentes bandas de frecuencia con diferentes resoluciones al
descomponer la seal en aproximaciones y detalles, empleando para ello dos conjuntos de
funciones: las funciones de escalamiento y las funciones wavelet respectivamente, sta
permite una aplicacin directa a procesos computacionales. Las wavelet continuas
presentan por una parte la dificultad de su manejo al tener que evaluar un gran nmero de
integrales y tener en consecuencia una redundancia de informacin, pero por otra parte
permiten la flexibilidad de poder adaptarse a situaciones en las que las discretas no dan un
resultado satisfactorio.
Algunas propiedades de las wavelet son las siguientes:
Las wavelet son bloques constructores de funciones. Es decir, podemos expresar
cualquier funcin f en trminos de wavelet.
Las wavelet tienen localizacin espacial y de frecuencia.
Con las wavelet es posible implementar algoritmos rpidos de clculo para la
transformada. Esto es ms practico que terico.
3.2 Repaso de la Transformada de Fourier
La Teora de Wavelet trabaja de manera similar que la Teora de Fourier, la cual dice que
una seal se compone de una serie de funciones sinusoidales y de sta forma es ms
sencillo su anlisis. Recordando un poco, la Transformada de Fourier (FT) de la seal x(t)
est definida por la ecuacin 3.1 :

= dt e t x f FT
ft i 2
) ( ) (
(3.1)
La transformada de Fourier trabaja bien si la seal x(t) est compuesta de unos cuantos
componentes estacionarios [ALA03], pero se puede observar en FT(f) se ha perdido
totalmente la dependencia temporal de la seal original, es decir, no tenemos informacin
del instante de tiempo en el cual un acontecimiento determinado ocurre en la seal, lo
implica una gran falencia ante la necesidad de analizar una seal no estacionaria como la
voz. Para contrarrestar estas desventajas se ha modificado la Transformada de Fourier
dando origen a lo que es la Short Time Fourier Transform (STFT) tambin conocida como
la transformada de Gabor. La STFT aplica una funcin g(t) utilizada como ventana de
anlisis que se mueve sobre x(t) para determinar el espectro en cada instante de tiempo, ver
figura 3.1 y 3.2. La expresin que nos permite este anlisis es:

= dt e b t g t x f b STFT
ft i 2 *
) ( ) ( ) , (

(3.2)
Donde el parmetro b indica la posicin en el tiempo en la que se hace el anlisis y *
denota el complejo conjugado. La desventaja que presenta esta transformada es que la
ventana de anlisis es de un tamao fijo (figura 3.1), por lo existe un lmite de precisin y
resolucin y por eso no puede adaptarse a las caractersticas de la seal en ciertos puntos
21
interesantes de analizar, ya que puede proveer poca informacin espectral o en algunos
casos redundar en esta informacin. Por ejemplo, cuando la ventana est ubicada en el
instante de tiempo T = 0, la STFT puede determinar con precisin la frecuencia de la seal
presente en este segmento, dado a que la longitud de la ventana abarca ms de un perodo
completo (Figura 3.2a), sin embargo, cuando la ventana se ubica en T = T1, no se logra
abarcar un perodo completo, y por ende no es posible determinar con precisin el
contenido de frecuencia de este segmento de tiempo (Figura 3.2b).
En pocas palabras, la STFT puede resolver con buena resolucin el contenido de altas
frecuencias pero es incapaz de hacerlo para regiones que involucren frecuencias ms bajas
de lo que permita la longitud de la ventana, es as como, para un anlisis de mejor
resolucin frecuencia-tiempo, se prefiere emplear un tipo de transformada que presente una
longitud variable de la ventana, tal es el caso de la Transformada Wavelet [Hur02b].
Figura 3.1: Desplazamiento de ventana para la STFT

(a) (b)
Figura 3.2: Inconvenientes de la STFT
Por lo visto anteriormente es que ha cobrado tanta fuerza la Teora de las Wavelet, dado
que mantiene las ideas principales de un anlisis tiempo-frecuencia utilizando una ventana
de anlisis diferente.
3.3 Qu son las wavelet?
Las wavelet son un conjunto de familias de funciones ortonormales bsicas que no
requieren ser de duracin infinita, por lo que se dice que son ondas localizadas y su
comportamiento en el dominio de la frecuencia equivale a un banco de filtros pasa-bandas,
examinando a la seal de inters para obtener sus caractersticas de espacio y tamao
[Teo98]. La caracterstica de las wavelet es la posible dilatacin o contraccin (figura 3.3),
que consiste en la variacin de un parmetro a llamado factor de escala, en la funcin
generadora de la wavelet, alargando su duracin en el tiempo y modificando su amplitud, lo
que permite modificar su respuesta en frecuencia y se define por:
22
|
.
|

\
|
=
a
b t
a
t
b a

1
) (
, (3.3)
donde a, bR, a 0 y ) (t es la wavelet madre, que se considera una funcin pasa
banda, a esa funcin madre se le agregan un par de variables que son la escala a que
permite hacer las dilataciones y contracciones de la seal y la variable de traslacin b, que
nos permite mover a la seal en el tiempo. Estas variables son nmeros reales y obviamente
para una escala de a= 0 la wavelet no existir y el anlisis se indeterminar.
1 ); ( ) ( = = a t t f
2
1
); 2 ( ) ( = = a t t f
4
1
); 4 ( ) ( = = a t t f
Figura 3.3: Izquierda wavelet a diferentes escalas, derecha traslacin de wavelet
La Wavelet ) (t debe satisfacer las siguientes condiciones:
1. Ser una seal de energa, <

dt t
2
) ( .
2. Exhibir una pequea oscilacin, de tal forma que tenga media cero.
Existe un sin nmero de funciones ( ) t que cumplen las condiciones anteriormente
mencionadas, de las cuales las ms sobresalientes fueron desarrolladas por cientficos
como: Alfred Haar, Ingrid Daubechies, Jean Morlett, Ronald Coifman, Yves Meyer, entre
otros. En la figura 3.4 se muestran algunas.
El objetivo primordial de la Transformada Wavelet, es el representar una seal o funcin
x(t), como la combinacin lineal de un nmero infinito de wavelet escaladas (dilatadas o
contradas) y desplazadas a lo largo de toda la seal [MYG97],
3.4 Transformada Wavelet
Las Transformadas Wavelet Comprenden la Transformada Continua de Wavelet y la
Transformada Discreta de Wavelet. Estas son las herramientas matemticas que permiten el
anlisis de seales de manera muy similar como lo hace la Transformada de Fourier de
0 5 10 15
-1
0
1
2
0 5 10 15
-2
-1
0
1
0 5 10 15
-2
0
2
23
Tiempo Corto dando informacin en el dominio del tiempo y en el dominio de la
frecuencia.

Wavelet Haar Wavelet Mexican Hat
Wavelet Daubechies de orden 5
Wavelet symmlet de orden 2 Wavelet Coiflet de orden 1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
-1.5
-1
-0.5
0
0.5
1
1.5
-8 -6 -4 -2 0 2 4 6 8
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
0 1 2 3 4 5 6 7 8 9
-1.5
-1
-0.5
0
0.5
1
1.5
0 0.5 1 1.5 2 2.5 3
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
1.2
1.4
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
-0.5
0
0.5
1
1.5
2
24
Wavelet Daubechies 8 Wavelet Morlet
Figura 3.4: Graficas de algunas wavelet madre.
3.4.1 Transformada Wavelet Continua (CWT)
La Transformada Wavelet Continua es un operador lineal que asocia un nmero real o
complejo, a una seal de energa finita, con una funcin particular

denominada
wavelet madre, una vez seleccionado el instante y la escala de observacin. Permite as
analizar estructuras de la seal que dependen del tiempo y de la escala, siendo una
herramienta til para detectar, caracterizar y clasificar seales con caractersticas
espectrales extravagantes, contenidos transitorios y otras propiedades relacionadas con la
falta de estacionariedad.
Sea x(t) una seal del espacio L
2
(R) y

una wavelet madre, para la que ms tarde se darn


especificaciones. Las denominadas wavelet analizadoras se construyen partiendo de

,, realizando sobre ella operaciones de traslacin en el tiempo y dilatacin, de forma que


la posicionan y la dilatan hasta conseguir el efecto de anlisis deseado.
Para a, b R, a > 0, se define la familia de funciones de test o de wavelet analizadoras en
la forma:
|
.
|

\
|

=
a
b t
a
t
b a

1
) (
, (3.4)
Los coeficientes de la transformada wavelet de la seal x(t) respecto de la wavelet madre

son los productos escalares de x con las funciones de test:


|
.
|

\
|

= = dt
a
b t
t x
a
x b a CWT
b a x
*
,
) (
1
, ) ; , (
(3.5)
El parmetro b desliza la wavelet en busca de informacin local y el parmetro a
controla el tamao de la wavelet (a0), de forma que cuando a tiende a 0, se obtiene algo
parecido a un zoom del comportamiento de la seal x(t) en torno al instante t = b, la
variable de escala a puede ser vista como a = f / fo donde fo denota la frecuencia central
0 5 10 15
-1.5
-1
-0.5
0
0.5
1
-8 -6 -4 -2 0 2 4 6 8
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
25
de la wavelet. De esta manera tendremos que la ecuacin (3.5) se puede expresar tambin
de la siguiente manera:
( )


|
|
.
|

\
|
= = dt b t
fo
f
t x
fo
f
x b f CWT
b a x
*
,
) ( , ) ; , (
(3.6)
De esta forma esta transformada permite la representacin de la seal x(t) en el plano
tiempo escala.
Lo siguiente es explicar como: la CWT transforma la seal de un dominio a otro que
depende de 2 variables. La variable escala lleva en si la informacin de la dilatacin y la
contraccin de la seal (figura 3.5), pero podra verse desde otro punto de vista donde lo
que cambia es la frecuencia y con ello al dilatarse, la frecuencia se reduce y al contraerse, la
frecuencia aumenta. Aqu es justamente donde se aprovecha est caracterstica de las
wavelet para obtener la informacin de la seal y conocer sus componentes de frecuencia.
En el dominio del tiempo el anlisis es ms sencillo ya que la variable de traslacin tiene la
informacin de tiempo (figura 3.6), pues nos indica en que lugar del eje del tiempo, se
encuentra la wavelet. De este modo se van completando los datos en forma de una matriz,
donde para cada integral que resolvamos tendremos un punto del plano traslacin-escala,
que es equivalente a tener la informacin en el plano tiempo-frecuencia [Her03].
Es importante aclarar que el proceso de transformacin de una seal es reversible debido a
que se preserva la energa de la seal, lo que se conoce con el nombre de Transformada
Wavelet Inversa Continua (ICWT), que est dada por la ecuacin 3.7:

(
(
(
(

|
.
|

\
|
=

dbda
a
a
b t
b a CWT
C
t x
2
) , (
1
) (

(3.7)
donde la constante

C (denominada condicin de admisibilidad) depende slo de la


funcin wavelet madre ) (t , de acuerdo con:

< = d C
1
2
) ( 2
(3.8)
Sin embargo la Transformada Wavelet de Tiempo Continuo no se presta para aplicaciones
prcticas donde las seales se representan de manera discreta.
26


Figura 3.5: Variable escala
3.4.2 Transformada Wavelet Discreta (DWT)
Partiendo de la ecuacin (3.3) la DWT emplea valores para a y b, en una escala de
potencias de dos denominada didica (a = 2
-k
y b = n2
-k
), permitiendo expresar la
transformada en un banco de filtros de octavas. La DWT se define sobre una secuencia de
subespacios cerrados Vj, (j= 0, 1, ...,J), tales que
0 1 1
... V V V V
j j


, siendo V0 = l
2
(Z)
el espacio de secuencias de nmeros enteros de cuadrado sumable [VK95]. Estos
subespacios Vj son completos y satisfacen la propiedad, Vj = l
2
(Z), j[0,J]. La
descomposicin multiresolucin de una seal xn se deriva asumiendo que cualquier
elemento en Vj se puede representar de manera nica como la suma de dos elementos de los
subespacios Vj+1 y Wj+1, siendo Vj = Vj+1 Wj+1. Si existe una secuencia
n
g V0 tal que
{ }
Z k k n
g
2
es una base de V1, entonces existe una secuencia
n
h V0 tal que { }
Z k k n
h
2
es
una base de W1, y V0 se descompone como: V
0
= W
1
W
2


W
j
V
j
simplemente iterando la ley anterior de descomposicin J veces. En el caso de estar
definiendo el concepto de multiresolucin por medio de wavelets ortogonales, Wj+1 se
define como el complemento ortogonal de Vj+1 en Vj.
27

(a)

(b)
Figura 3.6: Proceso de anlisis en diferente escala y traslacin.
(a) escala fija a 1 y traslacin variante, (b) escala fija a 20 y traslacin variante.
28
Lo atractivo de esta transformada es que el desarrollo en serie de wavelet conduce a una
estructura de descomposicin multiresolucin por medio de un eficiente algoritmo de
clculo basado en la implementacin piramidal de un banco de filtros. El banco de filtros de
anlisis o descomposicin calcula los productos escalares con las funciones bases de los
subespacios W1, W2, ..., WJ y VJ. As, la secuencia de entrada se descompone en una
componente o aproximacin en el subespacio VJ y una serie de detalles en los subespacios
Wj (j= 1, 2, ..., J)[Per01].
La DWT permite realizar lo que se denomina Anlisis de Multiresolucin (MRA), que
consiste en estudiar la seal empleando por cada componente de frecuencia una resolucin
diferente. Esto es una alternativa ms sobre la STFT que analiza todas las componentes de
frecuencia a una misma resolucin (seccin 3.2). En general, las ventajas que ofrece este
mtodo es que, con el uso de wavelet, a altas frecuencias (bajas escalas) se tiene una buena
resolucin en tiempo y poca resolucin en frecuencia, informacin detallada o parmetros
escondidos en la seal (que usualmente ocurren en periodos cortos de tiempo), mientras que
para bajas frecuencias (grandes escalas) corresponden a informacin global de la seal y los
resultados requieren buena resolucin en frecuencia y poca resolucin en tiempo [Pol96],
como se aprecia en la figura 3.7.

Figura 3.7:. Plano de Tiempo-Frecuencia analizado con la TW
Mientras que para la STFT las ventanas seran de igual dimensin para todos los casos ya
que para ese anlisis no se dilatan ni se contrae, ver figura 3.8(a), lo que representa una
ventaja de la WT sobre la STFT, ya que se puede tener mayor detalle del comportamiento
de la seal, dada la resolucin que se puede alcanzar.

(a) (b)
Figura 3.8: Planos Tiempo-Frecuencia para (a) STFT (b) TW
29
3.4.2.1 Transformada Wavelet Rpida (FWT)
La transformada discreta wavelet unidimensional (1-D DWT) se puede calcular por medio
de la Transformada Wavelet Rpida (FWT) o algoritmo piramidal desarrollado por Mallat
[Mal89] (figura 3.9), la cual es una implementacin computacionalmente eficiente donde
su costo computacional es ) (L (siendo L la longitud de la seal de entrada).
La Transformada Wavelet Rpida (FWT) descompone una seal en sus secuencias de
aproximacin y detalle en diferentes niveles u octavas (figura 3.10a). El clculo de la
transformada wavelet se inicia con una seal de entrada, a
(0)
n
. Sean a
(i-1)
n
y d
(i-1)
n
sus
secuencias de aproximacin y detalle en el nivel de descomposicin i-1, respectivamente.
La aproximacin y detalle de la seal en el nivel i se definen como:

=
1
0
) 1 (
2
) (
N
k
i
k n k
i
n
a g a
Filtro Pasa-Bajo (3.9)

=
1
0
) 1 (
2
) (
N
K
i
k n k
i
n
a h d
Filtro Pasa-Alto (3.10)
siendo g
k
y h
k
los coeficientes de los filtros paso baja y paso alta de orden N,
respectivamente (figuras 3.9 , 3.10(a)).
Las ecuaciones (3.9 y 3.10) describe el clculo de la Transformada Wavelet Rpida. Los
coeficientes de los filtros se obtienen a partir de la representacin de la wavelet madre en
tiempo continuo.
La resolucin de las diferentes aproximaciones
) (i
n
a as obtenidas disminuye al aumentar i.
Puesto que las seales
) (i
n
a (i = 1, 2, ..., J) representan a la seal original en varias
resoluciones, la FWT tambin se conoce como una tcnica de descomposicin
multiresolucin de seales, esta estructura recibe el nombre de banco de filtros de anlisis,
el proceso consiste en una serie de filtrados repetitivos usando el concepto de diezmado, es
decir, al principio se utiliza un filtro pasa bajas y otro pasa altas con frecuencia de corte de
la mitad de la mxima componente de frecuencia de la seal a analizar, posteriormente la
salida de ambos filtros se vuelve a enviar a otro par de filtros de las mismas caractersticas,
la frecuencia de corte del segundo filtro es la mitad de la mxima componente de
frecuencia de la seal que va a entrar a ese filtro, ver figura 3.11. De ste modo se va
reduciendo el ancho de banda y eso se traduce en la reduccin a la mitad de la resolucin,
lo que significa que a mayor nmero de etapas de filtrado se tendr una mayor resolucin a
baja frecuencia.
La seal de entrada
) 0 (
n
a se puede reconstruir a partir de su descomposicin multiresolucin
de acuerdo con:
{ }

+ =
k
k n
i
k k n
i
k
i
n
h d g a a
2
) (
2
) ( ) 1 (
(3.11)
Esta ecuacin describe el banco de filtros de sntesis, que consta de un filtro paso baja y
otro paso alta de coeficientes
n
g y
n
h , respectivamente, y que se encuentran fijados por las
condiciones de reconstruccin perfecta [VK95] y de la wavelet madre en tiempo continuo.
La figura 3.10(a)(b) muestra un diagrama de bloques de los bancos de filtros de anlisis y
sntesis respectivamente.
30
Figura 3.9: Transformada Wavelet Rpida (FWT) o Algoritmo de Mallat
(a)
(b)
Figura 3.10. Diagrama de bloques de la descomposicin multiresolucin de una
seal por medio de la transformada wavelet. (a) Banco de anlisis y (b) sntesis.
Resulta interesante evaluar el nmero de operaciones de filtrado que se deben realizar por
cada muestra de la entrada
) 0 (
n
a . Ntese que los bancos de filtros de anlisis y sntesis
conllevan exactamente el mismo nmero de operaciones. La seal de entrada
) 0 (
n
a se utiliza
como entrada de los dos filtros y de la salida de estos dos filtros slo se utiliza una de cada
dos muestras debido a la decimacin por 2. De esta manera, la primera pareja de filtros slo
31
realiza 2(1/2)= 1 operaciones de filtrado por cada muestra de entrada. En el segundo nivel
de descomposicin y puesto que la frecuencia de la seal
) 1 (
n
a es la mitad de la frecuencia de
la seal de entrada, slo se realizan operaciones de filtrado por muestra de entrada.
Extendiendo este desarrollo se determina que el nmero de operaciones de filtrado por cada
muestra de entrada est acotado superiormente por 1+1/2+1/4+..... = 2.
Figura 3.11: Respuesta en frecuencia del banco de filtros Wavelet
3.4.2.2 Algoritmo Transformada Wavelet Rpida (FWT)
La 1-D DWT se puede implementar por medio del algoritmo piramidal (PA:Pyramid
Algortithm) desarrollado por Mallat [Mal89]. Dada una secuencia x(n) de longitud L, este
algoritmo se define mediante:
Inicio {Algoritmo Piramidal Directo}
Para (i = 1 a J )
Para (n = 1 a 2
J-i
)

=
1
0
) 1 (
2
) (
N
k
i
k n k
i
n
a g a
Filtro Pasa-Bajo

=
1
0
) 1 (
2
) (
N
K
i
k n k
i
n
a h d
Filtro Pasa-Alto
Fin {Algoritmo Piramidal Directo}
Siendo ) (
) 0 (
n x a
n
= , L = 2
J
, con J representando el nmero de octavas, y N siendo la
longitud de los filtros paso baja y pasa alta.
32
Captulo 4
Sistema de Segmentacin
El sistema de segmentacin de seales tiene como objetivo identificar los segmentos de voz
sonoros, sordos y los tramos de silencio, utilizando transformada wavelet con el fin de
hacer un realce en la seal independiente del segmento identificado, por ejemplo, aumentar
algunas bandas de frecuencia para los sonidos sordos, no aumentar las vocales en lo
absoluto y reducir por completo los segmentos de ruido y de silencio. La Transformada
Wavelet juega un papel muy importante en el planteamiento de este proyecto ya que
autores como Tan et al. [TLS94] y Long y Datta [LD96] han mostrado que los fonemas
correspondientes a sonidos sordos se relacionan con las escalas de mayor resolucin, en
cambio, los fonemas sonoros, tales como las vocales, con las escalas de menor resolucin,
El sistema de segmentacin propuesto que se plantea en el Apndice D del proyecto de
investigacin 195 de la Universidad del Quindo [Hur03] figura 4.1, se basa en utilizar la
DWT con la wavelet madre que mejor se ajuste a las caractersticas de la seal para
descomponerla en cuatro niveles o sub bandas y hacer una identificacin entre fonemas
sonoros, sordos y tramos de silencio o ruido. El mtodo para la segmentacin y
clasificacin de los fonemas en tiempo real consiste en capturar bloques de 64ms que
equivalen a 512 datos, y analizar pequeos sub-bloques de 4ms de longitud
correspondientes a 32 muestras por medio de una FWT, hacer una clasificacin mediante
reglas de seleccin, las cuales se obtienen mediante un estudio de evolucin de las energas
de cada uno de los niveles de descomposicin, para facilitar el proceso de segmentacin , la
informacin se suaviza por medio de un filtro de media mvil de 8 coeficientes. Una vez
identificado los segmentos de los fonemas se efecta un realce en las diferentes bandas de
descomposicin segn el segmento identificado y se procede a recuperar la seal utilizando
la IDWT, la seal recuperada traer las caractersticas adecuadas para la escucha en una
persona con deficiencias auditivas.
A continuacin analizaremos la estructura del sistema de segmentacin, de la figura 4.2,
detallando cada uno de los bloques que comprenden dicho sistema, y su implementacin en
Matlab. Se ejecutaron simulaciones con frases de voz previamente almacenadas en formato
(.wav) con el fin de obtener las resultados adecuados que nos permitieron clasificar los
segmentos.
33
Figura 4.1 Sistema de Segmentacin de Seales Propuesto en el Proyecto 195.
Figura 4.2 Estructura del Sistema de Segmentacin
4.1 Implementacin del Sistema de Segmentacin de Fonemas en
MATLAB
Para el desarrollo del proyecto y la obtencin de los resultados deseados se efectuaron
simulaciones en MATLAB que obedecen al diagrama de flujo de la figura 4.3. Con
muestras de voz de diversos hablantes previamente capturadas de pequea longitud, las
cuales formaban frases que contenan entre de 3 y 5 fonemas tanto sonoros como sordos y
segmentos de silencio, se realiz el anlisis correspondiente y se establecieron las reglas de
seleccin adecuadas para segmentar la seal en 3 categoras diferentes de voz: sonidos
sonoros (vocales), sonidos sordos (consonantes) y segmentos de silencio o ruidos de fondo.
Extraccin de Caractersticas
Preprocesamiento Adquisicin
Captura
Seal de Voz
Pre-nfasis
Log
t

{ } exp
Normalizacin
Clculo de
Energas
DWT Wavelet
Denoising
Segmentacin
Identificacin
del Fonema
Realce de la Seal
Realce
d-1..d-8, a-8
Filtro
media
mvil
Extraccin de
caractersticas a
bloques de 32
muestras
Clasificador
d / dt
Detector
del
Segmento
d-1d-4
34
La implementacin y funcionamiento del programa en matlab se detalla a continuacin. La
seal de entrada X es un vector de cierta longitud, del cual se toman tramas de 512 datos
correspondientes a 64ms de la seal total, este se analiza independientemente de los otros
bloques teniendo en cuenta las ltimas N-1 muestras del bloque anterior para su
descomposicin por medio de la transformada wavelet y garantizando una continuidad de la
seal de entrada, siendo N el tamao de la respuesta al impulso en este caso la longitud de
la wavelet madre seleccionada, la figura 4.3 ilustra el esquema en la memoria del DSP de
los bloques de entrada a cada una de las etapas del banco de filtros wavelet, se descompone
la seal hasta obtener los coeficientes wavelet de la seal de voz de los 4 niveles de detalle
de mayor resolucin. Estudiando la evolucin de energas de cada uno de los niveles se
establecieron los criterios de segmentacin de cualquier seal de voz independiente del
hablante y de las condiciones de captura, una vez identificados los segmentos se efecta un
realce de la seal, dicho realce se produce por medio de un factor de escala sobre los
coeficientes entregados por el bloque wavelet denoising, es por esta razn que en el
diagrama de flujo de la figura 4.4 se divide en dos partes, ya que los coeficientes entregados
por la etapa wavelet denoising son utilizados para identificar los segmentos y realzar la
seal. Por conviccin este planteamiento en el diagrama de flujo no se puede plantear pero
es una forma muy simple de ilustrar el desarrollo del algoritmo.
El sistema de segmentacin de la voz de la figura 4.4 est conformado por 6 etapas
clasificadas de la siguiente manera:
Adquisicin de la seal de voz
Preprocesamiento
Extraccin de Caractersticas
Segmentacin
Realce de la seal
Recuperacin de la seal de voz
Figura 4.3. Esquema en memoria del vector de muestras a filtrar
N-1 muestras
anteriores
N-1 muestras
Primera captura
de muestras
512 Muestras ledas
N-1 muestras
anteriores
N-1 muestras
Segunda captura de
muestras
512 Muestras ledas
35
Figura 4.4 Diagrama de flujo de la simulacin en MATLAB
Lectura del
Archivo .wav
Conversin de
Fs a 8KHz
Ajuste de la Seal a un
Mltiplo de 512 Datos
Seleccin de
Bloque de 512
Datos
Filtrado de Pre-nfasis
Transformada Wavelet
Wavelet Denoising
Normalizacin
Clculo Energas
Sub-bandas
Reglas de
Seleccin
Realce de
la Seal
Transformada Inversa
Wavelet del Bloque
Concatenacin de Bloques
Conversin Seal a Formato .wav
FIN
INICIO
36
4.1.1 Adquisicin de la Seal de Voz
La seal de voz bsicamente est constituida por ondas de presin producidas por el aparato
fonador humano como se explic en el captulo 2. La manera ms apropiada de capturar
este tipo de seal se realiza mediante un micrfono, el cual se encargar de convertir la
onda de presin sonora en una seal elctrica. La siguiente etapa ser aquella que se
encargue de amplificar las seales a niveles que sean manejables. A partir de la seal
analgica obtenida se hace necesario convertir la seal a formato digital para poder
procesarla en la computadora, y se realiza mediante dos procesos: muestreo y
cuantificacin. Este proceso de dos etapas se conoce como Modulacin por Cdigo de
Pulsos (PCM). La mayor parte de los sonidos vocales tiene energa espectral significativa
hasta los 4khz, entonces la frecuencia de muestreo debe de ser por lo menos dos veces la
frecuencia mxima (segn el Teorema de Shanon), por lo que f
s
= 8 KHz, que corresponde
a la calidad telefnica.
Las muestras de voz fueron tomadas de diversos hablantes entre hombres y mujeres y en
diversos ambientes de ruido de fondo con el fin de establecer criterios en seales
producidas en diferentes medios, para ello utilizamos la tarjeta de sonidos del computador
que permite guardar las frases en formato .wav a una frecuencia de muestreo de 22050Hz
usando 8 bits por muestra para ser manipuladas en el entorno de matlab por medio de la
funcin [X,fs] = wavread (.wav) [MMOP07] la cual lee un archivo con extensin .wav, y
devuelve un vector X con los valores de amplitud de cada una de las muestras, y fs es la
frecuencia de muestreo de la seal. Debido a que la frecuencia de muestreo en el momento
de la captura es de 22050Hz debemos llevar a cabo una conversin a 8Khz ya que como se
mencion anteriormente, nuestra frecuencia de muestreo ptima es de fs = 8Khz, las
muestras de voz capturadas quedan almacenadas en una base de datos para su respectivo
anlisis, algunas se pueden ver en le tabla 4.1 teniendo en cuenta el anlisis de los fonemas
del captulo 2 seccin 2.2.
Fonemas Consonnticos
Fonema Ejemplo Clasificacin
B Bote Bilabial, Oclusivo
C Casa Velar, Oclusivo
Ch Pecho Palatal, Africado
D Donde Dental, Oclusivo
F Fama Labiodental, Fricativo
G Goma Velar, Oclusivo
H Jardn Glotal
J Paja Alveolar, Fricativo
K Queso Velar, Oclusivo
L Lana Alveolar, Semivocal
Ll Llave Palatal, Africativa
M Mam Bilabial, Nasal
N Nana Alveolar, Nasal
Lea Palatal, Nasal
37
P Papa Bilabial, Oclusivo
Q Queso Velar, Oclusivo
R Pero Alveolar, Vibrante
RR Carro Uvular, Vibrante
S Sopa Alveolar, fricativo
T Atar Dental, Oclusivo
V Nueve Fricativa
W Hueso Biobio-velar
X Paja Alveolar, Fricativo
Y Mayo Palatal, Fricativo
Z Caza Interdental, Fricativo
Fonemas Voclicos
Fonema Ejemplo Clasificacin
A A Central, Abierta
E E Anterior, Media
I I Anterior, Cerrada
O O Posterior, Media
U U Posterior, Cerrada
Tabla 4.1 Ejemplos de algunas muestras de voz previamente capturadas
4.1.2 Preprocesamiento
Esta etapa consta de un filtro de Pre-nfasis, un filtro FIR empleado en los sistemas de
reconocimiento para eliminar el ruido de la seal, reducir los efectos de volumen y
contrarrestar en cierto grado la atenuacin impuesta por el tracto vocal del hablante,
haciendo que el anlisis sea independiente de las condiciones de captura. Se usa un filtro
digital de primer orden cuya funcin de transferencia es [BR99]:
1
1 ) (

= az z H
(4.1)
Donde 0 < a 1, pero tpicamente se emplea un valor de a = 0:95 permitiendo una
amplificacin de 20dB para las componentes de alta frecuencia. Su implementacin en
Matlab se efecta por medio de la funcin de la convolucin entre la seal de entrada X y
H(z), su salida Y es un vector de la seal filtrada.
| |) 95 . 0 1 , ( = X conv Y
(4.2)
Como la seal se analiza por bloques de 512 datos, hay que tener en cuenta el ltimo dato
entregado del bloque actual para el anlisis del bloque siguiente, tcnica conocida como
solapamiento y suma [Hur02b]ver Figura 4.5.
38
Figura 4.5. Anlisis por bloque del filtro pre-nfasis
4.1.3 Extraccin de Caractersticas
Esta etapa involucra el anlisis de las seales de voz. Est compuesta por cuatro bloques
(figura 4.6) que nos permiten obtener el comportamiento o evolucin de las energas en los
diferentes niveles de descomposicin para determinar y clasificar los segmentos de voz.
Figura 4.6 Bloque de Extraccin de Caractersticas
4.1.3.1Trasformada Wavelet
El primer bloque consiste en descomponer la seal por medio de la Transformada Wavelet
en sus 4 niveles de mayor resolucin, para ello se hace uso del wavelet toolbox de MATLAB
el cual tiene embebida la funcin [C, L] = dwt ( X , w_name), que descompone la seal
de entrada X de longitud n igual a 512 datos (bloque de 64ms). Utilizando la wavelet madre
db8 de longitud 2N con N = 8 (ver seccin seleccin wavelet madre), en dos vectores C1,
L1 de longitud igual a 263 datos cada uno ( floor ((n-1)/2) + N ) asociados al nivel de
aproximacin y detalles respectivamente, se puede apreciar en la figura 4.7 un anlisis de
Trasformada
Wavelet
Wavelet
Denoising
Normalizacin Energas
Sub-banda
39
descomposicin en matlab [MMOP07], que para el segundo nivel de detalle y
aproximaciones C2 y L2, la seal de entrada corresponde a los coeficientes de
aproximaciones del primer nivel C1 de longitud 263 datos, dando como resultado los
vectores de detalle y aproximaciones del nivel 2 de longitud 139 datos cada uno, el
procedimiento se repite hasta obtener los 4 niveles de detalle y uno de aproximaciones de la
seal a analizar, como muestra la figura 4.8. Para los bloques de 512 datos siguientes se
deben de tener en cuenta las condiciones iniciales que corresponden a los ltimos N-1
datos del bloque anterior en el mismo nivel, ya que en el algoritmo de mallat se emplean
filtros FIR los cuales dependen de entradas anteriores. Por este motivo la longitud de los
coeficientes wavelet en cada nivel ser siempre mayor que la longitud de la seal
descompuesta. En la tabla 4.2 podemos observar el nmero de datos que se analizan por
cada nivel y las condiciones iniciales tenidas en cuenta para los siguientes bloques.
La seal de voz se descompone en 4 bandas de frecuencia (H1, H2, H3, H4), en la tabla 4.3
se presenta el rango de frecuencias de las 4 bandas con su respectiva frecuencia central en
las que se descompone la seal.
Figura 4.7 Anlisis de Descomposicin por nivel en Matlab
Figura 4.8 Descomposicin de un Bloque X = 512 datos de la seal en 4 niveles de detalle
y uno de aproximacin
X = 512 datos a
3
= 77
a
2
= 139
a
1
= 263
X
g(-n) 2
h(-n) 2
h(-n) 2
h(-n) 2
h(-n) 2
g(-n) 2
g(-n) 2
g(-n) 2
d
-2
= 128 datos
d
-3
= 64 datos
d
-4
= 32 datos
a
-4
= 32 datos
d
-1
= 256 datos
40
Nivel de Entrada # Coeficientes Entregados Coeficientes
Analizados
Condiciones Iniciales
sgte bloque
Ao = Bloque 512 A1 = 263 D1 = 263 D1 = 256 D1 = 7
A1 = 263 A2 =139 D2 = 139 D2 = 128 D2 = 11
A2 = 139 A3 = 77 D3 = 77 D3 = 64 D3 = 13
A3 = 77 A3 = 46 D4 = 46 D4 = 32 D4 = 14
Tabla 4.2 Nmero de coeficientes entregados por cada nivel de la wavelet con los
coeficientes que se analizan y los que sirven de condiciones iniciales para los siguientes
bloques
Nivel Frecuencia Mnima
(Hz)
Frecuencia Mxima
(Hz)
H1
H2
H3
H4
Tabla 4.3 Rango de frecuencias
4.1.3.2 Seleccin de la Wavelet Madre
Lo primero a tener en cuenta a la hora de realizar un anlisis wavelet es cul wavelet madre
utilizar ya que se hace necesario determinar la seal (t) que mejor se adapte al sistema;
para esto se hizo referencia al proyecto de investigacin 195 Reconocimiento de Voz en
Tiempo Real por medio de la Transformada Wavelet Y Procesadores Digitales de Seales
[Hur03a] realizado en la universidad del Quindo. Entre los criterios tenidos en cuenta
estn:
Mayor similitud con las muestras de las seales de voz. Bajo este criterio la wavelet
Haar se descarta debido a su gran diferencia con una seal de voz. La symlets son
bastante simtricas y las seales de voz son asimtricas, por lo tanto tambin se
descartan. As que solo quedan la Daubechies y la Coeiflet.
Menor carga computacional. Un orden alto de la funcin wavelet implica una
longitud mayor en los coeficientes de los filtros usados en el anlisis y por lo tanto
un costo computacional ms alto. Para las wavelets daubechies y symlets la longitud
de los filtros de anlisis hn y sntesis gn es 2N, donde N es el orden de la funcin
wavelet, en cambio para las coiflets, esta longitud se triplica ya que las longitudes
de dichos filtros son 6N. Por tal motivo fu descartada.
Se emple el mtodo de determinacin de la mejor base el cual hace uso de la
entropa de DWT, y el algoritmo de la seleccin de la mejor base, llegando a la
conclusin de emplear la Wavelet Daubechies de orden 8.
41
4.1.3.3 Wavelet Denoising
Es una tcnica mediante la cual se elimina el ruido ambiente de fondo y el producido por el
sistema de grabacin utilizado. Esta tcnica tiene la ventaja de que se incorpora
directamente dentro del algoritmo de clculo de la transformada y no requiere de demasiada
carga computacional. Para esto se realiza lo que se conoce como un soft-thresholding que
consiste en restar cierto umbral a los coeficientes arrojados por el clculo de la DWT de
cada uno de los niveles de descomposicin cuyo valor absoluto sea mayor a ste y llevar a
cero los coeficientes cuyo valor absoluto se encuentre por debajo. Para calcular el umbral
se capturan datos con el micrfono en ausencia de voz (ruido) y se hace uso de la siguiente
ecuacin [RB98]:
n
n
u
* log * 2
= (4.3)
donde:
u = Umbral.
n = Nmero de datos (tamao del ruido capturado).
2
= Varianza del ruido
En la tabla 4.4 se muestran los valores de umbral de ruido en cada una de las bandas
obtenidos haciendo uso de la transformada wavelet discreta de 8 niveles, es muy notorio la
reduccin de ruido utilizando el bloque wavelet denoising a la hora de recuperar la seal, si
se utiliza un umbral muy fuerte puede ocasionar prdidas de energa importante que
repercuten en la identificacin de los segmentos.
Nivel Umbral
Detalle 1 12.4 e -3
Detalle 2 6.1 e -3
Detalle 3 3.1 e -3
Detalle 4 1.9 e -3
Aproximacin 4 1 e -3
Tabla 4.4 Umbral de ruido para cada nivel
4.1.3.4 Normalizacin
Es de notar en el sistema que el bloque de normalizacin est antes del clculo de energas,
el cual emplea el logaritmo del valor absoluto de los coeficientes wavelet, la derivada
temporal, la integracin y la exponenciacin (ver figura 4.9), este conjunto de bloques
garantizan, para los parmetros extrados, una independencia del volumen de la seal.
( ) { } ( ) { } t f W A t Af W
g g
log log log + = (4.4)
( ) { }( ) ( ) { }( ) t s t Af W
t
t s t Af W
t
g g
, log , log

(4.5)
Al emplear el calculo del logaritmo del valor absoluto se logra una independencia del factor
de amplitud de la seal (Ec. 4.4), el cual puede ser eliminado por medio de la derivada
42
temporal al conjunto de datos (Ec. 4.5) logrando una independencia de amplitud de los
parmetros extrados, la derivada temporal en matlab se implementa por medio de un
derivador de primer orden dado por la ecuacin de recurrencia
| | | | | | 1 = n x n x n y (4.6)
y para la operacin de integracin un integrador de suma continua dado por la funcin de
transferencia [LF94]
( )
1
1
1

=
z
z H (4.7)
Tanto el derivador (ecu4.6) como el integrador (ecu.4.7) se pueden implementar en
MATLAB [MMOP07] por medio de la funcin Y = FILTER (bk, ak, x) teniendo en cuenta
como condicin inicial para el siguiente bloque de datos, el ltimo dato de cada uno de los
niveles de descomposicin ya que el derivador y el integrador dependen de la entrada (FIR)
y salida (IIR) anterior respectivamente.
Figura 4.9 Bloque de normalizacin
4.1.3.5 Energas Sub-bandas
Una vez obtenidos los coeficientes wavelet normalizados de cada uno de los 4 niveles de
detalle y 1 de aproximacin, procedemos a calcular la energa aportada por cada uno de los
niveles de detalle en los que se toman sub-bloques de 4ms que corresponden a segmentos
de 32 muestras para analizar la evolucin de la energa y establecer las reglas de seleccin
adecuadas, para este anlisis se utiliz la siguiente ecuacin:
( )

=
=
i
N
K
i i
k C Ebanda
1
2
(4.8)
Donde Ci son los coeficientes de la banda i, Ni es la longitud por banda y Ebanda
i
es un
vector de una longitud 16 datos que contiene la energa de la banda i por cada segmento de
32 datos (4ms) del total del bloque capturado de 512 datos (64ms), en la tabla 4.5 se puede
observar el nmero de coeficientes que aporta cada banda por bloque y por segmento para
el clculo de energa por cada nivel.
Nivel Datos Por
Bloque (64ms)
Datos Por Segmento
(4ms)
Detalle 1 256 16
Detalle 2 128 8
Detalle 3 64 4
Detalle 4 32 2
Aproximacin 4 32 2
Tabla 4.5 Nmero de Coeficientes de cada nivel en un bloque de 512 muestras de la seal
para el Clculo de las Energas

Log
t


{ } exp
Normalizacin
43
Una vez obtenidos los vectores de energa de cada uno de los niveles de detalle, y para
facilitar el proceso de segmentacin, la informacin se suaviza por medio de un filtro de
media mvil de 8 coeficientes, cabe recordar que cada vector tiene una longitud de 16 datos
en cada nivel y que corresponden a solo un bloque de 512 datos (64ms) de la seal, es decir
un dato en cada vector equivale a la energa contenida en un segmento de 32 muestras
(4ms) por banda.
4.1.4 Reglas de Seleccin
En esta seccin se describen una serie de pruebas, que fueron llevadas a cabo de cara a
realizar la segmentacin de las frases componentes de la base de datos de una manera
automtica. El objetivo de dichas pruebas, era el de evaluar la posibilidad de realizar la
segmentacin de fonemas de las frases componentes de nuestra base de datos de una
manera automtica (la segmentacin consiste en delimitar mediante etiquetas la posicin de
los fonemas dentro de las frases), con el fin de establecer reglas de seleccin que permitan
identificar el tipo de segmento. En efecto, debemos especificar que dicho proceso de
segmentacin es realizado manualmente (empleando herramientas de edicin de sonido
como, Sound forge 5.0 y Cool Edit Pro 2.0), para lo cual se debe escuchar una a una las
frases, y colocar las etiquetas que aislan cada uno de los fonemas de forma manual, estas
etiquetas se graban en un archivo de formato .phn con el mismo nombre del archivo .wav
que contenga la frase, el archivo .phn contiene el nmero de fonemas en la frase y el
posicionamiento de cada fonema (Tabla 4.6), no hay que olvidar que los valores obtenidos
de las etiquetas se toman de los archivos cuya frecuencia de muestreo es aproximadamente
22Khz y que se debe hacer la conversin a 8Khz, para ser visualizados (ver figura 4.10) y
poder observar el comportamiento de la energa entre fonemas de cada una de las bandas.
# de Fonemas Etiquetado Manual
4 Posicin Longitud
/m/ 544 2880
/a/ 3447 3734
/t/ 9856 540
/a/ 10440 3585
Tabla 4.6 Etiquetado Manual de la palabra mata
Claramente, este procesado manual requiere una gran cantidad de tiempo y adems, en
algunos casos, lleva asociado tambin errores. Estos errores pueden venir derivados del
cansancio que este trabajo implica, por esta razn se produce errores de criterio en la
segmentacin.
En total se dispuso de un conjunto de 108 archivos .wav con frases que contenan de 3, 4 y
5 fonemas que mezclaban sonidos sonoros, sordos y segmentos de silencio, como tambin
archivos con slabas que mezclan las consonantes con las vocales por ejemplo el archivo
B.wav contiene la seal ba be bi bo bu, para concluir las simulaciones se tomaron frases
con ms de cuatro palabras de cara al entrenamiento del sistema. Hay que tener en cuenta
que por trabajar el sistema con una frecuencia de muestreo de 8Khz, fue necesario
convertir la frecuencia de muestreo de todas las frases de 22Khz a 8Khz, como tambin el
44
posicionamiento manual de las etiquetas, esto se realiz con lneas de cdigo en el
programa de matlab.
Figura 4.10 Palabra mata etiquetada
Para establecer las reglas de seleccin analizamos el comportamiento de la energa de las
cuatro bandas de descomposicin en las zonas donde se encontraba el etiquetado manual,
observando la evolucin de la energa de un segmento a otro, detallando el umbral de la
banda con mayor intensidad y en que porcentaje se encontraba por encima de las otras
bandas, estudiando los cambios de pendientes de las bandas tanto individual como en
conjunto, concluyendo as para cada tipo de segmento los siguientes aspectos:
Deteccin Segmento de Silencio:
En ausencia de voz se puede notar que en el nivel de detalle de mayor resolucin (d-
1
) la
energa es superior a la de los dems niveles o bandas y permanece constante en las 4
bandas con un umbral muy pequeo. Otra manera para identificar el segmento de silencio
consiste en analizar la intensidad de la energa, si esta no supera el umbral de 1e9 en la
banda de mayor intensidad, el segmento se identifica como silencio.
Para obtener una mayor exactitud en los segmentos de silencio analizamos tambin los
cambios de energa entre segmentos en cada banda o nivel de descomposicin, dndole un
valor dependiendo de la variacin como se muestra en la tabla 4.7, la variacin depende del
cambio de energa entre segmentos en cada una de las bandas por separado.
Valor Cambio de Energa
1
0
-1
Aumento de Energa
Energa Constante
Disminucin de Energa
Tabla 4.7 Cambio de energa entre segmentos por banda
0 1000 2000 3000 4000 5000 6000
-0.4
-0.3
-0.2
-0.1
0
0.1
0.2
0.3
0.4
0.5
/m/ /a/ /t/ /a/
45
Luego de realizar diferentes pruebas se concluy que en los segmentos en el cual la energa
permaneca constante en las cuatro bandas correspondan a segmentos de silencio. Para
determinar dicha regla de seleccin se suman los valores de cambio en cada banda por
segmento es decir que si en las 4 bandas la energa aumenta el segmento tendr un valor de
4, si da un valor negativo la energa diminuye y se aproxima el fin del segmento
dependiendo del cambio, cuando el segmento toma un valor de cero, se analizan las cuatro
bandas y si en todas las bandas la energa es constante es decir el cambio es igual a cero, se
detecta un segmento de silencio, la figura 4.11 ilustra la suma de las variaciones de energa
en las 4 bandas, notndose que la transicin entre el fonema /a/ y el fonema /t/ existen
segmentos de silencio, ya que los puntos son constantes en este tramo; en el caso en que
algunas de las bandas tengan un valor distinto se cero se analiza el umbral para determinar
el tipo de segmento.
Figura 4.11 Deteccin de segmentos de silencio en la palabra mata
Deteccin Segmento de Sonoro:
Para determinar un segmento que haga parte de un fonema sonoro es decir una vocal,
analizamos primero en comportamiento de la energa, en archivos que contenan solo
vocales, para esto se hizo referencia a la base de datos del proyecto 195(grupo GDSPROC )
que contiene las vocales pronunciadas por 42 hablantes entre hombre y mujeres,
logrndose apreciar un comportamiento gausiano con el tiempo en cada una de las vocales
con una intensidad fuerte comparada con la de los fonemas sordos, y notndose que
dependiendo de la vocal la banda predominante es distinta. Adems el umbral mximo que
alcanza la banda predominante es mayor a 1e16. Se puede notar que al inicio de cada vocal
la banda predominante aumenta considerablemente mientras que las restantes se
incrementan levemente, el fin de la vocal se presenta cuando todas la banda o bandas
predominantes van disminuyendo su valor de umbral comparado con el valor mximo
alcanzado, a continuacin se explica el comportamiento de la energa por vocal:
Vocal A: Predomina la energa de los niveles d-2 y d-3 con mayor intensidad, seguido
por el nivel de detalle d-1 que vara considerablemente segn el hablante,
0 1000 2000 3000 4000 5000 6000
0
20
40
60
80
100
120 /m/ /a/ /t/ /a/
46
entre el 20% y 80% con respecto a la banda de mayor intensidad, la energa
del nivel d-4 es muy pequea pero siempre mayor al 1%.
Vocal E: Se caracteriza el nivel d-1 como banda predominante, las tres bandas restantes
varan su energa con respecto a d-1 entre el 5% y el 50% independientemente
una de otra, siendo la banda d-2 el ms notorio y en algunos caso es
comparable con d-1 pero no mayor a este.
Vocal I: d-1 sobresale sobre las dems bandas, mientras que la energa de los niveles
d-4 y d-2 oscila entre 20% y el 60% con d-4 siempre mayor a d-2, la banda
d-3 varia su energa con respecto a d-1 entre 1% y el 30%, en algunos casos d-
2 y d-3 presentan la misma intensidad .
Vocal O: Predominan d-3 y d-4, en algunos casos la energa de todas las bandas son
iguales, mientras que en otros la energa de los niveles d-1 y d-2 son muy
leves con valores no mayores al 30% ni menores al 1%.
Vocal U: La bandas de mayor intensidad son d-4 y d-3 con un valor mayor de 1e15
siendo ligeramente menor el nivel d-3, los niveles d-2 y d-1 tienen valores
menores al 80% y mayores al 5% respectivamente.
En conclusin:
La principal caracterstica de los fonemas sonoros es la intensidad que aporta cada
una de las bandas por segmento con un comportamiento gaussiano y su duracin en
el tiempo es muy larga comparada con los fonemas sordos
La energa promedio por segmento es mayor a 1e13 y la banda predominante
depende de la vocal que se est analizando.
La vocal /i/ es de una energa pequea comparada con las otras vocales.
Un segmento que haga parte de una vocal existe aporte de energa en todas las
bandas a excepcin de la /i/ en algunos casos.
Para observar el comportamiento ideal de una vocal y el aporte de energa en cada
una de las bandas debe de ser pronunciada claramente de lo contrario se mezclar
con un segmento sordo debido al aporte de energa de cada una de las bandas.
Deteccin Segmento de Sordo:
Para analizar el comportamiento de las bandas de energa de un segmento sordo, extrajimos
de las frases, los segmentos de consonante independiente de la vocal que forma la silaba,
los archivos estudiados contenan la combinacin de las consonantes con las vocales dando
como resultado las siguientes caractersticas:
Fonema /b/
Grafa: b, v.
La banda predominante es el nivel de detalle d-4, con energa no mayor a
1e12 y el aporte de energa de las dems bandas es nulo cuando est
precedido de silencio, algunos casos se presenta leve de energa en d-3.
47
Si le antecede una vocal hay aporte de energa en todas las bandas con un
valor muy inferior al punto mximo de la vocal anterior alrededor 1e13.
El detalle d-1 es muy leve, en algunas ocasiones es nulo.
Fonema /d/
Grafa: d.
Predomina la banda d-4 con intensidad menor a 1e12, sin aporte de energa
en las dems bandas cuando est precedida de un silencio.
Cuando le antecede una consonante o vocal la banda predominante es la
misma con una intensidad mayor y existe cierto aporte en la banda d-3 en
casos excepcionales la banda d-2 aparece levemente.
d-1 es totalmente nulo.
Fonema /f/
Grafa: f.
Este sonido es de muy corta duracin y debido a la friccin de este fonema
se nota energa en el detalle d-1 o pequea energa en d-2 y d-3, en pruebas
realizadas algunos de los segmentos correspondientes a este fonema se
vuelven cero por el bloque wavelet denoising debido a que el sonido es muy
similar al producido por el micrfono.
Fonema /g/
Grafa: g, gu:
Para las slabas ga, go, gu, el nivel mximo es d-4 y la energa en las dems
bandas es cero, la transicin con otro fonema presenta un aumento notable
en las bandas d-2 y d-3, el detalle d-1 permanece en cero por varios
segmentos e incrementa su energa abruptamente.
En las slabas gue, gui, sobresalen los detalles d-1 y d-2, el cambio entre
fonemas ocurre cuando las bandas predominantes disminuyen y luego
aumentan abruptamente entre segmentos.
Fonema /j/
Grafa: j, g.
d-4 aparece como la banda predominante con una intensidad menor a 1e12,
se presentan casos donde aparece la banda d-2 con aporte de energa sin ser
mayor a d-4 y depende del fonema anterior o siguiente.
Fonema /k/
Grafa: c, qu, k.
Debido al carcter explosivo de este fonema, puede ser detectado como una
vocal, a diferencia de sta, este fonema es de una duracin mucho ms corta,
donde predominan las bandas d-1 y d-2 seguidas con un valor
aproximadamente del 25% con respecto a la banda predominante. En el
cambio de fonema, la banda de mayor energa cae por segmentos hasta el
punto en que pasa a predominar otra banda aumentando su energa entre
segmentos.
Fonema /l/:
Grafa l:
El nivel con mayor energa es el detalle d-4, con el nivel d-3 alrededor del
25% con respecto a d-4, cuando los niveles de mayor resolucin van
tomando valores por encima de 1e13 existe un cambio de fonemas.
48
Cuando el segmento anterior es una vocal, la intensidad es considerable
aunque ms pequea que el valor mximo del fonema anterior.
Fonema /ll/
Grafa: ll:
d-1 es la banda predominante con energa en todas la bandas siempre menor
a 1e13, un aumento de energa considerable o un cambio continuo de bandas
produce un cambio de fonema.
Fonema /m/
Grafa: m.
Predominan d-4 y d-3. Cuando le precede un silencio no hay energa en las
dems bandas.
Si le antecede una vocal, el nivel d-2 aparece con energa considerable y la
intensidad de d-4 y d-3 es aproximadamente el 10% del punto mximo de la
banda predominante de la vocal anterior.
Fonema /n/
Grafa: n.
Presenta el mismo comportamiento del fonema m.
Fonema //
Grafa: .
d-4 es la banda predominante con una intensidad no superior a 0.5e13, d-3
aporta energa variable de aproximadamente del 20% con respecto a d-4.
En el segmento que los niveles d-2 y d-1 empiezan a aparecer se trata de un
cambio de fonema.
Un cambio de banda predominante e incremento notorio entre un segmento y
otro de energa ocasiona tambin transicin de fonemas.
Cuando la antecede una vocal, el nivel mximo pasa a ser el detalle de
menor resolucin d-4 y los de mayor resolucin tienden a cero.
Fonema /p/
Grafa: p.
El fonema /p/ es de muy corta duracin y sobresalen las bandas d-2 y d-3
como las de mayor intensidad.
Algunos casos presenta aporte de energa en el detalle d-1 cuando le
antecede una vocal.
El cambio de fonema se presenta con un aumento notorio de la banda de
mayor intensidad o un cambio de esta con incrementos leves.
Fonema /r/:
Grafa: r.
Este fonema presenta un comportamiento muy aleatorio, ya que no hay una
banda que predomine sobre las otras en el momento de analizar las energas.
Cuando los segmentos anteriores pertenecen a un segmento de silencio, en
algunos casos, predomina d-1 y en otros d-4 con energa en las bandas
restante mayor al 60% de la banda predominante, si se presenta una
transicin entre [consonante/vocal] o [vocal/consonante] se nota un cambio
de la banda predominante como tambin la intensidad, ya sea una
disminucin o un aumento.
49
Fonema /s/
Grafa: s, c, z
Tiene un comportamiento muy distinto a las dems consonantes ya que la
banda predominante depende del segmento siguiente, por lo regular d-1,
mientras que las otras bandas son cero, la intensidad es pequea si la
antecede un segmento de silencio, pero si el segmento anterior es una vocal,
existe un aporte de energa en todas las bandas hasta disminuir quedando
solo el detalle d-1.
Fonema /t/
Grafa: t.
La banda de mayor intensidad es d-1.
A diferencia del fonema /p/ la duracin es un poco ms larga, tambin se
presenta energa en el nivel d-2.
Cuando le antecede una vocal es notoria la energa en el detalle d-4 y ms
intensa en las dems bandas.
Fonema /w/:
Presenta el comportamiento de un fonema sonoro, y depende en gran medida
del fonema siguiente con el que forma la silaba.
Fonema /x/
Grafa: j, g.
Tiene intensidad comparada con la de las vocales ms o menos entre 5e12 y
1e15 dependiendo de la vocal con que forma la silaba donde predominan las
bandas de mayor resolucin como son d-1 y d-2, en las dos bandas restantes
la energa es cero.
Transicin entre [consonante]/[vocal]:
Estos son algunos de los comportamientos que se presentan entre el cambio de una
consonante a una vocal, es de aclarar que estas reglas no son cien por ciento seguras a la
hora de identificar los segmentos y pueden presentar pequeos errores en la segmentacin.
Si al menos una de las bandas es aproximadamente constante por dos o ms
segmentos y se incrementa notoriamente en el siguiente se presenta un cambio de
fonema.
Cuando las bandas d-4, d-3 y d-2 aportan energa sin importar su intensidad y la
banda d-1 y/o d-2 es nula, se trata de una consonante. En el segmento que una de
estas bandas cobra una intensidad de energa mayor al 1% de la banda predominante
o pasa a ser la banda predominante se trata de una transicin entre consonante /
vocal.
Un cambio de la banda predominante entre segmentos, llevando consigo un
incremento de ms del 400% con respecto al segmento anterior ocasiona un cambio
de fonema.
Si se presenta un solo segmento de silencio, se produce un cambio de fonema.
La banda predominante se incrementa en ms de un 500%.
50
Transicin entre [vocal] /[consonante]:
El cambio de fonema entre vocal/consonante ocasiona que los niveles de energa en los
segmentos de consonante tengan una energa mucho mayor a cuando le antecede un
silencio, tomando valores de aproximadamente 1e13 en todas las bandas.
La banda de energa predominante llega a un punto mximo y empieza a
descender notoriamente entre segmentos, llegando a un valor por debajo del 5%
del punto mximo, se presenta el fin de la vocal y el comienzo de una consonante.
Si se presenta un cambio de banda y desciende el valor de la banda predominante
por debajo de 6e13 se presenta una consonante.
Cuando todas las bandas presentan energa en el segmento anterior y en el
siguiente alguna de las bandas no presenta energa, se trata de un cambio entre
vocal/consonante.
Si se presentan cambios continuos entre segmentos de la banda predominante y el
valor de intensidad no se altera notoriamente, se trata de un cambio de fonemas
sordos.
4.1.5 Realce de la Seal
El realce de la seal se efecta de una forma muy sencilla en la banda a la cual se desea
amplificar, esto depende de las deficiencias auditivas que pueda sufrir el paciente y se
realiza por medio de un factor de escala, que consiste en multiplicar en los segmentos
identificados, los coeficientes entregados por el bloque wavelet denoising con el factor
escala en la o las bandas deseadas. El factor de escala depende de la intensidad en la que se
desea, amplificar cada una de las bandas, el tipo de segmento identificado y el criterio
obtenido por el audilogo en los exmenes realizados. Todos los coeficientes wavelet que
hagan parte de los segmentos de silencio o ruido, son llevados a cero para que no
produzcan realce alguno y evitar molestias en el paciente o distorsin de la seal en los
segmentos adyacentes.
4.1.6 Transformada Wavelet Inversa
Finalmente, el algoritmo del sistema de segmentacin entre en la etapa donde se recupera la
seal por medio de la transformada wavelet inversa, una vez realizado el realce de los
diferentes niveles de detalles en los segmentos detectados del bloque de 64ms, utilizamos la
funcin embebida en el entorno de matlab que me permite obtener la transformada wavelet
inversa de cada nivel, recibiendo los coeficientes de detalle (d
n
) y de aproximacin (a
n
) del
nivel n y retornando los coeficientes de aproximacin del nivel n-1 (a
n-1
), La funcin es
expresada en el wavelet toolboox de matlab como a
n-1
= idwt (a
n
, d
n
, wname). Este
procedimiento se repite hasta recuperar la seal original como se muestra en la figura 4.12
los coeficientes utilizados son los entregados por el bloque wavelet denoisisng con el fin de
que al recuperar la seal, esta tenga una reduccin de ruido considerable.
51
Figura 4.12 Esquema de la Transformada Wavelet Inversa,
para recuperar un bloque de 512 datos.
Los coeficientes de detalle como el de aproximacin, son los entregados por el bloque
wavelet denoising completos, la salida corresponde a la seal recuperada con el respectivo
realce, el tiempo de duracin de X en segundos es 64ms. La figura 4.13 muestra la seal
recuperada de la palabra vaso sin ningn realce.
Figura 4.13 Seal de la palabra mata recuperada.
h(-n) 2
g(-n) 2
a
3
= 77 datos
a
2
= 139 datos
a
1
= 263 datos
X
g(-n) 2
h(-n) 2
h(-n) 2
h(-n) 2
g(-n) 2
g(-n) 2
d
-3
= 77 datos
d
-4
= 46 datos
a
-4
= 46 datos
X = 512 datos
0 1000 2000 3000 4000 5000 6000
-6
-4
-2
0
2
4
6
/m/ /a/ /t/ /a/
d
-2
= 139 datos
d
-1
= 263 datos
52
Captulo 5
Implementacin en el DSP
Como el sistema desarrollado en el entorno matlab no funciona en tiempo real, ya que las
muestras de voz han sido previamente almacenadas en archivos de audio (.wav) para luego
ser procesadas y reproducidas, se opta por implementar el sistema en un DSP (Digital
Signal Processor), el cual es un microcontrolador/procesador con gran capacidad de
procesamiento y almacenamiento. Un DSP puede ejecutar instrucciones a muy alta
velocidad y posee una memoria extensa tanto para datos como para programas y es una
excelente alternativa para ejecutar el sistema en tiempo real.
El sistema fue desarrollado sobre un procesador digital de seales de punto flotante
TMS320C6701 de la Texas instrumet, empleando para ello la tarjeta experimental
EVM67x. Para su programacin se emple el entorno de desarrollo Code-Composer Studio,
y el lenguaje de programacin C. Para este lenguaje se cuenta con un optimizador, el cual
reordena la ejecucin de las instrucciones y asigna las unidades aritmtico-lgicas del
trabajo, esto debido a las capacidades de procesamiento en paralelo con que cuenta el DSP.
Por fortuna se cuenta con una serie de herramientas computacionales desarrolladas dentro
del grupo de investigacin de Procesamiento Digital de Seales de la Universidad del
Quindo (GDSPROC) que estn a disposicin para trabajos futuros, que fueron de mucha
utilidad en la realizacin de este proyecto como son las rutinas de captura de datos por
DMA, el algoritmo de la Transformada Wavelet y la reproduccin de la seal de voz.
Para la implementacin del sistema se emple la estructura de la figura 4.2 descrita en el
captulo anterior para la realizacin de los siguientes algoritmos:
1. Captura de la seal
2. Pre-nfasis
3. Clculo de la FWT
4. Wavelet Denoising
5. Normalizacin de los Coeficientes Wavelet
6. Estimacin de la Energa en Cada Banda
7. Reglas de Seleccin
8. Realce de la Seal
9. Transformada Inversa Wavelet
53
10. Reproduccin de la seal

Figura 5.1 Tcnica de doble buffer usando DMA para captura de un bloque de 64ms con su
respectivo anlisis y reproduccin.
Buffer 2
511
510
509
3
2
1
0
Genera Interrupcin
Empieza Captura en 1
Buffer 1
511
510
509
3
2
1
0
Genera Interrupcin
Empieza Captura en 2
procesar_segmento( Entrada, Salida )
0
1
2
3
509
510
511
Buffer de Salida
Datos a Reproducir
54
5.1 Captura y Pre-procesamiento de la Seal
Para la adquisicin de la seal se usaron los CODECs con que cuenta el sistema de
desarrollo y se program el ADC a una frecuencia de muestreo de 8kHz (calidad
telefnica), 16 bits por muestra, y la tcnica de entrada/salida por acceso directo a memoria
(DMA) haciendo uso de un doble buffer asincrnico. El doble buffer permite realizar en
paralelo los procesos de adquisicin y anlisis de los datos (Figura 5.1), garantizando as la
ejecucin en tiempo real del sistema.
En la implementacin final cada segmento de captura por DMA se tom de 512 datos
utilizando una frecuencia de muestreo de 8kHz, lo que implica un tiempo de adquisicin de
64ms (tcaptura = 512/8000 = 64ms). Para garantizar la ejecucin en tiempo real, la rutina
de servicio de interrupcin por finalizacin de transferencia por DMA lleva a cabo una
inicializacin de la captura por DMA del siguiente bloque de datos sobre el segundo buffer
(Ver Figura 5.1) y ejecuta el anlisis del respectivo segmento (512 datos), desarrollando las
etapas de preprocesamiento, extraccin de caractersticas, identificacin del tipo de fonema,
realce de la seal, y transformada inversa wavelet dentro de la rutina de servicio de
ininterrupcin.
El programa principal y la rutina del servicio de interrupcin en diagramas de flujo (figura
5.2) es la siguiente manera:
Figura 5.2 Diagrama de flujo del programa principal y la ISR.
Programa Principal
Reserva memoria
(entrada, salida y
etiqueta)
Condiciones Iniciales.
Iniciar filtros
Iniciar DWT, IDWT
Iniciar Captura por DMA
(Habilita Interrupcin)
Iniciar Escritura.
ISR
Conversin de Short a Float
Procesar Segmento ()
Conversin de Float a Short
FIN
55
5.2 Conversin de Datos
La funcin que realiza la conversin de los datos se debe a que el buffer de captura entrega
los datos tipo short y la funcin que procesa el segmento los manipula en tipo float, por tal
motivo se debe realizar la conversin tanto para los datos de captura como para los de
reproduccin, y su algoritmo en pseudocdigo es de la forma:
Conversion_short_float(entradaADC , buff)
for k=0 to 511
buff[k] = entradaADC[2*k] * 0.000030519;
Conversion _float_short ( buff , entradaADC)
for k = 0 to 511
salidaDAC[2*k] = buff[k] * 32767.0;
salidaDAC[2*k+1] = 0;
5.3 Funcin Procesar Segmento
La forma estructural del algoritmo que procesa el segmento en pseudocdigo es:
______________________________
Procesa_segmento()
prenfasis()
fwt()
wavelet denoising()
normalizacin()
clculo energas()
reglas_seleccin()
realce()
ifwt()
_______________________________
La funcin de prenfasis est dada por (ecu.4.1) donde a toma un valor de -0.95.
prenfasis( entrada, [1 a], salida )
for i = 1 to long[entrada]
salida[i-1] = entrada[i] - a*entrada[i]
Para el clculo de la transformada wavelet rpida, contamos con las herramientas
desarrolladas por el grupo de investigacin GDSPROC como habamos mencionado
anteriormente, pues estas nos brindan una continuidad en la seal de entrada, es decir, nos
garantizan una interdependencia entre los diferentes segmentos capturados, evitando
adems cortes abruptos de la seal de entrada. Para tener una visin global del
funcionamiento del algoritmo retomamos un prrafo de [Hur02] donde explican dicha
funcin.
56
empleando como condiciones iniciales para cada uno de los bancos de
filtros wavelet muestras pasadas que haban sido entregadas por el sistema
de preprocesamiento. En particular se deben tener en cuenta las N-1
muestras pasadas, donde N es la longitud de la respuesta al impulso de los
filtros asociados a la wavelet usada. La Figura 5.3 ilustra el esquema en la
memoria del DSP de los bloques de entrada a cada una de las etapas del
banco de filtros wavelet.
La implementacin de cada una de las etapas del banco de filtros wavelet se
llev a cabo usando la estructura polifsica [Fli94], la cual evita la
realizacin de clculos innecesarios en los diferentes bloques de diezmado.
Para el clculo de la transformada se escribi un algoritmo que permite
una fcil adaptacin del sistema a otros niveles de descomposicin.
El bloque wavelet denoising, por la procedencia de los clculos se debe incluir despus del
clculo de la transformada wavelet rpida y debido a que su costo computacional es
relativamente pequeo y est incluido dentro de la funcin de la FWT. Como se coment
en el captulo 4 la tcnica usada fue la hardthresholding [RB98], el valor de umbral
depende de la banda a analizar (tabla 4.4) y su implementacin es la siguiente:
wavelet denoising( fwt_entrada, long, umbral )
for i = 0 to long[fwt entrada]
if ( abs(fwt entrada[i]) < umbral )
fwt salida[i] = 0
else
if ( fwt entrada[i] > umbral )
fwt salida[i] = fwt entrada[i] - umbral
if ( fwt entrada[i] < -umbral )
fwt salida[i] = fwt entrada[i] + umbral
5.3 Esquema en memoria del vector de muestras a filtrar.
El algoritmo de la normalizacin es el bloque que independiza la seal del volumen que
esta pueda llevar en el momento de la captura. Se implemento la ecuacin 4.6 para la
57
derivada temporal de primer orden y la ecuacin 4.7 para el integrador mantenedor de
primer orden, de la siguiente manera:
Normalizacin( )
Logabs( nnivel )
for i = 0 to long[n nivel]
nnivel[i] = log ( abs( nnivel[i] ) )
Derivtmp( nnivel )
for k = 0 to long[n nivel]
sal[k] = nnivel[k] - nnivel[k-1];
Integexp( yint )
for k = 0 to long( yint )
yint[k] = xint[k] + yant;
yant = yint[k];
yint[k] = exp( yint[k] );
Para el clculo de las energas se tomaron los vectores que contienen los coeficientes
wavelet normalizados por cada nivel en un tiempo de 4ms que corresponden a n nmero de
datos segn el nivel analizado como se explic en el captulo anterior en la Tabla 4.5,
haciendo uso de la ecuacin 4.5.
Energa(nnivel)
for k = 0 to 16
for i = 0 to long[nnivel]/16
En[k] += nnivel[ (k*16) + i ] ^ 2
El cdigo fuente de la funcin que establece las reglas de seleccin se encuentra en el
apndice B, ya que es algo extenso y hace nfasis a lo redactado en el captulo anterior.
Como detallamos anteriormente, la etapa de realce de la seal result ser de una manera
muy sencilla, ya que simplemente se realiza por medio de un factor escala lo que nos da
una garanta eficiente en el momento de amplificar la seal y adems su costo
computacional es mnimo, cabe recordar que el realce de la seal se efecta en los
coeficientes wavelet entregados por el bloque wavelet denoising y dependen del tipo de
segmento identificado (marka) y el criterio obtenido.
Realce( marka )
For k = 0 to k<16
if marka[k] == 0 //Deteccion de un segmento de silencio
for j = 0 to j<16
{.} // Coeficientes de todas las bandas llevados a cero
if marka[k] == 1 //Deteccion de un segmento de sonoro
for j = 0 to j<16
{.} // Coeficientes de las bandas intactos
if marka[k] == 2 //Deteccion de un segmento de sordo
for j = 0 to j<16
58
{.} // Coeficientes de las bandas se multiplican con un
factor de escala que depender del tipo de segmento identificado y el
nivel auditivo del paciente.
5.4 Pruebas de Desempeo
Despus de haber codificado los algoritmos del sistema de segmentacin en el DSP
TMS320C6701, se procedi a realizar pruebas de tiempo para observar el desempeo de
estos ejecutndose en el DSP. En la Tabla 5.1 se muestra el tiempo de ejecucin de cada
uno de los algoritmos correspondientes a las etapas de anlisis del sistema, estimadas en un
bloque de captura y procesamiento de 512 muestras, las cuales se deben ejecutar dentro de
la rutina de servicio de interrupcin (ISR) por finalizacin de la captura por DMA, la tabla
5.2 tiempos de conversin para la manipulacin de los datos tipo float dentro de la funcin
que procesa el bloque de 64ms, estos tiempos son de mucha importancia debido a que si el
tiempo de anlisis de la seal es mayor que el tiempo de captura, el sistema colapsa y no es
posible llevar una implementacin en tiempo real.
Debido a que el DSP trabaja a una frecuencia de reloj de 133Mhz y el sistema de
segmentacin procesa la seal de voz en bloques de 512 muestras a una frecuencia de
muestreo de 8kHz, es de garantizar que el tiempo mximo que debe tardar la rutina del
servicio de interrupcin debe ser menor a:
ms T 64
8000
512
< =
Expresando el tiempo en ciclos de reloj del DSP:
ciclos T
ciclos
8512000 064 . 0 * 133000000 = =
Algoritmo
Tiempo
(ms)
Ciclos de
Reloj
% Tiempo
relativo a 64ms
Pre-nfasis
1,201955
159.860 1.87
Dwt + Denoising
4,414361
587.110 6.89
Normalizacin
26,853195
3571.475 41.95
Clculo de Energas
0,745865
99.200 1.16
Reglas de Seleccin
0,292481
38.900 0.45
Realce de la Seal
0,057894
7.700 0.09
Idwt
4,587218
610.100 7.16
Total
38,152970
5074.345 59.61
Tabla 5.1 Tiempos promedio de ejecucin de las funciones dentro de la rutina del servicio
de interrupcin.
59
Algoritmo de
conversin
Tiempo
(ms)
Ciclos
de Reloj
% tiempo
relativo a 64ms
Short a float
0,292955
38.963 0.45
Float a short
0,399624
53.150 0.62
Total
0,692579
92113 1.08
Tabla 5.2 Tiempos promedio de ejecucin de conversin de los datos.
Algoritmo de
conversin
Tiempo
(ms)
Ciclos de
Reloj
% tiempo
relativo a 64ms
Conversin 0,692579 92.113 1.08
Procesar_Segmento 38,152970 5074.345 59.61
Total 38,845550 5166.458 60.69
Tabla 5.3 Tiempo total de la ISR
Es de notar que el tiempo total de las funciones de anlisis dentro de la ISR equivale a
59.61% con respecto al tiempo de captura mximo posible (tmax = tcaptura = 512/8000 =
64ms), y la conversin de los datos de short a float y viceversa corresponden a 1.08%
sumando ambos porcentajes de tiempo obtenemos un 60.69% del tiempo mximo ( tabla
5.3), lo que nos garantiza una ejecucin en tiempo real del sistema.
El cdigo fuente de los algoritmos empleados se encuentra en el Apndice B, y las
estimaciones de sus tiempos de ejecucin en la Tabla 5.1, 5.2 y 5.3.
Estos tiempos fueron estimados para un bloque de carctersticas extradas a partir de un
segmento de captura por DMA.
.
60
Captulo 6
Conclusiones
Se logr implementar un sistema automtico de segmentacin de fonemas por
medio de la transformada wavelet discreta en tiempo real sobre un procesador
Digital de Seales (DSP).
Para eliminar el ruido incorporado en la seal de voz se utiliz la tcnica Wavelet
Denoising con umbral diferente en cada banda para conservar informacin
importante en los niveles de menor resolucin.
Se establecieron reglas de seleccin para clasificar todo el conjunto de fonemas del
idioma espaol, analizando la evolucin de la energa de los cuatro niveles de
mayor resolucin.
El mtodo empleado para el realce de la seal de voz result ser muy eficiente ya
que nos garantiza un realce en las diferentes bandas de frecuencia y en el segmento
identificado, adems su costo computacional es relativamente muy bajo.
Se adapt el sistema de segmentacin propuesto por el grupo de Investigacin
GDSPROC para ejecutarse en el DSP TMS320C6701, luego de realizar diversas
simulaciones para clasificar los segmentos.
Para la implementacin sobre el DSP TMS320C6701, se adquirieron los datos por
medio de la tcnica de DMA en doble buffer y considerando para el clculo de la
transformada una continuidad en los segmentos de la seal.
61
Captulo 7
Proyecciones
Ya que el proceso de segmentacin juega un papel muy importante en la construccin de
los sistemas de reconocimiento continuo de voz (CSR: Continuos-Speech Recognition), y
con los estudios elaborados anteriormente en el grupo de investigacin GDSPROC es
posible fusionar los resultados de este proyecto para la construccin en tiempo real del
sistema CSR.
Por otra parte se pueden realizar estudios para la implementacin de un dispositivo a nivel
de hardware que resulte ser de fcil manipulacin y asequible en cuanto a precio, para las
personas con deficiencias auditivas y con limitaciones econmicas ya que el costo de estos
dispositivos hoy en da aunque son de una excelente calidad resultan ser demasiado
costosos.
El sistema de realce empleado nos brinda una garanta en el momento de obtener mayor
intensidad de la seal de voz en una banda predeterminada, este sistema puede ser de
utilidad es sistemas de ecualizacin de sonidos por medio de la transformada wavelet
discreta ya que su costo computacional es muy pequeo, de esta manera se podra
implementar un sistema de ecualizacin a travs de una lnea telefnica, ya que la
frecuencia de muestreo es de 8kHz, enfocado hacia las personas con limitaciones auditivas.
62
Bibliografa
[ADJ03] Alain C. Gonzlez G., Daniel Gonzlez S., Juan M. Hernndez V., Alberto
R. Hernndez M., Procesamiento Digital de Seales U del Corazn.
Departamento de Ingeniera Elctrica y Electrnica. Instituto Tecnolgico,
Toluca. 2003.
[Ala03] Alarcn A., Vicente. Anomaly Detection and Prediction in Communication
Networks using Wavelet Transform. PhD Thesis. Imperial College London.
University London. UK. 2003
[Ber69] Leo L. Beranek. Acstica. Hispano Americana S.A, 2 edition, 1969.
[BR99] Claudio Beccetti and Lucio Prina Ricotti. Speech Recognition. John Wiley
and Sons, Chichester, 1999.
[Cas99] Castillo Condado, O. Evaluacin de un reconocedor fontico para el
espaol. Escuela de Ingeniera, Universidad de las Amricas-Puebla.1999.
[Dal69] Dalbor, Jhon. Spanish Pronunciation: Theory and Practice. Holt, Rinehart
and Winston. New York, 1969.
[Her03] Marianito Hernndez Daz, Anlisis Comparativo de Algoritmos para
Reduccin de Ruido en Seales Utilizando Wavelets, Universidad de Puebla.
pag.26, 2003.
[Hur03a] Jorge Ivn Marn Hurtado. Reconocimiento de Voz en Tiempo Real por
medio de la Transformada Wavelet y Procesadores Digitales de Seales.
Informe Proyecto de Investigacin 195 UNIQUINDIO, 2003.
[Hur03b] Jorge Ivn Marn Hurtado. Procesamiento Digital de Seales. Texto Gua
para el Curso de Procesamiento Digital de Seales UNIQUINDIO, 2002.
[Hur03c] Jorge Ivn Marn Hurtado. Clase para el control de la tarjeta de sonido
Linux-Windows. www.geocities.com/gdsproc/dsp, 20
63
[Jal00] Jalali, Payman. Wavelets and applications. Energy Technology Department.
Lappeenranta University of Technology. August 2000.
[LD96] C.J. Long and S. Datta. Wavelet based feature extraction for phoneme
recognition. Proc. ICSLP, 1:264267, 1996.
[LF94] Paul A. Lynn and Wolfgang Fuerst. Digital Signal Processing with
Computer Applications. John Wiley and Sons, 1994.
[Mal89] S. G. Mallat, A Theory for Multiresolution Signal Decomposition: The
Wavelet Representation, IEEE Transactions on Pattern Recognition and
Machine Intelligence, vol. 11, n 7, pags. 674-693, 1989.
[Mar99] Martin, Frederick N. Introduccin a la Audiologia, AUDIOLOGIA, 1999.
[MHLPA03] J.I. Marn-Hurtado, A. Lpez-Parrado, and R. Arango. Segmentacin de
seales de voz usando dsp y transformada wavelet. Memorias V Congreso
Colombiano de Automtica, 2003.
[MMOP07] Michel Misiti, Yves Misiti, Georges Oppenheim y Jean-Michel Poggi
Wavelet Toolbox For Use with MATLAB Mathworks, 1997.
[MYG97] Michel Misiti, Yves Misiti, Georges Oppenheim y Jean-Michel Poggi
Wavelet Toolbox For Use with MATLAB Mathworks, 1997.
[Per01] Javier Ramrez Prez de Inestrosa. Nuevas Estructuras RNS para la Sntesis
VLSI de Sistemas de Procesamiento Digital de Seales. Tesis Doctoral.
Universidad de Granada. 2001.
[Pol96] Polikar, Robi. The Wavelet Tutorial. Dept. Of Electrical and Computer
Engineering. Rowan University. 1996.
[RB98] Raghuveer M. Rao and Ajit S. Bopardikar. Wavelet Transforms.
Addison Wesley, 1998.
[Teo98] Anthony Teolis. Computational Signal Processing with Wavelets.
Birkhauser, Boston, 1998.
[Tex00] Texas Instruments. TMS320C6000 CPU And Instruction Set Reference
Guide. January 2000.
[TLS94] B. T. Tan, R. Lang, H. Schroder, A. Spray, and P. Dermody. Applying
wavelet analysis to speech segmentation and classification.Proc. SPIE 2242,
Wavelet Application Volume:750761, 1994.
[VK95] M. Vetterli, J. Kovacevic, Wavelets and Subband Coding. Prentice Hall,
1995.
64
Apndice A
Cdigo fuente para MATLAB
B.1 Cdigo fuente del programa principal en matlab
% El programa est simplificado en algunas funciones
% se anexa un CD adjunto para las lines de cdigo de
% funciones optimizadas
close all
clear all
% lectura de un archivo de sonido previamente capturado
archi = input('archivo (sin extension .wav): ');
[x,fs1] = wavread( strcat(archi, '.wav') );
[Lo_D,Hi_D,Lo_R,Hi_R] = wfilters('db8');
%Cambia la frecuencia de muestreo a 8KHz
%========================================
if (fs1 ~= 8000)
x = resample(x, 36, 100);
fs1 = 8000;
end
% Ajusta la seal a determinado numero de muestras (multiplo 512)
%==================================================================%
N = (length(x)/2048-fix(length(x)/2048));
if (N < 0.3)
n = 2048*fix(length(x)/2048) + 512;
elseif ((N > 0.3)&(N<0.7))
n = 2048*fix(length(x)/2048) + 1024;
else
n = 2048*fix(length(x)/2048) + 2048;
end
X = ajustar(x,n);
maxbandas=4;
w_name='db8';
% Anlisis de la seal por bloques de 512 datos
% y su respectiva recuperacin con el realce deseado
%=====================================================================
cont=1;
x_ant=0;
65
x=[];
XTT=[];
while muestra <= length(X)
Ct=[];Cb1=[];
if ( muestra+512 > length(X) )
tx = [ X(muestra:length(X)) ];
else
tx = X(muestra:muestra+511);
end
xa = conv(tx , [1 -0.95]);
x = [x_ant+xa(1); xa(2:512)];
x_ant=xa(513);
wavelet(x);
denoising( nivel_detalle, umbral);
% Normalizacion de energia
% Calcula la Derivada del logaritmo del valor absoluto
% XX = Der( log ( || ) )
% y la Exponencial de la Integral de los Coeficientes Wavelet
% exp ( integral ( XX ) )
Cb1 = normalizacion(Coefs_wavelet);
Cb1=[D1' D2' D3' D4' A4'];
% Clculo de energas
lenbanda = length(Cb1)/2 ;
posbanda = 1;
energia=[];
E_deltas = zeros(4,16);
for ibanda=1:maxbandas
xbanda = Cb1(posbanda:posbanda+lenbanda-1)';
lensegmento = 32/(2^ibanda);
energia_banda = [];
numsegmentos = 0;
for i=1:lensegmento:lenbanda
energia_banda(numsegmentos+1) = sum(xbanda(i:i+lensegmento-1).^2);
numsegmentos = numsegmentos+1;
end
energia_banda=[energia_ant(ibanda,:) energia_banda];
energia_banda1 = filter([1 1 1 1 1 1 1 1], 1, energia_banda);
energia_ant(ibanda,:) = energia_banda(17:23);
e_nivel = energia_banda1(8:23);
energia = [energia; e_nivel];
posbanda = posbanda+lenbanda;
lenbanda = lenbanda/2;
for l=1:numsegmentos
E_deltas(ibanda,l) = sign( e_nivel(l) - Ant_eprom(ibanda) );
Ant_eprom(ibanda) = e_nivel(l);
end
end
Ant_eprom(ibanda) = e_nivel(l);
66
% Reglas de seleccin establecen el tipo de segmento
etiqueta = reglas(E_bandas,E_deltas);
%Realce de la seal
for ik=1:numsegmentos
if(etiqueta(ik)==0)
D1_inv(16*ik-15 :16*ik)=zeros(1,16);
D2_inv( 8*ik- 7 : 8*ik)= zeros(1,8);
D3_inv( 4*ik- 3 : 4*ik)= zeros(1,4);
D4_inv( 2*ik- 1 : 2*ik)= zeros(1,2);
A4_inv( 2*ik- 1 : 2*ik)= zeros(1,2);
end
if(etiqueta(ik)==1)
D1_inv(16*ik-15 :16*ik) = D1_inv(16*ik-15 :16*ik)* realce_Sordo;
D2_inv( 8*ik- 7 : 8*ik) = D2_inv( 8*ik- 7 : 8*ik)* realce_Sordo;
D3_inv( 4*ik- 3 : 4*ik) = D3_inv( 4*ik- 3 : 4*ik)* realce_Sordo;
D4_inv( 2*ik- 1 : 2*ik) = D4_inv( 2*ik- 1 : 2*ik)* realce_Sordo;
A4_inv( 2*ik- 1 : 2*ik) = A4_inv( 2*ik- 1 : 2*ik)* realce_Sordo;
end
if(etiqueta(ik)==2)
D1_inv(16*ik-15 :16*ik) = D1_inv(16*ik-15 :16*ik)* realce_Sonoro;
D2_inv( 8*ik- 7 : 8*ik) = D2_inv( 8*ik- 7 : 8*ik)* realce_Sonoro;
D3_inv( 4*ik- 3 : 4*ik) = D3_inv( 4*ik- 3 : 4*ik)* realce_Sonoro;
D4_inv( 2*ik- 1 : 2*ik) = D4_inv( 2*ik- 1 : 2*ik)* realce_Sonoro;
A4_inv( 2*ik- 1 : 2*ik) = A4_inv( 2*ik- 1 : 2*ik)* realce_Sonoro;
end
end
L1_inv=[D1_inv L1_ant'];
L2_inv=[D2_inv L2_ant'];
L3_inv=[D3_inv L3_ant'];
L4_inv=[D4_inv L4_ant'];
C4_inv=[A4_inv C4_ant'];
% Wavelet Inversa
Ca3 = idwt(C4_inv * Realce , L4_inv * Realce , w_name);
Ca2 = idwt(Ca3(1:77) , L3_inv * Realce , w_name);
Ca1 = idwt(Ca2(1:139), L2_inv * Realce , w_name);
Xa = idwt(Ca1(1:263), L1_inv * Realce , w_name);
cont=cont+1;
muestra=muestra+512;
end%fin for muestra
67
Apndice B
Cdigo fuente para el DSP TMS320C6701
B.1 Cdigo fuente del programa principal
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include "captura_dma.h"
#include "segmentacion.h"
float *buff;
float *coefs1;
int bBufferProcesado = 0;
void procesa_segmento_ISR (short *buffer, int nmuestras)
{
int k;
short* salidaDAC;
short* entradaADC;
short val;
entradaADC = buffer;
for(k=0;k<L;k++)
{
buff[k] = entradaADC[2*k] * 0.000030519;
}
procesar_segmento( buff, coefs1 );
// Escribe al DAC //
salidaDAC = retornar_bufferout();
if (salidaDAC!=NULL)
{
for(k=0;k<L;k++)
{
salidaDAC[2*k] = buff[k] * 32767.0;
68
salidaDAC[2*k+1] = 0;
}
}
bBufferProcesado = 1;
}
void main()
{
puts("Proyecto Segmentacion - Realce\n");
puts("Iniciando DSP...");
if (configurar_codec(HABILITAR_CAPTURAESCRITURA,MIC_SEL)==ERROR)
{
puts("Hubo un error al iniciar DSP!");
return;
}
puts("DSP [OK]");
puts("Espere, iniciando sistema...");
/*inicializacion de variables */
/****************************************************/
buff = (float*) malloc( L*sizeof(float) );
coefs1 = (float*) malloc( L*sizeof(float) );
iniciar_segmentacion();
/*****************************************************/
procesa_bufferin_func = procesa_segmento_ISR;
iniciar_lectura();
retornar_bufferout();
retornar_bufferout();
iniciar_escritura();
puts("Sistema [OK]");
while (1)
{
while (bBufferProcesado == 0);
bBufferProcesado = 0;
/* mostrar la informacin */
}
}
B.2 Cdigo fuente funcin que procesa el segmento
B.2.1 Archivo de cabecera segmentacin.h
#ifndef _segmentacion_
#define _segmentacion_
#define L 512
#define N_NIVELES 4
#define lm 16
#define umbral 0.015
#define ESC_d1 10
69
#define ESC_d2 10
#define ESC_d3 10
#define ESC_d4 10
#define ESC_a4 10
void iniciar_segmentacion();
void procesar_segmento( float *in, float* out );
void preenfasis(float *Xseg, float *h, float *Yseg);
void conv(float *xn, float *h, int lx, int lh, float *yn, float *ci);
void dwt_bandas(float* tx, float **coefs);
void denoising(float* Xruido, int j, float Umbral);
void normalizacion();
void energias(float* Ed1,float* Ed2,float* Ed3,float* Ed4,float* Ea4);
void reglas_seleccion(float** Ebandas,float **Edeltas,int* etiqueta);
void realce(int* mark);
#endif
B.2.2 Archivo fuente segmentacin.c
/* Contiene todas las funciones necesarias para el anlisis de un
bloque de captura en el DSP */
#include <stdio.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include "dwt.h"
#include "segmentacion.h"
#include "db16.h"
float Xa[L];
float maximo[4],prom_ant=1,Emax=0,Emin=0;
int *etiqueta;
float hp[]={1.0,-0.95};
float hmmovil[]={1,1,1,1,1,1,1,1};
//Condiciones iniciales para cada funcion
float der1_ant=0,der2_ant=0,der3_ant=0,der4_ant=0,derA4_ant=0;
float Xseg_ant[]={0};
float yant1=0,yant2=0,yant3=0,yant4=0,yantA4=0;
float Det1[256],Det2[128],Det3[64],Det4[32],Apr4[32];
float Dn1[256],Dn2[128],Dn3[64],Dn4[32],An4[32];
float D1_energia[16+7],D2_energia[16+7],D3_energia[16+7],D4_energia[16+7],A4_energia[16+7];
float D1_mediamov[16],D2_mediamov[16],D3_mediamov[16],D4_mediamov[16],A4_mediamov[16];
70
float D1_deltas[16],D2_deltas[16],D3_deltas[16],D4_deltas[16],A4_deltas[16];
float D1_ant_ener=0,D2_ant_ener=0,D3_ant_ener=0,D4_ant_ener=0,A4_ant_ener=0;
float D1mov_ant[]={0,0,0,0,0,0,0},D2mov_ant[]={0,0,0,0,0,0,0};
float D3mov_ant[]={0,0,0,0,0,0,0},D4mov_ant[]={0,0,0,0,0,0,0};
float A4mov_ant[]={0,0,0,0,0,0,0};
void iniciar_segmentacion()
{
Det1[0] = 0;
Det2[0] = 0;
Det3[0] = 0;
Det4[0] = 0;
Apr4[0] = 0;
Dn1[0]=0;Dn2[0]=0;Dn3[0]=0;Dn4[0]=0;An4[0]=0;
etiqueta = (int*) malloc( lm*sizeof(int) );
dsp_iniciar_dwt(L,Ndb16,N_NIVELES);
dsp_iniciar_idwt(L,Ndb16,N_NIVELES);
}
void procesar_segmento( float *in, float* out )
{
//int k;
float* Ebandas[4];
float* Edeltas[4];
float* coefs[5];
/**********************************************************/
/* for(k=0;k<lm;k++)
etiqueta[k]=1;
*/
preenfasis( in, hp, Xa );
coefs[0] = Det1;
coefs[1] = Det2;
coefs[2] = Det3;
coefs[3] = Det4;
coefs[4] = Apr4;
dwt_bandas(Xa,coefs);
normalizacion();
energias(Dn1,Dn2,Dn3,Dn4,An4);
Ebandas[0] = D1_mediamov;
Ebandas[1] = D2_mediamov;
Ebandas[2] = D3_mediamov;
Ebandas[3] = D4_mediamov;
Edeltas[0] = D1_deltas;
Edeltas[1] = D2_deltas;
71
Edeltas[2] = D3_deltas;
Edeltas[3] = D4_deltas;
reglas_seleccion(Ebandas,Edeltas,etiqueta);
realce(etiqueta);
dsp_idwtB(coefs,g0,g1,N_NIVELES,L,Ndb16,out);
}
/***************************************************************************/
void preenfasis(float *Xseg, float *h, float *Yseg)
{
conv(Xseg,h,L,2,Yseg,Xseg_ant);
}
/***************************************************************************/
void conv(float *xn, float *h, int lx, int lh, float *yn, float *ci)
{
int w, k,ln;
float y;
for(w=0;w<lh-1;w++)
{
y = 0.0;
for (k = 0; k<=w; k++)
y += xn[w-k]*h[k];
ln=0;
for (k = w+1; k<lh; k++)
y += ci[ln++]*h[k];
yn[w] = y;
}
for(w=lh-1;w<lx;w++)
{
y = 0.0;
for (k = 0; k<lh; k++)
y += xn[w-k]*h[k];
yn[w] = y;
}
for(w=0;w<lh-1;w++)
{
ci[w] = xn[lx-lh+1+w];
}
}
/***************************************************************************/
void dwt_bandas(float* tx, float **coefs)
{
dsp_dwtB( tx, h0, h1, 4, L, Ndb16, coefs );
denoising(Det1,256,umbral);
denoising(Det2,128,umbral);
denoising(Det3, 64,umbral);
denoising(Det4, 32,umbral);
denoising(Apr4, 32,umbral);
72
}
/***************************************************************************/
void denoising(float* Xruido, int j, float Umbral)
{
int k;
for(k=0;k<j;k++)
{
if(fabs(Xruido[k])<Umbral)
Xruido[k]=0;
else
{
if(Xruido[k]>Umbral)
Xruido[k]=Xruido[k]-Umbral;
else
Xruido[k]=Xruido[k]+Umbral;
}
}
}
/***************************************************************************/
void logabs(float* xnor, int nx, float* ynor)
{
int k;
for(k=0;k<nx;k++)
{
// Clculo logartmo del valor absoluto
ynor[k] = log(fabs(xnor[k])+ 1e-8);
}
}
void derivtemp(float* xder, int nx, float* yder, float* der_ant)
{
int k;
float der_ant_sig = xder[nx-1];
for(k=nx-1;k>0;k--)
{
// Calculo de la Derivada temporal
yder[k] = xder[k]-xder[k-1];
}
yder[0] = xder[0] - (*der_ant);
*der_ant = der_ant_sig;
}
void integexp(float* xint, int nx, float *yant, float* yint)
{
int k;
// Calculo de la Integral Trapezoidal
for(k=0;k<nx;k++)
{
yint[k]=xint[k]+ *yant;
*yant=yint[k];
// Calculo de la Exponenciacin
yint[k] = exp( yint[k] );
}
}
73
void normalizacion()
{
// Clculo logartmo del valor absoluto
logabs(Det1, 256, Dn1);
logabs(Det2, 128, Dn2);
logabs(Det3, 64, Dn3);
logabs(Det4, 32, Dn4);
logabs(Apr4, 32, An4);
// Calculo de la Derivada temporal
derivtemp(Dn1, 256, Dn1, &der1_ant);
derivtemp(Dn2, 128, Dn2, &der2_ant);
derivtemp(Dn3, 64, Dn3, &der3_ant);
derivtemp(Dn4, 32, Dn4, &der4_ant);
derivtemp(An4, 32, An4, &derA4_ant);
// Calculo de la integracion trapezoidal y exponenciacion
integexp(Dn1, 256, &yant1, Dn1);
integexp(Dn2, 128, &yant2, Dn2);
integexp(Dn3, 64, &yant3, Dn3);
integexp(Dn4, 32, &yant4, Dn4);
integexp(An4, 32, &yantA4,An4);
}
/***************************************************************************/
float energ(float* xn, int nx)
{
int j;
float yn = 0;
for(j=0;j<nx;j++)
{
yn += pow(xn[j],2);
}
return yn;
}
void energias(float* Ed1,float* Ed2,float* Ed3,float* Ed4,float* Ea4)
{
float val;
//Energia de las 4 bandas por cada 4ms = 32 muestras
int k;
for(k=0;k<16;k++)
{
D1_energia[k+7] = energ( &Ed1[k*16], 16 );
D2_energia[k+7] = energ( &Ed2[k*8], 8 );
D3_energia[k+7] = energ( &Ed3[k*4], 4 );
D4_energia[k+7] = energ( &Ed4[k*2], 2 );
A4_energia[k+7] = energ( &Ea4[k*2], 2 );
}
//filtro de media movil
74
conv(D1_energia+7,hmmovil,16,8,D1_mediamov,D1mov_ant);
conv(D2_energia+7,hmmovil,16,8,D2_mediamov,D2mov_ant);
conv(D3_energia+7,hmmovil,16,8,D3_mediamov,D3mov_ant);
conv(D4_energia+7,hmmovil,16,8,D4_mediamov,D4mov_ant);
conv(A4_energia+7,hmmovil,16,8,A4_mediamov,A4mov_ant);
//Variaciones de energia
for(k=0;k<16;k++)
{
val = D1_mediamov[k]-D1_ant_ener;
if(val>0) D1_deltas[k] = 1;
else if(val<0) D1_deltas[k] =-1;
else //((D1_mediamov[k]-D1_ant_ener)==0)
D1_deltas[k]= 0;
val = D2_mediamov[k]-D2_ant_ener;
if(val>0) D2_deltas[k] = 1;
else if(val<0) D2_deltas[k] =-1;
else //((D2_mediamov[k]-D2_ant_ener)==0)
D2_deltas[k]= 0;
val = D3_mediamov[k]-D3_ant_ener;
if(val>0) D3_deltas[k] = 1;
else if(val<0) D3_deltas[k] =-1;
else //((D3_mediamov[k]-D3_ant_ener)==0)
D3_deltas[k]= 0;
val = D4_mediamov[k]-D4_ant_ener;
if(val>0) D4_deltas[k] = 1;
else if(val<0) D4_deltas[k] =-1;
else //((D4_mediamov[k]-D4_ant_ener)==0)
D4_deltas[k]= 0;
/*
val = A4_mediamov[k]-A4_ant_ener;
if(val>0) A4_deltas[k] = 1;
else if(val<0) A4_deltas[k] =-1;
else //((A4_mediamov[k]-A4_ant_ener)==0)
A4_deltas[k]= 0;
*/
D1_ant_ener=D1_mediamov[k];
D2_ant_ener=D2_mediamov[k];
D3_ant_ener=D3_mediamov[k];
D4_ant_ener=D4_mediamov[k];
A4_ant_ener=A4_mediamov[k];
}
}
/***************************************************************************/
void reglas_seleccion(float** Ebandas,float **Edeltas, int* etiqueta)
{
int k,j;
float banda_max[4], prom, sum;
float maxtemp, bandatemp,porcentaje;
for(k=0;k<16;k++)
etiqueta[k]=1;
//-----------------------------------------/* for recorre cada segmento*/
75
for(k=0;k<16;k++) // identifica y lo etiqueta
{
// Detecta los tramos de silencio
int sil1=0; // En el Segmento de 64ms = 512 datos
int finvoz=0,cont=0;
banda_max[0]=4; banda_max[1]=4; banda_max[2]=4; banda_max[3]=4;
maximo[0]=0;maximo[1]=0;maximo[2]=0;maximo[3]=1e20;
prom=0;
sum=0;
//---------------------------------------------------
for(j=0;j<N_NIVELES;j++)
{
sum+=Ebandas[j][k];
//determina el valor maximo de cada banda por segmento
if(Ebandas[j][k]>maximo[0])
{ maximo[0] = Ebandas[j][k];
banda_max[0]= j;
}
//determina el valor minimo de cada banda por segmento
if(Ebandas[j][k]<maximo[3])
{ maximo[3] = Ebandas[j][k];
banda_max[3]= j;
}
if(Edeltas[j][k]==0) // Si las variaciones de Energia son constantes
sil1+=1; // En las 4 Bandas
// Y la energia en Cada una no supera X umbral
// se denota como un segmento de silencio
if(Edeltas[j][k]== -1)
finvoz=finvoz+1;
} /* fin for de los niveles*/
//--------------------------------------------------
prom=sum/4; // promedio de las bandas de energia
porcentaje=prom/prom_ant;
if(prom > prom_ant) // si el promedio de energia aumenta
{
if(Emin!=0)
etiqueta[k]=1;
Emax++;
Emin=0;
}
else
{/*if(Emin!=0)
etiqueta[k]=4; */
Emin++;
Emax=0;
}
//--------------------------------------------------
// while ordena las energias de la mayor a la menor con su respectivo nivel
j=0;
while(cont<2)
{
76
if((Ebandas[j][k]<maximo[0])&(Ebandas[j][k]>maximo[3]))
{
if(cont==0)
{ maxtemp=Ebandas[j][k];
bandatemp=j;
cont++;
}
else
if(cont==1)
{
if(Ebandas[j][k]<maxtemp)
{
maximo[1] = maxtemp;
banda_max[1] = bandatemp;
maximo[2] = Ebandas[j][k];
banda_max[2] = j;
cont++;
}
else
{
maximo[1] = Ebandas[j][k];
banda_max[1]= j;
maximo[2] = maxtemp;
banda_max[2]= bandatemp;
cont++;
} //ordena las energias de la mayora la menor
}
}
j++;
} /*fin while*/
//------------------------------------------------
//-------------------------------------------------
if((maximo[0]<1e7)||((sil1==4)&(maximo[0]<1e5))||(prom < 1e5))
etiqueta[k]=0; //Detecta Segmento de
silencio
//--------------------------------------
else
{
// Deteccion de un SEGMENTO SONORO se marca = 7,8,9,10
//----------------------------------------------------------------
// banda de menor energa mayor a 1% de la predominante = 1e15
if((maximo[3]>1e13)& (maximo[0]>1e15))
etiqueta[k]=2;
// banda predominante d-4 >1e13 las dems > 1e11
if( ((banda_max[0]==3)&(maximo[0]>1e15)) & (maximo[2]>1e10) )
etiqueta[k]=2;
//el promedio de energia en las bandas > 2.6e13
if((prom >= 3e13)&(porcentaje<1))
etiqueta[k]=2;
// predominan dos bandas con umbral fuerte... las otras aportan energa
if((maximo[1]> 0.5e15)&(maximo[3]>1e8))
etiqueta[k]=2;
//if(etiqueta[k]!=2)
77
if(etiqueta[k]==1)
{ //-----------------------------------------------------------------
// Deteccion de un SEGMENTO SORDO se marca = 3,4,5,6
//----------------------------------------------------------------
//al menos 1 banda no porta energia
if((maximo[3]<1e7)&(maximo[0]<1e13))
etiqueta[k]=1;
//Si el promedio de energa esta en el rango
if ((prom > 1e7)&(prom < 1e10))
etiqueta[k]=1;
//energa en la banda predominante es pequea
if(maximo[0]<1e12)
etiqueta[k]=1;
//la banda de menor energia es d-1 y dos bandas tienen 0 energa
if((banda_max[3]==1)&(maximo[2]<1e7))
etiqueta[k]=1;
if((banda_max[0]==4)&(maximo[0]<5e12))
etiqueta[k]=1;
} //Fin deteccion de segmento sordo
} /* fin else */
prom_ant = prom;
} // fin del ciclo por segmento
} //fin de funcion
/***************************************************************************/
void realce(int* marka)
{
int k,j;
for(k=0;k<16;k++)
{
if(marka[k]==0) //Deteccion de un segmento de silencio
{
for(j=0;j<16;j++) //Elementos del segmentos los pone en 0
Det1[j+(16*k)] = 0;
for(j=0;j<8;j++)
Det2[j+(8*k)] = 0;
for(j=0;j<4;j++)
Det3[j+(4*k)] = 0;
for(j=0;j<2;j++)
{Det4[j+(2*k)] = 0;
Apr4[j+(2*k)] = 0;
}
}
if(marka[k]==1) //Deteccion de un segmento sordo
{
for(j=0;j<16;j++) //se efectua el realce por un valor de escala
Det1[j+(16*k)] *= ESC_d1;
for(j=0;j<8;j++)
78
Det2[j+( 8*k)] *= ESC_d2;
for(j=0;j<4;j++)
Det3[j+( 4*k)] *= ESC_d3;
for(j=0;j<2;j++)
{ Det4[j+( 2*k)] *= ESC_d4;
Apr4[j+( 2*k)] *= ESC_a4;
}
}
//los segmentos sonoros no se les efectua el realce
//ya que son los de mayor intensidad
if(marka[k]==2) //Deteccion de un segmento sordo
{
for(j=0;j<16;j++) //se efectua el realce por un valor de escala
Det1[j+(16*k)] *= ESC_d1/10;
for(j=0;j<8;j++)
Det2[j+( 8*k)] *= ESC_d2/10;
for(j=0;j<4;j++)
Det3[j+( 4*k)] *= ESC_d3/10;
for(j=0;j<2;j++)
{ Det4[j+( 2*k)] *= ESC_d4/10;
Apr4[j+( 2*k)] *= ESC_a4/10;
}
}
}
}

Das könnte Ihnen auch gefallen