Segmentación y realce en señales de voz usando

Anuncio
Segmentación y Realce de Señales
de Voz Usando la Transformada
Wavelet y DSP’s
por Doubert Geovanny Sánchez Marín
Director:
Jorge Iván Marín Hurtado
Modalidad: Proyecto de Grado
ARMENIA
UNIVERSIDAD DEL QUINDIO
FACULTAD DE INGENIERIA
PROGRAMA DE INGENIERIA ELECTRONICA
2004
Índice General
Agradecimientos
iii
1 Introducción
1
2 Características Acústicas
3
2.1 Realización Fonética ………………………………………………… 3
2.2 Clasificación de los Fonemas ………………………………………. 4
2.2.1 Fonemas Consonánticos ………………………………… 4
2.2.2 Fonemas Vocálicos ………………………………………. 6
2.3 Características del Oído ……………………………………………. 7
2.3.1 El Oído como Analizador de Frecuencias ………………… 8
2.4 Audiometría …………………………………………………………. 9
2.4.1 Componentes de un audífono ………………………………11
3 Transformada Wavelet
13
3.1 Introducción ………………………………………………………… 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 Rápida (FWT) …………. 23
3.4.2.2 Algoritmo de la Transformada Wavelet Rápida …25
4 Sistema de Segmentación
4.1
Implementación del Sistema de Segmentación de Fonemas
en MATLAB ……………………………………………………
4.1.1 Adquisición de la Señal de Voz ………………………....
4.1.2 Preprocesamiento ………………………………………..
4.1.3 Extracción de Características …………………………...
4.1.3.1 Trasformada Wavelet …………………………….
4.1.3.2 Selección de la Wavelet Madre ………………….
4.1.3.3 Wavelet Denoising ………………………………
4.1.3.4 Normalización …………………………………...
4.1.3.5 Energías Sub-bandas …………………………….
2
26
27
30
31
32
32
34
35
35
36
4.1.4 Reglas de Selección …………………………………….. 37
4.1.5 Realce de la Señal ……………………………………… 44
4.1.6 Transformada Wavelet Inversa ………………………… 44
5 Implementación en el DSP
46
5.1 Captura y Pre-procesamiento de la Señal …………………………… 48
5.2 Conversión de Datos ………………………………………………... 49
5.3 Función Procesar Segmento ………………………………………… 49
5.4 Pruebas de Desempeño ……………………………………………… 52
6 Conclusiones
54
7 Proyecciones
55
Bibliografía
56
A Código fuente para MATLAB
58
A.1 Código fuente del programa principal …………………………………….. 58
B Código fuente para el DSP TMS320C6701
61
B.1 Código fuente del programa principal ……………………………………… 61
B.2 Código fuente función que procesa el segmento …………………………… 62
B.2.1 Archivo de cabecera segmentación.h …………………………….. 62
B.2.2 Archivo fuente segmentación.c …………………………………… 63
3
Índice de Figuras
1.1 Sistema de Segmentación ……………………………………………………. 1
2.1a Esquema del Aparato Fonador Humano ......………………………………. 4
2.1b Esquema aproximado de la producción de la voz ………………………… 4
2.2 El Oído Humano …………………………………………………………… 7
2.3 Membrana basilar "estirada" ……………………………………………….. 8
2.4 Banco de filtros de escalas de Mel ………………………………………….. 9
2.5 Audiograma ………………………………………………………………….. 10
2.6 Audífono 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 traslación de wavelet ……. 16
3.4 Graficas de algunas wavelet madre. ………………………………………... 18
3.5 Variable escala ……………………………………………………………… 20
3.6 Proceso de análisis en diferente escala y traslación
(a) escala fija a 1 y traslación variante ………………………………….. 21
(b) escala fija a 20 y traslación 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 Rápida (FWT) o Algoritmo de Mallat …………….. 24
3.10 Diagrama de bloques de la descomposición multiresolución de una señal
por medio de la transformada wavelet.
(a) Banco de análisis …………………………………………………….. 24
(b) síntesis ………………………………………………………………. 24
3.11 Respuesta en frecuencia del banco de filtros Wavelet …………………… 25
4.1 Sistema de Segmentación de Señales Propuesto en el Proyecto 195 ……….
4.2 Estructura del Sistema de Segmentación …………………………………..
4.3 Esquema en memoria del vector de muestras a filtrar ……………………..
4.4 Diagrama de flujo de la simulación en MATLAB …………………………
4.5. Análisis por bloque del filtro pre-énfasis …………………………………
4.6 Bloque de Extracción de Características …………………………………..
4.7 Análisis de Descomposición por nivel en Matlab …………………………
4.8 Descomposición de un Bloque X = 512 datos de la señal en
niveles de detalle y uno de aproximación ……………………………….
4.9 Bloque de normalización ……………………………………………………
4.10 Palabra “mata” etiquetada …………………………………………………
4.11 Detección de segmentos de silencio en la palabra ‘mata’ …………………
4
27
27
28
29
32
32
33
33
36
38
39
4.12 Esquema de la Transformada Wavelet Inversa, para recuperar un
bloque de 512 datos ……………………………………………………... 45
4.13 Señal de la palabra “mata” recuperada ……………………………………... 45
5.1 Técnica de doble buffer usando DMA para captura de un bloque de 64ms
con su respectivo análisis y reproducción ………………………………. 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
5
Índice de Tablas
2.1 Clasificación de las consonantes de acuerdo a su articulación …………….. 6
2.2 Clasificación de los fonemas vocálicos ……………………………………. 6
4.1 Ejemplos de algunas muestras de voz previamente capturadas ……………. 31
4.2 Número 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 Número de Coeficientes de cada nivel en un bloque de 512 muestras de la
señal para el Cálculo de las Energías …………………………………… 36
4.6 Etiquetado Manual de la palabra “mata” …………………………………… 37
4.7 Cambio de energía entre segmentos por banda …………………………….. 38
5.1 Tiempos promedio de ejecución de las funciones dentro de la rutina
del servicio de interrupción …………………………………………….. 52
5.2 Tiempos promedio de ejecución de conversión de los datos ……………….. 53
5.3 Tiempo total de la ISR ……………………………………………………… 53
6
Capitulo 1
Introducción
Este trabajo plantea una aplicación al sistema de segmentación propuesto por el grupo
GDSPROC de la Universidad del Quindío. El objetivo fundamental es diseñar un sistema
automático de realce de voz por medio de la segmentación de señales utilizando la
Transformada Wavelet. El proceso de segmentación juega un papel muy importante en
aplicaciones que corresponden a la construcción de sistemas de reconocimiento continuo de
voz y al realce de las señales de voz, en audífonos para personas con deficiencias auditivas,
en donde está enfocado nuestro trabajo. Partiendo de las investigaciones realizadas por el
Grupo de Procesamiento Digital de Señales GDSPROC en el proyecto 195, apéndice D
[Hur03], en el cual plantean el sistema de segmentación de señales mostrado en la figura
1.1, proponemos una aplicación que realza los segmentos de la señal identificados, con el
fin de ser utilizados en sistemas de apoyo a personas con deficiencias auditivas.
El proyecto consiste en segmentar una señal 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 señal en diferentes
bandas de frecuencia, se analizan en sub-bloques de 4ms, la evolución de la energía en cada
banda y se establecen reglas de selección para identificar los segmentos. Una vez
identificados estos segmentos se efectúa 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 señal con las características
antes mencionadas y libre de ruido, por medio de la transformada wavelet inversa.
Figura 1.1 Sistema de Segmentación
7
Para la implementación 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:
Capítulo 2 (Características Acústicas): Analizaremos una visión global de cómo se
producen los sonidos, como están clasificados los fonemas y cuales son las características
del oído.
Capítulo 3 (Transformada Wavelet): Presentaremos la teoría necesaria para comprender
las ventajas de la Transformada Wavelet con respecto a la Transformada de Fourier en el
análisis de señales.
Capítulo 4 (Sistema de Segmentación): Se hará una descripción del sistema de
segmentación, así como su implementación en Matlab y los resultados obtenidos en la
simulación con señales previamente capturadas.
Capítulo 5 (Implementación en el DSP): En este capítulo explicaremos las rutinas
utilizadas en C++ para la implementación 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.
Capítulo 7 (Proyecciones): Plantearemos los posibles trabajos futuros que se puedan
derivar de este proyecto o que sirvan de complemento para otros trabajos.
Apéndice A (Código Fuente para Matlab): Presentaremos todo el código fuente en
Matlab para la simulación del sistema expuesto en el capítulo 4.
Apéndice B (Código Fuente del Sistema en Tiempo Real): Expondremos el código en C
desarrollado para la implementación del sistema en tiempo real en un DSP TMS320C6701.
8
Capítulo 2
Características Acústicas
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 alófono
es una de las diferentes pronunciaciones para un fonema en particular. El fonema es una
abstracción y realmente no puede ser pronunciado excepto en términos de uno de sus
alófonos [Dal69]. Tomando en cuenta lo anterior se puede decir que en cualquier lenguaje
el número de fonemas es obviamente más pequeño que el número de fonos o alófonos.
Tenemos la idea ortográfica de que es muy fácil separar la palabra “mesa” en cuatro
sonidos: /m/e/s/a/, pero físicamente es un continuo de principio a final. Como
Consecuencia, en la vocal /e/ hay elementos de la /m/ y de la /s/. Además, para poder hablar
de prisa no llegamos a efectuar los movimientos completos, y los dejamos a medias. Por
esas y otras razones, el reconocimiento automático de fonemas no es tan fácil como uno
quisiera.
2.1 Realización Fonética
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 músculos gemelos,
elásticos, 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 fonéticamente son los órganos de fonación.
La señal de voz se limita a una banda de frecuencias que va desde 300 Hz hasta 3300 Hz. A
pesar de esto, tal señal 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 también 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 señal de ruido blanco, corresponde a los
fonemas sordos (consonantes), El tracto vocal es modelado como un sistema que modifica
la se˜nal (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 producción de la señal de voz y el tracto vocal se muestra en la figura 2.1b.
9
2.2 Clasificación de los Fonemas
Los sonidos están 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 producción de la voz
2.2.1 Fonemas Consonánticos
Se producen sonidos consonánticos cuando el aire al salir encuentra un obstáculo, ya sea
cerrándole totalmente el paso, o dejándole una estrechez por donde pasa con fricción. Para
clasificar a las consonantes se tendrá en cuenta el concepto de articulación. Se entiende por
articulación de un sonido la posición adoptada por los órganos de la cavidad bucal en el
momento de producirse un sonido.
10
En la producción y clasificación de las consonantes hay que tener en cuenta los siguientes
factores:
1. Lugar de articulación.
2. Manera de articulación.
3. Articulaciones sonoras o sordas.
Lugar de Articulación
Para el idioma Español hay nueve lugares de articulación para las
consonantes:
1. Bilabial. El labio inferior contra o cerca del labio superior. Ejemplo: [m] en más.
2. Labiodental. El labio inferior contra o cerca del borde de los dientes frontales
superiores. Ejemplo: [f] en fuente.
3. Dental. Posición de la lengua contra el borde o atrás de los dientes superiores
frontales. Ejemplo: [d] en dar.
4. Alveolar. Posición de la lengua contra o cerca de la zona alveolar. Ejemplo: [l] en
luna.
5. Palatal. Posición 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. Bilabio−velar. 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 jardín.
Manera de Articulación
Independientemente de cual sea la zona o punto de articulación, los órganos adoptan una
postura o una posición al producir los fonemas. A esto se le llama modo de articulación. En
español hay seis maneras de articulación en las consonantes.
1. Oclusivas. En algún punto de la articulación del sonido la corriente de aire queda
detenida y después es liberada con una pequeña explosión. Ejemplo: [p] en pasar.
2. Fricativas. La corriente de aire, sin ser detenida, es forzada a través 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 fricción como
en un fricativo.
4. Nasales. El velo es bajado y la corriente de aire pasa a través de la cavidad nasal con
gran resonancia. Ejemplo: [m] en más.
5. Semivocales. La cavidad oral es cerrada a la mitad, pero la corriente de aire escapa
por ambos lados del lugar de articulación. [l] en luna.
6. Vibrantes. La posición de la lengua, bajo tensión, conecta el alveolar una vez que la
corriente de aire pasa a través 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 articulación, puede producirse con
vibraciones de las cuerdas vocales o sin ellas.
11
•
•
Sonoros, si las cuerdas vocales se aproximan y comienzan a vibrar. Tendremos que
separar los sonidos vocálicos, de los consonánticos.
Sordos, si las cuerdas vocales se acercan entre si pero no llegan a vibrar.
Fonemas Sonoros
s, j, f, ch, p, t, k
Fonemas Sordos
b, d, g, m, n, ñ, l, r, rr, y
Tabla 2.1 Clasificación de las consonantes de acuerdo a su articulación
2.2.2 Fonemas Vocálicos
Con las vocales, la posición 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 posición de la lengua es significante
debido a que cambia el tamaño y forma de la cavidad oral.
Acústicamente, cuando pronunciamos una vocal hay unas bandas de frecuencia que se
amplifican más según donde pongamos la lengua: una A, por ejemplo, se articula de forma
más estrecha en la zona de la faringe y más ancha en la zona de la boca, lo cual lleva a la
amplificación 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. También hay tres posiciones de la lengua de frente
hacia atrás: Anterior, cuando la parte alta de la lengua está muy cerca del alveolar; central,
cuando la parte más alta de la lengua está en el centro de la cavidad oral; y posterior, donde
la parte más alta de la lengua, el dorso, está muy cerca del velo.
Por esto se puede clasificar a las vocales en un cuadro bidimensional. En español hay cinco
posiciones principales.
Alto
Medio
Bajo
Anterior
i
e
Central
Posterior
u
o
a
Tabla 2.2 Clasificación de los fonemas vocálicos
Las vocales son de mayor duración que las consonantes y están bien definidas
espectralmente. Por esto las vocales usualmente son fáciles 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.
12
El principal motivo para la clasificación de los fonemas de acuerdo a su manera y lugar de
articulación es para poder más adelante hacer experimentos en los cuales se agrupan los
fonemas para efectos de mejoras en el reconocimiento.
2.3 Características del Oído
La audición es el resultado de una serie de procesos acústicos, mecánicos, nerviosos y
mentales dentro de la combinación oído/cerebro que dan a una persona la impresión de
sonido [Ber69].
El oído consta de tres partes principales (figura 2.2):
·
·
·
El oído externo
El oído medio
El oído interno
Figura 2.2: El Oído Humano
El oído externo
Los sonidos del mundo exterior son recogidos por el oído externo, el cual está formado por
el pabellón auricular (la oreja) y el conducto auditivo externo. Cuando las ondas sonoras
penetran en el oído, 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 oído: el tímpano (2) – una membrana flexible, circular que
vibra cuando es alcanzada por las ondas sonoras.
El oído medio
Las vibraciones del sonido continúan su viaje hacia el oído medio, que contiene tres
pequeños huesos llamados yunque, martillo y estribo (3, 4, 5). Estos hacen de puente entre
el tímpano y el oído interno. Incrementan y amplifican las vibraciones del sonido aún mas,
antes de transmitirlas sin peligro hacia el oído interno vía la ventana oval.
13
El oído interno
El oído interno o cóclea, similar a la concha circular de un caracol, alberga un sistema de
tubos que están rellenos de un fluido acuoso. Cuando las ondas sonoras pasan a través de la
ventana oval (6), el fluido empieza a moverse, haciendo que unos pequeños cilios se
muevan a su vez. Posteriormente, estos cilios transforman las vibraciones en impulsos
eléctricos que viajan por el nervio auditivo (9) hasta el mismo cerebro. Aún se desconoce
cómo traduce el cerebro estos impulsos nerviosos.
2.3.1 El oído como analizador de frecuencias
Como se ve en la figura 2.3, la membrana basilar se estira por la cóclea. Esta membrana
varía en masa y rigidez a lo largo de su longitud. En el extremo más próximo a la ventana
oval y al tímpano, la membrana es rígida y ligera, así que su frecuencia de resonancia es
alta. En el extremo distante, próximo 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 audición humana, que va desde los 20Hz hasta los 20KHz, sin embargo,
en la práctica sólo llega hasta los 16 KHz, siendo las frecuencias más 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 aplicación de un sonido es una función de la frecuencia.
Según estudios realizados por Bark y Mel [MMO95], encontraron una relación no lineal
entre la frecuencia entrante al oído y la que éste realmente percibe. Tales estudios se
resumen en dos ecuaciones empíricas que relacionan estas dos frecuencias:
0.76 f
f2
f bark ( f ) = 13 arctan
+ 3.5 arctan
(2.1)
100
7500 2
14
1+ f
(2.2)
700
Donde esta última es la más usual en aplicaciones del tratamiento de la voz. A partir de esta
concepción caprichosa adoptada por nuestro oído, es posible desarrollar un banco de filtros
que analice la señal 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.
f mel = 2595 log
Figura 2.4: Banco de filtros de escalas de Mel
2.4 Audiometría
Es un conjunto de pruebas para medir la audición, se lleva a cabo de dos formas [Mar99]:
Vía aérea: Se llama de esta manera cuando se evalúa la habilidad para oír sonidos
transmitidos a través del aire. Se usan unos auriculares para presentar los sonidos.
Vía ósea: Evalúa la capacidad para oír el sonido a través de los huesos de la cabeza. Se usa
un altavoz especial que transmite vibraciones.
La audiometría convencional suele usar tonos puros. Un tono puro se compone de una
única frecuencia de estimulación. 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 más importantes para la audición de la palabra ya que en dicho
rango se sitúan la mayoría de los fonemas que componen la voz humana.
La audiometría se realiza mediante la utilización de un aparato electrónico denominado
audiómetro. Dicho aparato se compone de un generador de estímulos que son transmitidos
al individuo a través de unos auriculares aplicados estrechamente al oído, o un vibrador
aplicado al hueso situado inmediatamente detrás del mismo (mastoides).
En cualquier audiometría se van a realizar dos tipos de mediciones. Por un lado vamos a
estudiar el umbral audiométrico a través de la vía aérea, esto es, utilizando el auricular
aplicado al pabellón auditivo, y por otro a través de la vía ósea, mediante la aplicación de
un vibrador al hueso de la mastoides.
En el primero de los casos, el ruido debe transmitirse a través del conducto auditivo externo
(donde se forman los tapones de cera), a través del oído medio (donde están los huesecillos
más pequeños del cuerpo), y del oído interno, más conocido como caracol, hasta llegar al
15
nervio auditivo y al cerebro. En el caso de la estimulación por vía ósea se prescinde tanto
del oído externo como del medio, produciéndose una estimulación directa del oído interno a
través de los huesos del cráneo.
Para realizar una audiometría, bien mediante la estimulación aérea (con auriculares) u ósea
(con vibrador), se introduce normalmente a la persona en una cabina aislada acústicamente,
de forma que el ruido de estimulación no se mezcle con el ruido ambiente de la sala de
exploración. 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 audiometría se representa en una gráfica llamada audiograma la cuál viene definida por
un eje de ordenadas dividido en intervalos de 10 dBs. y un eje de abscisas donde se sitúan
los diferentes tonos que utilizamos para estimular, desde los más graves (125 y 500 Hz)
hasta los más 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 audiometría es normal cuando cumple dos premisas:
• Todos los umbrales audiológicos se sitúan en todas las frecuencias por debajo de los
20 dBs.
• No hay una diferencia superior a 5 dBs. entre las respuestas obtenidas mediante la
estimulación con los auriculares por vía aérea y el vibrador óseo.
16
Evidentemente la audiometría es anormal cuando no se cumple alguna de las dos premisas
anteriores. Si los umbrales se sitúan por encima de 20 dBs estaremos hablando de una
pérdida 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 pérdida 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 sitúan por encima de los 20 dBs. las diferencias
de la conducción ósea y la vía aérea nos van a permitir intuir que porción, de todos los
elementos que intervienen en la audición, no está funcionando de forma correcta.
2.4.1 Componentes de un audífono
Todos los audífonos (figura 2.6) constan de tres componentes importantes. Permanecen
juntos en una funda protectora que suele ser de plástico.
Figura 2.6 Audífono Intracanal
•
Micrófono El micrófono recoge los sonidos del aire y los convierte en señales
eléctricas.
•
Amplificador El amplificador aumenta la intensidad de las señales del micrófono.
Los filtros modifican los sonidos de modo que sólo se amplifican aquellos que son
importantes para la persona.
•
Altavoz El tercer componente básico es el "altavoz" (receptor). Convierte las señales
eléctricas en acústicas, que la persona puede oír.
17
•
Microordenador Estos tres componentes se encuentran en todos los audífonos.
Además, en los audífonos digitales, por ejemplo, se puede programar un
microordenador para manipular las señales y adaptarse a la pérdida de audición de
la persona con una deficiencia de audición en particular.
Algunos audífonos están equipados con controles de volumen y otras funciones de
control, que se pueden utilizar para realizar ajustes individuales.
18
Capítulo 3
TRANSFORMADA WAVELET
3.1
INTRODUCCIÓN
Durante la última década, la transformada wavelet ha sacudido las matemáticas aplicadas y
la investigación en ingeniería, demostrado ser de gran utilidad como herramienta de
procesamiento. El interés en la transformada wavelet ha aumentado conforme las
aplicaciones se han hecho más numerosas y se está convirtiendo en parte de los futuros
estándares en el análisis de señales y compresión de imagen y video. La teoría de las
wavelets es una herramienta matemática reciente, basada en la Teoría de Conjuntos y la
representación en funciones integrables cuadráticas, que permiten presentar una señal o un
campo tanto en escala, espacio y posibles direcciones [Jal00].
La Transformada Wavelet es también conocida como “el microscopio matemático”
[ADJ03], que tiene como antecedente la Transformada de Fourier, la cual es útil cuando se
estudian señales con propiedades estadísticas constantes en el tiempo o en el espacio, dado
que ésta representa una señal como una superposición de sinusoides (con duración infinita
en el tiempo), con diferentes frecuencias, donde los coeficientes de Fourier miden la
contribución de las sinusoides a esas frecuencias. De forma similar, la transformada de
wavelet representa una señal como una suma de wavelet con diferentes localizaciones y
escalas. Los coeficientes de wavelet esencialmente cuantifican la fuerza de la contribución
de las wavelets a esas localizaciones y escalas, su característica principal es la multiresolución, lo que permite el cambio de escala, constituyendo un medio adecuado para el
análisis de señales no estacionarias, sobre todo aquellas que presentan transiciones
abruptas.
Sin embargo, las señales reales tienen usualmente propiedades estadísticas que cambian con
el tiempo y parece más natural emplear funciones localizadas o “wavelet” para representar
estas señales en lugar de funciones seno y coseno. De esta manera, la representación de
señales no estacionarias como suma de un conjunto de funciones base localizadas
19
temporalmente permite obtener una representación más compacta y precisa de las
propiedades de la señal que la obtenida utilizando series de Fourier.
Existen dos tipos de wavelet: las continuas y las discretas. El tratamiento con wavelet
discretas analiza la señal a diferentes bandas de frecuencia con diferentes resoluciones al
descomponer la señal en aproximaciones y detalles, empleando para ello dos conjuntos de
funciones: las funciones de escalamiento y las funciones wavelet respectivamente, ésta
permite una aplicación directa a procesos computacionales. Las wavelet continuas
presentan por una parte la dificultad de su manejo al tener que evaluar un gran número de
integrales y tener en consecuencia una redundancia de información, 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 función f en términos de wavelet.
• Las wavelet tienen localización espacial y de frecuencia.
• Con las wavelet es posible implementar algoritmos rápidos de cálculo para la
transformada. Esto es más practico que teórico.
3.2
Repaso de la Transformada de Fourier
La Teoría de Wavelet trabaja de manera similar que la Teoría de Fourier, la cual dice que
una señal se compone de una serie de funciones sinusoidales y de ésta forma es más
sencillo su análisis. Recordando un poco, la Transformada de Fourier (FT) de la señal x(t)
está definida por la ecuación 3.1 :
∞
FT ( f ) =
−i 2πft
(
)
x
t
e
dt
∫
(3.1)
−∞
La transformada de Fourier trabaja bien si la señal 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 señal original, es decir, no tenemos información
del instante de tiempo en el cual un acontecimiento determinado ocurre en la señal, lo
implica una gran falencia ante la necesidad de analizar una señal 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) también conocida como
la transformada de Gabor. La STFT aplica una función g(t) utilizada como ventana de
análisis que se mueve sobre x(t) para determinar el espectro en cada instante de tiempo, ver
figura 3.1 y 3.2. La expresión que nos permite este análisis es:
∞
STFT
(b , f ) =
∫ x (t ) g
*
( t − b ) e − iπ
2 ft
dt
−∞
(3.2)
Donde el parámetro b indica la posición en el tiempo en la que se hace el análisis y *
denota el complejo conjugado. La desventaja que presenta esta transformada es que la
ventana de análisis es de un tamaño fijo (figura 3.1), por lo existe un límite de precisión y
resolución y por eso no puede adaptarse a las características de la señal en ciertos puntos
20
interesantes de analizar, ya que puede proveer poca información espectral o en algunos
casos redundar en esta información. Por ejemplo, cuando la ventana está ubicada en el
instante de tiempo T = 0, la STFT puede determinar con precisión la frecuencia de la señal
presente en este segmento, dado a que la longitud de la ventana abarca más de un período
completo (Figura 3.2a), sin embargo, cuando la ventana se ubica en T = T1, no se logra
abarcar un período completo, y por ende no es posible determinar con precisión el
contenido de frecuencia de este segmento de tiempo (Figura 3.2b).
En pocas palabras, la STFT puede resolver con buena resolución el contenido de altas
frecuencias pero es incapaz de hacerlo para regiones que involucren frecuencias más bajas
de lo que permita la longitud de la ventana, es así como, para un análisis de mejor
resolución 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 Teoría de las Wavelet, dado
que mantiene las ideas principales de un análisis tiempo-frecuencia utilizando una ventana
de análisis diferente.
3.3 ¿Qué son las wavelet?
Las wavelet son un conjunto de familias de funciones ortonormales básicas que no
requieren ser de duración 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 señal de interés para obtener sus características de espacio y tamaño
[Teo98]. La característica de las wavelet es la posible dilatación o contracción (figura 3.3),
que consiste en la variación de un parámetro a llamado factor de escala, en la función
generadora de la wavelet, alargando su duración en el tiempo y modificando su amplitud, lo
que permite modificar su respuesta en frecuencia y se define por:
21
ψ
a ,b
1
(t ) =
 t − b 
