SISTEMA NO LINEAL PARA EL RECONOCIMIENTO DE FONEMAS INSPIRADO EN LA CÓCLEA GLORIA CAROLINA FERNÁNDEZ OTÁLORA UNIVERSIDAD DE LOS ANDES FACULTAD DE INGENIERÍA DEPARTAMENTO DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA BOGOTA D.C. 2003 1 SISTEMA NO LINEAL PARA EL RECONOCIMIENTO DE FONEMAS INSPIRADO EN LA CÓCLEA GLORIA CAROLINA FERNÁNDEZ OTÁLORA Proyecto de Grado presentado como requisito para optar al titulo de Ingeniero Electrónico. Asesor ALFREDO RESTREPO PALACIOS UNIVERSIDAD DE LOS ANDES FACULTAD DE INGENIERÍA DEPARTAMENTO DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA BOGOTA D.C. 2003 2 AGRADECIMIENTOS Quiero agradecer a: René Meziat, profesor del Departamento de Matemáticas, por su colaboración para poder dar inicio a este proyecto. Alfredo Restrepo, asesor de este proyecto y profesor del Departamento de Ingeniería Eléctrica y Electrónica por su continuo compromiso y dedicación hacia el proyecto. Al grupo de Laboratorio de Señales por brindarme los medios y posibilidades para avanzar cada semana en la consolidación de este trabajo. 3 TABLA DE CONTENIDO Pág. INTRODUCCION………………………………………………….. 7 1. LA CÓCLEA…………………………………………………….. 8 2. MODELO…………………………………………………………13 3. SELECCIÓN DE LA DENSIDAD Y LA TENSIÓN……….....17 4. RESPUESTA A SONIDOS VOCÁLICOS……………………. 22 APENDICE: Códigos en Matlab.………………………………….. 34 CONCLUSIONES Y TRABAJOS FUTUROS…………………… 54 REFERENCIAS…………………………………………….……… 57 5 LISTA DE FIGURAS Pág. Figura 1. Corte transversal de la cóclea…………………………………………..9 Figura 2. Esquema del oído humano…………………………………………….. 10 Figura 3. Vibraciones en la membrana basilar……………………………………11 Figura 4. Tonos a través de la cóclea…………………………………………….11 Figura 5. Región de solución…………………………………………………….. 14 Figura 6. Ejemplos de señales de voz, vocales A y U…………………………… 16 Figura 7. Ejemplos de respuestas a sinusoides con T ( x) = x.e x , ρ ( x ) = 1 ……18 Figura 8. Ejemplos de respuestas a sinusoides con T ( x) = −28.28 x + 100 , ρ(x) = x ..19 Figura 9. Ejemplos de respuesta a sinusoides con variación de amplitud………...21 Figura 10. Ejemplos de respuesta a sonidos vocálicos: Vocal A mujer 2……….. 22 Figura 11 Ejemplos de respuesta a sonidos vocálicos: Vocal E hombre 1……… 23 Figura 12 Partición en hexágonos de la región de solución…………………….. 24 Figura 13 Respuesta a sinusoides, escala de grises…………………………….. 25 Figura 14 Respuesta a sonidos vocálicos, escala de grises, membrana sostenida 26 Figura 15 Respuesta a sonidos vocálicos, escala de grises, membrana suelta…. 29 Figura 16 Respuesta a sonidos vocálicos, escala de grises, promedio…………. 32 6 INTRODUCCION El oído humano es el encargado de realizar los procesos de recepción y transducción del sonido. Antes de ser percibido el sonido con el cerebro, dentro de la cóclea ocurren fenómenos físicos, químicos y eléctricos que contribuyen al proceso de reconocimiento. Las técnicas más conocidas para el reconocimiento de voz en ingeniería son técnicas lineales basadas en la transformada de Fourier. El propósito de este trabajo es explorar la posibilidad de hacer reconocimiento de fonemas mediante un método no lineal inspirado en el oído humano, específicamente en la cóclea, que permita caracterizar sonidos, específicamente sonidos vocálicos (a, e, i, o, u), es decir, no se pretende modelar la cóclea sino diseñar un sistema inspirado en ella. Cuando el oído recibe un estímulo sonoro el estribo excita la cóclea a través de la ventana oval, la cóclea responde y es capaz de hacerlo de una manera diferente según sea la excitación, manteniendo un patrón de respuesta relacionado con la frecuencia de la señal. Este comportamiento es el que finalmente se quiere lograr al pretender hacer reconocimiento de voz: desarrollar un sistema que se comporte diferente, según la señal con la cual sea excitado y que sea sensible al contenido frecuencial de la misma (en el sentido de Fourier). 7 1. LA CÓCLEA La cóclea es un órgano del oído interno con forma de tubo arrollado en espiral aproximadamente tiene entre 30 y 35 mm de longitud y un diámetro que varia entre 1 y 2mm, constituido por un laberinto óseo tapizado de estructuras celulares que forman un laberinto membranoso. La cóclea está llena de líquido (perilinfa y endolinfa) y rodeada por paredes óseas rígidas, en su interior existen dos membranas: membrana de Reissner y membrana basilar que dividen la cóclea en 3 compartimientos principales: escala vestibular, escala media y escala timpánica. Las escalas timpánicas y vestibular -rellenas de perilinfa- se comunican en el vértice de la cóclea por un orificio, el helicotrema. En la base de la cóclea la escala timpánica termina en la ventana redonda que se encuentra cerrada por una membrana; su función es impedir que la onda rebote, equilibrando las presiones entre escalas. La escala vestibular, en la base de la cóclea, se corresponde con la ventana oval que también está recubierta por una membrana y es por donde penetra la onda de sonido hasta el oído interno. 8 Figura 1.Corte transversal de la cóclea La membrana de Reissner es extraordinariamente delgada. Apoyado en la membrana basilar se encuentra el complejo y delicado órgano de Corti, que contiene varias filas de diminutas células vellosas a las cuales se conectan las fibras nerviosas. Cada fila de células vellosas contiene unas 7000 células, haciendo un total de 24.000 células en varias filas. Cada célula vellosa posee numerosos cilios, que se doblan cuando la membrana basilar responde a un sonido, desencadenando una señal nerviosa en el nervio auditivo. La membrana basilar tiene una longitud de aproximadamente 32 mm y un espesor que aumenta desde 0,04 mm en la base a 0,5 mm en el ápice. Es decir, una relación de aproximadamente 1 a 10. . El eje central de la cóclea, el modiolo, es un tubo óseo dentro del cual corren las fibras del nervio auditivo. La espiral ósea esta arrollada alrededor del modiolo. Para comprender cómo vibra la membrana basilar supongamos la cóclea desenrollada, con forma de cono estrecho divido en dos secciones por la membrana basilar. En primera 9 aproximación no vamos a considerar el conducto coclear ni la membrana de Reissner por lo extremadamente finos que son. En el extremo más grande del cilindro se encuentran las ventanas oval y redonda, cada una de ellas cerrada por una membrana. En el otro extremo de la membrana basilar hay un pequeño orificio (helicotrema) que comunica las dos secciones. La membrana basilar acaba a poca distancia del extremo del cono, con lo cual el fluido puede transmitir ondas de presión de vuelta desde el final de la membrana. Figura 2. Esquema del oído humano Los tonos agudos hacen vibrar la membrana basilar en regiones cerca de las ventanas, donde es más delgada y rígida que cerca del helicotrema (cien veces más rígida), mientras que los tonos graves hacen vibrar la membrana basilar desde las ventanas hasta cerca del helicotrema, donde es más flácida y cerca de cinco veces más ancha. Se puede decir entonces que los tonos graves penetran más en la membrana que los agudos. 10 Figura 3. Vibraciones en la membrana basilar En la figura 3, al lado derecho se muestra un lugar aproximado sobre la membrana hasta el cual alcanza a penetrar un tono de la frecuencia que se indica, no se debe confundir con una localización específica de excitación según la frecuencia. Por ejemplo, un tono de 500Hz no produce una excitación solamente en el extremo ancho de la membrana, sino que se excita toda la membrana hasta ese punto, produciendo una respuesta de máxima amplitud hacia el extremo de la membrana. Figura 4. Tonos a través de la cóclea 11 En la figura 4 se muestra el recorrido de dos tonos de diferentes frecuencias, la onda de mas baja frecuencia viaja más a través de la cóclea que la de alta frecuencia, la amplitud de la onda de alta frecuencia decae mas rápidamente. La percepción tradicional es que en la cóclea tiene lugar un análisis espectral inicial, partiendo la membrana en regiones especificas de respuesta según la frecuencia, y por ejemplo para frecuencias bajas se omite la excitación que se lleva a cabo hacia el inicio de la membrana, asumiendo que solo se excitan pequeñas porciones de membrana localizadas hacia el final. En este trabajo se trata de buscar para frecuencias bajas una respuesta de la membrana que sea hasta y no en el final de la membrana, y para frecuencias altas tienda hasta y no en el inicio de la membrana. La conversión de las vibraciones mecánicas de la membrana basilar en impulsos eléctricos del nervio auditivo se lleva a cabo en el órgano de Corti. En función de la frecuencia de la señal, la vibración se encontrará localizada a lo largo de la membrana basilar excitando unas u otras fibras nerviosas. Así mismo, en función de la amplitud de la vibración, más fibras nerviosas serán estimuladas1. 1 Para una descripción más adecuada de la anatomía y fisiología de la cóclea y el oído puede remitirse a las referencias dadas al final de este documento. 12 2. MODELO Basándose en que la membrana basilar vibra de acuerdo a la frecuencia de la excitación que produce el sonido, se modeló la membrana como una “tela” en dos dimensiones, sobre la cual se propagaría una onda de sonido. Inicialmente se pensó en modelar una cuerda no homogénea (1 dimensión) que se fuera engrosando, pero dadas las opciones ofrecidas por Matlab, se logro hacer un modelo en dos dimensiones. La membrana basilar se simuló en Matlab mediante una “tela” en forma de trapecio con dimensiones aproximadas a las descritas en el capitulo anterior. Sobre esta “tela” se solucionó la ecuación diferencial parcial que describe la propagación de una onda en una membrana no homogénea en 2D, esta ecuación incluye densidad y tensión variantes: ∂ 2U ( z , t ) ∂U ( z , t ) ⎞ ∂ ⎛ ∂U ( z , t ) ⎞ ⎤ 1 ⎡∂ ⎛ ⎟⎥ ⎜ = T ( x , y ) + T ( x , y ) ⎜ ⎟ ⎢ ρ ( x, y ) ⎣ ∂x ⎝ ∂t 2 ∂x ⎠ ∂y ⎜⎝ ∂y ⎟⎠ ⎦ donde T ( x, y ) es la tensión de la membrana y ρ ( x, y ) es la densidad de masa. Con condiciones iniciales: U (t = 0) = 0 U ' (t = 0) = 0 y condiciones de frontera (por el lado izquierdo del trapecio): U ( x = 0, y = 0, t ) = excitación (t ) 13 Para las pruebas fueron considerados dos casos de condiciones de frontera. En el primero, la membrana se encuentra libre, es decir, los tres lados restantes del trapecio no tienen condición de frontera. En el segundo caso la membrana se encuentra fija, es decir, los tres lados restantes del trapecio tienen condición de frontera igual a cero. Para solucionar la ecuación, se utilizó el método de elementos finitos del toolbox de Matlab para ecuaciones diferenciales parciales, sobre la siguiente región de solución: Figura 5. Región de solución. Esta región contiene 640 triángulos y 369 nodos. La triangulación es generada automáticamente por el algoritmo de matlab y tiene como objetivo partir el espacio en un número finito de regiones (elementos), el número de triángulos y nodos puede modificarse, obviamente entre más triángulos hayan, mayor será el tiempo de ejecución del programa y mas refinada será la solución. 14 El método de elementos finitos es un algoritmo numérico que permite introducir con mayor facilidad las condiciones de frontera, factor muy importante y determinante para la construcción un modelo adecuado para la membrana basilar, ya que la excitación del sistema se hará estableciéndola como condición de frontera por el lado izquierdo del trapecio. La solución de la ecuación está contenida en una matriz de tamaño 369 x Nro de muestras (el número de muestras es aproximadamente 4000 como se explica más adelante) donde a cada tiempo de solución ti le corresponde un valor de U en cada nodo de la región. En este modelo se dejaron de tener en cuenta factores como: la forma de excitación real que se hace por medio del movimiento de los líquidos dentro de la cóclea, el helicotrema, el espesor de la membrana , el tubo, las ventanas y su forma enrollada . Las excitaciones para las primeras pruebas fueron sinusoides de diferentes frecuencias, para las pruebas siguientes se utilizaron señales de voz de cuatro personas diferentes, dos hombres y dos mujeres representadas en los cinco sonidos vocálicos para cada persona. Las señales de voz fueron adquiridas mediante el programa GoldWave con un micrófono común en archivos con extensión .wav, inicialmente a una tasa de muestreo de 44.4 Khz. y con una duración de 500 ms cada una, considerando que la frecuencia máxima de una señal de voz es aproximadamente de 20 Khz. Debido al tiempo de computo de la solución para la excitación con señales de voz (oscilaba entre veinte y cuarenta minutos), se redujo el tiempo de muestreo a 11.025Khz. y la 15 duración de la señal a 400 ms con lo que se consiguió un tiempo de computo entre cinco y quince minutos, por lo cual todas las pruebas con voz se hicieron con señales a esta tasa de muestreo, posteriormente a cada señal se le eliminó el nivel DC que probablemente se introdujo debido al micrófono y la tarjeta de sonido del computador haciéndole transformada de Fourier e igualando el primer coeficiente a cero; además de esto no se le hizo ninguna modificacion a la señal original. Todas las señales de voz tienen amplitud entre -1 y 1; lo cual es conveniente ya que al ser leídas, la función wavread (que es la que está disponible en matlab para leer archivos .wav) trunca los valores de la señal que sean mayores de 1 o menores de -1. Como cada señal de voz dura 400 ms, ésta se compone de 4410 muestras (11025x0.4), lo que significa que en ese intervalo de tiempo se deben calcular 4410 soluciones de la ecuación diferencial, una correspondiente a cada tiempo de cada muestra. A continuación se muestran dos señales de voz, que corresponden a una vocal A femenina y a una vocal U masculina. Figura 6. Ejemplos de señales de voz, vocales A y U. 16 3. SELECCIÓN DE LA DENSIDAD Y LA TENSIÓN Teniendo el modelo de membrana definido, el paso siguiente fue encontrar una tensión y/o una densidad apropiada de tal forma que el modelo de membrana respondiera a diferentes frecuencias como lo hace en realidad la membrana basilar (ver figura 4) es decir, que las frecuencias altas se atenuaran hacia al final de la membrana y las frecuencias bajas alcanzaran a excitar notoriamente el final de la membrana. Como se dijo, las primeras pruebas se realizaron con excitaciones sinusoidales de diferentes frecuencias (tonos puros), se trabajó primero con el modelo en que la membrana está libre, en este modelo se mantuvo la densidad constante: ρ ( x ) =1. Luego se cambió el modelo al de la membrana fija, en el cual la densidad y la tensión fueron variantes. La forma de trabajar fue haciendo pruebas con diferentes tensiones y densidades monótonamente crecientes o decrecientes dependientes solo de la variable x. Debido a que se desconocen datos reales de la tensión y la densidad en la membrana basilar, las pruebas se iniciaron con una función cualquiera (creciente o decreciente) y a medida que avanzaban las pruebas era fácil distinguir con que tipo funcionaba mejor. Luego de muchas pruebas, en el modelo de la membrana libre se obtiene una buena 17 respuesta con la tensión dada por: T ( x ) = x.e x manteniendo una densidad constante: ρ ( x, y ) =1 Para llegar a esta conclusión se observo la respuesta de la membrana desde 0 hasta 400ms notándose una atenuación de las frecuencias altas y una excitación mas pronunciada de las bajas al final de la cuerda, aquí se muestran algunas gráficas de la respuesta de la membrana en t = 400ms. Time=0.3999 Excitacion:sin(10000t) 25 20 30 15 20 10 10 5 0 0 -10 -5 -20 -10 -30 0.5 -15 0.4 4 3 0.3 a. -20 2 0.2 0.1 0 b. 1 Figura 7. Ejemplos de respuestas a sinusoides con T ( x) = x.e x , -25 ρ ( x) = 1 c. a. excitación: sin (1000t), b. excitación: sin (50000t), c. excitación: sin (70000t). En general, con tensiones crecientes de este tipo, manteniendo la densidad constante, la respuesta de la membrana es parecida a la deseada; es decir, no solamente con T ( x ) = x.e x se obtienen buenos resultados cuando se prueba con tonos puros. Para el caso en el que la cuerda está sostenida se hicieron pruebas con la tensión y la densidad variantes. Teniendo en cuenta que la membrana es cerca de 100 veces más rígida 18 cerca de las ventanas que al final de la cóclea, se asoció la rigidez con la tensión, de tal forma que se escogió una tensión lineal dependiente solamente de la variable x, que cumpliera esta condición: T ( x) = −28.28 x + 100 Con base en esta tensión se buscó una densidad de masa con la que la respuesta a diferentes frecuencias fuera como la deseada, para esto se visualizó la respuesta de la membrana desde t=0s hasta t=400ms. Finalmente se escogió: ρ ( x) = x En general se observa que con densidades crecientes se obtienen buenos resultados. Algunas respuestas a excitaciones con sinusoides en t = 400ms bajo los anteriores valores de densidad y tensión son: a. b. 19 c. d. Figura 8. Ejemplos de respuesta a sinusoides con T ( x) = −28.28 x + 100 , ρ ( x ) = x a. excitación: sin (1000t), b. excitación: sin (10000t), c. excitación: sin (30000t), d. excitación: sin (100000t). Además de escoger una densidad y tensión apropiadas a partir de las pruebas con sinusoides, también se observó el efecto en la respuesta de la membrana simulada debido a la variación de la amplitud de la excitación. Se observó que se mantenía el patrón de respuesta a lo largo de la membrana, es decir, la respuesta a altas frecuencias sigue atenuándose a lo largo de la membrana y a bajas frecuencias sigue siendo más notoria al final de la membrana sin importar la amplitud de la excitación. También se observó que la respuesta de la membrana no es lineal, al hacer el cociente de las respuestas en t=400ms y ver que no es una constante. A continuación se muestran dos ejemplos del efecto de la variación de amplitud en la respuesta de la membrana, un ejemplo con la membrana sostenida y un ejemplo con la membrana suelta. En la primera columna se muestra la respuesta a la excitación con 20 amplitud igual a uno, en la segunda columna la respuesta a la excitación con variación de amplitud, y en la tercera columna se muestra el cociente de las respuestas. Amplitud=1 uno Amplitud Amplitud variada Cociente S o s t e n i d a L i b r e Figura 9. Ejemplos de respuesta a sinusoides con variación de amplitud El tiempo promedio de ejecución del algoritmo, cuando la excitación es una sinusoide con 4410 muestras es de tres minutos, a mayor frecuencia de la sinusoide mayor es el tiempo de convergencia del método. Una vez escogidas las funciones de densidad y tensión que semejaran cualitativamente la respuesta a excitaciones sinusoidales de la membrana basilar, se empezó a probar con los sonidos vocálicos que se tenían de las cuatro personas. 21 4. RESPUESTA A SONIDOS VOCÁLICOS Luego de escoger una densidad y una tensión según los resultados de pruebas con sinusoides, se hicieron las pruebas con los sonidos vocálicos como excitación, para esto cada archivo .wav sin el nivel dc se leyó dentro de un vector de datos donde la primera posición corresponde a la condición de frontera en t=0, y así sucesivamente hasta la posición 4410 que corresponde a la condición de frontera en t=400ms. Con esta condición de frontera y con la densidad y tensión para cada caso (membrana libre y sostenida) se solucionó para cada sonido vocálico de cada persona. Las matrices de solución fueron guardadas, con ellas se hizo el análisis. Inicialmente se graficó la solución para cada tiempo de solución, obteniendo una animación de la vibracion de la membrana según la excitación, a continuación se muestran algunas secuencias de graficas para algunos tiempos de solución: a. b. c. 22 d. Figura 10. Ejemplos de respuesta a sonidos vocálicos: Vocal A mujer 2 membrana suelta. a. t=25 ms, b. t= 50 ms, c. t=250 ms, d. t= 400 ms. a. d. b. e. c. f. Figura 11. Ejemplos de respuesta a sonidos vocálicos: Vocal E hombre 1 membrana sostenida. a. t=50ms, b. t=75 ms, c. t=120ms d. t= 150 ms, e. t= 175 ms, f. t=400ms. 23 Para visualizar mejor los cambios en amplitud en la respuesta de la membrana y regiones de mayor excitación durante el intervalo de tiempo, se graficó en escala de grises el rango de la respuesta en cada nodo, para esto se partió el espacio en hexágonos, de tal forma que cada nodo fuera el centro de un hexágono y así colorear todo el hexágono del valor que toma el rango en el nodo que corresponde a su centro, de esta manera: Zoom: Figura 12. Partición en hexágonos de la región de solución. 24 Los triángulos originales son los que están dibujados con líneas azules, los hexágonos en los que se partió la región son los que están coloreados de azul más claro, los triángulos amarillos “sobraron” al hacer la partición en hexágonos, estos se colorearán del promedio de los rangos en los nodos del triangulo original en el que está inscrito cada triangulo amarillo. Esta partición se hizo con el fin de perder la menor cantidad de información con respecto a los cambios en la respuesta de la membrana, tratando de no suavizar tanto la imagen. Al graficar el logaritmo del rango en escala de grises, para excitaciones sinusoidales, se obtienen respuestas como las siguientes: c. excitación: sin (30000t) a. excitación: sin (1000t) b excitación: sin (10000t) d. excitación: sin (70000t) 25 e. excitación: sin (100000t) Figura 13. Respuesta a sinusoides, escala de grises. Las gráficas con sinusoides muestran que para frecuencias bajas hay mayor excitación al final de la membrana (blanco es máximo y negro es mínimo) y para frecuencias altas solo se notan cambios significativos hacia el inicio de la membrana. Ahora, sonidos vocálicos: Membrana sostenida: Vocales de Mujer b. Vocal A Mujer 2 a. Vocal A Mujer 1 26 c. Vocal I Mujer 2 g. Vocal O Mujer 2 d. Vocal I Mujer 1 h. Vocal U Mujer 2 e. Vocal E Mujer 2 i. Vocal U Mujer 1 f. Vocal E Mujer 1 j. Vocal O Mujer 1 27 Vocales de Hombre k. Vocal A Hombre 2 o. l. p. Vocal I Hombre 1 Vocal A Hombre 1 m. Vocal E Hombre 1 n. Vocal E Hombre 2 Vocal I Hombre 2 q. Vocal O Hombre 2 r. Vocal O hombre 1 28 s. Vocal U Hombre 1 t. Vocal U Hombre 2 Figura 14. Respuesta a sonidos vocálicos, escala de grises, membrana sostenida Membrana libre: Vocales de Mujer a. Vocal A Mujer 2 c. b. Vocal A Mujer 1 Vocal E Mujer 2 d. Vocal E Mujer 1 29 e. Vocal I Mujer 2 f. Vocal I Mujer 1 i. Vocal U Mujer 2 j. Vocal U Mujer 1 Vocales de Hombre g. Vocal O Mujer 2 k. Vocal A Hombre 2 h. Vocal O Mujer 1 l. Vocal A Hombre 1 30 m. Vocal E Hombre 2 n. Vocal E Hombre 1 o. Vocal I Hombre 2 q. Vocal O Hombre 2 r. Vocal O Hombre 1 s. Vocal U Hombre 2 t. Vocal U Hombre 1 p. Vocal I Hombre 1 Figura 15. Respuesta a sonidos vocálicos, escala de grises, membrana suelta 31 Para identificar más fácilmente los cambios entre respuestas se hicieron videos (se pueden ver ejemplos en el CD) con las imágenes obtenidas. Con estas graficas es fácilmente identificable la voz de un hombre de la de una mujer en el caso de la membrana sostenida, la de los hombres se proyecta mucho más clara durante toda la membrana, en cambio la de las mujeres es oscura en casi toda la región. Con estas graficas aún no es posible diferenciar claramente una vocal de otra. Para identificar las vocales se trabajó únicamente con la membrana sostenida, para ello se utilizó la media en cambio del rango, aunque aún no es tan refinada la selección se puede decir que las aes tienden a ser mas claras en toda la región, las úes mantienen un nivel intermedio y se les marca más claramente unas líneas oscuras verticales, las ies son oscuras en casi toda la región, las oes son mucho mas oscuras en la parte central que las ues y se alcanzan a notar las líneas verticales. Las es son claras en casi toda la membrana al igual que las aes, no se alcanza a notar una diferencia clara entre a y e con éste análisis. A continuación se muestran algunos ejemplos de las imágenes obtenidas: a . Vocal U Hombre 2 b. Vocal U Mujer 1 32 c. Vocal O Hombre 1 e. Vocal A Mujer 1 f. Vocal I Hombre 1 d. Vocal O Mujer 1 h. Vocal I Mujer 2 d. Vocal A Hombre 1 33 Figura 16. Respuesta a sonidos vocálicos, escala de grises, promedio. APENDICE: Códigos en Matlab A continuación se presentan los códigos básicos en matlab que se utilizaron durante el trabajo, para algunas pruebas se variaron parámetros y nombres de archivos dentro de ellos. Las matrices y figuras a las que hace referencia se encuentran almacenadas en el CD. 1. Programa para solucionar la ecuación diferencial. function pdemodel [pde_fig,ax]=pdeinit; pdetool('appl_cb',1); set(ax,'DataAspectRatio',[1 0.11250000000000002 1]); set(ax,'PlotBoxAspectRatio',[13.333333333333332 8.8888888888888875 6.6666666666666661]); set(ax,'XLim',[0 4]); set(ax,'YLim',[0.14999999999999999 0.45000000000000001]); set(ax,'XTickMode','auto'); set(ax,'YTickMode','auto'); % Geometry description: pdepoly([ 0.11908396946564881,... 0.11908396946564881,... 3.4900763358778626,... 3.4900763358778626,... ],... [ 0.32610687022900764,... 0.27458015267175573,... 0.16603053435114498,... 0.43122137404580152,... ],... 'P1'); set(findobj(get(pde_fig,'Children'),'Tag','PDEEval'),'String','P1') % Boundary conditions: pdetool('changemode',0) pdesetbd(4,... 'dir',... 1,... '1',... 'sin(110000*t)') pdesetbd(3,... 'dir',... 1,... '1',... 'sin(110000*t)') pdesetbd(2,... 'dir',... 1,... '1',... 'sin(110000*t)') pdesetbd(1,... 'dir',... 34 1,... '1',... 'sin(110000*t)') % Mesh generation: setuprop(pde_fig,'trisize',0.90000000000000002); setuprop(pde_fig,'Hgrad',1.9990000000000001); setuprop(pde_fig,'refinemethod','regular'); pdetool('initmesh') pdetool('refine') pdetool('refine') pdetool('refine') % PDE coefficients: pdeseteq(3,... 'x.*exp(x)',... '0',... '0',... '1',... 'linspace(0,0.3999,100)',... '1./x',... '0',... '[0 100]') setuprop(pde_fig,'currparam',... ['x.*exp(x)';... '0 ';... '0 ';... '1 ']) % Solve parameters: setuprop(pde_fig,'solveparam',... str2mat('0','1000','10','pdeadworst',... '0.5','longest','0','1E-4','','fixed','Inf')) % Plotflags and user data strings: setuprop(pde_fig,'plotflags',[1 1 1 1 1 1 1 1 0 0 0 100 1 0 1 0 0 1]); setuprop(pde_fig,'colstring',''); setuprop(pde_fig,'arrowstring',''); setuprop(pde_fig,'deformstring',''); setuprop(pde_fig,'heightstring',''); 2. Programa para generar videos con particion en hexágonos (escala de grises) function hexa(a1,a2,a3,a4,e1,e2,e3,e4,i1,i2,i3,i4,o1,o2,o3,o4,u1,u2,u3,u4,p,H) %(a1,a2,a3,a4,e1,e2,e3,e4,i1,i2,i3,i4,o1,o2,o3,o4,u1,u2,u3,u4,p); N1=10; %numero de frames vocales N2=15; %numero de frames personas R=5; %numero de repeticiones %p= coordenadas de los nodos %entran matrices de solucion: a,a,a,a e,e,e,e i,i,i,i o,o,o,o u,u,u,u... vector p: coordenadas x e y %de los nodos de cada triangulo. %para sostenida: hexa(uAcaro,uAerick,uAleo,uAivan,uEcaro,uEerick,uEleo,uEivan,uIcaro,uIerick,uIleo,uIivan,uOcaro,uOerick,uOleo ,uOivan,uUcaro,uUerick,uUleo,uUivan,p,hexagonos); %para libre: hexa(Acarolina,Aerick,Aleonor,Aivan,Ecarolina,Eerick,Eleonor,Eivan,Icarolina,Ierick,Ileonor,Iivan,Ocarolina,Oeric k,Oleonor,Oivan,Ucarolina,Uerick,Uleonor,Uivan,p,hexagonos); %para sostenida:hexa(Acaros,Aerick,Aleonor,Aivan,Ecaro,Eerick,Eleonor,Eivan,Icaro,Ierick,Ileonor,Iivan,Ocaro,Oerick,Ol eonor,Oivan,Ucaro,Uerick,Uleonor,Uivan,p,hexagonos); [c1 f1]=size(a1); 35 em=10; for i=1:369 rango1(i)=log((max(a1(i,em:f1)))-(min(a1(i,em:f1)))); rango2(i)=log((max(a2(i,em:f1)))-(min(a2(i,em:f1)))); rango3(i)=log((max(a3(i,em:f1)))-(min(a3(i,em:f1)))); rango4(i)=log((max(a4(i,em:f1)))-(min(a4(i,em:f1)))); rango5(i)=log((max(e1(i,em:f1)))-(min(e1(i,em:f1)))); rango6(i)=log((max(e2(i,em:f1)))-(min(e2(i,em:f1)))); rango7(i)=log((max(e3(i,em:f1)))-(min(e3(i,em:f1)))); rango8(i)=log((max(e4(i,em:f1)))-(min(e4(i,em:f1)))); rango9(i)=log((max(i1(i,em:f1)))-(min(i1(i,em:f1)))); rango10(i)=log((max(i2(i,em:f1)))-(min(i2(i,em:f1)))); rango11(i)=log((max(i3(i,em:f1)))-(min(i3(i,em:f1)))); rango12(i)=log((max(i4(i,em:f1)))-(min(i4(i,em:f1)))); rango13(i)=log((max(o1(i,em:f1)))-(min(o1(i,em:f1)))); rango14(i)=log((max(o2(i,em:f1)))-(min(o2(i,em:f1)))); rango15(i)=log((max(o3(i,em:f1)))-(min(o3(i,em:f1)))); rango16(i)=log((max(o4(i,em:f1)))-(min(o4(i,em:f1)))); rango17(i)=log((max(u1(i,em:f1)))-(min(u1(i,em:f1)))); rango18(i)=log((max(u2(i,em:f1)))-(min(u2(i,em:f1)))); rango19(i)=log((max(u3(i,em:f1)))-(min(u3(i,em:f1)))); rango20(i)=log((max(u4(i,em:f1)))-(min(u4(i,em:f1)))); end max1=max(max(rango1)); max2=max(max(rango2)); max3=max(max(rango3)); max4=max(max(rango4)); max5=max(max(rango5)); max6=max(max(rango6)); max7=max(max(rango7)); max8=max(max(rango8)); max9=max(max(rango9)); max10=max(max(rango10)); max11=max(max(rango11)); max12=max(max(rango12)); max13=max(max(rango13)); max14=max(max(rango14)); max15=max(max(rango15)); max16=max(max(rango16)); max17=max(max(rango17)); max18=max(max(rango18)); max19=max(max(rango19)); max20=max(max(rango20)); ord=vert(p); AA=ordenar1(p); %se llena la matriz de cada imagen deacuerdo con la muestra H for i=1:467 for j=1:698 if H(i,j)==765 | H(i,j)==0 I1(i,j)=max1; I2(i,j)=max2; I3(i,j)=max3; I4(i,j)=max4; I5(i,j)=max5; I6(i,j)=max6; I7(i,j)=max7; I8(i,j)=max8; I9(i,j)=max9; I10(i,j)=max10; I11(i,j)=max11; I12(i,j)=max12; 36 I13(i,j)=max13; I14(i,j)=max14; I15(i,j)=max15; I16(i,j)=max16; I17(i,j)=max17; I18(i,j)=max18; I19(i,j)=max19; I20(i,j)=max20; else if H(i,j)>0 col=H(i,j); ind=AA(3,col); I1(i,j)=rango1(ind); I2(i,j)=rango2(ind); I3(i,j)=rango3(ind); I4(i,j)=rango4(ind); I5(i,j)=rango5(ind); I6(i,j)=rango6(ind); I7(i,j)=rango7(ind); I8(i,j)=rango8(ind); I9(i,j)=rango9(ind); I10(i,j)=rango10(ind); I11(i,j)=rango11(ind); I12(i,j)=rango12(ind); I13(i,j)=rango13(ind); I14(i,j)=rango14(ind); I15(i,j)=rango15(ind); I16(i,j)=rango16(ind); I17(i,j)=rango17(ind); I18(i,j)=rango18(ind); I19(i,j)=rango19(ind); I20(i,j)=rango20(ind); end if H(i,j)< 0 ind=abs(H(i,j)); r1=ord(ind,1); r2=ord(ind,2); r3=ord(ind,3); vec(1)=rango1(r1); vec(2)=rango1(r2); vec(3)=rango1(r3); I1(i,j)=mean(vec); vec(1)=rango2(r1); vec(2)=rango2(r2); vec(3)=rango2(r3); I2(i,j)=mean(vec); vec(1)=rango3(r1); vec(2)=rango3(r2); vec(3)=rango3(r3); I3(i,j)=mean(vec); vec(1)=rango4(r1); vec(2)=rango4(r2); vec(3)=rango4(r3); I4(i,j)=mean(vec); vec(1)=rango5(r1); vec(2)=rango5(r2); 37 vec(3)=rango5(r3); I5(i,j)=mean(vec); vec(1)=rango6(r1); vec(2)=rango6(r2); vec(3)=rango6(r3); I6(i,j)=mean(vec); vec(1)=rango7(r1); vec(2)=rango7(r2); vec(3)=rango7(r3); I7(i,j)=mean(vec); vec(1)=rango8(r1); vec(2)=rango8(r2); vec(3)=rango8(r3); I8(i,j)=mean(vec); vec(1)=rango9(r1); vec(2)=rango9(r2); vec(3)=rango9(r3); I9(i,j)=mean(vec); vec(1)=rango10(r1); vec(2)=rango10(r2); vec(3)=rango10(r3); I10(i,j)=mean(vec); vec(1)=rango11(r1); vec(2)=rango11(r2); vec(3)=rango11(r3); I11(i,j)=mean(vec); vec(1)=rango12(r1); vec(2)=rango12(r2); vec(3)=rango12(r3); I12(i,j)=mean(vec); vec(1)=rango13(r1); vec(2)=rango13(r2); vec(3)=rango13(r3); I13(i,j)=mean(vec); vec(1)=rango14(r1); vec(2)=rango14(r2); vec(3)=rango14(r3); I14(i,j)=mean(vec); vec(1)=rango15(r1); vec(2)=rango15(r2); vec(3)=rango15(r3); I15(i,j)=mean(vec); vec(1)=rango16(r1); vec(2)=rango16(r2); vec(3)=rango16(r3); I16(i,j)=mean(vec); vec(1)=rango17(r1); vec(2)=rango17(r2); vec(3)=rango17(r3); 38 I17(i,j)=mean(vec); vec(1)=rango18(r1); vec(2)=rango18(r2); vec(3)=rango18(r3); I18(i,j)=mean(vec); vec(1)=rango19(r1); vec(2)=rango19(r2); vec(3)=rango19(r3); I19(i,j)=mean(vec); vec(1)=rango20(r1); vec(2)=rango20(r2); vec(3)=rango20(r3); I20(i,j)=mean(vec); end end end end %Vocal A figure; mov4= avifile('Asteschex.avi') for v=1:R imagesc(I1) colormap(gray); F(1) = getframe; for i=1:N1 mov4=addframe(mov4,F(1)); end imagesc(I2) colormap(gray); F(2) = getframe; for i=1:N1 mov4=addframe(mov4,F(2)); end imagesc(I3) colormap(gray); F(3) = getframe; for i=1:N1 mov4=addframe(mov4,F(3)); end imagesc(I4) colormap(gray); F(4) = getframe; for i=1:N1 mov4=addframe(mov4,F(4)); end end 39 mov4=close(mov4); %Vocal E figure; mov5= avifile('Esteschex.avi') for v=1:R imagesc(I5) colormap(gray); F(1) = getframe; for i=1:N1 mov5=addframe(mov5,F(1)); end imagesc(I6) colormap(gray); F(2) = getframe; for i=1:N1 mov5=addframe(mov5,F(2)); end imagesc(I7) colormap(gray); F(3) = getframe; for i=1:N1 mov5=addframe(mov5,F(3)); end imagesc(I8) colormap(gray); F(4) = getframe; for i=1:N1 mov5=addframe(mov5,F(4)); end end mov5=close(mov5); %Vocal I figure; mov6= avifile('Isteschex.avi') for v=1:R imagesc(I9) colormap(gray); F(1) = getframe; for i=1:N1 mov6=addframe(mov6,F(1)); end imagesc(I10) colormap(gray); F(2) = getframe; for i=1:N1 mov6=addframe(mov6,F(2)); 40 end imagesc(I11) colormap(gray); F(3) = getframe; for i=1:N1 mov6=addframe(mov6,F(3)); end imagesc(I12) colormap(gray); F(4) = getframe; for i=1:N1 mov6=addframe(mov6,F(4)); end end mov6=close(mov6); %Vocal O figure; mov7= avifile('Osteschex.avi') for v=1:R imagesc(I13) colormap(gray); F(1) = getframe; for i=1:N1 mov7=addframe(mov7,F(1)); end imagesc(I14) colormap(gray); F(2) = getframe; for i=1:N1 mov7=addframe(mov7,F(2)); end imagesc(I15) colormap(gray); F(3) = getframe; for i=1:N1 mov7=addframe(mov7,F(3)); end imagesc(I16) colormap(gray); F(4) = getframe; for i=1:N1 mov7=addframe(mov7,F(4)); end end mov7=close(mov7); %Vocal U 41 figure; mov8= avifile('Usteschex.avi') for v=1:R imagesc(I17) colormap(gray); F(1) = getframe; for i=1:N1 mov8=addframe(mov8,F(1)); end imagesc(I18) colormap(gray); F(2) = getframe; for i=1:N1 mov8=addframe(mov8,F(2)); end imagesc(I19) colormap(gray); F(3) = getframe; for i=1:N1 mov8=addframe(mov8,F(3)); end imagesc(I20) colormap(gray); F(4) = getframe; for i=1:N1 mov8=addframe(mov8,F(4)); end end mov8=close(mov8); %genera video vocales mias figure; mov = avifile('Vocalesmiasteschex.avi') for v=1:R imagesc(I1) colormap(gray); F(1) = getframe; for i=1:N2 mov=addframe(mov,F(1)); end imagesc(I5) colormap(gray); F(2) = getframe; for i=1:N2 mov=addframe(mov,F(2)); end imagesc(I9) 42 colormap(gray); F(3) = getframe; for i=1:N2 mov=addframe(mov,F(3)); end imagesc(I13) colormap(gray); F(4) = getframe; for i=1:N2 mov=addframe(mov,F(4)); end imagesc(I17) colormap(gray); v=[0 (max17/5)]; F(5) = getframe; for i=1:N2 mov=addframe(mov,F(5)); end end mov=close(mov); %genera video vocales ivan: figure; mov = avifile('Vocalesivanteschex.avi') for v=1:R imagesc(I4) colormap(gray); v=[0 (max4/5)]; F(1) = getframe; for i=1:N2 mov=addframe(mov,F(1)); end imagesc(I8) colormap(gray); F(2) = getframe; for i=1:N2 mov=addframe(mov,F(2)); end imagesc(I12) colormap(gray); F(3) = getframe; for i=1:N2 mov=addframe(mov,F(3)); end imagesc(I16) colormap(gray); 43 F(4) = getframe; for i=1:N2 mov=addframe(mov,F(4)); end imagesc(I20) colormap(gray); F(5) = getframe; for i=1:N2 mov=addframe(mov,F(5)); end end mov=close(mov); %genera video vocales Leo: figure; mov = avifile('VocalesLeoteschex.avi') for v=1:R imagesc(I3) colormap(gray); v=[0 (max3/5)]; F(1) = getframe; for i=1:N2 mov=addframe(mov,F(1)); end imagesc(I7) colormap(gray); F(2) = getframe; for i=1:N2 mov=addframe(mov,F(2)); end imagesc(I11) colormap(gray); F(3) = getframe; for i=1:N2 mov=addframe(mov,F(3)); end imagesc(I15) colormap(gray); F(4) = getframe; for i=1:N2 mov=addframe(mov,F(4)); end imagesc(I19) colormap(gray); F(5) = getframe; 44 for i=1:N2 mov=addframe(mov,F(5)); end end mov=close(mov); %genera video vocales Erick: figure; mov = avifile('VocalesErickteschex.avi') for v=1:R imagesc(I2) colormap(gray); v=[0 (max2/5)]; F(1) = getframe; for i=1:N2 mov=addframe(mov,F(1)); end imagesc(I6) colormap(gray); F(2) = getframe; for i=1:N2 mov=addframe(mov,F(2)); end imagesc(I10) colormap(gray); F(3) = getframe; for i=1:N2 mov=addframe(mov,F(3)); end imagesc(I14) colormap(gray); F(4) = getframe; for i=1:N2 mov=addframe(mov,F(4)); end imagesc(I18) colormap(gray); F(5) = getframe; for i=1:N2 mov=addframe(mov,F(5)); end end mov=close(mov); figure; imagesc(I1); colormap(gray); title('A caro'); figure; 45 imagesc(I2); colormap(gray); title('A erick'); figure; imagesc(I3); colormap(gray); title('A leonor'); figure; imagesc(I4); colormap(gray); title('A ivan');figure; imagesc(I5); colormap(gray); title('E caro'); figure; imagesc(I6); colormap(gray); title('E erick'); figure; imagesc(I7); colormap(gray); title('E leonor'); figure; imagesc(I8); colormap(gray); title('E ivan'); figure; imagesc(I9); colormap(gray); title('I caro'); figure; imagesc(I10); colormap(gray); title('I erick'); figure; imagesc(I11); colormap(gray); title('I leonor'); figure; imagesc(I12); colormap(gray); title('I ivan'); figure; imagesc(I13); colormap(gray); title('O caro'); figure; imagesc(I14); colormap(gray); title('O erick'); figure; imagesc(I15); colormap(gray); title('O leonor'); figure; imagesc(I16); colormap(gray); title('O ivan'); figure; imagesc(I17); colormap(gray); 46 title('U caro'); figure; imagesc(I18); colormap(gray); title('U erick'); figure; imagesc(I19); colormap(gray); title('U leonor'); figure; imagesc(I20); colormap(gray); title('U ivan'); 3. Videos de sinusoides function sinu(a1,a2,a3,a4,e1,p,H) %(a1,a2,a3,a4,e1,e2,e3,e4,i1,i2,i3,i4,o1,o2,o3,o4,u1,u2,u3,u4,p); N1=10; %numero de frames vocales N2=15; %numero de frames personas R=5; %numero de repeticiones %para sinulibre: sinu(sin1000,sin10000,sin40000,sin70000,sin100000,p,hexagonos); [c1 f1]=size(a1); em=10; for i=1:369 rango1(i)=max(a1(i,em:f1))-min(a1(i,em:f1)); rango2(i)=max(a2(i,em:f1))-min(a2(i,em:f1)); rango3(i)=max(a3(i,em:f1))-min(a3(i,em:f1)); rango4(i)=max(a4(i,em:f1))-min(a4(i,em:f1)); rango5(i)=max(e1(i,em:f1))-min(e1(i,em:f1)); end max1=max(max(rango1)); max2=max(max(rango2)); max3=max(max(rango3)); max4=max(max(rango4)); max5=max(max(rango5)); ord=vert(p); AA=ordenar1(p); %se llena la matriz de cada imagen deacuerdo con la muestra H for i=1:467 for j=1:698 if H(i,j)==765 | H(i,j)==0 I1(i,j)=max1; I2(i,j)=max2; I3(i,j)=max3; I4(i,j)=max4; I5(i,j)=max5; else if H(i,j)>0 col=H(i,j); ind=AA(3,col); I1(i,j)=rango1(ind); I2(i,j)=rango2(ind); I3(i,j)=rango3(ind); I4(i,j)=rango4(ind); I5(i,j)=rango5(ind); end 47 if H(i,j)< 0 ind=abs(H(i,j)); r1=ord(ind,1); r2=ord(ind,2); r3=ord(ind,3); vec(1)=rango1(r1); vec(2)=rango1(r2); vec(3)=rango1(r3); I1(i,j)=mean(vec); vec(1)=rango2(r1); vec(2)=rango2(r2); vec(3)=rango2(r3); I2(i,j)=mean(vec); vec(1)=rango3(r1); vec(2)=rango3(r2); vec(3)=rango3(r3); I3(i,j)=mean(vec); vec(1)=rango4(r1); vec(2)=rango4(r2); vec(3)=rango4(r3); I4(i,j)=mean(vec); vec(1)=rango5(r1); vec(2)=rango5(r2); vec(3)=rango5(r3); I5(i,j)=mean(vec); end end end end %Vocal A figure; mov4= avifile('sinusoidesorig.avi') for v=1:R imagesc(I1) colormap(gray); F(1) = getframe; for i=1:N1 mov4=addframe(mov4,F(1)); end imagesc(I2) colormap(gray); F(2) = getframe; for i=1:N1 mov4=addframe(mov4,F(2)); end imagesc(I3) colormap(gray); F(3) = getframe; for i=1:N1 mov4=addframe(mov4,F(3)); end 48 imagesc(I4) colormap(gray); F(4) = getframe; for i=1:N1 mov4=addframe(mov4,F(4)); end imagesc(I5) colormap(gray); F(5) = getframe; for i=1:N1 mov4=addframe(mov4,F(5)); end end mov4=close(mov4); %genera videos figure; mov = avifile('sin1000orig.avi') for v=1:R imagesc(I1) colormap(gray); F(1) = getframe; for i=1:N2 mov=addframe(mov,F(1)); end end mov=close(mov); %genera video vocales ivan: figure; mov = avifile('sin10000orig.avi') for v=1:R imagesc(I2) colormap(gray); F(1) = getframe; for i=1:N2 mov=addframe(mov,F(1)); end end mov=close(mov); %genera video vocales Leo: figure; mov = avifile('sin40000orig.avi') for v=1:R imagesc(I3) colormap(gray); F(1) = getframe; for i=1:N2 mov=addframe(mov,F(1)); end end 49 mov=close(mov); %genera video vocales Erick: figure; mov = avifile('sin70000orig.avi') for v=1:R imagesc(I4) colormap(gray); F(1) = getframe; for i=1:N2 mov=addframe(mov,F(1)); end end mov=close(mov); %genera video vocales Erick: figure; mov = avifile('sin100000orig.avi') for v=1:R imagesc(I5) colormap(gray); F(1) = getframe; for i=1:N2 mov=addframe(mov,F(1)); end end mov=close(mov); 4. Programa para generar animación de vibracion de la membrana: R=1; N1=10; mov4= avifile('sin100000sost.avi') for v=1:R (open('005.fig')); AXIS([0 4 0 0.5 -20 20 -20 20]); set(gca,'ZTick',-20:5:20); set(gca,'ZTickLabel',{'-20','-15','-10','-5','0','5','10','15','20'}); title(''); grid; F(1) = getframe; for i=1:N1 mov4=addframe(mov4,F(1)); end (open('010.fig')); AXIS([0 4 0 0.5 -20 20 -20 20]); set(gca,'ZTick',-20:5:20); set(gca,'ZTickLabel',{'-20','-15','-10','-5','0','5','10','15','20'}); title(''); grid; F(2) = getframe; for i=1:N1 mov4=addframe(mov4,F(2)); end (open('015.fig')); 50 AXIS([0 4 0 0.5 -20 20 -20 20]); set(gca,'ZTick',-20:5:20); set(gca,'ZTickLabel',{'-20','-15','-10','-5','0','5','10','15','20'}); title(''); grid; F(3) = getframe; for i=1:N1 mov4=addframe(mov4,F(3)); end (open('020.fig')); AXIS([0 4 0 0.5 -20 20 -20 20]); set(gca,'ZTick',-20:5:20); set(gca,'ZTickLabel',{'-20','-15','-10','-5','0','5','10','15','20'}); title(''); grid; F(4) = getframe; for i=1:N1 mov4=addframe(mov4,F(4)); end (open('025.fig')); AXIS([0 4 0 0.5 -20 20 -20 20]); set(gca,'ZTick',-20:5:20); set(gca,'ZTickLabel',{'-20','-15','-10','-5','0','5','10','15','20'}); title(''); grid; F(5) = getframe; for i=1:N1 mov4=addframe(mov4,F(5)); end (open('030.fig')); AXIS([0 4 0 0.5 -20 20 -20 20]); set(gca,'ZTick',-20:5:20); set(gca,'ZTickLabel',{'-20','-15','-10','-5','0','5','10','15','20'}); title(''); grid; F(6) = getframe; for i=1:N1 mov4=addframe(mov4,F(6)); end (open('035.fig')); AXIS([0 4 0 0.5 -20 20 -20 20]); set(gca,'ZTick',-20:5:20); set(gca,'ZTickLabel',{'-20','-15','-10','-5','0','5','10','15','20'}); title(''); grid; F(7) = getframe; for i=1:N1 mov4=addframe(mov4,F(7)); end (open('040.fig')); AXIS([0 4 0 0.5 -20 20 -20 20]); set(gca,'ZTick',-20:5:20); set(gca,'ZTickLabel',{'-20','-15','-10','-5','0','5','10','15','20'}); title(''); grid; F(8) = getframe; for i=1:N1 mov4=addframe(mov4,F(8)); end end mov4=close(mov4); 5. Funciones: 51 function SAL=fon1(t) B=NaN; format long mya=t; switch mya case NaN B=NaN; otherwise mya=abs(mya); kio=wavread('eCs'); if mya < 0.4 c=round(11022.5*t) +1; B=kio(c); end end SAL=B; function o=ordenar (vec) v=vec(1,:); v1=vec(2,:); [a,b]=size(v); for i=1:b [m,s]=min(v); o1(i)=m; v(s)=max(v)+1; o2(i)=v1(1,s); o3(i)=s; end o(1,:)=o1; o(2,:)=o2; o(3,:)=o3; function A=ordenar1 (p) vec=ordenar(p); v=vec(2,:); v1=vec(3,:); B=0; C=0; for j=0:9:360 for l=1:9 t(l)=v(l+j); t1(l)=v1(l+j); end for i=j+1:j+9 [m,s]=min(t); o1(i-j)=m; t(s)=max(t)+1; o2(i-j)=t1(s); end B=[B o1]; C=[C o2]; end for i=1:369 A(1,i)=vec(1,i); A(2,i)=B(i+1); A(3,i)=C(i+1); end %en la matriz A(3X369) quedan: fila 1: Xs ordenados, fila 2: Ys %correspondientes a xs ordenados, fila 3: posicion que le corresponde a 52 %ese punto en el vector de rango. function sinDC arch=input(' Ingrese el nombre del archivo original .wav \n\n ','s'); nuevo=input(' Ingrese el nombre del archivo destino (sin DC) .wav \n\n ','s'); [y,f,n]=wavread(arch); a=fft(y); a(1)=0; b=ifft(a); wavwrite(b,f,n,nuevo); 53 CONCLUSIONES Y TRABAJOS FUTUROS Este modelo de membrana arroja buenos resultados en la diferenciación de frecuencias de sinusoides, aunque no es tan refinado y por lo tanto aun no está listo para reconocer fonemas. Se puede decir que se logró imitar en alguna medida el comportamiento real de la membrana basilar aún estando lejos de sus especificaciones reales de tensión y densidad (que son desconocidas). Es claro que la membrana simulada responde selectivamente a diferentes frecuencias lo que hace que se puedan diferenciar fácilmente las voces femeninas de las masculinas, luego como sistema para reconocer fonemas, se puede decir que ésta es una primera etapa de su desarrollo. El modelo actual no tiene en cuenta muchos factores anatómicos y fisiológicos de la membrana como el líquido ni la forma real de excitación del sistema la cuál se hace a través del él por la ventana oval, su espesor, su posición enrollada y muchos otros factores que deben influir radicalmente en la respuesta de la membrana. Se comprobó que es posible mediante un sistema no lineal desarrollar un método que permita diferenciar sonidos, en éste trabajo se exploraron tan solo algunas de las muchas posibilidades que ofrece la ecuación de onda, la membrana, las condiciones de frontera y en general todos los parámetros de solución de la ecuación diferencial que hacen que el problema pueda ser solucionado de muchas maneras diferentes y seguramente habrá 54 forma de optimizar la solución mediante la variación de la tensión, la densidad, la forma de la membrana, la triangulación de la región, la tolerancia al error, las condiciones iniciales o las de frontera . Los mayores inconvenientes presentados durante el desarrollo de este trabajo están en el tiempo de ejecución del algoritmo que resuelve la ecuación diferencial ya que en algunos casos toma hasta 12 minutos para arrojar la respuesta de la membrana a una señal de voz, el tiempo de ejecución depende entre otras cosas de la tasa de muestreo de la señal, la tolerancia al error, el tamaño de la región de solución, el número de triángulos y el número de nodos. Los trabajos futuros basados en la simulación de la membrana deberían dirigirse hacia la búsqueda de un algoritmo o un programa que sea más eficiente que el utilizado actualmente para luego facilitar la búsqueda de tensión y densidad adecuadas para una mejor caracterización de sonidos y un campo de prueba más amplio, es decir trabajar con señales provenientes de mas de cuatro personas. También el desarrollo de un método para comparar respuestas de la membrana, enfocado en dos aminos: diferenciar un fonema de otro y diferenciar una fonema de una persona del mismo fonema de otra persona. Los resultados de este trabajo son una buena base para seguir explorando un sistema que inspirado en el funcionamiento del oído humano pretende reconocer sonidos porque estos muestran que existe una alternativa diferente del análisis de Fourier en el tratamiento de señales de voz para hacer análisis en frecuencia y que es posible ajustar un modelo para 55 este fin, también son una base para desarrollar un modelo de la cóclea (que en ningún momento se pretendió en este trabajo) que no esté basado en bancos de filtros o resonadores selectivos sintonizados en una frecuencia específica sino en la exploración de métodos y sistemas no lineales. 56 REFERENCIAS http://www.bcm.tmc.edu/oto/research/cochlea/Hearing/ Fecha de consulta: 24 de Agosto de 2003, Tema general: Cochlear Biophysics Laboratory http://psych.athabascau.ca/html/Psych402/Biotutorials/25/part1.html Fecha de consulta: 24 de Agosto de 2003, Tema general: The Human Ear George, G. Somjen. (1986), Neuro Fisiología. Buenos Aires. ED. Panamericana. Crawford Jr., Frank S. 1971 Berkeley Physics Course v.3. Barcelona. Reverte, S. A Burden, Richard L. 2002. Análisis numérico. México, D.F. Thomson Learning. COMSOL AB. 2002. Partial Differential Equation Toolbox User’s Guide version 1. Natick, MA 01760-2098. The Mathworks Lyon, R., Shamma, S., Sultan .Auditory Representations of Timbre and Pitch, Auditory Computation,, p. 221-232 57