Beruflich Dokumente
Kultur Dokumente
= dt e t x f FT
ft i 2
) ( ) (
(3.1)
La transformada de Fourier trabaja bien si la seal x(t) est compuesta de unos cuantos
componentes estacionarios [ALA03], pero se puede observar en FT(f) se ha perdido
totalmente la dependencia temporal de la seal original, es decir, no tenemos informacin
del instante de tiempo en el cual un acontecimiento determinado ocurre en la seal, lo
implica una gran falencia ante la necesidad de analizar una seal no estacionaria como la
voz. Para contrarrestar estas desventajas se ha modificado la Transformada de Fourier
dando origen a lo que es la Short Time Fourier Transform (STFT) tambin conocida como
la transformada de Gabor. La STFT aplica una funcin g(t) utilizada como ventana de
anlisis que se mueve sobre x(t) para determinar el espectro en cada instante de tiempo, ver
figura 3.1 y 3.2. La expresin que nos permite este anlisis es:
= dt e b t g t x f b STFT
ft i 2 *
) ( ) ( ) , (
(3.2)
Donde el parmetro b indica la posicin en el tiempo en la que se hace el anlisis y *
denota el complejo conjugado. La desventaja que presenta esta transformada es que la
ventana de anlisis es de un tamao fijo (figura 3.1), por lo existe un lmite de precisin y
resolucin y por eso no puede adaptarse a las caractersticas de la seal en ciertos puntos
21
interesantes de analizar, ya que puede proveer poca informacin espectral o en algunos
casos redundar en esta informacin. Por ejemplo, cuando la ventana est ubicada en el
instante de tiempo T = 0, la STFT puede determinar con precisin la frecuencia de la seal
presente en este segmento, dado a que la longitud de la ventana abarca ms de un perodo
completo (Figura 3.2a), sin embargo, cuando la ventana se ubica en T = T1, no se logra
abarcar un perodo completo, y por ende no es posible determinar con precisin el
contenido de frecuencia de este segmento de tiempo (Figura 3.2b).
En pocas palabras, la STFT puede resolver con buena resolucin el contenido de altas
frecuencias pero es incapaz de hacerlo para regiones que involucren frecuencias ms bajas
de lo que permita la longitud de la ventana, es as como, para un anlisis de mejor
resolucin frecuencia-tiempo, se prefiere emplear un tipo de transformada que presente una
longitud variable de la ventana, tal es el caso de la Transformada Wavelet [Hur02b].
Figura 3.1: Desplazamiento de ventana para la STFT
(a) (b)
Figura 3.2: Inconvenientes de la STFT
Por lo visto anteriormente es que ha cobrado tanta fuerza la Teora de las Wavelet, dado
que mantiene las ideas principales de un anlisis tiempo-frecuencia utilizando una ventana
de anlisis diferente.
3.3 Qu son las wavelet?
Las wavelet son un conjunto de familias de funciones ortonormales bsicas que no
requieren ser de duracin infinita, por lo que se dice que son ondas localizadas y su
comportamiento en el dominio de la frecuencia equivale a un banco de filtros pasa-bandas,
examinando a la seal de inters para obtener sus caractersticas de espacio y tamao
[Teo98]. La caracterstica de las wavelet es la posible dilatacin o contraccin (figura 3.3),
que consiste en la variacin de un parmetro a llamado factor de escala, en la funcin
generadora de la wavelet, alargando su duracin en el tiempo y modificando su amplitud, lo
que permite modificar su respuesta en frecuencia y se define por:
22
|
.
|
\
|
=
a
b t
a
t
b a
1
) (
, (3.3)
donde a, bR, a 0 y ) (t es la wavelet madre, que se considera una funcin pasa
banda, a esa funcin madre se le agregan un par de variables que son la escala a que
permite hacer las dilataciones y contracciones de la seal y la variable de traslacin b, que
nos permite mover a la seal en el tiempo. Estas variables son nmeros reales y obviamente
para una escala de a= 0 la wavelet no existir y el anlisis se indeterminar.
1 ); ( ) ( = = a t t f
2
1
); 2 ( ) ( = = a t t f
4
1
); 4 ( ) ( = = a t t f
Figura 3.3: Izquierda wavelet a diferentes escalas, derecha traslacin de wavelet
La Wavelet ) (t debe satisfacer las siguientes condiciones:
1. Ser una seal de energa, <
dt t
2
) ( .
2. Exhibir una pequea oscilacin, de tal forma que tenga media cero.
Existe un sin nmero de funciones ( ) t que cumplen las condiciones anteriormente
mencionadas, de las cuales las ms sobresalientes fueron desarrolladas por cientficos
como: Alfred Haar, Ingrid Daubechies, Jean Morlett, Ronald Coifman, Yves Meyer, entre
otros. En la figura 3.4 se muestran algunas.
El objetivo primordial de la Transformada Wavelet, es el representar una seal o funcin
x(t), como la combinacin lineal de un nmero infinito de wavelet escaladas (dilatadas o
contradas) y desplazadas a lo largo de toda la seal [MYG97],
3.4 Transformada Wavelet
Las Transformadas Wavelet Comprenden la Transformada Continua de Wavelet y la
Transformada Discreta de Wavelet. Estas son las herramientas matemticas que permiten el
anlisis de seales de manera muy similar como lo hace la Transformada de Fourier de
0 5 10 15
-1
0
1
2
0 5 10 15
-2
-1
0
1
0 5 10 15
-2
0
2
23
Tiempo Corto dando informacin en el dominio del tiempo y en el dominio de la
frecuencia.
Wavelet Haar Wavelet Mexican Hat
Wavelet Daubechies de orden 5
Wavelet symmlet de orden 2 Wavelet Coiflet de orden 1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
-1.5
-1
-0.5
0
0.5
1
1.5
-8 -6 -4 -2 0 2 4 6 8
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
0 1 2 3 4 5 6 7 8 9
-1.5
-1
-0.5
0
0.5
1
1.5
0 0.5 1 1.5 2 2.5 3
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
1.2
1.4
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
-0.5
0
0.5
1
1.5
2
24
Wavelet Daubechies 8 Wavelet Morlet
Figura 3.4: Graficas de algunas wavelet madre.
3.4.1 Transformada Wavelet Continua (CWT)
La Transformada Wavelet Continua es un operador lineal que asocia un nmero real o
complejo, a una seal de energa finita, con una funcin particular
denominada
wavelet madre, una vez seleccionado el instante y la escala de observacin. Permite as
analizar estructuras de la seal que dependen del tiempo y de la escala, siendo una
herramienta til para detectar, caracterizar y clasificar seales con caractersticas
espectrales extravagantes, contenidos transitorios y otras propiedades relacionadas con la
falta de estacionariedad.
Sea x(t) una seal del espacio L
2
(R) y
\
|
=
a
b t
a
t
b a
1
) (
, (3.4)
Los coeficientes de la transformada wavelet de la seal x(t) respecto de la wavelet madre
|
.
|
\
|
= = dt
a
b t
t x
a
x b a CWT
b a x
*
,
) (
1
, ) ; , (
(3.5)
El parmetro b desliza la wavelet en busca de informacin local y el parmetro a
controla el tamao de la wavelet (a0), de forma que cuando a tiende a 0, se obtiene algo
parecido a un zoom del comportamiento de la seal x(t) en torno al instante t = b, la
variable de escala a puede ser vista como a = f / fo donde fo denota la frecuencia central
0 5 10 15
-1.5
-1
-0.5
0
0.5
1
-8 -6 -4 -2 0 2 4 6 8
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
25
de la wavelet. De esta manera tendremos que la ecuacin (3.5) se puede expresar tambin
de la siguiente manera:
( )
|
|
.
|
\
|
= = dt b t
fo
f
t x
fo
f
x b f CWT
b a x
*
,
) ( , ) ; , (
(3.6)
De esta forma esta transformada permite la representacin de la seal x(t) en el plano
tiempo escala.
Lo siguiente es explicar como: la CWT transforma la seal de un dominio a otro que
depende de 2 variables. La variable escala lleva en si la informacin de la dilatacin y la
contraccin de la seal (figura 3.5), pero podra verse desde otro punto de vista donde lo
que cambia es la frecuencia y con ello al dilatarse, la frecuencia se reduce y al contraerse, la
frecuencia aumenta. Aqu es justamente donde se aprovecha est caracterstica de las
wavelet para obtener la informacin de la seal y conocer sus componentes de frecuencia.
En el dominio del tiempo el anlisis es ms sencillo ya que la variable de traslacin tiene la
informacin de tiempo (figura 3.6), pues nos indica en que lugar del eje del tiempo, se
encuentra la wavelet. De este modo se van completando los datos en forma de una matriz,
donde para cada integral que resolvamos tendremos un punto del plano traslacin-escala,
que es equivalente a tener la informacin en el plano tiempo-frecuencia [Her03].
Es importante aclarar que el proceso de transformacin de una seal es reversible debido a
que se preserva la energa de la seal, lo que se conoce con el nombre de Transformada
Wavelet Inversa Continua (ICWT), que est dada por la ecuacin 3.7:
(
(
(
(
|
.
|
\
|
=
dbda
a
a
b t
b a CWT
C
t x
2
) , (
1
) (
(3.7)
donde la constante
< = d C
1
2
) ( 2
(3.8)
Sin embargo la Transformada Wavelet de Tiempo Continuo no se presta para aplicaciones
prcticas donde las seales se representan de manera discreta.
26
Figura 3.5: Variable escala
3.4.2 Transformada Wavelet Discreta (DWT)
Partiendo de la ecuacin (3.3) la DWT emplea valores para a y b, en una escala de
potencias de dos denominada didica (a = 2
-k
y b = n2
-k
), permitiendo expresar la
transformada en un banco de filtros de octavas. La DWT se define sobre una secuencia de
subespacios cerrados Vj, (j= 0, 1, ...,J), tales que
0 1 1
... V V V V
j j
, siendo V0 = l
2
(Z)
el espacio de secuencias de nmeros enteros de cuadrado sumable [VK95]. Estos
subespacios Vj son completos y satisfacen la propiedad, Vj = l
2
(Z), j[0,J]. La
descomposicin multiresolucin de una seal xn se deriva asumiendo que cualquier
elemento en Vj se puede representar de manera nica como la suma de dos elementos de los
subespacios Vj+1 y Wj+1, siendo Vj = Vj+1 Wj+1. Si existe una secuencia
n
g V0 tal que
{ }
Z k k n
g
2
es una base de V1, entonces existe una secuencia
n
h V0 tal que { }
Z k k n
h
2
es
una base de W1, y V0 se descompone como: V
0
= W
1
W
2
W
j
V
j
simplemente iterando la ley anterior de descomposicin J veces. En el caso de estar
definiendo el concepto de multiresolucin por medio de wavelets ortogonales, Wj+1 se
define como el complemento ortogonal de Vj+1 en Vj.
27
(a)
(b)
Figura 3.6: Proceso de anlisis en diferente escala y traslacin.
(a) escala fija a 1 y traslacin variante, (b) escala fija a 20 y traslacin variante.
28
Lo atractivo de esta transformada es que el desarrollo en serie de wavelet conduce a una
estructura de descomposicin multiresolucin por medio de un eficiente algoritmo de
clculo basado en la implementacin piramidal de un banco de filtros. El banco de filtros de
anlisis o descomposicin calcula los productos escalares con las funciones bases de los
subespacios W1, W2, ..., WJ y VJ. As, la secuencia de entrada se descompone en una
componente o aproximacin en el subespacio VJ y una serie de detalles en los subespacios
Wj (j= 1, 2, ..., J)[Per01].
La DWT permite realizar lo que se denomina Anlisis de Multiresolucin (MRA), que
consiste en estudiar la seal empleando por cada componente de frecuencia una resolucin
diferente. Esto es una alternativa ms sobre la STFT que analiza todas las componentes de
frecuencia a una misma resolucin (seccin 3.2). En general, las ventajas que ofrece este
mtodo es que, con el uso de wavelet, a altas frecuencias (bajas escalas) se tiene una buena
resolucin en tiempo y poca resolucin en frecuencia, informacin detallada o parmetros
escondidos en la seal (que usualmente ocurren en periodos cortos de tiempo), mientras que
para bajas frecuencias (grandes escalas) corresponden a informacin global de la seal y los
resultados requieren buena resolucin en frecuencia y poca resolucin en tiempo [Pol96],
como se aprecia en la figura 3.7.
Figura 3.7:. Plano de Tiempo-Frecuencia analizado con la TW
Mientras que para la STFT las ventanas seran de igual dimensin para todos los casos ya
que para ese anlisis no se dilatan ni se contrae, ver figura 3.8(a), lo que representa una
ventaja de la WT sobre la STFT, ya que se puede tener mayor detalle del comportamiento
de la seal, dada la resolucin que se puede alcanzar.
(a) (b)
Figura 3.8: Planos Tiempo-Frecuencia para (a) STFT (b) TW
29
3.4.2.1 Transformada Wavelet Rpida (FWT)
La transformada discreta wavelet unidimensional (1-D DWT) se puede calcular por medio
de la Transformada Wavelet Rpida (FWT) o algoritmo piramidal desarrollado por Mallat
[Mal89] (figura 3.9), la cual es una implementacin computacionalmente eficiente donde
su costo computacional es ) (L (siendo L la longitud de la seal de entrada).
La Transformada Wavelet Rpida (FWT) descompone una seal en sus secuencias de
aproximacin y detalle en diferentes niveles u octavas (figura 3.10a). El clculo de la
transformada wavelet se inicia con una seal de entrada, a
(0)
n
. Sean a
(i-1)
n
y d
(i-1)
n
sus
secuencias de aproximacin y detalle en el nivel de descomposicin i-1, respectivamente.
La aproximacin y detalle de la seal en el nivel i se definen como:
=
1
0
) 1 (
2
) (
N
k
i
k n k
i
n
a g a
Filtro Pasa-Bajo (3.9)
=
1
0
) 1 (
2
) (
N
K
i
k n k
i
n
a h d
Filtro Pasa-Alto (3.10)
siendo g
k
y h
k
los coeficientes de los filtros paso baja y paso alta de orden N,
respectivamente (figuras 3.9 , 3.10(a)).
Las ecuaciones (3.9 y 3.10) describe el clculo de la Transformada Wavelet Rpida. Los
coeficientes de los filtros se obtienen a partir de la representacin de la wavelet madre en
tiempo continuo.
La resolucin de las diferentes aproximaciones
) (i
n
a as obtenidas disminuye al aumentar i.
Puesto que las seales
) (i
n
a (i = 1, 2, ..., J) representan a la seal original en varias
resoluciones, la FWT tambin se conoce como una tcnica de descomposicin
multiresolucin de seales, esta estructura recibe el nombre de banco de filtros de anlisis,
el proceso consiste en una serie de filtrados repetitivos usando el concepto de diezmado, es
decir, al principio se utiliza un filtro pasa bajas y otro pasa altas con frecuencia de corte de
la mitad de la mxima componente de frecuencia de la seal a analizar, posteriormente la
salida de ambos filtros se vuelve a enviar a otro par de filtros de las mismas caractersticas,
la frecuencia de corte del segundo filtro es la mitad de la mxima componente de
frecuencia de la seal que va a entrar a ese filtro, ver figura 3.11. De ste modo se va
reduciendo el ancho de banda y eso se traduce en la reduccin a la mitad de la resolucin,
lo que significa que a mayor nmero de etapas de filtrado se tendr una mayor resolucin a
baja frecuencia.
La seal de entrada
) 0 (
n
a se puede reconstruir a partir de su descomposicin multiresolucin
de acuerdo con:
{ }
+ =
k
k n
i
k k n
i
k
i
n
h d g a a
2
) (
2
) ( ) 1 (
(3.11)
Esta ecuacin describe el banco de filtros de sntesis, que consta de un filtro paso baja y
otro paso alta de coeficientes
n
g y
n
h , respectivamente, y que se encuentran fijados por las
condiciones de reconstruccin perfecta [VK95] y de la wavelet madre en tiempo continuo.
La figura 3.10(a)(b) muestra un diagrama de bloques de los bancos de filtros de anlisis y
sntesis respectivamente.
30
Figura 3.9: Transformada Wavelet Rpida (FWT) o Algoritmo de Mallat
(a)
(b)
Figura 3.10. Diagrama de bloques de la descomposicin multiresolucin de una
seal por medio de la transformada wavelet. (a) Banco de anlisis y (b) sntesis.
Resulta interesante evaluar el nmero de operaciones de filtrado que se deben realizar por
cada muestra de la entrada
) 0 (
n
a . Ntese que los bancos de filtros de anlisis y sntesis
conllevan exactamente el mismo nmero de operaciones. La seal de entrada
) 0 (
n
a se utiliza
como entrada de los dos filtros y de la salida de estos dos filtros slo se utiliza una de cada
dos muestras debido a la decimacin por 2. De esta manera, la primera pareja de filtros slo
31
realiza 2(1/2)= 1 operaciones de filtrado por cada muestra de entrada. En el segundo nivel
de descomposicin y puesto que la frecuencia de la seal
) 1 (
n
a es la mitad de la frecuencia de
la seal de entrada, slo se realizan operaciones de filtrado por muestra de entrada.
Extendiendo este desarrollo se determina que el nmero de operaciones de filtrado por cada
muestra de entrada est acotado superiormente por 1+1/2+1/4+..... = 2.
Figura 3.11: Respuesta en frecuencia del banco de filtros Wavelet
3.4.2.2 Algoritmo Transformada Wavelet Rpida (FWT)
La 1-D DWT se puede implementar por medio del algoritmo piramidal (PA:Pyramid
Algortithm) desarrollado por Mallat [Mal89]. Dada una secuencia x(n) de longitud L, este
algoritmo se define mediante:
Inicio {Algoritmo Piramidal Directo}
Para (i = 1 a J )
Para (n = 1 a 2
J-i
)
=
1
0
) 1 (
2
) (
N
k
i
k n k
i
n
a g a
Filtro Pasa-Bajo
=
1
0
) 1 (
2
) (
N
K
i
k n k
i
n
a h d
Filtro Pasa-Alto
Fin {Algoritmo Piramidal Directo}
Siendo ) (
) 0 (
n x a
n
= , L = 2
J
, con J representando el nmero de octavas, y N siendo la
longitud de los filtros paso baja y pasa alta.
32
Captulo 4
Sistema de Segmentacin
El sistema de segmentacin de seales tiene como objetivo identificar los segmentos de voz
sonoros, sordos y los tramos de silencio, utilizando transformada wavelet con el fin de
hacer un realce en la seal independiente del segmento identificado, por ejemplo, aumentar
algunas bandas de frecuencia para los sonidos sordos, no aumentar las vocales en lo
absoluto y reducir por completo los segmentos de ruido y de silencio. La Transformada
Wavelet juega un papel muy importante en el planteamiento de este proyecto ya que
autores como Tan et al. [TLS94] y Long y Datta [LD96] han mostrado que los fonemas
correspondientes a sonidos sordos se relacionan con las escalas de mayor resolucin, en
cambio, los fonemas sonoros, tales como las vocales, con las escalas de menor resolucin,
El sistema de segmentacin propuesto que se plantea en el Apndice D del proyecto de
investigacin 195 de la Universidad del Quindo [Hur03] figura 4.1, se basa en utilizar la
DWT con la wavelet madre que mejor se ajuste a las caractersticas de la seal para
descomponerla en cuatro niveles o sub bandas y hacer una identificacin entre fonemas
sonoros, sordos y tramos de silencio o ruido. El mtodo para la segmentacin y
clasificacin de los fonemas en tiempo real consiste en capturar bloques de 64ms que
equivalen a 512 datos, y analizar pequeos sub-bloques de 4ms de longitud
correspondientes a 32 muestras por medio de una FWT, hacer una clasificacin mediante
reglas de seleccin, las cuales se obtienen mediante un estudio de evolucin de las energas
de cada uno de los niveles de descomposicin, para facilitar el proceso de segmentacin , la
informacin se suaviza por medio de un filtro de media mvil de 8 coeficientes. Una vez
identificado los segmentos de los fonemas se efecta un realce en las diferentes bandas de
descomposicin segn el segmento identificado y se procede a recuperar la seal utilizando
la IDWT, la seal recuperada traer las caractersticas adecuadas para la escucha en una
persona con deficiencias auditivas.
A continuacin analizaremos la estructura del sistema de segmentacin, de la figura 4.2,
detallando cada uno de los bloques que comprenden dicho sistema, y su implementacin en
Matlab. Se ejecutaron simulaciones con frases de voz previamente almacenadas en formato
(.wav) con el fin de obtener las resultados adecuados que nos permitieron clasificar los
segmentos.
33
Figura 4.1 Sistema de Segmentacin de Seales Propuesto en el Proyecto 195.
Figura 4.2 Estructura del Sistema de Segmentacin
4.1 Implementacin del Sistema de Segmentacin de Fonemas en
MATLAB
Para el desarrollo del proyecto y la obtencin de los resultados deseados se efectuaron
simulaciones en MATLAB que obedecen al diagrama de flujo de la figura 4.3. Con
muestras de voz de diversos hablantes previamente capturadas de pequea longitud, las
cuales formaban frases que contenan entre de 3 y 5 fonemas tanto sonoros como sordos y
segmentos de silencio, se realiz el anlisis correspondiente y se establecieron las reglas de
seleccin adecuadas para segmentar la seal en 3 categoras diferentes de voz: sonidos
sonoros (vocales), sonidos sordos (consonantes) y segmentos de silencio o ruidos de fondo.
Extraccin de Caractersticas
Preprocesamiento Adquisicin
Captura
Seal de Voz
Pre-nfasis
Log
t
{ } exp
Normalizacin
Clculo de
Energas
DWT Wavelet
Denoising
Segmentacin
Identificacin
del Fonema
Realce de la Seal
Realce
d-1..d-8, a-8
Filtro
media
mvil
Extraccin de
caractersticas a
bloques de 32
muestras
Clasificador
d / dt
Detector
del
Segmento
d-1d-4
34
La implementacin y funcionamiento del programa en matlab se detalla a continuacin. La
seal de entrada X es un vector de cierta longitud, del cual se toman tramas de 512 datos
correspondientes a 64ms de la seal total, este se analiza independientemente de los otros
bloques teniendo en cuenta las ltimas N-1 muestras del bloque anterior para su
descomposicin por medio de la transformada wavelet y garantizando una continuidad de la
seal de entrada, siendo N el tamao de la respuesta al impulso en este caso la longitud de
la wavelet madre seleccionada, la figura 4.3 ilustra el esquema en la memoria del DSP de
los bloques de entrada a cada una de las etapas del banco de filtros wavelet, se descompone
la seal hasta obtener los coeficientes wavelet de la seal de voz de los 4 niveles de detalle
de mayor resolucin. Estudiando la evolucin de energas de cada uno de los niveles se
establecieron los criterios de segmentacin de cualquier seal de voz independiente del
hablante y de las condiciones de captura, una vez identificados los segmentos se efecta un
realce de la seal, dicho realce se produce por medio de un factor de escala sobre los
coeficientes entregados por el bloque wavelet denoising, es por esta razn que en el
diagrama de flujo de la figura 4.4 se divide en dos partes, ya que los coeficientes entregados
por la etapa wavelet denoising son utilizados para identificar los segmentos y realzar la
seal. Por conviccin este planteamiento en el diagrama de flujo no se puede plantear pero
es una forma muy simple de ilustrar el desarrollo del algoritmo.
El sistema de segmentacin de la voz de la figura 4.4 est conformado por 6 etapas
clasificadas de la siguiente manera:
Adquisicin de la seal de voz
Preprocesamiento
Extraccin de Caractersticas
Segmentacin
Realce de la seal
Recuperacin de la seal de voz
Figura 4.3. Esquema en memoria del vector de muestras a filtrar
N-1 muestras
anteriores
N-1 muestras
Primera captura
de muestras
512 Muestras ledas
N-1 muestras
anteriores
N-1 muestras
Segunda captura de
muestras
512 Muestras ledas
35
Figura 4.4 Diagrama de flujo de la simulacin en MATLAB
Lectura del
Archivo .wav
Conversin de
Fs a 8KHz
Ajuste de la Seal a un
Mltiplo de 512 Datos
Seleccin de
Bloque de 512
Datos
Filtrado de Pre-nfasis
Transformada Wavelet
Wavelet Denoising
Normalizacin
Clculo Energas
Sub-bandas
Reglas de
Seleccin
Realce de
la Seal
Transformada Inversa
Wavelet del Bloque
Concatenacin de Bloques
Conversin Seal a Formato .wav
FIN
INICIO
36
4.1.1 Adquisicin de la Seal de Voz
La seal de voz bsicamente est constituida por ondas de presin producidas por el aparato
fonador humano como se explic en el captulo 2. La manera ms apropiada de capturar
este tipo de seal se realiza mediante un micrfono, el cual se encargar de convertir la
onda de presin sonora en una seal elctrica. La siguiente etapa ser aquella que se
encargue de amplificar las seales a niveles que sean manejables. A partir de la seal
analgica obtenida se hace necesario convertir la seal a formato digital para poder
procesarla en la computadora, y se realiza mediante dos procesos: muestreo y
cuantificacin. Este proceso de dos etapas se conoce como Modulacin por Cdigo de
Pulsos (PCM). La mayor parte de los sonidos vocales tiene energa espectral significativa
hasta los 4khz, entonces la frecuencia de muestreo debe de ser por lo menos dos veces la
frecuencia mxima (segn el Teorema de Shanon), por lo que f
s
= 8 KHz, que corresponde
a la calidad telefnica.
Las muestras de voz fueron tomadas de diversos hablantes entre hombres y mujeres y en
diversos ambientes de ruido de fondo con el fin de establecer criterios en seales
producidas en diferentes medios, para ello utilizamos la tarjeta de sonidos del computador
que permite guardar las frases en formato .wav a una frecuencia de muestreo de 22050Hz
usando 8 bits por muestra para ser manipuladas en el entorno de matlab por medio de la
funcin [X,fs] = wavread (.wav) [MMOP07] la cual lee un archivo con extensin .wav, y
devuelve un vector X con los valores de amplitud de cada una de las muestras, y fs es la
frecuencia de muestreo de la seal. Debido a que la frecuencia de muestreo en el momento
de la captura es de 22050Hz debemos llevar a cabo una conversin a 8Khz ya que como se
mencion anteriormente, nuestra frecuencia de muestreo ptima es de fs = 8Khz, las
muestras de voz capturadas quedan almacenadas en una base de datos para su respectivo
anlisis, algunas se pueden ver en le tabla 4.1 teniendo en cuenta el anlisis de los fonemas
del captulo 2 seccin 2.2.
Fonemas Consonnticos
Fonema Ejemplo Clasificacin
B Bote Bilabial, Oclusivo
C Casa Velar, Oclusivo
Ch Pecho Palatal, Africado
D Donde Dental, Oclusivo
F Fama Labiodental, Fricativo
G Goma Velar, Oclusivo
H Jardn Glotal
J Paja Alveolar, Fricativo
K Queso Velar, Oclusivo
L Lana Alveolar, Semivocal
Ll Llave Palatal, Africativa
M Mam Bilabial, Nasal
N Nana Alveolar, Nasal
Lea Palatal, Nasal
37
P Papa Bilabial, Oclusivo
Q Queso Velar, Oclusivo
R Pero Alveolar, Vibrante
RR Carro Uvular, Vibrante
S Sopa Alveolar, fricativo
T Atar Dental, Oclusivo
V Nueve Fricativa
W Hueso Biobio-velar
X Paja Alveolar, Fricativo
Y Mayo Palatal, Fricativo
Z Caza Interdental, Fricativo
Fonemas Voclicos
Fonema Ejemplo Clasificacin
A A Central, Abierta
E E Anterior, Media
I I Anterior, Cerrada
O O Posterior, Media
U U Posterior, Cerrada
Tabla 4.1 Ejemplos de algunas muestras de voz previamente capturadas
4.1.2 Preprocesamiento
Esta etapa consta de un filtro de Pre-nfasis, un filtro FIR empleado en los sistemas de
reconocimiento para eliminar el ruido de la seal, reducir los efectos de volumen y
contrarrestar en cierto grado la atenuacin impuesta por el tracto vocal del hablante,
haciendo que el anlisis sea independiente de las condiciones de captura. Se usa un filtro
digital de primer orden cuya funcin de transferencia es [BR99]:
1
1 ) (
= az z H
(4.1)
Donde 0 < a 1, pero tpicamente se emplea un valor de a = 0:95 permitiendo una
amplificacin de 20dB para las componentes de alta frecuencia. Su implementacin en
Matlab se efecta por medio de la funcin de la convolucin entre la seal de entrada X y
H(z), su salida Y es un vector de la seal filtrada.
| |) 95 . 0 1 , ( = X conv Y
(4.2)
Como la seal se analiza por bloques de 512 datos, hay que tener en cuenta el ltimo dato
entregado del bloque actual para el anlisis del bloque siguiente, tcnica conocida como
solapamiento y suma [Hur02b]ver Figura 4.5.
38
Figura 4.5. Anlisis por bloque del filtro pre-nfasis
4.1.3 Extraccin de Caractersticas
Esta etapa involucra el anlisis de las seales de voz. Est compuesta por cuatro bloques
(figura 4.6) que nos permiten obtener el comportamiento o evolucin de las energas en los
diferentes niveles de descomposicin para determinar y clasificar los segmentos de voz.
Figura 4.6 Bloque de Extraccin de Caractersticas
4.1.3.1Trasformada Wavelet
El primer bloque consiste en descomponer la seal por medio de la Transformada Wavelet
en sus 4 niveles de mayor resolucin, para ello se hace uso del wavelet toolbox de MATLAB
el cual tiene embebida la funcin [C, L] = dwt ( X , w_name), que descompone la seal
de entrada X de longitud n igual a 512 datos (bloque de 64ms). Utilizando la wavelet madre
db8 de longitud 2N con N = 8 (ver seccin seleccin wavelet madre), en dos vectores C1,
L1 de longitud igual a 263 datos cada uno ( floor ((n-1)/2) + N ) asociados al nivel de
aproximacin y detalles respectivamente, se puede apreciar en la figura 4.7 un anlisis de
Trasformada
Wavelet
Wavelet
Denoising
Normalizacin Energas
Sub-banda
39
descomposicin en matlab [MMOP07], que para el segundo nivel de detalle y
aproximaciones C2 y L2, la seal de entrada corresponde a los coeficientes de
aproximaciones del primer nivel C1 de longitud 263 datos, dando como resultado los
vectores de detalle y aproximaciones del nivel 2 de longitud 139 datos cada uno, el
procedimiento se repite hasta obtener los 4 niveles de detalle y uno de aproximaciones de la
seal a analizar, como muestra la figura 4.8. Para los bloques de 512 datos siguientes se
deben de tener en cuenta las condiciones iniciales que corresponden a los ltimos N-1
datos del bloque anterior en el mismo nivel, ya que en el algoritmo de mallat se emplean
filtros FIR los cuales dependen de entradas anteriores. Por este motivo la longitud de los
coeficientes wavelet en cada nivel ser siempre mayor que la longitud de la seal
descompuesta. En la tabla 4.2 podemos observar el nmero de datos que se analizan por
cada nivel y las condiciones iniciales tenidas en cuenta para los siguientes bloques.
La seal de voz se descompone en 4 bandas de frecuencia (H1, H2, H3, H4), en la tabla 4.3
se presenta el rango de frecuencias de las 4 bandas con su respectiva frecuencia central en
las que se descompone la seal.
Figura 4.7 Anlisis de Descomposicin por nivel en Matlab
Figura 4.8 Descomposicin de un Bloque X = 512 datos de la seal en 4 niveles de detalle
y uno de aproximacin
X = 512 datos a
3
= 77
a
2
= 139
a
1
= 263
X
g(-n) 2
h(-n) 2
h(-n) 2
h(-n) 2
h(-n) 2
g(-n) 2
g(-n) 2
g(-n) 2
d
-2
= 128 datos
d
-3
= 64 datos
d
-4
= 32 datos
a
-4
= 32 datos
d
-1
= 256 datos
40
Nivel de Entrada # Coeficientes Entregados Coeficientes
Analizados
Condiciones Iniciales
sgte bloque
Ao = Bloque 512 A1 = 263 D1 = 263 D1 = 256 D1 = 7
A1 = 263 A2 =139 D2 = 139 D2 = 128 D2 = 11
A2 = 139 A3 = 77 D3 = 77 D3 = 64 D3 = 13
A3 = 77 A3 = 46 D4 = 46 D4 = 32 D4 = 14
Tabla 4.2 Nmero de coeficientes entregados por cada nivel de la wavelet con los
coeficientes que se analizan y los que sirven de condiciones iniciales para los siguientes
bloques
Nivel Frecuencia Mnima
(Hz)
Frecuencia Mxima
(Hz)
H1
H2
H3
H4
Tabla 4.3 Rango de frecuencias
4.1.3.2 Seleccin de la Wavelet Madre
Lo primero a tener en cuenta a la hora de realizar un anlisis wavelet es cul wavelet madre
utilizar ya que se hace necesario determinar la seal (t) que mejor se adapte al sistema;
para esto se hizo referencia al proyecto de investigacin 195 Reconocimiento de Voz en
Tiempo Real por medio de la Transformada Wavelet Y Procesadores Digitales de Seales
[Hur03a] realizado en la universidad del Quindo. Entre los criterios tenidos en cuenta
estn:
Mayor similitud con las muestras de las seales de voz. Bajo este criterio la wavelet
Haar se descarta debido a su gran diferencia con una seal de voz. La symlets son
bastante simtricas y las seales de voz son asimtricas, por lo tanto tambin se
descartan. As que solo quedan la Daubechies y la Coeiflet.
Menor carga computacional. Un orden alto de la funcin wavelet implica una
longitud mayor en los coeficientes de los filtros usados en el anlisis y por lo tanto
un costo computacional ms alto. Para las wavelets daubechies y symlets la longitud
de los filtros de anlisis hn y sntesis gn es 2N, donde N es el orden de la funcin
wavelet, en cambio para las coiflets, esta longitud se triplica ya que las longitudes
de dichos filtros son 6N. Por tal motivo fu descartada.
Se emple el mtodo de determinacin de la mejor base el cual hace uso de la
entropa de DWT, y el algoritmo de la seleccin de la mejor base, llegando a la
conclusin de emplear la Wavelet Daubechies de orden 8.
41
4.1.3.3 Wavelet Denoising
Es una tcnica mediante la cual se elimina el ruido ambiente de fondo y el producido por el
sistema de grabacin utilizado. Esta tcnica tiene la ventaja de que se incorpora
directamente dentro del algoritmo de clculo de la transformada y no requiere de demasiada
carga computacional. Para esto se realiza lo que se conoce como un soft-thresholding que
consiste en restar cierto umbral a los coeficientes arrojados por el clculo de la DWT de
cada uno de los niveles de descomposicin cuyo valor absoluto sea mayor a ste y llevar a
cero los coeficientes cuyo valor absoluto se encuentre por debajo. Para calcular el umbral
se capturan datos con el micrfono en ausencia de voz (ruido) y se hace uso de la siguiente
ecuacin [RB98]:
n
n
u
* log * 2
= (4.3)
donde:
u = Umbral.
n = Nmero de datos (tamao del ruido capturado).
2
= Varianza del ruido
En la tabla 4.4 se muestran los valores de umbral de ruido en cada una de las bandas
obtenidos haciendo uso de la transformada wavelet discreta de 8 niveles, es muy notorio la
reduccin de ruido utilizando el bloque wavelet denoising a la hora de recuperar la seal, si
se utiliza un umbral muy fuerte puede ocasionar prdidas de energa importante que
repercuten en la identificacin de los segmentos.
Nivel Umbral
Detalle 1 12.4 e -3
Detalle 2 6.1 e -3
Detalle 3 3.1 e -3
Detalle 4 1.9 e -3
Aproximacin 4 1 e -3
Tabla 4.4 Umbral de ruido para cada nivel
4.1.3.4 Normalizacin
Es de notar en el sistema que el bloque de normalizacin est antes del clculo de energas,
el cual emplea el logaritmo del valor absoluto de los coeficientes wavelet, la derivada
temporal, la integracin y la exponenciacin (ver figura 4.9), este conjunto de bloques
garantizan, para los parmetros extrados, una independencia del volumen de la seal.
( ) { } ( ) { } t f W A t Af W
g g
log log log + = (4.4)
( ) { }( ) ( ) { }( ) t s t Af W
t
t s t Af W
t
g g
, log , log
(4.5)
Al emplear el calculo del logaritmo del valor absoluto se logra una independencia del factor
de amplitud de la seal (Ec. 4.4), el cual puede ser eliminado por medio de la derivada
42
temporal al conjunto de datos (Ec. 4.5) logrando una independencia de amplitud de los
parmetros extrados, la derivada temporal en matlab se implementa por medio de un
derivador de primer orden dado por la ecuacin de recurrencia
| | | | | | 1 = n x n x n y (4.6)
y para la operacin de integracin un integrador de suma continua dado por la funcin de
transferencia [LF94]
( )
1
1
1
=
z
z H (4.7)
Tanto el derivador (ecu4.6) como el integrador (ecu.4.7) se pueden implementar en
MATLAB [MMOP07] por medio de la funcin Y = FILTER (bk, ak, x) teniendo en cuenta
como condicin inicial para el siguiente bloque de datos, el ltimo dato de cada uno de los
niveles de descomposicin ya que el derivador y el integrador dependen de la entrada (FIR)
y salida (IIR) anterior respectivamente.
Figura 4.9 Bloque de normalizacin
4.1.3.5 Energas Sub-bandas
Una vez obtenidos los coeficientes wavelet normalizados de cada uno de los 4 niveles de
detalle y 1 de aproximacin, procedemos a calcular la energa aportada por cada uno de los
niveles de detalle en los que se toman sub-bloques de 4ms que corresponden a segmentos
de 32 muestras para analizar la evolucin de la energa y establecer las reglas de seleccin
adecuadas, para este anlisis se utiliz la siguiente ecuacin:
( )
=
=
i
N
K
i i
k C Ebanda
1
2
(4.8)
Donde Ci son los coeficientes de la banda i, Ni es la longitud por banda y Ebanda
i
es un
vector de una longitud 16 datos que contiene la energa de la banda i por cada segmento de
32 datos (4ms) del total del bloque capturado de 512 datos (64ms), en la tabla 4.5 se puede
observar el nmero de coeficientes que aporta cada banda por bloque y por segmento para
el clculo de energa por cada nivel.
Nivel Datos Por
Bloque (64ms)
Datos Por Segmento
(4ms)
Detalle 1 256 16
Detalle 2 128 8
Detalle 3 64 4
Detalle 4 32 2
Aproximacin 4 32 2
Tabla 4.5 Nmero de Coeficientes de cada nivel en un bloque de 512 muestras de la seal
para el Clculo de las Energas
Log
t
{ } exp
Normalizacin
43
Una vez obtenidos los vectores de energa de cada uno de los niveles de detalle, y para
facilitar el proceso de segmentacin, la informacin se suaviza por medio de un filtro de
media mvil de 8 coeficientes, cabe recordar que cada vector tiene una longitud de 16 datos
en cada nivel y que corresponden a solo un bloque de 512 datos (64ms) de la seal, es decir
un dato en cada vector equivale a la energa contenida en un segmento de 32 muestras
(4ms) por banda.
4.1.4 Reglas de Seleccin
En esta seccin se describen una serie de pruebas, que fueron llevadas a cabo de cara a
realizar la segmentacin de las frases componentes de la base de datos de una manera
automtica. El objetivo de dichas pruebas, era el de evaluar la posibilidad de realizar la
segmentacin de fonemas de las frases componentes de nuestra base de datos de una
manera automtica (la segmentacin consiste en delimitar mediante etiquetas la posicin de
los fonemas dentro de las frases), con el fin de establecer reglas de seleccin que permitan
identificar el tipo de segmento. En efecto, debemos especificar que dicho proceso de
segmentacin es realizado manualmente (empleando herramientas de edicin de sonido
como, Sound forge 5.0 y Cool Edit Pro 2.0), para lo cual se debe escuchar una a una las
frases, y colocar las etiquetas que aislan cada uno de los fonemas de forma manual, estas
etiquetas se graban en un archivo de formato .phn con el mismo nombre del archivo .wav
que contenga la frase, el archivo .phn contiene el nmero de fonemas en la frase y el
posicionamiento de cada fonema (Tabla 4.6), no hay que olvidar que los valores obtenidos
de las etiquetas se toman de los archivos cuya frecuencia de muestreo es aproximadamente
22Khz y que se debe hacer la conversin a 8Khz, para ser visualizados (ver figura 4.10) y
poder observar el comportamiento de la energa entre fonemas de cada una de las bandas.
# de Fonemas Etiquetado Manual
4 Posicin Longitud
/m/ 544 2880
/a/ 3447 3734
/t/ 9856 540
/a/ 10440 3585
Tabla 4.6 Etiquetado Manual de la palabra mata
Claramente, este procesado manual requiere una gran cantidad de tiempo y adems, en
algunos casos, lleva asociado tambin errores. Estos errores pueden venir derivados del
cansancio que este trabajo implica, por esta razn se produce errores de criterio en la
segmentacin.
En total se dispuso de un conjunto de 108 archivos .wav con frases que contenan de 3, 4 y
5 fonemas que mezclaban sonidos sonoros, sordos y segmentos de silencio, como tambin
archivos con slabas que mezclan las consonantes con las vocales por ejemplo el archivo
B.wav contiene la seal ba be bi bo bu, para concluir las simulaciones se tomaron frases
con ms de cuatro palabras de cara al entrenamiento del sistema. Hay que tener en cuenta
que por trabajar el sistema con una frecuencia de muestreo de 8Khz, fue necesario
convertir la frecuencia de muestreo de todas las frases de 22Khz a 8Khz, como tambin el
44
posicionamiento manual de las etiquetas, esto se realiz con lneas de cdigo en el
programa de matlab.
Figura 4.10 Palabra mata etiquetada
Para establecer las reglas de seleccin analizamos el comportamiento de la energa de las
cuatro bandas de descomposicin en las zonas donde se encontraba el etiquetado manual,
observando la evolucin de la energa de un segmento a otro, detallando el umbral de la
banda con mayor intensidad y en que porcentaje se encontraba por encima de las otras
bandas, estudiando los cambios de pendientes de las bandas tanto individual como en
conjunto, concluyendo as para cada tipo de segmento los siguientes aspectos:
Deteccin Segmento de Silencio:
En ausencia de voz se puede notar que en el nivel de detalle de mayor resolucin (d-
1
) la
energa es superior a la de los dems niveles o bandas y permanece constante en las 4
bandas con un umbral muy pequeo. Otra manera para identificar el segmento de silencio
consiste en analizar la intensidad de la energa, si esta no supera el umbral de 1e9 en la
banda de mayor intensidad, el segmento se identifica como silencio.
Para obtener una mayor exactitud en los segmentos de silencio analizamos tambin los
cambios de energa entre segmentos en cada banda o nivel de descomposicin, dndole un
valor dependiendo de la variacin como se muestra en la tabla 4.7, la variacin depende del
cambio de energa entre segmentos en cada una de las bandas por separado.
Valor Cambio de Energa
1
0
-1
Aumento de Energa
Energa Constante
Disminucin de Energa
Tabla 4.7 Cambio de energa entre segmentos por banda
0 1000 2000 3000 4000 5000 6000
-0.4
-0.3
-0.2
-0.1
0
0.1
0.2
0.3
0.4
0.5
/m/ /a/ /t/ /a/
45
Luego de realizar diferentes pruebas se concluy que en los segmentos en el cual la energa
permaneca constante en las cuatro bandas correspondan a segmentos de silencio. Para
determinar dicha regla de seleccin se suman los valores de cambio en cada banda por
segmento es decir que si en las 4 bandas la energa aumenta el segmento tendr un valor de
4, si da un valor negativo la energa diminuye y se aproxima el fin del segmento
dependiendo del cambio, cuando el segmento toma un valor de cero, se analizan las cuatro
bandas y si en todas las bandas la energa es constante es decir el cambio es igual a cero, se
detecta un segmento de silencio, la figura 4.11 ilustra la suma de las variaciones de energa
en las 4 bandas, notndose que la transicin entre el fonema /a/ y el fonema /t/ existen
segmentos de silencio, ya que los puntos son constantes en este tramo; en el caso en que
algunas de las bandas tengan un valor distinto se cero se analiza el umbral para determinar
el tipo de segmento.
Figura 4.11 Deteccin de segmentos de silencio en la palabra mata
Deteccin Segmento de Sonoro:
Para determinar un segmento que haga parte de un fonema sonoro es decir una vocal,
analizamos primero en comportamiento de la energa, en archivos que contenan solo
vocales, para esto se hizo referencia a la base de datos del proyecto 195(grupo GDSPROC )
que contiene las vocales pronunciadas por 42 hablantes entre hombre y mujeres,
logrndose apreciar un comportamiento gausiano con el tiempo en cada una de las vocales
con una intensidad fuerte comparada con la de los fonemas sordos, y notndose que
dependiendo de la vocal la banda predominante es distinta. Adems el umbral mximo que
alcanza la banda predominante es mayor a 1e16. Se puede notar que al inicio de cada vocal
la banda predominante aumenta considerablemente mientras que las restantes se
incrementan levemente, el fin de la vocal se presenta cuando todas la banda o bandas
predominantes van disminuyendo su valor de umbral comparado con el valor mximo
alcanzado, a continuacin se explica el comportamiento de la energa por vocal:
Vocal A: Predomina la energa de los niveles d-2 y d-3 con mayor intensidad, seguido
por el nivel de detalle d-1 que vara considerablemente segn el hablante,
0 1000 2000 3000 4000 5000 6000
0
20
40
60
80
100
120 /m/ /a/ /t/ /a/
46
entre el 20% y 80% con respecto a la banda de mayor intensidad, la energa
del nivel d-4 es muy pequea pero siempre mayor al 1%.
Vocal E: Se caracteriza el nivel d-1 como banda predominante, las tres bandas restantes
varan su energa con respecto a d-1 entre el 5% y el 50% independientemente
una de otra, siendo la banda d-2 el ms notorio y en algunos caso es
comparable con d-1 pero no mayor a este.
Vocal I: d-1 sobresale sobre las dems bandas, mientras que la energa de los niveles
d-4 y d-2 oscila entre 20% y el 60% con d-4 siempre mayor a d-2, la banda
d-3 varia su energa con respecto a d-1 entre 1% y el 30%, en algunos casos d-
2 y d-3 presentan la misma intensidad .
Vocal O: Predominan d-3 y d-4, en algunos casos la energa de todas las bandas son
iguales, mientras que en otros la energa de los niveles d-1 y d-2 son muy
leves con valores no mayores al 30% ni menores al 1%.
Vocal U: La bandas de mayor intensidad son d-4 y d-3 con un valor mayor de 1e15
siendo ligeramente menor el nivel d-3, los niveles d-2 y d-1 tienen valores
menores al 80% y mayores al 5% respectivamente.
En conclusin:
La principal caracterstica de los fonemas sonoros es la intensidad que aporta cada
una de las bandas por segmento con un comportamiento gaussiano y su duracin en
el tiempo es muy larga comparada con los fonemas sordos
La energa promedio por segmento es mayor a 1e13 y la banda predominante
depende de la vocal que se est analizando.
La vocal /i/ es de una energa pequea comparada con las otras vocales.
Un segmento que haga parte de una vocal existe aporte de energa en todas las
bandas a excepcin de la /i/ en algunos casos.
Para observar el comportamiento ideal de una vocal y el aporte de energa en cada
una de las bandas debe de ser pronunciada claramente de lo contrario se mezclar
con un segmento sordo debido al aporte de energa de cada una de las bandas.
Deteccin Segmento de Sordo:
Para analizar el comportamiento de las bandas de energa de un segmento sordo, extrajimos
de las frases, los segmentos de consonante independiente de la vocal que forma la silaba,
los archivos estudiados contenan la combinacin de las consonantes con las vocales dando
como resultado las siguientes caractersticas:
Fonema /b/
Grafa: b, v.
La banda predominante es el nivel de detalle d-4, con energa no mayor a
1e12 y el aporte de energa de las dems bandas es nulo cuando est
precedido de silencio, algunos casos se presenta leve de energa en d-3.
47
Si le antecede una vocal hay aporte de energa en todas las bandas con un
valor muy inferior al punto mximo de la vocal anterior alrededor 1e13.
El detalle d-1 es muy leve, en algunas ocasiones es nulo.
Fonema /d/
Grafa: d.
Predomina la banda d-4 con intensidad menor a 1e12, sin aporte de energa
en las dems bandas cuando est precedida de un silencio.
Cuando le antecede una consonante o vocal la banda predominante es la
misma con una intensidad mayor y existe cierto aporte en la banda d-3 en
casos excepcionales la banda d-2 aparece levemente.
d-1 es totalmente nulo.
Fonema /f/
Grafa: f.
Este sonido es de muy corta duracin y debido a la friccin de este fonema
se nota energa en el detalle d-1 o pequea energa en d-2 y d-3, en pruebas
realizadas algunos de los segmentos correspondientes a este fonema se
vuelven cero por el bloque wavelet denoising debido a que el sonido es muy
similar al producido por el micrfono.
Fonema /g/
Grafa: g, gu:
Para las slabas ga, go, gu, el nivel mximo es d-4 y la energa en las dems
bandas es cero, la transicin con otro fonema presenta un aumento notable
en las bandas d-2 y d-3, el detalle d-1 permanece en cero por varios
segmentos e incrementa su energa abruptamente.
En las slabas gue, gui, sobresalen los detalles d-1 y d-2, el cambio entre
fonemas ocurre cuando las bandas predominantes disminuyen y luego
aumentan abruptamente entre segmentos.
Fonema /j/
Grafa: j, g.
d-4 aparece como la banda predominante con una intensidad menor a 1e12,
se presentan casos donde aparece la banda d-2 con aporte de energa sin ser
mayor a d-4 y depende del fonema anterior o siguiente.
Fonema /k/
Grafa: c, qu, k.
Debido al carcter explosivo de este fonema, puede ser detectado como una
vocal, a diferencia de sta, este fonema es de una duracin mucho ms corta,
donde predominan las bandas d-1 y d-2 seguidas con un valor
aproximadamente del 25% con respecto a la banda predominante. En el
cambio de fonema, la banda de mayor energa cae por segmentos hasta el
punto en que pasa a predominar otra banda aumentando su energa entre
segmentos.
Fonema /l/:
Grafa l:
El nivel con mayor energa es el detalle d-4, con el nivel d-3 alrededor del
25% con respecto a d-4, cuando los niveles de mayor resolucin van
tomando valores por encima de 1e13 existe un cambio de fonemas.
48
Cuando el segmento anterior es una vocal, la intensidad es considerable
aunque ms pequea que el valor mximo del fonema anterior.
Fonema /ll/
Grafa: ll:
d-1 es la banda predominante con energa en todas la bandas siempre menor
a 1e13, un aumento de energa considerable o un cambio continuo de bandas
produce un cambio de fonema.
Fonema /m/
Grafa: m.
Predominan d-4 y d-3. Cuando le precede un silencio no hay energa en las
dems bandas.
Si le antecede una vocal, el nivel d-2 aparece con energa considerable y la
intensidad de d-4 y d-3 es aproximadamente el 10% del punto mximo de la
banda predominante de la vocal anterior.
Fonema /n/
Grafa: n.
Presenta el mismo comportamiento del fonema m.
Fonema //
Grafa: .
d-4 es la banda predominante con una intensidad no superior a 0.5e13, d-3
aporta energa variable de aproximadamente del 20% con respecto a d-4.
En el segmento que los niveles d-2 y d-1 empiezan a aparecer se trata de un
cambio de fonema.
Un cambio de banda predominante e incremento notorio entre un segmento y
otro de energa ocasiona tambin transicin de fonemas.
Cuando la antecede una vocal, el nivel mximo pasa a ser el detalle de
menor resolucin d-4 y los de mayor resolucin tienden a cero.
Fonema /p/
Grafa: p.
El fonema /p/ es de muy corta duracin y sobresalen las bandas d-2 y d-3
como las de mayor intensidad.
Algunos casos presenta aporte de energa en el detalle d-1 cuando le
antecede una vocal.
El cambio de fonema se presenta con un aumento notorio de la banda de
mayor intensidad o un cambio de esta con incrementos leves.
Fonema /r/:
Grafa: r.
Este fonema presenta un comportamiento muy aleatorio, ya que no hay una
banda que predomine sobre las otras en el momento de analizar las energas.
Cuando los segmentos anteriores pertenecen a un segmento de silencio, en
algunos casos, predomina d-1 y en otros d-4 con energa en las bandas
restante mayor al 60% de la banda predominante, si se presenta una
transicin entre [consonante/vocal] o [vocal/consonante] se nota un cambio
de la banda predominante como tambin la intensidad, ya sea una
disminucin o un aumento.
49
Fonema /s/
Grafa: s, c, z
Tiene un comportamiento muy distinto a las dems consonantes ya que la
banda predominante depende del segmento siguiente, por lo regular d-1,
mientras que las otras bandas son cero, la intensidad es pequea si la
antecede un segmento de silencio, pero si el segmento anterior es una vocal,
existe un aporte de energa en todas las bandas hasta disminuir quedando
solo el detalle d-1.
Fonema /t/
Grafa: t.
La banda de mayor intensidad es d-1.
A diferencia del fonema /p/ la duracin es un poco ms larga, tambin se
presenta energa en el nivel d-2.
Cuando le antecede una vocal es notoria la energa en el detalle d-4 y ms
intensa en las dems bandas.
Fonema /w/:
Presenta el comportamiento de un fonema sonoro, y depende en gran medida
del fonema siguiente con el que forma la silaba.
Fonema /x/
Grafa: j, g.
Tiene intensidad comparada con la de las vocales ms o menos entre 5e12 y
1e15 dependiendo de la vocal con que forma la silaba donde predominan las
bandas de mayor resolucin como son d-1 y d-2, en las dos bandas restantes
la energa es cero.
Transicin entre [consonante]/[vocal]:
Estos son algunos de los comportamientos que se presentan entre el cambio de una
consonante a una vocal, es de aclarar que estas reglas no son cien por ciento seguras a la
hora de identificar los segmentos y pueden presentar pequeos errores en la segmentacin.
Si al menos una de las bandas es aproximadamente constante por dos o ms
segmentos y se incrementa notoriamente en el siguiente se presenta un cambio de
fonema.
Cuando las bandas d-4, d-3 y d-2 aportan energa sin importar su intensidad y la
banda d-1 y/o d-2 es nula, se trata de una consonante. En el segmento que una de
estas bandas cobra una intensidad de energa mayor al 1% de la banda predominante
o pasa a ser la banda predominante se trata de una transicin entre consonante /
vocal.
Un cambio de la banda predominante entre segmentos, llevando consigo un
incremento de ms del 400% con respecto al segmento anterior ocasiona un cambio
de fonema.
Si se presenta un solo segmento de silencio, se produce un cambio de fonema.
La banda predominante se incrementa en ms de un 500%.
50
Transicin entre [vocal] /[consonante]:
El cambio de fonema entre vocal/consonante ocasiona que los niveles de energa en los
segmentos de consonante tengan una energa mucho mayor a cuando le antecede un
silencio, tomando valores de aproximadamente 1e13 en todas las bandas.
La banda de energa predominante llega a un punto mximo y empieza a
descender notoriamente entre segmentos, llegando a un valor por debajo del 5%
del punto mximo, se presenta el fin de la vocal y el comienzo de una consonante.
Si se presenta un cambio de banda y desciende el valor de la banda predominante
por debajo de 6e13 se presenta una consonante.
Cuando todas las bandas presentan energa en el segmento anterior y en el
siguiente alguna de las bandas no presenta energa, se trata de un cambio entre
vocal/consonante.
Si se presentan cambios continuos entre segmentos de la banda predominante y el
valor de intensidad no se altera notoriamente, se trata de un cambio de fonemas
sordos.
4.1.5 Realce de la Seal
El realce de la seal se efecta de una forma muy sencilla en la banda a la cual se desea
amplificar, esto depende de las deficiencias auditivas que pueda sufrir el paciente y se
realiza por medio de un factor de escala, que consiste en multiplicar en los segmentos
identificados, los coeficientes entregados por el bloque wavelet denoising con el factor
escala en la o las bandas deseadas. El factor de escala depende de la intensidad en la que se
desea, amplificar cada una de las bandas, el tipo de segmento identificado y el criterio
obtenido por el audilogo en los exmenes realizados. Todos los coeficientes wavelet que
hagan parte de los segmentos de silencio o ruido, son llevados a cero para que no
produzcan realce alguno y evitar molestias en el paciente o distorsin de la seal en los
segmentos adyacentes.
4.1.6 Transformada Wavelet Inversa
Finalmente, el algoritmo del sistema de segmentacin entre en la etapa donde se recupera la
seal por medio de la transformada wavelet inversa, una vez realizado el realce de los
diferentes niveles de detalles en los segmentos detectados del bloque de 64ms, utilizamos la
funcin embebida en el entorno de matlab que me permite obtener la transformada wavelet
inversa de cada nivel, recibiendo los coeficientes de detalle (d
n
) y de aproximacin (a
n
) del
nivel n y retornando los coeficientes de aproximacin del nivel n-1 (a
n-1
), La funcin es
expresada en el wavelet toolboox de matlab como a
n-1
= idwt (a
n
, d
n
, wname). Este
procedimiento se repite hasta recuperar la seal original como se muestra en la figura 4.12
los coeficientes utilizados son los entregados por el bloque wavelet denoisisng con el fin de
que al recuperar la seal, esta tenga una reduccin de ruido considerable.
51
Figura 4.12 Esquema de la Transformada Wavelet Inversa,
para recuperar un bloque de 512 datos.
Los coeficientes de detalle como el de aproximacin, son los entregados por el bloque
wavelet denoising completos, la salida corresponde a la seal recuperada con el respectivo
realce, el tiempo de duracin de X en segundos es 64ms. La figura 4.13 muestra la seal
recuperada de la palabra vaso sin ningn realce.
Figura 4.13 Seal de la palabra mata recuperada.
h(-n) 2
g(-n) 2
a
3
= 77 datos
a
2
= 139 datos
a
1
= 263 datos
X
g(-n) 2
h(-n) 2
h(-n) 2
h(-n) 2
g(-n) 2
g(-n) 2
d
-3
= 77 datos
d
-4
= 46 datos
a
-4
= 46 datos
X = 512 datos
0 1000 2000 3000 4000 5000 6000
-6
-4
-2
0
2
4
6
/m/ /a/ /t/ /a/
d
-2
= 139 datos
d
-1
= 263 datos
52
Captulo 5
Implementacin en el DSP
Como el sistema desarrollado en el entorno matlab no funciona en tiempo real, ya que las
muestras de voz han sido previamente almacenadas en archivos de audio (.wav) para luego
ser procesadas y reproducidas, se opta por implementar el sistema en un DSP (Digital
Signal Processor), el cual es un microcontrolador/procesador con gran capacidad de
procesamiento y almacenamiento. Un DSP puede ejecutar instrucciones a muy alta
velocidad y posee una memoria extensa tanto para datos como para programas y es una
excelente alternativa para ejecutar el sistema en tiempo real.
El sistema fue desarrollado sobre un procesador digital de seales de punto flotante
TMS320C6701 de la Texas instrumet, empleando para ello la tarjeta experimental
EVM67x. Para su programacin se emple el entorno de desarrollo Code-Composer Studio,
y el lenguaje de programacin C. Para este lenguaje se cuenta con un optimizador, el cual
reordena la ejecucin de las instrucciones y asigna las unidades aritmtico-lgicas del
trabajo, esto debido a las capacidades de procesamiento en paralelo con que cuenta el DSP.
Por fortuna se cuenta con una serie de herramientas computacionales desarrolladas dentro
del grupo de investigacin de Procesamiento Digital de Seales de la Universidad del
Quindo (GDSPROC) que estn a disposicin para trabajos futuros, que fueron de mucha
utilidad en la realizacin de este proyecto como son las rutinas de captura de datos por
DMA, el algoritmo de la Transformada Wavelet y la reproduccin de la seal de voz.
Para la implementacin del sistema se emple la estructura de la figura 4.2 descrita en el
captulo anterior para la realizacin de los siguientes algoritmos:
1. Captura de la seal
2. Pre-nfasis
3. Clculo de la FWT
4. Wavelet Denoising
5. Normalizacin de los Coeficientes Wavelet
6. Estimacin de la Energa en Cada Banda
7. Reglas de Seleccin
8. Realce de la Seal
9. Transformada Inversa Wavelet
53
10. Reproduccin de la seal
Figura 5.1 Tcnica de doble buffer usando DMA para captura de un bloque de 64ms con su
respectivo anlisis y reproduccin.
Buffer 2
511
510
509
3
2
1
0
Genera Interrupcin
Empieza Captura en 1
Buffer 1
511
510
509
3
2
1
0
Genera Interrupcin
Empieza Captura en 2
procesar_segmento( Entrada, Salida )
0
1
2
3
509
510
511
Buffer de Salida
Datos a Reproducir
54
5.1 Captura y Pre-procesamiento de la Seal
Para la adquisicin de la seal se usaron los CODECs con que cuenta el sistema de
desarrollo y se program el ADC a una frecuencia de muestreo de 8kHz (calidad
telefnica), 16 bits por muestra, y la tcnica de entrada/salida por acceso directo a memoria
(DMA) haciendo uso de un doble buffer asincrnico. El doble buffer permite realizar en
paralelo los procesos de adquisicin y anlisis de los datos (Figura 5.1), garantizando as la
ejecucin en tiempo real del sistema.
En la implementacin final cada segmento de captura por DMA se tom de 512 datos
utilizando una frecuencia de muestreo de 8kHz, lo que implica un tiempo de adquisicin de
64ms (tcaptura = 512/8000 = 64ms). Para garantizar la ejecucin en tiempo real, la rutina
de servicio de interrupcin por finalizacin de transferencia por DMA lleva a cabo una
inicializacin de la captura por DMA del siguiente bloque de datos sobre el segundo buffer
(Ver Figura 5.1) y ejecuta el anlisis del respectivo segmento (512 datos), desarrollando las
etapas de preprocesamiento, extraccin de caractersticas, identificacin del tipo de fonema,
realce de la seal, y transformada inversa wavelet dentro de la rutina de servicio de
ininterrupcin.
El programa principal y la rutina del servicio de interrupcin en diagramas de flujo (figura
5.2) es la siguiente manera:
Figura 5.2 Diagrama de flujo del programa principal y la ISR.
Programa Principal
Reserva memoria
(entrada, salida y
etiqueta)
Condiciones Iniciales.
Iniciar filtros
Iniciar DWT, IDWT
Iniciar Captura por DMA
(Habilita Interrupcin)
Iniciar Escritura.
ISR
Conversin de Short a Float
Procesar Segmento ()
Conversin de Float a Short
FIN
55
5.2 Conversin de Datos
La funcin que realiza la conversin de los datos se debe a que el buffer de captura entrega
los datos tipo short y la funcin que procesa el segmento los manipula en tipo float, por tal
motivo se debe realizar la conversin tanto para los datos de captura como para los de
reproduccin, y su algoritmo en pseudocdigo es de la forma:
Conversion_short_float(entradaADC , buff)
for k=0 to 511
buff[k] = entradaADC[2*k] * 0.000030519;
Conversion _float_short ( buff , entradaADC)
for k = 0 to 511
salidaDAC[2*k] = buff[k] * 32767.0;
salidaDAC[2*k+1] = 0;
5.3 Funcin Procesar Segmento
La forma estructural del algoritmo que procesa el segmento en pseudocdigo es:
______________________________
Procesa_segmento()
prenfasis()
fwt()
wavelet denoising()
normalizacin()
clculo energas()
reglas_seleccin()
realce()
ifwt()
_______________________________
La funcin de prenfasis est dada por (ecu.4.1) donde a toma un valor de -0.95.
prenfasis( entrada, [1 a], salida )
for i = 1 to long[entrada]
salida[i-1] = entrada[i] - a*entrada[i]
Para el clculo de la transformada wavelet rpida, contamos con las herramientas
desarrolladas por el grupo de investigacin GDSPROC como habamos mencionado
anteriormente, pues estas nos brindan una continuidad en la seal de entrada, es decir, nos
garantizan una interdependencia entre los diferentes segmentos capturados, evitando
adems cortes abruptos de la seal de entrada. Para tener una visin global del
funcionamiento del algoritmo retomamos un prrafo de [Hur02] donde explican dicha
funcin.
56
empleando como condiciones iniciales para cada uno de los bancos de
filtros wavelet muestras pasadas que haban sido entregadas por el sistema
de preprocesamiento. En particular se deben tener en cuenta las N-1
muestras pasadas, donde N es la longitud de la respuesta al impulso de los
filtros asociados a la wavelet usada. La Figura 5.3 ilustra el esquema en la
memoria del DSP de los bloques de entrada a cada una de las etapas del
banco de filtros wavelet.
La implementacin de cada una de las etapas del banco de filtros wavelet se
llev a cabo usando la estructura polifsica [Fli94], la cual evita la
realizacin de clculos innecesarios en los diferentes bloques de diezmado.
Para el clculo de la transformada se escribi un algoritmo que permite
una fcil adaptacin del sistema a otros niveles de descomposicin.
El bloque wavelet denoising, por la procedencia de los clculos se debe incluir despus del
clculo de la transformada wavelet rpida y debido a que su costo computacional es
relativamente pequeo y est incluido dentro de la funcin de la FWT. Como se coment
en el captulo 4 la tcnica usada fue la hardthresholding [RB98], el valor de umbral
depende de la banda a analizar (tabla 4.4) y su implementacin es la siguiente:
wavelet denoising( fwt_entrada, long, umbral )
for i = 0 to long[fwt entrada]
if ( abs(fwt entrada[i]) < umbral )
fwt salida[i] = 0
else
if ( fwt entrada[i] > umbral )
fwt salida[i] = fwt entrada[i] - umbral
if ( fwt entrada[i] < -umbral )
fwt salida[i] = fwt entrada[i] + umbral
5.3 Esquema en memoria del vector de muestras a filtrar.
El algoritmo de la normalizacin es el bloque que independiza la seal del volumen que
esta pueda llevar en el momento de la captura. Se implemento la ecuacin 4.6 para la
57
derivada temporal de primer orden y la ecuacin 4.7 para el integrador mantenedor de
primer orden, de la siguiente manera:
Normalizacin( )
Logabs( nnivel )
for i = 0 to long[n nivel]
nnivel[i] = log ( abs( nnivel[i] ) )
Derivtmp( nnivel )
for k = 0 to long[n nivel]
sal[k] = nnivel[k] - nnivel[k-1];
Integexp( yint )
for k = 0 to long( yint )
yint[k] = xint[k] + yant;
yant = yint[k];
yint[k] = exp( yint[k] );
Para el clculo de las energas se tomaron los vectores que contienen los coeficientes
wavelet normalizados por cada nivel en un tiempo de 4ms que corresponden a n nmero de
datos segn el nivel analizado como se explic en el captulo anterior en la Tabla 4.5,
haciendo uso de la ecuacin 4.5.
Energa(nnivel)
for k = 0 to 16
for i = 0 to long[nnivel]/16
En[k] += nnivel[ (k*16) + i ] ^ 2
El cdigo fuente de la funcin que establece las reglas de seleccin se encuentra en el
apndice B, ya que es algo extenso y hace nfasis a lo redactado en el captulo anterior.
Como detallamos anteriormente, la etapa de realce de la seal result ser de una manera
muy sencilla, ya que simplemente se realiza por medio de un factor escala lo que nos da
una garanta eficiente en el momento de amplificar la seal y adems su costo
computacional es mnimo, cabe recordar que el realce de la seal se efecta en los
coeficientes wavelet entregados por el bloque wavelet denoising y dependen del tipo de
segmento identificado (marka) y el criterio obtenido.
Realce( marka )
For k = 0 to k<16
if marka[k] == 0 //Deteccion de un segmento de silencio
for j = 0 to j<16
{.} // Coeficientes de todas las bandas llevados a cero
if marka[k] == 1 //Deteccion de un segmento de sonoro
for j = 0 to j<16
{.} // Coeficientes de las bandas intactos
if marka[k] == 2 //Deteccion de un segmento de sordo
for j = 0 to j<16
58
{.} // Coeficientes de las bandas se multiplican con un
factor de escala que depender del tipo de segmento identificado y el
nivel auditivo del paciente.
5.4 Pruebas de Desempeo
Despus de haber codificado los algoritmos del sistema de segmentacin en el DSP
TMS320C6701, se procedi a realizar pruebas de tiempo para observar el desempeo de
estos ejecutndose en el DSP. En la Tabla 5.1 se muestra el tiempo de ejecucin de cada
uno de los algoritmos correspondientes a las etapas de anlisis del sistema, estimadas en un
bloque de captura y procesamiento de 512 muestras, las cuales se deben ejecutar dentro de
la rutina de servicio de interrupcin (ISR) por finalizacin de la captura por DMA, la tabla
5.2 tiempos de conversin para la manipulacin de los datos tipo float dentro de la funcin
que procesa el bloque de 64ms, estos tiempos son de mucha importancia debido a que si el
tiempo de anlisis de la seal es mayor que el tiempo de captura, el sistema colapsa y no es
posible llevar una implementacin en tiempo real.
Debido a que el DSP trabaja a una frecuencia de reloj de 133Mhz y el sistema de
segmentacin procesa la seal de voz en bloques de 512 muestras a una frecuencia de
muestreo de 8kHz, es de garantizar que el tiempo mximo que debe tardar la rutina del
servicio de interrupcin debe ser menor a:
ms T 64
8000
512
< =
Expresando el tiempo en ciclos de reloj del DSP:
ciclos T
ciclos
8512000 064 . 0 * 133000000 = =
Algoritmo
Tiempo
(ms)
Ciclos de
Reloj
% Tiempo
relativo a 64ms
Pre-nfasis
1,201955
159.860 1.87
Dwt + Denoising
4,414361
587.110 6.89
Normalizacin
26,853195
3571.475 41.95
Clculo de Energas
0,745865
99.200 1.16
Reglas de Seleccin
0,292481
38.900 0.45
Realce de la Seal
0,057894
7.700 0.09
Idwt
4,587218
610.100 7.16
Total
38,152970
5074.345 59.61
Tabla 5.1 Tiempos promedio de ejecucin de las funciones dentro de la rutina del servicio
de interrupcin.
59
Algoritmo de
conversin
Tiempo
(ms)
Ciclos
de Reloj
% tiempo
relativo a 64ms
Short a float
0,292955
38.963 0.45
Float a short
0,399624
53.150 0.62
Total
0,692579
92113 1.08
Tabla 5.2 Tiempos promedio de ejecucin de conversin de los datos.
Algoritmo de
conversin
Tiempo
(ms)
Ciclos de
Reloj
% tiempo
relativo a 64ms
Conversin 0,692579 92.113 1.08
Procesar_Segmento 38,152970 5074.345 59.61
Total 38,845550 5166.458 60.69
Tabla 5.3 Tiempo total de la ISR
Es de notar que el tiempo total de las funciones de anlisis dentro de la ISR equivale a
59.61% con respecto al tiempo de captura mximo posible (tmax = tcaptura = 512/8000 =
64ms), y la conversin de los datos de short a float y viceversa corresponden a 1.08%
sumando ambos porcentajes de tiempo obtenemos un 60.69% del tiempo mximo ( tabla
5.3), lo que nos garantiza una ejecucin en tiempo real del sistema.
El cdigo fuente de los algoritmos empleados se encuentra en el Apndice B, y las
estimaciones de sus tiempos de ejecucin en la Tabla 5.1, 5.2 y 5.3.
Estos tiempos fueron estimados para un bloque de carctersticas extradas a partir de un
segmento de captura por DMA.
.
60
Captulo 6
Conclusiones
Se logr implementar un sistema automtico de segmentacin de fonemas por
medio de la transformada wavelet discreta en tiempo real sobre un procesador
Digital de Seales (DSP).
Para eliminar el ruido incorporado en la seal de voz se utiliz la tcnica Wavelet
Denoising con umbral diferente en cada banda para conservar informacin
importante en los niveles de menor resolucin.
Se establecieron reglas de seleccin para clasificar todo el conjunto de fonemas del
idioma espaol, analizando la evolucin de la energa de los cuatro niveles de
mayor resolucin.
El mtodo empleado para el realce de la seal de voz result ser muy eficiente ya
que nos garantiza un realce en las diferentes bandas de frecuencia y en el segmento
identificado, adems su costo computacional es relativamente muy bajo.
Se adapt el sistema de segmentacin propuesto por el grupo de Investigacin
GDSPROC para ejecutarse en el DSP TMS320C6701, luego de realizar diversas
simulaciones para clasificar los segmentos.
Para la implementacin sobre el DSP TMS320C6701, se adquirieron los datos por
medio de la tcnica de DMA en doble buffer y considerando para el clculo de la
transformada una continuidad en los segmentos de la seal.
61
Captulo 7
Proyecciones
Ya que el proceso de segmentacin juega un papel muy importante en la construccin de
los sistemas de reconocimiento continuo de voz (CSR: Continuos-Speech Recognition), y
con los estudios elaborados anteriormente en el grupo de investigacin GDSPROC es
posible fusionar los resultados de este proyecto para la construccin en tiempo real del
sistema CSR.
Por otra parte se pueden realizar estudios para la implementacin de un dispositivo a nivel
de hardware que resulte ser de fcil manipulacin y asequible en cuanto a precio, para las
personas con deficiencias auditivas y con limitaciones econmicas ya que el costo de estos
dispositivos hoy en da aunque son de una excelente calidad resultan ser demasiado
costosos.
El sistema de realce empleado nos brinda una garanta en el momento de obtener mayor
intensidad de la seal de voz en una banda predeterminada, este sistema puede ser de
utilidad es sistemas de ecualizacin de sonidos por medio de la transformada wavelet
discreta ya que su costo computacional es muy pequeo, de esta manera se podra
implementar un sistema de ecualizacin a travs de una lnea telefnica, ya que la
frecuencia de muestreo es de 8kHz, enfocado hacia las personas con limitaciones auditivas.
62
Bibliografa
[ADJ03] Alain C. Gonzlez G., Daniel Gonzlez S., Juan M. Hernndez V., Alberto
R. Hernndez M., Procesamiento Digital de Seales U del Corazn.
Departamento de Ingeniera Elctrica y Electrnica. Instituto Tecnolgico,
Toluca. 2003.
[Ala03] Alarcn A., Vicente. Anomaly Detection and Prediction in Communication
Networks using Wavelet Transform. PhD Thesis. Imperial College London.
University London. UK. 2003
[Ber69] Leo L. Beranek. Acstica. Hispano Americana S.A, 2 edition, 1969.
[BR99] Claudio Beccetti and Lucio Prina Ricotti. Speech Recognition. John Wiley
and Sons, Chichester, 1999.
[Cas99] Castillo Condado, O. Evaluacin de un reconocedor fontico para el
espaol. Escuela de Ingeniera, Universidad de las Amricas-Puebla.1999.
[Dal69] Dalbor, Jhon. Spanish Pronunciation: Theory and Practice. Holt, Rinehart
and Winston. New York, 1969.
[Her03] Marianito Hernndez Daz, Anlisis Comparativo de Algoritmos para
Reduccin de Ruido en Seales Utilizando Wavelets, Universidad de Puebla.
pag.26, 2003.
[Hur03a] Jorge Ivn Marn Hurtado. Reconocimiento de Voz en Tiempo Real por
medio de la Transformada Wavelet y Procesadores Digitales de Seales.
Informe Proyecto de Investigacin 195 UNIQUINDIO, 2003.
[Hur03b] Jorge Ivn Marn Hurtado. Procesamiento Digital de Seales. Texto Gua
para el Curso de Procesamiento Digital de Seales UNIQUINDIO, 2002.
[Hur03c] Jorge Ivn Marn Hurtado. Clase para el control de la tarjeta de sonido
Linux-Windows. www.geocities.com/gdsproc/dsp, 20
63
[Jal00] Jalali, Payman. Wavelets and applications. Energy Technology Department.
Lappeenranta University of Technology. August 2000.
[LD96] C.J. Long and S. Datta. Wavelet based feature extraction for phoneme
recognition. Proc. ICSLP, 1:264267, 1996.
[LF94] Paul A. Lynn and Wolfgang Fuerst. Digital Signal Processing with
Computer Applications. John Wiley and Sons, 1994.
[Mal89] S. G. Mallat, A Theory for Multiresolution Signal Decomposition: The
Wavelet Representation, IEEE Transactions on Pattern Recognition and
Machine Intelligence, vol. 11, n 7, pags. 674-693, 1989.
[Mar99] Martin, Frederick N. Introduccin a la Audiologia, AUDIOLOGIA, 1999.
[MHLPA03] J.I. Marn-Hurtado, A. Lpez-Parrado, and R. Arango. Segmentacin de
seales de voz usando dsp y transformada wavelet. Memorias V Congreso
Colombiano de Automtica, 2003.
[MMOP07] Michel Misiti, Yves Misiti, Georges Oppenheim y Jean-Michel Poggi
Wavelet Toolbox For Use with MATLAB Mathworks, 1997.
[MYG97] Michel Misiti, Yves Misiti, Georges Oppenheim y Jean-Michel Poggi
Wavelet Toolbox For Use with MATLAB Mathworks, 1997.
[Per01] Javier Ramrez Prez de Inestrosa. Nuevas Estructuras RNS para la Sntesis
VLSI de Sistemas de Procesamiento Digital de Seales. Tesis Doctoral.
Universidad de Granada. 2001.
[Pol96] Polikar, Robi. The Wavelet Tutorial. Dept. Of Electrical and Computer
Engineering. Rowan University. 1996.
[RB98] Raghuveer M. Rao and Ajit S. Bopardikar. Wavelet Transforms.
Addison Wesley, 1998.
[Teo98] Anthony Teolis. Computational Signal Processing with Wavelets.
Birkhauser, Boston, 1998.
[Tex00] Texas Instruments. TMS320C6000 CPU And Instruction Set Reference
Guide. January 2000.
[TLS94] B. T. Tan, R. Lang, H. Schroder, A. Spray, and P. Dermody. Applying
wavelet analysis to speech segmentation and classification.Proc. SPIE 2242,
Wavelet Application Volume:750761, 1994.
[VK95] M. Vetterli, J. Kovacevic, Wavelets and Subband Coding. Prentice Hall,
1995.
64
Apndice A
Cdigo fuente para MATLAB
B.1 Cdigo fuente del programa principal en matlab
% El programa est simplificado en algunas funciones
% se anexa un CD adjunto para las lines de cdigo de
% funciones optimizadas
close all
clear all
% lectura de un archivo de sonido previamente capturado
archi = input('archivo (sin extension .wav): ');
[x,fs1] = wavread( strcat(archi, '.wav') );
[Lo_D,Hi_D,Lo_R,Hi_R] = wfilters('db8');
%Cambia la frecuencia de muestreo a 8KHz
%========================================
if (fs1 ~= 8000)
x = resample(x, 36, 100);
fs1 = 8000;
end
% Ajusta la seal a determinado numero de muestras (multiplo 512)
%==================================================================%
N = (length(x)/2048-fix(length(x)/2048));
if (N < 0.3)
n = 2048*fix(length(x)/2048) + 512;
elseif ((N > 0.3)&(N<0.7))
n = 2048*fix(length(x)/2048) + 1024;
else
n = 2048*fix(length(x)/2048) + 2048;
end
X = ajustar(x,n);
maxbandas=4;
w_name='db8';
% Anlisis de la seal por bloques de 512 datos
% y su respectiva recuperacin con el realce deseado
%=====================================================================
cont=1;
x_ant=0;
65
x=[];
XTT=[];
while muestra <= length(X)
Ct=[];Cb1=[];
if ( muestra+512 > length(X) )
tx = [ X(muestra:length(X)) ];
else
tx = X(muestra:muestra+511);
end
xa = conv(tx , [1 -0.95]);
x = [x_ant+xa(1); xa(2:512)];
x_ant=xa(513);
wavelet(x);
denoising( nivel_detalle, umbral);
% Normalizacion de energia
% Calcula la Derivada del logaritmo del valor absoluto
% XX = Der( log ( || ) )
% y la Exponencial de la Integral de los Coeficientes Wavelet
% exp ( integral ( XX ) )
Cb1 = normalizacion(Coefs_wavelet);
Cb1=[D1' D2' D3' D4' A4'];
% Clculo de energas
lenbanda = length(Cb1)/2 ;
posbanda = 1;
energia=[];
E_deltas = zeros(4,16);
for ibanda=1:maxbandas
xbanda = Cb1(posbanda:posbanda+lenbanda-1)';
lensegmento = 32/(2^ibanda);
energia_banda = [];
numsegmentos = 0;
for i=1:lensegmento:lenbanda
energia_banda(numsegmentos+1) = sum(xbanda(i:i+lensegmento-1).^2);
numsegmentos = numsegmentos+1;
end
energia_banda=[energia_ant(ibanda,:) energia_banda];
energia_banda1 = filter([1 1 1 1 1 1 1 1], 1, energia_banda);
energia_ant(ibanda,:) = energia_banda(17:23);
e_nivel = energia_banda1(8:23);
energia = [energia; e_nivel];
posbanda = posbanda+lenbanda;
lenbanda = lenbanda/2;
for l=1:numsegmentos
E_deltas(ibanda,l) = sign( e_nivel(l) - Ant_eprom(ibanda) );
Ant_eprom(ibanda) = e_nivel(l);
end
end
Ant_eprom(ibanda) = e_nivel(l);
66
% Reglas de seleccin establecen el tipo de segmento
etiqueta = reglas(E_bandas,E_deltas);
%Realce de la seal
for ik=1:numsegmentos
if(etiqueta(ik)==0)
D1_inv(16*ik-15 :16*ik)=zeros(1,16);
D2_inv( 8*ik- 7 : 8*ik)= zeros(1,8);
D3_inv( 4*ik- 3 : 4*ik)= zeros(1,4);
D4_inv( 2*ik- 1 : 2*ik)= zeros(1,2);
A4_inv( 2*ik- 1 : 2*ik)= zeros(1,2);
end
if(etiqueta(ik)==1)
D1_inv(16*ik-15 :16*ik) = D1_inv(16*ik-15 :16*ik)* realce_Sordo;
D2_inv( 8*ik- 7 : 8*ik) = D2_inv( 8*ik- 7 : 8*ik)* realce_Sordo;
D3_inv( 4*ik- 3 : 4*ik) = D3_inv( 4*ik- 3 : 4*ik)* realce_Sordo;
D4_inv( 2*ik- 1 : 2*ik) = D4_inv( 2*ik- 1 : 2*ik)* realce_Sordo;
A4_inv( 2*ik- 1 : 2*ik) = A4_inv( 2*ik- 1 : 2*ik)* realce_Sordo;
end
if(etiqueta(ik)==2)
D1_inv(16*ik-15 :16*ik) = D1_inv(16*ik-15 :16*ik)* realce_Sonoro;
D2_inv( 8*ik- 7 : 8*ik) = D2_inv( 8*ik- 7 : 8*ik)* realce_Sonoro;
D3_inv( 4*ik- 3 : 4*ik) = D3_inv( 4*ik- 3 : 4*ik)* realce_Sonoro;
D4_inv( 2*ik- 1 : 2*ik) = D4_inv( 2*ik- 1 : 2*ik)* realce_Sonoro;
A4_inv( 2*ik- 1 : 2*ik) = A4_inv( 2*ik- 1 : 2*ik)* realce_Sonoro;
end
end
L1_inv=[D1_inv L1_ant'];
L2_inv=[D2_inv L2_ant'];
L3_inv=[D3_inv L3_ant'];
L4_inv=[D4_inv L4_ant'];
C4_inv=[A4_inv C4_ant'];
% Wavelet Inversa
Ca3 = idwt(C4_inv * Realce , L4_inv * Realce , w_name);
Ca2 = idwt(Ca3(1:77) , L3_inv * Realce , w_name);
Ca1 = idwt(Ca2(1:139), L2_inv * Realce , w_name);
Xa = idwt(Ca1(1:263), L1_inv * Realce , w_name);
cont=cont+1;
muestra=muestra+512;
end%fin for muestra
67
Apndice B
Cdigo fuente para el DSP TMS320C6701
B.1 Cdigo fuente del programa principal
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include "captura_dma.h"
#include "segmentacion.h"
float *buff;
float *coefs1;
int bBufferProcesado = 0;
void procesa_segmento_ISR (short *buffer, int nmuestras)
{
int k;
short* salidaDAC;
short* entradaADC;
short val;
entradaADC = buffer;
for(k=0;k<L;k++)
{
buff[k] = entradaADC[2*k] * 0.000030519;
}
procesar_segmento( buff, coefs1 );
// Escribe al DAC //
salidaDAC = retornar_bufferout();
if (salidaDAC!=NULL)
{
for(k=0;k<L;k++)
{
salidaDAC[2*k] = buff[k] * 32767.0;
68
salidaDAC[2*k+1] = 0;
}
}
bBufferProcesado = 1;
}
void main()
{
puts("Proyecto Segmentacion - Realce\n");
puts("Iniciando DSP...");
if (configurar_codec(HABILITAR_CAPTURAESCRITURA,MIC_SEL)==ERROR)
{
puts("Hubo un error al iniciar DSP!");
return;
}
puts("DSP [OK]");
puts("Espere, iniciando sistema...");
/*inicializacion de variables */
/****************************************************/
buff = (float*) malloc( L*sizeof(float) );
coefs1 = (float*) malloc( L*sizeof(float) );
iniciar_segmentacion();
/*****************************************************/
procesa_bufferin_func = procesa_segmento_ISR;
iniciar_lectura();
retornar_bufferout();
retornar_bufferout();
iniciar_escritura();
puts("Sistema [OK]");
while (1)
{
while (bBufferProcesado == 0);
bBufferProcesado = 0;
/* mostrar la informacin */
}
}
B.2 Cdigo fuente funcin que procesa el segmento
B.2.1 Archivo de cabecera segmentacin.h
#ifndef _segmentacion_
#define _segmentacion_
#define L 512
#define N_NIVELES 4
#define lm 16
#define umbral 0.015
#define ESC_d1 10
69
#define ESC_d2 10
#define ESC_d3 10
#define ESC_d4 10
#define ESC_a4 10
void iniciar_segmentacion();
void procesar_segmento( float *in, float* out );
void preenfasis(float *Xseg, float *h, float *Yseg);
void conv(float *xn, float *h, int lx, int lh, float *yn, float *ci);
void dwt_bandas(float* tx, float **coefs);
void denoising(float* Xruido, int j, float Umbral);
void normalizacion();
void energias(float* Ed1,float* Ed2,float* Ed3,float* Ed4,float* Ea4);
void reglas_seleccion(float** Ebandas,float **Edeltas,int* etiqueta);
void realce(int* mark);
#endif
B.2.2 Archivo fuente segmentacin.c
/* Contiene todas las funciones necesarias para el anlisis de un
bloque de captura en el DSP */
#include <stdio.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include "dwt.h"
#include "segmentacion.h"
#include "db16.h"
float Xa[L];
float maximo[4],prom_ant=1,Emax=0,Emin=0;
int *etiqueta;
float hp[]={1.0,-0.95};
float hmmovil[]={1,1,1,1,1,1,1,1};
//Condiciones iniciales para cada funcion
float der1_ant=0,der2_ant=0,der3_ant=0,der4_ant=0,derA4_ant=0;
float Xseg_ant[]={0};
float yant1=0,yant2=0,yant3=0,yant4=0,yantA4=0;
float Det1[256],Det2[128],Det3[64],Det4[32],Apr4[32];
float Dn1[256],Dn2[128],Dn3[64],Dn4[32],An4[32];
float D1_energia[16+7],D2_energia[16+7],D3_energia[16+7],D4_energia[16+7],A4_energia[16+7];
float D1_mediamov[16],D2_mediamov[16],D3_mediamov[16],D4_mediamov[16],A4_mediamov[16];
70
float D1_deltas[16],D2_deltas[16],D3_deltas[16],D4_deltas[16],A4_deltas[16];
float D1_ant_ener=0,D2_ant_ener=0,D3_ant_ener=0,D4_ant_ener=0,A4_ant_ener=0;
float D1mov_ant[]={0,0,0,0,0,0,0},D2mov_ant[]={0,0,0,0,0,0,0};
float D3mov_ant[]={0,0,0,0,0,0,0},D4mov_ant[]={0,0,0,0,0,0,0};
float A4mov_ant[]={0,0,0,0,0,0,0};
void iniciar_segmentacion()
{
Det1[0] = 0;
Det2[0] = 0;
Det3[0] = 0;
Det4[0] = 0;
Apr4[0] = 0;
Dn1[0]=0;Dn2[0]=0;Dn3[0]=0;Dn4[0]=0;An4[0]=0;
etiqueta = (int*) malloc( lm*sizeof(int) );
dsp_iniciar_dwt(L,Ndb16,N_NIVELES);
dsp_iniciar_idwt(L,Ndb16,N_NIVELES);
}
void procesar_segmento( float *in, float* out )
{
//int k;
float* Ebandas[4];
float* Edeltas[4];
float* coefs[5];
/**********************************************************/
/* for(k=0;k<lm;k++)
etiqueta[k]=1;
*/
preenfasis( in, hp, Xa );
coefs[0] = Det1;
coefs[1] = Det2;
coefs[2] = Det3;
coefs[3] = Det4;
coefs[4] = Apr4;
dwt_bandas(Xa,coefs);
normalizacion();
energias(Dn1,Dn2,Dn3,Dn4,An4);
Ebandas[0] = D1_mediamov;
Ebandas[1] = D2_mediamov;
Ebandas[2] = D3_mediamov;
Ebandas[3] = D4_mediamov;
Edeltas[0] = D1_deltas;
Edeltas[1] = D2_deltas;
71
Edeltas[2] = D3_deltas;
Edeltas[3] = D4_deltas;
reglas_seleccion(Ebandas,Edeltas,etiqueta);
realce(etiqueta);
dsp_idwtB(coefs,g0,g1,N_NIVELES,L,Ndb16,out);
}
/***************************************************************************/
void preenfasis(float *Xseg, float *h, float *Yseg)
{
conv(Xseg,h,L,2,Yseg,Xseg_ant);
}
/***************************************************************************/
void conv(float *xn, float *h, int lx, int lh, float *yn, float *ci)
{
int w, k,ln;
float y;
for(w=0;w<lh-1;w++)
{
y = 0.0;
for (k = 0; k<=w; k++)
y += xn[w-k]*h[k];
ln=0;
for (k = w+1; k<lh; k++)
y += ci[ln++]*h[k];
yn[w] = y;
}
for(w=lh-1;w<lx;w++)
{
y = 0.0;
for (k = 0; k<lh; k++)
y += xn[w-k]*h[k];
yn[w] = y;
}
for(w=0;w<lh-1;w++)
{
ci[w] = xn[lx-lh+1+w];
}
}
/***************************************************************************/
void dwt_bandas(float* tx, float **coefs)
{
dsp_dwtB( tx, h0, h1, 4, L, Ndb16, coefs );
denoising(Det1,256,umbral);
denoising(Det2,128,umbral);
denoising(Det3, 64,umbral);
denoising(Det4, 32,umbral);
denoising(Apr4, 32,umbral);
72
}
/***************************************************************************/
void denoising(float* Xruido, int j, float Umbral)
{
int k;
for(k=0;k<j;k++)
{
if(fabs(Xruido[k])<Umbral)
Xruido[k]=0;
else
{
if(Xruido[k]>Umbral)
Xruido[k]=Xruido[k]-Umbral;
else
Xruido[k]=Xruido[k]+Umbral;
}
}
}
/***************************************************************************/
void logabs(float* xnor, int nx, float* ynor)
{
int k;
for(k=0;k<nx;k++)
{
// Clculo logartmo del valor absoluto
ynor[k] = log(fabs(xnor[k])+ 1e-8);
}
}
void derivtemp(float* xder, int nx, float* yder, float* der_ant)
{
int k;
float der_ant_sig = xder[nx-1];
for(k=nx-1;k>0;k--)
{
// Calculo de la Derivada temporal
yder[k] = xder[k]-xder[k-1];
}
yder[0] = xder[0] - (*der_ant);
*der_ant = der_ant_sig;
}
void integexp(float* xint, int nx, float *yant, float* yint)
{
int k;
// Calculo de la Integral Trapezoidal
for(k=0;k<nx;k++)
{
yint[k]=xint[k]+ *yant;
*yant=yint[k];
// Calculo de la Exponenciacin
yint[k] = exp( yint[k] );
}
}
73
void normalizacion()
{
// Clculo logartmo del valor absoluto
logabs(Det1, 256, Dn1);
logabs(Det2, 128, Dn2);
logabs(Det3, 64, Dn3);
logabs(Det4, 32, Dn4);
logabs(Apr4, 32, An4);
// Calculo de la Derivada temporal
derivtemp(Dn1, 256, Dn1, &der1_ant);
derivtemp(Dn2, 128, Dn2, &der2_ant);
derivtemp(Dn3, 64, Dn3, &der3_ant);
derivtemp(Dn4, 32, Dn4, &der4_ant);
derivtemp(An4, 32, An4, &derA4_ant);
// Calculo de la integracion trapezoidal y exponenciacion
integexp(Dn1, 256, &yant1, Dn1);
integexp(Dn2, 128, &yant2, Dn2);
integexp(Dn3, 64, &yant3, Dn3);
integexp(Dn4, 32, &yant4, Dn4);
integexp(An4, 32, &yantA4,An4);
}
/***************************************************************************/
float energ(float* xn, int nx)
{
int j;
float yn = 0;
for(j=0;j<nx;j++)
{
yn += pow(xn[j],2);
}
return yn;
}
void energias(float* Ed1,float* Ed2,float* Ed3,float* Ed4,float* Ea4)
{
float val;
//Energia de las 4 bandas por cada 4ms = 32 muestras
int k;
for(k=0;k<16;k++)
{
D1_energia[k+7] = energ( &Ed1[k*16], 16 );
D2_energia[k+7] = energ( &Ed2[k*8], 8 );
D3_energia[k+7] = energ( &Ed3[k*4], 4 );
D4_energia[k+7] = energ( &Ed4[k*2], 2 );
A4_energia[k+7] = energ( &Ea4[k*2], 2 );
}
//filtro de media movil
74
conv(D1_energia+7,hmmovil,16,8,D1_mediamov,D1mov_ant);
conv(D2_energia+7,hmmovil,16,8,D2_mediamov,D2mov_ant);
conv(D3_energia+7,hmmovil,16,8,D3_mediamov,D3mov_ant);
conv(D4_energia+7,hmmovil,16,8,D4_mediamov,D4mov_ant);
conv(A4_energia+7,hmmovil,16,8,A4_mediamov,A4mov_ant);
//Variaciones de energia
for(k=0;k<16;k++)
{
val = D1_mediamov[k]-D1_ant_ener;
if(val>0) D1_deltas[k] = 1;
else if(val<0) D1_deltas[k] =-1;
else //((D1_mediamov[k]-D1_ant_ener)==0)
D1_deltas[k]= 0;
val = D2_mediamov[k]-D2_ant_ener;
if(val>0) D2_deltas[k] = 1;
else if(val<0) D2_deltas[k] =-1;
else //((D2_mediamov[k]-D2_ant_ener)==0)
D2_deltas[k]= 0;
val = D3_mediamov[k]-D3_ant_ener;
if(val>0) D3_deltas[k] = 1;
else if(val<0) D3_deltas[k] =-1;
else //((D3_mediamov[k]-D3_ant_ener)==0)
D3_deltas[k]= 0;
val = D4_mediamov[k]-D4_ant_ener;
if(val>0) D4_deltas[k] = 1;
else if(val<0) D4_deltas[k] =-1;
else //((D4_mediamov[k]-D4_ant_ener)==0)
D4_deltas[k]= 0;
/*
val = A4_mediamov[k]-A4_ant_ener;
if(val>0) A4_deltas[k] = 1;
else if(val<0) A4_deltas[k] =-1;
else //((A4_mediamov[k]-A4_ant_ener)==0)
A4_deltas[k]= 0;
*/
D1_ant_ener=D1_mediamov[k];
D2_ant_ener=D2_mediamov[k];
D3_ant_ener=D3_mediamov[k];
D4_ant_ener=D4_mediamov[k];
A4_ant_ener=A4_mediamov[k];
}
}
/***************************************************************************/
void reglas_seleccion(float** Ebandas,float **Edeltas, int* etiqueta)
{
int k,j;
float banda_max[4], prom, sum;
float maxtemp, bandatemp,porcentaje;
for(k=0;k<16;k++)
etiqueta[k]=1;
//-----------------------------------------/* for recorre cada segmento*/
75
for(k=0;k<16;k++) // identifica y lo etiqueta
{
// Detecta los tramos de silencio
int sil1=0; // En el Segmento de 64ms = 512 datos
int finvoz=0,cont=0;
banda_max[0]=4; banda_max[1]=4; banda_max[2]=4; banda_max[3]=4;
maximo[0]=0;maximo[1]=0;maximo[2]=0;maximo[3]=1e20;
prom=0;
sum=0;
//---------------------------------------------------
for(j=0;j<N_NIVELES;j++)
{
sum+=Ebandas[j][k];
//determina el valor maximo de cada banda por segmento
if(Ebandas[j][k]>maximo[0])
{ maximo[0] = Ebandas[j][k];
banda_max[0]= j;
}
//determina el valor minimo de cada banda por segmento
if(Ebandas[j][k]<maximo[3])
{ maximo[3] = Ebandas[j][k];
banda_max[3]= j;
}
if(Edeltas[j][k]==0) // Si las variaciones de Energia son constantes
sil1+=1; // En las 4 Bandas
// Y la energia en Cada una no supera X umbral
// se denota como un segmento de silencio
if(Edeltas[j][k]== -1)
finvoz=finvoz+1;
} /* fin for de los niveles*/
//--------------------------------------------------
prom=sum/4; // promedio de las bandas de energia
porcentaje=prom/prom_ant;
if(prom > prom_ant) // si el promedio de energia aumenta
{
if(Emin!=0)
etiqueta[k]=1;
Emax++;
Emin=0;
}
else
{/*if(Emin!=0)
etiqueta[k]=4; */
Emin++;
Emax=0;
}
//--------------------------------------------------
// while ordena las energias de la mayor a la menor con su respectivo nivel
j=0;
while(cont<2)
{
76
if((Ebandas[j][k]<maximo[0])&(Ebandas[j][k]>maximo[3]))
{
if(cont==0)
{ maxtemp=Ebandas[j][k];
bandatemp=j;
cont++;
}
else
if(cont==1)
{
if(Ebandas[j][k]<maxtemp)
{
maximo[1] = maxtemp;
banda_max[1] = bandatemp;
maximo[2] = Ebandas[j][k];
banda_max[2] = j;
cont++;
}
else
{
maximo[1] = Ebandas[j][k];
banda_max[1]= j;
maximo[2] = maxtemp;
banda_max[2]= bandatemp;
cont++;
} //ordena las energias de la mayora la menor
}
}
j++;
} /*fin while*/
//------------------------------------------------
//-------------------------------------------------
if((maximo[0]<1e7)||((sil1==4)&(maximo[0]<1e5))||(prom < 1e5))
etiqueta[k]=0; //Detecta Segmento de
silencio
//--------------------------------------
else
{
// Deteccion de un SEGMENTO SONORO se marca = 7,8,9,10
//----------------------------------------------------------------
// banda de menor energa mayor a 1% de la predominante = 1e15
if((maximo[3]>1e13)& (maximo[0]>1e15))
etiqueta[k]=2;
// banda predominante d-4 >1e13 las dems > 1e11
if( ((banda_max[0]==3)&(maximo[0]>1e15)) & (maximo[2]>1e10) )
etiqueta[k]=2;
//el promedio de energia en las bandas > 2.6e13
if((prom >= 3e13)&(porcentaje<1))
etiqueta[k]=2;
// predominan dos bandas con umbral fuerte... las otras aportan energa
if((maximo[1]> 0.5e15)&(maximo[3]>1e8))
etiqueta[k]=2;
//if(etiqueta[k]!=2)
77
if(etiqueta[k]==1)
{ //-----------------------------------------------------------------
// Deteccion de un SEGMENTO SORDO se marca = 3,4,5,6
//----------------------------------------------------------------
//al menos 1 banda no porta energia
if((maximo[3]<1e7)&(maximo[0]<1e13))
etiqueta[k]=1;
//Si el promedio de energa esta en el rango
if ((prom > 1e7)&(prom < 1e10))
etiqueta[k]=1;
//energa en la banda predominante es pequea
if(maximo[0]<1e12)
etiqueta[k]=1;
//la banda de menor energia es d-1 y dos bandas tienen 0 energa
if((banda_max[3]==1)&(maximo[2]<1e7))
etiqueta[k]=1;
if((banda_max[0]==4)&(maximo[0]<5e12))
etiqueta[k]=1;
} //Fin deteccion de segmento sordo
} /* fin else */
prom_ant = prom;
} // fin del ciclo por segmento
} //fin de funcion
/***************************************************************************/
void realce(int* marka)
{
int k,j;
for(k=0;k<16;k++)
{
if(marka[k]==0) //Deteccion de un segmento de silencio
{
for(j=0;j<16;j++) //Elementos del segmentos los pone en 0
Det1[j+(16*k)] = 0;
for(j=0;j<8;j++)
Det2[j+(8*k)] = 0;
for(j=0;j<4;j++)
Det3[j+(4*k)] = 0;
for(j=0;j<2;j++)
{Det4[j+(2*k)] = 0;
Apr4[j+(2*k)] = 0;
}
}
if(marka[k]==1) //Deteccion de un segmento sordo
{
for(j=0;j<16;j++) //se efectua el realce por un valor de escala
Det1[j+(16*k)] *= ESC_d1;
for(j=0;j<8;j++)
78
Det2[j+( 8*k)] *= ESC_d2;
for(j=0;j<4;j++)
Det3[j+( 4*k)] *= ESC_d3;
for(j=0;j<2;j++)
{ Det4[j+( 2*k)] *= ESC_d4;
Apr4[j+( 2*k)] *= ESC_a4;
}
}
//los segmentos sonoros no se les efectua el realce
//ya que son los de mayor intensidad
if(marka[k]==2) //Deteccion de un segmento sordo
{
for(j=0;j<16;j++) //se efectua el realce por un valor de escala
Det1[j+(16*k)] *= ESC_d1/10;
for(j=0;j<8;j++)
Det2[j+( 8*k)] *= ESC_d2/10;
for(j=0;j<4;j++)
Det3[j+( 4*k)] *= ESC_d3/10;
for(j=0;j<2;j++)
{ Det4[j+( 2*k)] *= ESC_d4/10;
Apr4[j+( 2*k)] *= ESC_a4/10;
}
}
}
}