ψ 

a


a
(3.3)
donde a, b∈R, a ≠ 0 y ψ (t ) es la “wavelet madre”, que se considera una función pasa
banda, a esa función madre se le agregan un par de variables que son la escala ‘a’ que
permite hacer las dilataciones y contracciones de la señal y la variable de traslación ‘b’, que
nos permite mover a la señal en el tiempo. Estas variables son números reales y obviamente
para una escala de ‘a’= 0 la wavelet no existirá y el análisis se indeterminará.
2
f (t ) = ψ (t ); a = 1
1
0
-1
0
5
10
15
1
0
-1
-2
0
5
10
f (t ) = ψ (2t ); a =
1
2
f (t ) = ψ (4t ); a =
1
4
15
2
0
-2
0
5
10
15
Figura 3.3: Izquierda wavelet a diferentes escalas, derecha traslación de wavelet
La Wavelet ψ (t ) debe satisfacer las siguientes condiciones:
1. Ser una señal de energía,
2
∫ψ (t ) dt < ∞ .
2. Exhibir una pequeña oscilación, de tal forma que tenga media cero.
Existe un sin número de funciones ψ (t ) que cumplen las condiciones anteriormente
mencionadas, de las cuales las más sobresalientes fueron desarrolladas por científicos
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 señal o función
x(t), como la combinación lineal de un número infinito de wavelet escaladas (dilatadas o
contraídas) y desplazadas a lo largo de toda la señal [MYG97],
3.4 Transformada Wavelet
Las Transformadas Wavelet Comprenden la Transformada Continua de Wavelet y la
Transformada Discreta de Wavelet. Estas son las herramientas matemáticas que permiten el
análisis de señales de manera muy similar como lo hace la Transformada de Fourier de
22
Tiempo Corto dando información en el dominio del tiempo y en el dominio de la
frecuencia.
1.51
0.8
1
0.6
0.5
0.4
0
0.2
-0.5
0
-1
-0.2
-1.5
-0.4 0
-8
0.1
0.2
-6
-4
0.3
0.4
-2
0.5
0
0.6
2
0.7
0.8
4
0.9
6
1
8
Wavelet Haar
Wavelet Mexican Hat
1.5
1
0.5
0
-0.5
-1
-1.5
0
1
2
3
4
5
6
7
8
9
Wavelet Daubechies de orden 5
2
1.4
1.2
1.5
1
0.8
1
0.6
0.4
0.5
0.2
00
-0.2
-0.5
-0.40
0
0.5
0.5
1
1.5
1
2
2.5
1.5
3
2
3.5
4
2.5
4.5
3
5
Wavelet symmlet de orden 2
Wavelet Coiflet de orden 1
23
11
0.8
0.5
0.6
0.4
0
0.2
0
-0.5
-0.2
-0.4
-1
-0.6
-0.8
-1.5
-10
-8
-6
-4
5
-2
0
10
2
4
6
15
8
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 número real o
complejo, a una señal de energía finita, con una función particular “ψ ”denominada
wavelet madre, una vez seleccionado el instante y la escala de observación. Permite así
analizar estructuras de la señal que dependen del tiempo y de la escala, siendo una
herramienta útil para detectar, caracterizar y clasificar señales con características
espectrales extravagantes, contenidos transitorios y otras propiedades relacionadas con la
falta de estacionariedad.
Sea x(t) una señal del espacio L2(R) y ψ una wavelet madre, para la que más tarde se darán
especificaciones. Las denominadas wavelet analizadoras se construyen partiendo de
ψ ,, realizando sobre ella operaciones de traslación en el tiempo y dilatación, de forma que
la posicionan y la dilatan hasta conseguir el efecto de análisis 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 ) =
t −b
ψ

a  a 
1
(3.4)
Los coeficientes de la transformada wavelet de la señal x(t) respecto de la wavelet madre ψ
son los productos escalares de x con las funciones de test:
CWT x ( a , b ;ψ ) = x ,ψ a ,b =
∞
* t − b 
(
)
x
t
ψ

 dt
∫
a


a −∞
1
(3.5)
El parámetro ‘b’ desliza la wavelet en busca de información local y el parámetro ‘a’
controla el ‘tamaño’ de la wavelet (a≠0), de forma que cuando a tiende a 0, se obtiene algo
parecido a un ‘zoom’ del comportamiento de la señal 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
24
de la wavelet. De esta manera tendremos que la ecuación (3.5) se puede expresar también
de la siguiente manera:
CWT
x
( f , b ;ψ ) =
x ,ψ
a ,b
∞

* f

 dt
(
)
−
t
b
(
)
ψ
x
t
∫− ∞
 fo


f
fo
=
(3.6)
De esta forma esta transformada permite la representación de la señal x(t) en el plano
tiempo escala.
Lo siguiente es explicar como: la CWT transforma la señal de un dominio a otro que
depende de 2 variables. La variable escala lleva en si la información de la dilatación y la
contracción de la señal (figura 3.5), pero podría 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á característica de las
wavelet para obtener la información de la señal y conocer sus componentes de frecuencia.
En el dominio del tiempo el análisis es más sencillo ya que la variable de traslación tiene la
información 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 traslación-escala,
que es equivalente a tener la información en el plano tiempo-frecuencia [Her03].
Es importante aclarar que el proceso de transformación de una señal es reversible debido a
que se preserva la energía de la señal, lo que se conoce con el nombre de Transformada
Wavelet Inversa Continua (ICWT), que está dada por la ecuación 3.7:
x (t ) =
1
CΨ
∫∫

t−b
 CWT ( a , b )ψ  a


2

a





dbda



(3.7)
donde la constante C Ψ (denominada condición de admisibilidad) depende sólo de la
función wavelet madre ψ (t ) , de acuerdo con:
C Ψ = 2π
∞
∧
∫ ψ (ξ )
−∞
2
ξ
−1
dξ < ∞
(3.8)
Sin embargo la Transformada Wavelet de Tiempo Continuo no se presta para aplicaciones
prácticas donde las señales se representan de manera discreta.
25
Figura 3.5: Variable escala
3.4.2
Transformada Wavelet Discreta (DWT)
Partiendo de la ecuación (3.3) la DWT emplea valores para ‘a’ y ‘b’, en una escala de
potencias de dos denominada diádica (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 V j ⊂ V j −1 ⊂ ... ⊂ V1 ⊂ V0 , siendo V0 = l2(Z)
el espacio de secuencias de números enteros de cuadrado sumable [VK95]. Estos
subespacios Vj son completos y satisfacen la propiedad, ∪ Vj = l2(Z), j∈[0,J]. La
descomposición multiresolución de una señal 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 g n ∈V0 tal que
{
{g n−2 k }k∈Z
}
es una base de V1, entonces existe una secuencia hn ∈ V0 tal que hn −2 k k∈Z es
una base de W1, y V0 se descompone como: V0 = W1 ⊕ W2 ⊕ … ⊕ Wj ⊕ Vj
simplemente iterando la ley anterior de descomposición J veces. En el caso de estar
definiendo el concepto de multiresolución por medio de wavelets ortogonales, Wj+1 se
define como el complemento ortogonal de Vj+1 en Vj.
26
(a)
(b)
Figura 3.6: Proceso de análisis en diferente escala y traslación.
(a) escala fija a 1 y traslación variante, (b) escala fija a 20 y traslación variante.
27
Lo atractivo de esta transformada es que el desarrollo en serie de wavelet conduce a una
estructura de descomposición multiresolución por medio de un eficiente algoritmo de
cálculo basado en la implementación piramidal de un banco de filtros. El banco de filtros de
análisis o descomposición 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 aproximación 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 Análisis de Multiresolución (MRA), que
consiste en estudiar la señal empleando por cada componente de frecuencia una resolución
diferente. Esto es una alternativa más sobre la STFT que analiza todas las componentes de
frecuencia a una misma resolución (sección 3.2). En general, las ventajas que ofrece este
método es que, con el uso de wavelet, a altas frecuencias (bajas escalas) se tiene una buena
resolución en tiempo y poca resolución en frecuencia, información detallada o parámetros
escondidos en la señal (que usualmente ocurren en periodos cortos de tiempo), mientras que
para bajas frecuencias (grandes escalas) corresponden a información global de la señal y los
resultados requieren buena resolución en frecuencia y poca resolución 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 serían de igual dimensión para todos los casos ya
que para ese análisis 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 señal, dada la resolución que se puede alcanzar.
(a)
(b)
Figura 3.8: Planos Tiempo-Frecuencia para (a) STFT (b) TW
28
3.4.2.1 Transformada Wavelet Rápida (FWT)
La transformada discreta wavelet unidimensional (1-D DWT) se puede calcular por medio
de la Transformada Wavelet Rápida (FWT) o algoritmo piramidal desarrollado por Mallat
[Mal89] (figura 3.9), la cual es una implementación computacionalmente eficiente donde
su costo computacional es Θ(L) (siendo L la longitud de la señal de entrada).
La Transformada Wavelet Rápida (FWT) descompone una señal en sus secuencias de
aproximación y detalle en diferentes niveles u octavas (figura 3.10a). El cálculo de la
transformada wavelet se inicia con una señal de entrada, a(0)n . Sean a(i-1)n y d(i-1)n sus
secuencias de aproximación y detalle en el nivel de descomposición i-1, respectivamente.
La aproximación y detalle de la señal en el nivel i se definen como:
a
(i )
n
d
(i )
n
N −1
= ∑ g k a 2(in−−1k)
k =0
=
N −1
∑h a
K =0
k
( i −1)
2n−k
Filtro Pasa-Bajo
(3.9)
Filtro Pasa-Alto
(3.10)
siendo gk y hk 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 cálculo de la Transformada Wavelet Rápida. Los
coeficientes de los filtros se obtienen a partir de la representación de la wavelet madre en
tiempo continuo.
La resolución de las diferentes aproximaciones a n(i ) así obtenidas disminuye al aumentar i.
Puesto que las señales a n(i ) (i = 1, 2, ..., J) representan a la señal original en varias
resoluciones, la FWT también se conoce como una técnica de descomposición
multiresolución de señales, esta estructura recibe el nombre de banco de filtros de análisis,
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 máxima componente de frecuencia de la señal a analizar, posteriormente la
salida de ambos filtros se vuelve a enviar a otro par de filtros de las mismas características,
la frecuencia de corte del segundo filtro es la mitad de la máxima componente de
frecuencia de la señal 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 reducción a la mitad de la resolución,
lo que significa que a mayor número de etapas de filtrado se tendrá una mayor resolución a
baja frecuencia.
La señal de entrada a n( 0) se puede reconstruir a partir de su descomposición multiresolución
de acuerdo con:
{
an(i −1) = ∑ ak(i ) g n−2 k + d k(i ) hn−2 k
}
(3.11)
k
Esta ecuación describe el banco de filtros de síntesis, que consta de un filtro paso baja y
otro paso alta de coeficientes g n y hn , respectivamente, y que se encuentran fijados por las
condiciones de reconstrucción 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 análisis y
síntesis respectivamente.
29
Figura 3.9: Transformada Wavelet Rápida (FWT) o Algoritmo de Mallat
(a)
(b)
Figura 3.10. Diagrama de bloques de la descomposición multiresolución de una
señal por medio de la transformada wavelet. (a) Banco de análisis y (b) síntesis.
Resulta interesante evaluar el número de operaciones de filtrado que se deben realizar por
cada muestra de la entrada a n( 0) . Nótese que los bancos de filtros de análisis y síntesis
conllevan exactamente el mismo número de operaciones. La señal de entrada a n( 0) se utiliza
como entrada de los dos filtros y de la salida de estos dos filtros sólo se utiliza una de cada
dos muestras debido a la decimación por 2. De esta manera, la primera pareja de filtros sólo
30
realiza 2(1/2)= 1 operaciones de filtrado por cada muestra de entrada. En el segundo nivel
de descomposición y puesto que la frecuencia de la señal a n(1) es la mitad de la frecuencia de
la señal de entrada, sólo se realizan ½ operaciones de filtrado por muestra de entrada.
Extendiendo este desarrollo se determina que el número 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 Rápida (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 2J-i )
a
(i )
n
d
(i )
n
N −1
= ∑ g k a 2(in−−1k)
k =0
=
N −1
∑h a
K =0
k
( i −1)
2n−k
Filtro Pasa-Bajo
Filtro Pasa-Alto
Fin {Algoritmo Piramidal Directo}
Siendo a n( 0) = x(n) , L = 2J, con J representando el número de octavas, y N siendo la
longitud de los filtros paso baja y pasa alta.
31
Capítulo 4
Sistema de Segmentación
El sistema de segmentación de señales 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 señal 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 resolución, en
cambio, los fonemas sonoros, tales como las vocales, con las escalas de menor resolución,
El sistema de segmentación propuesto que se plantea en el Apéndice D del proyecto de
investigación 195 de la Universidad del Quindío [Hur03] figura 4.1, se basa en utilizar la
DWT con la wavelet madre que mejor se ajuste a las características de la señal para
descomponerla en cuatro niveles o sub bandas y hacer una identificación entre fonemas
sonoros, sordos y tramos de silencio o ruido. El método para la segmentación y
clasificación de los fonemas en tiempo real consiste en capturar bloques de 64ms que
equivalen a 512 datos, y analizar pequeños sub-bloques de 4ms de longitud
correspondientes a 32 muestras por medio de una FWT, hacer una clasificación mediante
reglas de selección, las cuales se obtienen mediante un estudio de evolución de las energías
de cada uno de los niveles de descomposición, para facilitar el proceso de segmentación , la
información se suaviza por medio de un filtro de media móvil de 8 coeficientes. Una vez
identificado los segmentos de los fonemas se efectúa un realce en las diferentes bandas de
descomposición según el segmento identificado y se procede a recuperar la señal utilizando
la IDWT, la señal recuperada traerá las características adecuadas para la escucha en una
persona con deficiencias auditivas.
A continuación analizaremos la estructura del sistema de segmentación, de la figura 4.2,
detallando cada uno de los bloques que comprenden dicho sistema, y su implementación 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.
32
d-1……d-4
Extracción de
características a
bloques de 32
muestras
Filtro
media
móvil
d / dt
Detector
del
Segmento
Clasificador
d-1…..d-8, a-8
Figura 4.1 Sistema de Segmentación de Señales Propuesto en el Proyecto 195.
DWT
Captura
Señal de Voz
Pre-énfasis
Adquisición
Preprocesamiento
Wavelet
Denoising
Log
∂t
∫
exp{ }
Cálculo de
Energías
Normalización
Extracción de Características
Identificación
del Fonema
Realce
Segmentación
Realce de la Señal
Figura 4.2 Estructura del Sistema de Segmentación
4.1 Implementación del Sistema de Segmentación de Fonemas en
MATLAB
Para el desarrollo del proyecto y la obtención 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 pequeña longitud, las
cuales formaban frases que contenían entre de 3 y 5 fonemas tanto sonoros como sordos y
segmentos de silencio, se realizó el análisis correspondiente y se establecieron las reglas de
selección adecuadas para segmentar la señal en 3 categorías diferentes de voz: sonidos
sonoros (vocales), sonidos sordos (consonantes) y segmentos de silencio o ruidos de fondo.
33
La implementación y funcionamiento del programa en matlab se detalla a continuación. La
señal de entrada X es un vector de cierta longitud, del cual se toman tramas de 512 datos
correspondientes a 64ms de la señal total, este se analiza independientemente de los otros
bloques teniendo en cuenta las últimas N-1 muestras del bloque anterior para su
descomposición por medio de la transformada wavelet y garantizando una continuidad de la
señal de entrada, siendo N el tamaño 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 señal hasta obtener los coeficientes wavelet de la señal de voz de los 4 niveles de detalle
de mayor resolución. Estudiando la evolución de energías de cada uno de los niveles se
establecieron los criterios de segmentación de cualquier señal de voz independiente del
hablante y de las condiciones de captura, una vez identificados los segmentos se efectúa un
realce de la señal, dicho realce se produce por medio de un factor de escala sobre los
coeficientes entregados por el bloque wavelet denoising, es por esta razón 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
señal. Por convicción 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 segmentación de la voz de la figura 4.4 está conformado por 6 etapas
clasificadas de la siguiente manera:
•
•
•
•
•
•
Adquisición de la señal de voz
Preprocesamiento
Extracción de Características
Segmentación
Realce de la señal
Recuperación de la señal de voz
512 Muestras leídas
Primera captura
de muestras
N-1 muestras
anteriores
N-1 muestras
512 Muestras leídas
Segunda captura de
muestras
N-1 muestras
anteriores
N-1 muestras
Figura 4.3. Esquema en memoria del vector de muestras a filtrar
34
INICIO
Lectura del
Archivo .wav
Conversión de
Fs a 8KHz
Ajuste de la Señal a un
Múltiplo de 512 Datos
Selección de
Bloque de 512
Datos
Filtrado de Pre-énfasis
Transformada Wavelet
Wavelet Denoising
Normalización
Cálculo Energías
Sub-bandas
Reglas de
Selección
Realce de
la Señal
Transformada Inversa
Wavelet del Bloque
Concatenación de Bloques
Conversión Señal a Formato .wav
FIN
Figura 4.4 Diagrama de flujo de la simulación en MATLAB
35
4.1.1 Adquisición de la Señal de Voz
La señal de voz básicamente está constituida por ondas de presión producidas por el aparato
fonador humano como se explicó en el capítulo 2. La manera más apropiada de capturar
este tipo de señal se realiza mediante un micrófono, el cual se encargará de convertir la
onda de presión sonora en una señal eléctrica. La siguiente etapa será aquella que se
encargue de amplificar las señales a niveles que sean manejables. A partir de la señal
analógica obtenida se hace necesario convertir la señal a formato digital para poder
procesarla en la computadora, y se realiza mediante dos procesos: muestreo y
cuantificación. Este proceso de dos etapas se conoce como Modulación por Código de
Pulsos (PCM). La mayor parte de los sonidos vocales tiene energía espectral significativa
hasta los 4khz, entonces la frecuencia de muestreo debe de ser por lo menos dos veces la
frecuencia máxima (según el Teorema de Shanon), por lo que fs = 8 KHz, que corresponde
a la calidad telefónica.
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 señales
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
función [X,fs] = wavread (‘.wav’) [MMOP07] la cual lee un archivo con extensión .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 señal. Debido a que la frecuencia de muestreo en el momento
de la captura es de 22050Hz debemos llevar a cabo una conversión 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
análisis, algunas se pueden ver en le tabla 4.1 teniendo en cuenta el análisis de los fonemas
del capítulo 2 sección 2.2.
Fonemas Consonánticos
Fonema
B
C
Ch
D
F
G
H
J
K
L
Ll
M
N
Ñ
Ejemplo
Bote
Casa
Pecho
Donde
Fama
Goma
Jardín
Paja
Queso
Lana
Llave
Mamá
Nana
Leña
36
Clasificación
Bilabial, Oclusivo
Velar, Oclusivo
Palatal, Africado
Dental, Oclusivo
Labiodental, Fricativo
Velar, Oclusivo
Glotal
Alveolar, Fricativo
Velar, Oclusivo
Alveolar, Semivocal
Palatal, Africativa
Bilabial, Nasal
Alveolar, Nasal
Palatal, Nasal
P
Q
R
RR
S
T
V
W
X
Y
Z
Papa
Queso
Pero
Carro
Sopa
Atar
Nueve
Hueso
Paja
Mayo
Caza
Bilabial, Oclusivo
Velar, Oclusivo
Alveolar, Vibrante
Uvular, Vibrante
Alveolar, fricativo
Dental, Oclusivo
Fricativa
Biobio-velar
Alveolar, Fricativo
Palatal, Fricativo
Interdental, Fricativo
Fonemas Vocálicos
Fonema
A
E
I
O
U
Ejemplo
A
E
I
O
U
Clasificación
Central, Abierta
Anterior, Media
Anterior, Cerrada
Posterior, Media
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 señal, reducir los efectos de volumen y
contrarrestar en cierto grado la atenuación impuesta por el tracto vocal del hablante,
haciendo que el análisis sea independiente de las condiciones de captura. Se usa un filtro
digital de primer orden cuya función de transferencia es [BR99]:
H ( z ) = 1 − az −1
(4.1)
Donde 0 < a · 1, pero t´ıpicamente se emplea un valor de a = 0:95 permitiendo una
amplificación de 20dB para las componentes de alta frecuencia. Su implementación en
Matlab se efectúa por medio de la función de la convolución entre la señal de entrada X y
H(z), su salida Y es un vector de la señal filtrada.
Y = conv( X , [1 − 0.95])
(4.2)
Como la señal se analiza por bloques de 512 datos, hay que tener en cuenta el último dato
entregado del bloque actual para el análisis del bloque siguiente, técnica conocida como
solapamiento y suma [Hur02b]ver Figura 4.5.
37
Figura 4.5. Análisis por bloque del filtro pre-énfasis
4.1.3 Extracción de Características
Esta etapa involucra el análisis de las señales de voz. Está compuesta por cuatro bloques
(figura 4.6) que nos permiten obtener el comportamiento o evolución de las energías en los
diferentes niveles de descomposición para determinar y clasificar los segmentos de voz.
Trasformada
Wavelet
Wavelet
Denoising
Normalización
Energías
Sub-banda
Figura 4.6 Bloque de Extracción de Características
4.1.3.1Trasformada Wavelet
El primer bloque consiste en descomponer la señal por medio de la Transformada Wavelet
en sus 4 niveles de mayor resolución, para ello se hace uso del wavelet toolbox de MATLAB
el cual tiene embebida la función [C, L] = dwt ( X , ‘w_name’), que descompone la señal
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 sección selección wavelet madre), en dos vectores C1,
L1 de longitud igual a 263 datos cada uno ( floor ((n-1)/2) + N ) asociados al nivel de
aproximación y detalles respectivamente, se puede apreciar en la figura 4.7 un análisis de
38
descomposición en matlab [MMOP07], que para el segundo nivel de detalle y
aproximaciones C2 y L2, la señal 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
señal 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 señal
descompuesta. En la tabla 4.2 podemos observar el número de datos que se analizan por
cada nivel y las condiciones iniciales tenidas en cuenta para los siguientes bloques.
La señal 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 señal.
Figura 4.7 Análisis de Descomposición por nivel en Matlab
X
h(-n)
2
g(-n)
2
a1 = 263
d-1 = 256 datos
h(-n)
2
g(-n)
2
a2 = 139
X = 512 datos
d-2 = 128 datos
h(-n)
2
g(-n)
2
a3 = 77
d-3 = 64 datos
h(-n)
2
g(-n)
2
d-4 = 32 datos
a-4 = 32 datos
Figura 4.8 Descomposición de un Bloque X = 512 datos de la señal en 4 niveles de detalle
y uno de aproximación
39
Nivel de Entrada
# Coeficientes Entregados
Ao = Bloque 512
A1 = 263
A2 = 139
A3 = 77
A1 = 263
A2 =139
A3 = 77
A3 = 46
D1 = 263
D2 = 139
D3 = 77
D4 = 46
Coeficientes
Analizados
D1 = 256
D2 = 128
D3 = 64
D4 = 32
Condiciones Iniciales
sgte bloque
D1 = 7
D2 = 11
D3 = 13
D4 = 14
Tabla 4.2 Número 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 Mínima
(Hz)
Frecuencia Máxima
(Hz)
H1
H2
H3
H4
Tabla 4.3 Rango de frecuencias
4.1.3.2 Selección de la Wavelet Madre
Lo primero a tener en cuenta a la hora de realizar un análisis wavelet es cuál wavelet madre
utilizar ya que se hace necesario determinar la señal Ψ(t) que mejor se adapte al sistema;
para esto se hizo referencia al proyecto de investigación 195 “Reconocimiento de Voz en
Tiempo Real por medio de la Transformada Wavelet Y Procesadores Digitales de Señales”
[Hur03a] realizado en la universidad del Quindío. Entre los criterios tenidos en cuenta
están:
•
•
•
Mayor similitud con las muestras de las señales de voz. Bajo este criterio la wavelet
Haar se descarta debido a su gran diferencia con una señal de voz. La symlets son
bastante simétricas y las señales de voz son asimétricas, por lo tanto también se
descartan. Así que solo quedan la Daubechies y la Coeiflet.
Menor carga computacional. Un orden alto de la función wavelet implica una
longitud mayor en los coeficientes de los filtros usados en el análisis y por lo tanto
un costo computacional más alto. Para las wavelets daubechies y symlets la longitud
de los filtros de análisis hn y síntesis gn es 2N, donde N es el orden de la función
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 método de determinación de la mejor base el cual hace uso de la
entropía µ de DWT, y el algoritmo de la selección de la mejor base, llegando a la
conclusión de emplear la Wavelet Daubechies de orden 8.
40
4.1.3.3 Wavelet Denoising
Es una técnica mediante la cual se elimina el ruido ambiente de fondo y el producido por el
sistema de grabación utilizado. Esta técnica tiene la ventaja de que se incorpora
directamente dentro del algoritmo de cálculo 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 cálculo de la DWT de
cada uno de los niveles de descomposición 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 micrófono en ausencia de voz (ruido) y se hace uso de la siguiente
ecuación [RB98]:
2 * log n *σ
u=
(4.3)
n
donde:
u = Umbral.
n = Número de datos (tamaño 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
reducción de ruido utilizando el bloque wavelet denoising a la hora de recuperar la señal, si
se utiliza un umbral muy fuerte puede ocasionar pérdidas de energía importante que
repercuten en la identificación de los segmentos.
Nivel
Detalle 1
Detalle 2
Detalle 3
Detalle 4
Aproximación 4
Umbral
12.4 e -3
6.1 e -3
3.1 e -3
1.9 e -3
1 e -3
Tabla 4.4 Umbral de ruido para cada nivel
4.1.3.4 Normalización
Es de notar en el sistema que el bloque de normalización está antes del cálculo de energías,
el cual emplea el logaritmo del valor absoluto de los coeficientes wavelet, la derivada
temporal, la integración y la exponenciación (ver figura 4.9), este conjunto de bloques
garantizan, para los parámetros extraídos, una independencia del volumen de la señal.
log W g {Af (t )} = log A + log W g { f (t )}
(4.4)
∂
∂
log W g {Af (t )}(s, t ) = log W g {Af (t )}(s, t )
(4.5)
∂t
∂t
Al emplear el calculo del logaritmo del valor absoluto se logra una independencia del factor
de amplitud de la señal (Ec. 4.4), el cual puede ser eliminado por medio de la derivada
41
temporal al conjunto de datos (Ec. 4.5) logrando una independencia de amplitud de los
parámetros extraídos, la derivada temporal en matlab se implementa por medio de un
derivador de primer orden dado por la ecuación de recurrencia
y[n ] = x[n] − x[n − 1]
(4.6)
y para la operación de integración un integrador de suma continua dado por la función de
transferencia [LF94]
1
H (z ) =
(4.7)
1 − z −1
Tanto el derivador (ecu4.6) como el integrador (ecu.4.7) se pueden implementar en
MATLAB [MMOP07] por medio de la función Y = FILTER (bk, ak, x) teniendo en cuenta
como condición inicial para el siguiente bloque de datos, el último dato de cada uno de los
niveles de descomposición ya que el derivador y el integrador dependen de la entrada (FIR)
y salida (IIR) anterior respectivamente.
∂t
Log
∫
exp{ }
Normalización
Figura 4.9 Bloque de normalización
4.1.3.5 Energías Sub-bandas
Una vez obtenidos los coeficientes wavelet normalizados de cada uno de los 4 niveles de
detalle y 1 de aproximación, procedemos a calcular la energía 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 evolución de la energía y establecer las reglas de selección
adecuadas, para este análisis se utilizó la siguiente ecuación:
Ebanda
i
=
N
i
∑
C
K =1
i
(k )2
(4.8)
Donde Ci son los coeficientes de la banda i, Ni es la longitud por banda y Ebandai es un
vector de una longitud 16 datos que contiene la energía 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 número de coeficientes que aporta cada banda por bloque y por segmento para
el cálculo de energía por cada nivel.
Nivel
Datos Por
Datos Por Segmento
Bloque (64ms)
(4ms)
Detalle 1
256
16
Detalle 2
128
8
Detalle 3
64
4
Detalle 4
32
2
Aproximación 4
32
2
Tabla 4.5 Número de Coeficientes de cada nivel en un bloque de 512 muestras de la señal
para el Cálculo de las Energías
42
Una vez obtenidos los vectores de energía de cada uno de los niveles de detalle, y para
facilitar el proceso de segmentación, la información se suaviza por medio de un filtro de
media móvil 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 señal, es decir
un dato en cada vector equivale a la energía contenida en un segmento de 32 muestras
(4ms) por banda.
4.1.4 Reglas de Selección
En esta sección se describen una serie de pruebas, que fueron llevadas a cabo de cara a
realizar la segmentación de las frases componentes de la base de datos de una manera
automática. El objetivo de dichas pruebas, era el de evaluar la posibilidad de realizar la
segmentación de fonemas de las frases componentes de nuestra base de datos de una
manera automática (la segmentación consiste en delimitar mediante etiquetas la posición de
los fonemas dentro de las frases), con el fin de establecer reglas de selección que permitan
identificar el tipo de segmento. En efecto, debemos especificar que dicho proceso de
segmentación es realizado manualmente (empleando herramientas de edición 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 número 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 conversión a 8Khz, para ser visualizados (ver figura 4.10) y
poder observar el comportamiento de la energía entre fonemas de cada una de las bandas.
# de Fonemas
4
/m/
/a/
/t/
/a/
Etiquetado Manual
Posición
Longitud
544
2880
3447
3734
9856
540
10440
3585
Tabla 4.6 Etiquetado Manual de la palabra “mata”
Claramente, este procesado manual requiere una gran cantidad de tiempo y además, en
algunos casos, lleva asociado también errores. Estos errores pueden venir derivados del
cansancio que este trabajo implica, por esta razón se produce errores de criterio en la
segmentación.
En total se dispuso de un conjunto de 108 archivos .wav con frases que contenían de 3, 4 y
5 fonemas que mezclaban sonidos sonoros, sordos y segmentos de silencio, como también
archivos con sílabas que mezclan las consonantes con las vocales por ejemplo el archivo
B.wav contiene la señal “ba be bi bo bu”, para concluir las simulaciones se tomaron frases
con más 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 también el
43
posicionamiento manual de las etiquetas, esto se realizó con líneas de código en el
programa de matlab.
0.5
/m/
/a/
/t/
/a/
0.4
0.3
0.2
0.1
0
-0.1
-0.2
-0.3
-0.4
0
1000
2000
3000
4000
5000
6000
Figura 4.10 Palabra “mata” etiquetada
Para establecer las reglas de selección analizamos el comportamiento de la energía de las
cuatro bandas de descomposición en las zonas donde se encontraba el etiquetado manual,
observando la evolución de la energía 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:
Detección Segmento de Silencio:
En ausencia de voz se puede notar que en el nivel de detalle de mayor resolución (d-1) la
energía es superior a la de los demás niveles o bandas y permanece constante en las 4
bandas con un umbral muy pequeño. Otra manera para identificar el segmento de silencio
consiste en analizar la intensidad de la energía, 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 también los
cambios de energía entre segmentos en cada banda o nivel de descomposición, dándole un
valor dependiendo de la variación como se muestra en la tabla 4.7, la variación depende del
cambio de energía entre segmentos en cada una de las bandas por separado.
Valor
Cambio de Energía
1
Aumento de Energía
0
Energía Constante
-1
Disminución de Energía
Tabla 4.7 Cambio de energía entre segmentos por banda
44
Luego de realizar diferentes pruebas se concluyó que en los segmentos en el cual la energía
permanecía constante en las cuatro bandas correspondían a segmentos de silencio. Para
determinar dicha regla de selección se suman los valores de cambio en cada banda por
segmento es decir que si en las 4 bandas la energía aumenta el segmento tendrá un valor de
4, si da un valor negativo la energía 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 energía 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 energía
en las 4 bandas, notándose que la transición 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.
120
/m/
/a/
/t/
/a/
100
80
60
40
20
0
0
1000
2000
3000
4000
5000
6000
Figura 4.11 Detección de segmentos de silencio en la palabra ‘mata’
Detección Segmento de Sonoro:
Para determinar un segmento que haga parte de un fonema sonoro es decir una vocal,
analizamos primero en comportamiento de la energía, en archivos que contenían 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,
lográndose 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 notándose que
dependiendo de la vocal la banda predominante es distinta. Además el umbral máximo 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 máximo
alcanzado, a continuación se explica el comportamiento de la energía por vocal:
Vocal “A”: Predomina la energía de los niveles d-2 y d-3 con mayor intensidad, seguido
por el nivel de detalle d-1 que varía considerablemente según el hablante,
45
entre el 20% y 80% con respecto a la banda de mayor intensidad, la energía
del nivel d-4 es muy pequeña pero siempre mayor al 1%.
Vocal “E”: Se caracteriza el nivel d-1 como banda predominante, las tres bandas restantes
varían su energía con respecto a d-1 entre el 5% y el 50% independientemente
una de otra, siendo la banda d-2 el más notorio y en algunos caso es
comparable con d-1 pero no mayor a este.
Vocal
“I”: d-1 sobresale sobre las demás bandas, mientras que la energía 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 energía con respecto a d-1 entre 1% y el 30%, en algunos casos d2 y d-3 presentan la misma intensidad .
Vocal “O”: Predominan d-3 y d-4, en algunos casos la energía de todas las bandas son
iguales, mientras que en otros la energía 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 conclusión:
• La principal característica de los fonemas sonoros es la intensidad que aporta cada
una de las bandas por segmento con un comportamiento gaussiano y su duración en
el tiempo es muy larga comparada con los fonemas sordos
• La energía 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 energía pequeña comparada con las otras vocales.
• Un segmento que haga parte de una vocal existe aporte de energía en todas las
bandas a excepción de la /i/ en algunos casos.
• Para observar el comportamiento ideal de una vocal y el aporte de energía en cada
una de las bandas debe de ser pronunciada claramente de lo contrario se mezclará
con un segmento sordo debido al aporte de energía de cada una de las bandas.
Detección Segmento de Sordo:
Para analizar el comportamiento de las bandas de energía de un segmento sordo, extrajimos
de las frases, los segmentos de consonante independiente de la vocal que forma la silaba,
los archivos estudiados contenían la combinación de las consonantes con las vocales dando
como resultado las siguientes características:
•
Fonema /b/
Grafía: b, v.
La banda predominante es el nivel de detalle d-4, con energía no mayor a
1e12 y el aporte de energía de las demás bandas es nulo cuando está
precedido de silencio, algunos casos se presenta leve de energía en d-3.
46
•
•
•
•
•
•
Si le antecede una vocal hay aporte de energía en todas las bandas con un
valor muy inferior al punto máximo de la vocal anterior alrededor 1e13.
El detalle d-1 es muy leve, en algunas ocasiones es nulo.
Fonema /d/
Grafía: d.
Predomina la banda d-4 con intensidad menor a 1e12, sin aporte de energía
en las demás 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/
Grafía: f.
Este sonido es de muy corta duración y debido a la fricción de este fonema
se nota energía en el detalle d-1 o pequeña energía 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 micrófono.
Fonema /g/
Grafía: g, gu:
Para las sílabas ga, go, gu, el nivel máximo es d-4 y la energía en las demás
bandas es cero, la transición 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 energía abruptamente.
En las sílabas 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/
Grafía: 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 energía sin ser
mayor a d-4 y depende del fonema anterior o siguiente.
Fonema /k/
Grafía: c, qu, k.
Debido al carácter explosivo de este fonema, puede ser detectado como una
vocal, a diferencia de ésta, este fonema es de una duración mucho más 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 energía cae por segmentos hasta el
punto en que pasa a predominar otra banda aumentando su energía entre
segmentos.
Fonema /l/:
Grafía l:
El nivel con mayor energía es el detalle d-4, con el nivel d-3 alrededor del
25% con respecto a d-4, cuando los niveles de mayor resolución van
tomando valores por encima de 1e13 existe un cambio de fonemas.
47
•
•
•
•
•
•
Cuando el segmento anterior es una vocal, la intensidad es considerable
aunque más pequeña que el valor máximo del fonema anterior.
Fonema /ll/
Grafía: ll:
d-1 es la banda predominante con energía en todas la bandas siempre menor
a 1e13, un aumento de energía considerable o un cambio continuo de bandas
produce un cambio de fonema.
Fonema /m/
Grafía: m.
Predominan d-4 y d-3. Cuando le precede un silencio no hay energía en las
demás bandas.
Si le antecede una vocal, el nivel d-2 aparece con energía considerable y la
intensidad de d-4 y d-3 es aproximadamente el 10% del punto máximo de la
banda predominante de la vocal anterior.
Fonema /n/
Grafía: n.
Presenta el mismo comportamiento del fonema m.
Fonema /ñ/
Grafía: ñ.
d-4 es la banda predominante con una intensidad no superior a 0.5e13, d-3
aporta energía 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 energía ocasiona también transición de fonemas.
Cuando la antecede una vocal, el nivel máximo pasa a ser el detalle de
menor resolución d-4 y los de mayor resolución tienden a cero.
Fonema /p/
Grafía: p.
El fonema /p/ es de muy corta duración y sobresalen las bandas d-2 y d-3
como las de mayor intensidad.
Algunos casos presenta aporte de energía 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/:
Grafía: 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 energías.
Cuando los segmentos anteriores pertenecen a un segmento de silencio, en
algunos casos, predomina d-1 y en otros d-4 con energía en las bandas
restante mayor al 60% de la banda predominante, si se presenta una
transición entre [consonante/vocal] o [vocal/consonante] se nota un cambio
de la banda predominante como también la intensidad, ya sea una
disminución o un aumento.
48
•
•
•
•
Fonema /s/
Grafía: s, c, z
Tiene un comportamiento muy distinto a las demás 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 pequeña si la
antecede un segmento de silencio, pero si el segmento anterior es una vocal,
existe un aporte de energía en todas las bandas hasta disminuir quedando
solo el detalle d-1.
Fonema /t/
Grafía: t.
La banda de mayor intensidad es d-1.
A diferencia del fonema /p/ la duración es un poco más larga, también se
presenta energía en el nivel d-2.
Cuando le antecede una vocal es notoria la energía en el detalle d-4 y más
intensa en las demás 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/
Grafía: j, g.
Tiene intensidad comparada con la de las vocales más o menos entre 5e12 y
1e15 dependiendo de la vocal con que forma la silaba donde predominan las
bandas de mayor resolución como son d-1 y d-2, en las dos bandas restantes
la energía es cero.
Transición 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 pequeños errores en la segmentación.
• Si al menos una de las bandas es aproximadamente constante por dos o más
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 energía 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 energía mayor al 1% de la banda predominante
o pasa a ser la banda predominante se trata de una transición entre consonante /
vocal.
• Un cambio de la banda predominante entre segmentos, llevando consigo un
incremento de más 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 más de un 500%.
49
Transición entre [vocal] /[consonante]:
El cambio de fonema entre vocal/consonante ocasiona que los niveles de energía en los
segmentos de consonante tengan una energía mucho mayor a cuando le antecede un
silencio, tomando valores de aproximadamente 1e13 en todas las bandas.
• La banda de energía predominante llega a un punto máximo y empieza a
descender notoriamente entre segmentos, llegando a un valor por debajo del 5%
del punto máximo, 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 energía en el segmento anterior y en el
siguiente alguna de las bandas no presenta energía, 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 Señal
El realce de la señal se efectúa 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 audiólogo en los exámenes 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 distorsión de la señal en los
segmentos adyacentes.
4.1.6 Transformada Wavelet Inversa
Finalmente, el algoritmo del sistema de segmentación entre en la etapa donde se recupera la
señal 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
función embebida en el entorno de matlab que me permite obtener la transformada wavelet
inversa de cada nivel, recibiendo los coeficientes de detalle (dn) y de aproximación (an) del
nivel n y retornando los coeficientes de aproximación del nivel n-1 (an-1), La función es
expresada en el wavelet toolboox de matlab como an-1 = idwt (an, dn, ‘wname’). Este
procedimiento se repite hasta recuperar la señal 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 señal, esta tenga una reducción de ruido considerable.
50
X = 512 datos
d-1 = 263 datos
d-2 = 139 datos
d-3 = 77 datos
d-4 = 46 datos
a-4 = 46 datos
h(-n)
2
g(-n)
2
h(-n)
2
g(-n)
2
h(-n)
2
g(-n)
2
h(-n)
2
g(-n)
2
X
a1 = 263 datos
a2 = 139 datos
a3 = 77 datos
Figura 4.12 Esquema de la Transformada Wavelet Inversa,
para recuperar un bloque de 512 datos.
Los coeficientes de detalle como el de aproximación, son los entregados por el bloque
wavelet denoising completos, la salida corresponde a la señal recuperada con el respectivo
realce, el tiempo de duración de X en segundos es 64ms. La figura 4.13 muestra la señal
recuperada de la palabra “vaso ”sin ningún realce.
/m/
6
/a/
/t/
/a/
4
2
0
-2
-4
-6
0
1000
2000
3000
4000
5000
Figura 4.13 Señal de la palabra “mata” recuperada.
51
6000
Capítulo 5
Implementación 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 señales de punto flotante
TMS320C6701 de la Texas instrumet, empleando para ello la tarjeta experimental
EVM67x. Para su programación se empleó el entorno de desarrollo Code-Composer Studio,
y el lenguaje de programación C. Para este lenguaje se cuenta con un optimizador, el cual
reordena la ejecución de las instrucciones y asigna las unidades aritmético-lógicas 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 investigación de Procesamiento Digital de Señales de la Universidad del
Quindío (GDSPROC) que están a disposición para trabajos futuros, que fueron de mucha
utilidad en la realización de este proyecto como son las rutinas de captura de datos por
DMA, el algoritmo de la Transformada Wavelet y la reproducción de la señal de voz.
Para la implementación del sistema se empleó la estructura de la figura 4.2 descrita en el
capítulo anterior para la realización de los siguientes algoritmos:
1. Captura de la señal
2. Pre-énfasis
3. Cálculo de la FWT
4. Wavelet Denoising
5. Normalización de los Coeficientes Wavelet
6. Estimación de la Energía en Cada Banda
7. Reglas de Selección
8. Realce de la Señal
9. Transformada Inversa Wavelet
52
10. Reproducción de la señal
Buffer 12
0
1
2
3
509
510
511
Genera Interrupción
Empieza Captura en 2
1
procesar_segmento( Entrada, Salida )
Buffer de Salida
0
1
2
3
509
510
511
Datos a Reproducir
Figura 5.1 Técnica de doble buffer usando DMA para captura de un bloque de 64ms con su
respectivo análisis y reproducción.
53
5.1 Captura y Pre-procesamiento de la Señal
Para la adquisición de la señal se usaron los CODECs con que cuenta el sistema de
desarrollo y se programó el ADC a una frecuencia de muestreo de 8kHz (calidad
telefónica), 16 bits por muestra, y la técnica de entrada/salida por acceso directo a memoria
(DMA) haciendo uso de un doble buffer asincrónico. El doble buffer permite realizar en
paralelo los procesos de adquisición y análisis de los datos (Figura 5.1), garantizando así la
ejecución en tiempo real del sistema.
En la implementación 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 adquisición de
64ms (tcaptura = 512/8000 = 64ms). Para garantizar la ejecución en tiempo real, la rutina
de servicio de interrupción por finalización de transferencia por DMA lleva a cabo una
inicialización de la captura por DMA del siguiente bloque de datos sobre el segundo buffer
(Ver Figura 5.1) y ejecuta el análisis del respectivo segmento (512 datos), desarrollando las
etapas de preprocesamiento, extracción de características, identificación del tipo de fonema,
realce de la señal, y transformada inversa wavelet dentro de la rutina de servicio de
ininterrupción.
El programa principal y la rutina del servicio de interrupción en diagramas de flujo (figura
5.2) es la siguiente manera:
Programa Principal
ISR
Reserva memoria
(entrada, salida y
etiqueta)
Condiciones Iniciales.
Conversión de Short a Float
Iniciar filtros
Iniciar DWT, IDWT
Iniciar Captura por DMA
(Habilita Interrupción)
Iniciar Escritura.
Procesar Segmento ()
Conversión de Float a Short
FIN
Figura 5.2 Diagrama de flujo del programa principal y la ISR.
54
5.2 Conversión de Datos
La función que realiza la conversión de los datos se debe a que el buffer de captura entrega
los datos tipo short y la función que procesa el segmento los manipula en tipo float, por tal
motivo se debe realizar la conversión tanto para los datos de captura como para los de
reproducción, y su algoritmo en pseudocódigo 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 Función Procesar Segmento
La forma estructural del algoritmo que procesa el segmento en pseudocódigo es:
______________________________
Procesa_segmento()
preénfasis()
fwt()
wavelet denoising()
normalización()
cálculo energías()
reglas_selección()
realce()
ifwt()
_______________________________
La función de preénfasis está dada por (ecu.4.1) donde a toma un valor de -0.95.
preénfasis( entrada, [1 a], salida )
for i = 1 to long[entrada]
salida[i-1] = entrada[i] - a*entrada[i]
Para el cálculo de la transformada wavelet rápida, contamos con las herramientas
desarrolladas por el grupo de investigación GDSPROC como habíamos mencionado
anteriormente, pues estas nos brindan una continuidad en la señal de entrada, es decir, nos
garantizan una interdependencia entre los diferentes segmentos capturados, evitando
además cortes abruptos de la señal de entrada. Para tener una visión global del
funcionamiento del algoritmo retomamos un párrafo de [Hur02] donde explican dicha
función.
55
“…empleando como condiciones iniciales para cada uno de los bancos de
filtros wavelet muestras pasadas que habían 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 implementación de cada una de las etapas del banco de filtros wavelet se
llevó a cabo usando la estructura polifásica [Fli94], la cual evita la
realización de cálculos innecesarios en los diferentes bloques de diezmado.
Para el cálculo de la transformada se escribió un algoritmo que permite
una fácil adaptación del sistema a otros niveles de descomposición.”
El bloque wavelet denoising, por la procedencia de los cálculos se debe incluir después del
cálculo de la transformada wavelet rápida y debido a que su costo computacional es
relativamente pequeño y está incluido dentro de la función de la FWT. Como se comentó
en el capítulo 4 la técnica usada fue la hardthresholding [RB98], el valor de umbral
depende de la banda a analizar (tabla 4.4) y su implementación 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 normalización es el bloque que independiza la señal del volumen que
esta pueda llevar en el momento de la captura. Se implemento la ecuación 4.6 para la
56
derivada temporal de primer orden y la ecuación 4.7 para el integrador mantenedor de
primer orden, de la siguiente manera:
Normalización( )
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 cálculo de las energías se tomaron los vectores que contienen los coeficientes
wavelet normalizados por cada nivel en un tiempo de 4ms que corresponden a n número de
datos según el nivel analizado como se explicó en el capítulo anterior en la Tabla 4.5,
haciendo uso de la ecuación 4.5.
Energía(nnivel)
for k = 0 to 16
for i = 0 to long[nnivel]/16
En[k] += nnivel[ (k*16) + i ] ^ 2
El código fuente de la función que establece las reglas de selección se encuentra en el
apéndice B, ya que es algo extenso y hace énfasis a lo redactado en el capítulo anterior.
Como detallamos anteriormente, la etapa de realce de la señal resultó ser de una manera
muy sencilla, ya que simplemente se realiza por medio de un factor escala lo que nos da
una garantía eficiente en el momento de amplificar la señal y además su costo
computacional es mínimo, cabe recordar que el realce de la señal se efectúa 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
for j = 0 to j<16
{……….}
if marka[k] == 1
for j = 0 to j<16
{……….}
if marka[k] == 2
for j = 0 to j<16
//Deteccion de un segmento de silencio
// Coeficientes de todas las bandas llevados a cero
//Deteccion de un segmento de sonoro
// Coeficientes de las bandas intactos
//Deteccion de un segmento de sordo
57
{……….}
// 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 Desempeño
Después de haber codificado los algoritmos del sistema de segmentación en el DSP
TMS320C6701, se procedió a realizar pruebas de tiempo para observar el desempeño de
estos ejecutándose en el DSP. En la Tabla 5.1 se muestra el tiempo de ejecución de cada
uno de los algoritmos correspondientes a las etapas de análisis 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 interrupción (ISR) por finalización de la captura por DMA, la tabla
5.2 tiempos de conversión para la manipulación de los datos tipo float dentro de la función
que procesa el bloque de 64ms, estos tiempos son de mucha importancia debido a que si el
tiempo de análisis de la señal es mayor que el tiempo de captura, el sistema colapsa y no es
posible llevar una implementación en tiempo real.
Debido a que el DSP trabaja a una frecuencia de reloj de 133Mhz y el sistema de
segmentación procesa la señal de voz en bloques de 512 muestras a una frecuencia de
muestreo de 8kHz, es de garantizar que el tiempo máximo que debe tardar la rutina del
servicio de interrupción debe ser menor a:
512
T=
< 64ms
8000
Expresando el tiempo en ciclos de reloj del DSP:
Tciclos = 133000000 * 0.064 = 8512000ciclos
Algoritmo
Pre-énfasis
Dwt + Denoising
Normalización
Cálculo de Energías
Reglas de Selección
Realce de la Señal
Idwt
Total
Tiempo
(ms)
1,201955
4,414361
26,853195
0,745865
0,292481
0,057894
4,587218
38,152970
Ciclos de
% Tiempo
Reloj
relativo a 64ms
159.860
1.87
587.110
6.89
3’571.475
41.95
99.200
1.16
38.900
0.45
7.700
0.09
610.100
7.16
5’074.345
59.61
Tabla 5.1 Tiempos promedio de ejecución de las funciones dentro de la rutina del servicio
de interrupción.
58
Algoritmo de
conversión
Short a float
Float a short
Total
Tiempo Ciclos
% tiempo
(ms)
de Reloj relativo a 64ms
0,292955
38.963
0.45
0,399624
53.150
0.62
0,692579
92113
1.08
Tabla 5.2 Tiempos promedio de ejecución de conversión de los datos.
Algoritmo de
conversión
Conversión
Procesar_Segmento
Total
Tiempo
(ms)
0,692579
38,152970
38,845550
Ciclos de
% tiempo
Reloj
relativo a 64ms
92.113
1.08
5’074.345
59.61
5’166.458
60.69
Tabla 5.3 Tiempo total de la ISR
Es de notar que el tiempo total de las funciones de análisis dentro de la ISR equivale a
59.61% con respecto al tiempo de captura máximo posible (tmax = tcaptura = 512/8000 =
64ms), y la conversión de los datos de short a float y viceversa corresponden a 1.08%
sumando ambos porcentajes de tiempo obtenemos un 60.69% del tiempo máximo ( tabla
5.3), lo que nos garantiza una ejecución en tiempo real del sistema.
El código fuente de los algoritmos empleados se encuentra en el Apéndice B, y las
estimaciones de sus tiempos de ejecución en la Tabla 5.1, 5.2 y 5.3.
Estos tiempos fueron estimados para un bloque de carácterısticas extraídas a partir de un
segmento de captura por DMA.
.
59
Capítulo 6
Conclusiones
•
•
•
•
•
•
Se logró implementar un sistema automático de segmentación de fonemas por
medio de la transformada wavelet discreta en tiempo real sobre un procesador
Digital de Señales (DSP).
Para eliminar el ruido incorporado en la señal de voz se utilizó la técnica Wavelet
Denoising con umbral diferente en cada banda para conservar información
importante en los niveles de menor resolución.
Se establecieron reglas de selección para clasificar todo el conjunto de fonemas del
idioma español, analizando la evolución de la energía de los cuatro niveles de
mayor resolución.
El método empleado para el realce de la señal de voz resultó ser muy eficiente ya
que nos garantiza un realce en las diferentes bandas de frecuencia y en el segmento
identificado, además su costo computacional es relativamente muy bajo.
Se adaptó el sistema de segmentación propuesto por el grupo de Investigación
GDSPROC para ejecutarse en el DSP TMS320C6701, luego de realizar diversas
simulaciones para clasificar los segmentos.
Para la implementación sobre el DSP TMS320C6701, se adquirieron los datos por
medio de la técnica de DMA en doble buffer y considerando para el cálculo de la
transformada una continuidad en los segmentos de la señal.
60
Capítulo 7
Proyecciones
Ya que el proceso de segmentación juega un papel muy importante en la construcción de
los sistemas de reconocimiento continuo de voz (CSR: Continuos-Speech Recognition), y
con los estudios elaborados anteriormente en el grupo de investigación GDSPROC es
posible fusionar los resultados de este proyecto para la construcción en tiempo real del
sistema CSR.
Por otra parte se pueden realizar estudios para la implementación de un dispositivo a nivel
de hardware que resulte ser de fácil manipulación y asequible en cuanto a precio, para las
personas con deficiencias auditivas y con limitaciones económicas ya que el costo de estos
dispositivos hoy en día aunque son de una excelente calidad resultan ser demasiado
costosos.
El sistema de realce empleado nos brinda una garantía en el momento de obtener mayor
intensidad de la señal de voz en una banda predeterminada, este sistema puede ser de
utilidad es sistemas de ecualización de sonidos por medio de la transformada wavelet
discreta ya que su costo computacional es muy pequeño, de esta manera se podría
implementar un sistema de ecualización a través de una línea telefónica, ya que la
frecuencia de muestreo es de 8kHz, enfocado hacia las personas con limitaciones auditivas.
61
Bibliografía
[ADJ03]
Alain C. González G., Daniel González S., Juan M. Hernández V., Alberto
R. Hernández M., Procesamiento Digital de Señales U del Corazón.
Departamento de Ingeniería Eléctrica y Electrónica. Instituto Tecnológico,
Toluca. 2003.
[Ala03]
Alarcón 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. Acústica. 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. Evaluación de un reconocedor fonético para el
español. Escuela de Ingeniería, Universidad de las Américas-Puebla.1999.
[Dal69]
Dalbor, Jhon. Spanish Pronunciation: Theory and Practice. Holt, Rinehart
and Winston. New York, 1969.
[Her03]
Marianito Hernández Díaz, Análisis Comparativo de Algoritmos para
Reducción de Ruido en Señales Utilizando Wavelets, Universidad de Puebla.
pag.26, 2003.
[Hur03a]
Jorge Iván Marín Hurtado. Reconocimiento de Voz en Tiempo Real por
medio de la Transformada Wavelet y Procesadores Digitales de Señales.
Informe Proyecto de Investigación 195 UNIQUINDIO, 2003.
[Hur03b]
Jorge Iván Marín Hurtado. Procesamiento Digital de Señales. Texto Guía
para el Curso de Procesamiento Digital de Señales UNIQUINDIO, 2002.
[Hur03c]
Jorge Iván Marín Hurtado. Clase para el control de la tarjeta de sonido
Linux-Windows. www.geocities.com/gdsproc/dsp, 20
62
[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:264–267, 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. Introducción a la Audiologia, AUDIOLOGIA, 1999.
[MHLPA03] J.I. Marín-Hurtado, A. López-Parrado, and R. Arango. Segmentación de
señales de voz usando dsp y transformada wavelet. Memorias V Congreso
Colombiano de Automática, 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 Ramírez Pérez de Inestrosa. “Nuevas Estructuras RNS para la Síntesis
VLSI de Sistemas de Procesamiento Digital de Señales”. 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:750–761, 1994.
[VK95]
M. Vetterli, J. Kovacevic, Wavelets and Subband Coding. Prentice Hall,
1995.
63
Apéndice A
Código fuente para MATLAB
B.1 Código fuente del programa principal en matlab
% El programa está simplificado en algunas funciones
% se anexa un CD adjunto para las lines de código 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 señal 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';
% Análisis de la señal por bloques de 512 datos
% y su respectiva recuperación con el realce deseado
%=====================================================================
cont=1;
x_ant=0;
64
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'];
%
Cálculo de energías
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);
65
% Reglas de selección establecen el tipo de segmento
etiqueta = reglas(E_bandas,E_deltas);
%Realce de la señal
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
66
Apéndice B
Código fuente para el DSP TMS320C6701
B.1 Código 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;
67
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 información */
}
}
B.2 Código fuente función que procesa el segmento
B.2.1 Archivo de cabecera segmentación.h
#ifndef _segmentacion_
#define _segmentacion_
#define L
512
#define N_NIVELES 4
#define lm
16
#define umbral 0.015
#define ESC_d1 10
68
#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 segmentación.c
/*
Contiene todas las funciones necesarias para el análisis 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];
69
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;
70
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);
71
}
/***************************************************************************/
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++)
{
// Cálculo logarítmo 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 Exponenciaci¢n
yint[k] = exp( yint[k] );
}
}
72
void normalizacion()
{
// Cálculo logarítmo 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
73
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*/
74
for(k=0;k<16;k++)
{
int sil1=0;
int finvoz=0,cont=0;
// identifica y lo etiqueta
// Detecta los tramos de silencio
// En el Segmento de 64ms = 512 datos
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)
{
75
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;
silencio
//-------------------------------------else
{
//Detecta
// Deteccion de un SEGMENTO SONORO se marca = 7,8,9,10
//---------------------------------------------------------------// banda de menor energía mayor a 1% de la predominante = 1e15
if((maximo[3]>1e13)& (maximo[0]>1e15))
etiqueta[k]=2;
// banda predominante d-4 >1e13 las demás > 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 energía
if((maximo[1]> 0.5e15)&(maximo[3]>1e8))
etiqueta[k]=2;
//if(etiqueta[k]!=2)
76
Segmento
de
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 energía esta en el rango
if ((prom > 1e7)&(prom < 1e10))
etiqueta[k]=1;
//energía en la banda predominante es pequeña
if(maximo[0]<1e12)
etiqueta[k]=1;
//la banda de menor energia es d-1 y dos bandas tienen 0 energía
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++)
77
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;
}
}
}
}
78
Descargar