scieee AI-readable full text Open interactive document viewer

Procesamiento de voz para mejorar la pronunciación

Castrosqui Florián, Mayra Alexandra

Abstract

El aprendizaje de la pronunciación de idiomas extranjeros mediante programas informáticos se encuentra en pleno desarrollo en la actualidad. Sin embargo, se trata de un campo que no se encuentra muy desarrollado en el software libre. La mayoría de aplicaciones de aprendizaje de idiomas que ofrecen esta utilidad tienen software propietario. Por esta razón, en este proyecto haremos un esfuerzo por investigar y llevar a cabo una de las vías para conseguir esta utilidad. La aproximación que le daremos a este problema será la comparación de audios con las voces de un nativo y un estudiante. Se tratarán las dos voces para facilitar su comparación, esta comparación nos servirá a los estudiantes para saber si nuestra pronunciación se aproxima a la de un nativo y podernos enfocar en qué aspectos mejorar. Para ello, veremos cómo hemos de tratar señales de voz y qué tipo de filtros usar para limpiarlas. Después aplicaremos la transformada de Fourier y construiremos espectrogramas con el objetivo de introducir el tratamiento de imágenes para la simplificación de la información y al final poder hacer la comparación de los datos con la información destacada. Este proceso se implementará como una aplicación Java.

Full text

PROCESAMIENTO DE VOZ PARA MEJORAR LA PRONUNCIACIÓN Mayra Alexandra Castrosqui Florián DOBLE GRADO EN INGENIERÍA INFORMÁTICA Y MATEMÁTICAS FACULTAD DE INFORMÁTICA UNIVERSIDAD COMPLUTENSE DE MADRID TRABAJO DE FIN DE GRADO Febrero 2017 Director: Adrián Riesco Rodríguez Codirector: Enrique Martín Martín iii Resumen El aprendizaje de la pronunciación de idiomas extranjeros mediante programas informáticos se encuentra en pleno desarrollo en la actualidad. Sin embargo, se trata de un campo que no se encuentra muy desarrollado en el software libre. La mayoría de aplicaciones de aprendizaje de idiomas que ofrecen esta utilidad tienen software propietario. Por esta razón, en este proyecto haremos un esfuerzo por investigar y llevar a cabo una de las vías para conseguir esta utilidad. La aproximación que le daremos a este problema será la comparación de audios con las voces de un nativo y un estudiante. Se tratarán las dos voces para facilitar su comparación, esta comparación nos servirá a los estudiantes para saber si nuestra pronunciación se aproxima a la de un nativo y podernos enfocar en qué aspectos mejorar. Para ello, veremos cómo hemos de tratar señales de voz y qué tipo de filtros usar para limpiarlas. Después aplicaremos la transformada de Fourier y construiremos espectrogramas con el objetivo de introducir el tratamiento de imágenes para la simplificación de la información y al final poder hacer la comparación de los datos con la información destacada. Este proceso se implementará como una aplicación Java. Palabras clave Comparación del habla, pronunciación de idiomas, filtros de señales de voz, espectrograma, detección de blobs, comparación de matrices. v Abstract Learning of foreign language pronuntiation through computer programs is in full development nowadays. Nevertheless, it is a field not very developed as free software. Most of the existing language learning programs which offer this utiliry are propietary software. For this reason, in this project we will make an effort to investigate and acomplish one of the ways to achieve this utility. The approach we will give to this problem will be the comparison of the audio given by a native speaker with that of a student. Both voices will be treated to facilitate the comparison, a comparison which will help the students to know if their pronuntiation is close to that of a native speaker, and will let them focus on which aspects to improve. For this, we will see how we must treat voice signals and what types of filters to use in order to clean them. Next, we will apply Fourier transform and build spectrograms with the purpose of introducing image treatment for information simplification, to get to do the comparison between the data and the highlighted information. This process will be implemented as a Java application. Keywords Speech comparison, language pronunciation, voice signal filter, spectrogram, blob detection, matrix comparison vii Índice General 1 Introducción 1 1.1 Motivación y objetivos ............................ 1 1.2 Estructura de la memoria .......................... 2 2 Diseño e implementación 3 2.1 Capturando la voz .............................. 4 2.2 Filtrando el audio ............................... 7 2.2.1 Filtros ................................. 7 2.2.2 Filtros digitales ............................ 7 2.2.3 Tipos de filtros digitales ....................... 8 Según la respuesta en frecuencia .................. 9 Expresión general de un filtro y clasificación por respuesta al impulso ........................... 9 Los filtros que usaremos ....................... 11 2.2.4 IMPLEMENTACIÓN ......................... 12 2.3 Transformación ................................ 13 2.3.1 IMPLEMENTACIÓN ......................... 16 2.4 Detección de blobs ............................... 17 2.4.1 IMPLEMENTACIÓN ......................... 19 A. Del espectrograma al detector de blobs ............. 19 B. Blob Processing ........................... 20 2.5 Comparación ................................. 22 3 Conclusiones 27 3.1 Dificultades encontradas ........................... 28 3.2 Trabajo futuro ................................. 28 A Resultados de la pruebas 31 Bibliografía 45 ix Índice de Figuras 2.1 Muestreo de una señal continua para obtener una señal discreta .... 5 2.2 Formato de archivos WAVE ......................... 6 2.3 Proceso típico en DSP (Digital signal processing).............. 8 2.4 Límites de audición humanos ........................ 9 2.5 Diagramas de Bode a partir de la función de transferencia de los filtros Bessel, Butterworth, Chebyshev y elíptico ................. 12 2.6 Intensidad de la onda a través del tiempo ................. 13 2.7 Espectrograma ................................. 16 2.8 Isolíneas y blobs ................................ 18 2.9 Formato ARGB para colores RGBA ..................... 20 2.10 Píxeles estudiados en la detección de blobs dado un píxel (x, y)..... 21 2.11 Blobs en un espectrograma .......................... 21 2.12 Audio máster y 3 de prueba en japonés .................. 24 2.13 Audio máster y 3 de prueba en coreano .................. 24 2.14 Audio máster y 3 de prueba en español .................. 25 6Capítulo 2. Diseño e implementación buscando la calidad de las pistas de música. Un canal de audio es un canal o pista donde los elementos grabados tienen su propio área en la grabación, cuando escuchamos una grabación con varios canales, todos ellos suenan simultáneamente. Cuando se almacena música se usan dos canales (estéreo) y más de dos en el caso de películas para conseguir un mejor efecto. En cuanto al formato del archivo de audio que obtenemos, como hemos dicho, intentaremos que sea formato raw o PCM, es decir, una secuencia de palabras de 16 bits que representan la intensidad de cada muestra tomada de la señal. En cuanto a la implementación, dos de los formatos contenedores de audio más conocidos, WAV y AIFF, utilizan el formato PCM. Nosotros utilizaremos WAVE (Waveform Audio File Format) conocido como WAV que es, en pocas palabras, un raw con cabecera donde se tiene el tamaño del archivo, el tamaño de la cabecera, el formato de audio (PCM), la frecuencia de muestreo, número de canales (1 o 2 ya que WAV es solo para audio digital), el número de bits por muestra y otros campos como se muestra en la imagen 2.2. Quitar esa cabecera y obtener los datos en crudo es muy simple: tan solo debemos descartar los primeros 44 bits y guardamos el resultado en un .raw. Nos quedamos con lo el campo data que es el audio en bruto y se encuentra codificado con sistema little-endian, esto quiere decir que el byte más significativo de los dos que forman las palabras de 16 bits es el segundo y, por tanto, se almacena en primer lugar. FIGURA 2.2: Formato de archivos WAVE [12]. En resumen los ajustes que usaremos para capturar audio en formato WAV serán los siguientes: •Codificación 16-bit PCM. •Un solo canal o monocanal. •Frecuencia de muestreo: 44.1 kHz 2.2. Filtrando el audio 7 •Sistema little-endian para almacenar los bytes. En nuestro caso, hemos llevado a cabo esta captura de voz con la aplicación de captura y edición de audio Audacity [13] , que es software libre y multiplataforma. En Audacity puedes especificar las configuraciones que indicamos en la descripción teórica que hemos presentado anteriormente; al leer un fichero raw será necesario indicar estos ajustes. La forma de obtener el archivo de audio wav o raw es abierta. Usar Audacity es lo que nosotros hemos hecho pero se pueden obtener de muchas otras formas. Por ejemplo, un dato interesante es que todo dispositivo Android soporta la captura de audio con 1 canal a 44.1 kHz en codificación 16-bit PCM. Ya tenemos hecho el primer paso, hemos conseguido los datos de audio en un formato que podemos manipular. El audio grabado está en bruto, lo siguiente será quitarle el ruido y frecuencias no útiles. 2.2 Filtrando el audio La segunda parte de nuestro procedimiento consiste en aplicar filtros para quedarnos con una versión más limpia de la voz que hemos grabado en el paso anterior. Como queremos que esta aplicación pueda adaptarse a varios interfaces de usuario (aplicaciones web, aplicaciones móviles y de escritorio) el sonido se podrá recoger de muchas maneras. Las frecuencias de voz que contienen información relevante están dentro de un rango relativamente estrecho y los micrófonos recogen un rango mayor. Por tanto, cuando grabamos sonido se recogen muchas frecuencias que no son útiles para el tratamiento de voz. A través de un filtro pasa banda se podrán rechazar las frecuencias que se encuentran fuera del rango útil. 2.2.1 Filtros Un filtro electrónico es cualquier medio que una señal atraviesa modificando la naturaleza de esta [15]. Los filtros son utilizados en el procesamiento de señales. Discriminan componentes de frecuencia de la señal, descartando o destacando las frecuencias requeridas pudiendo modificar la amplitud o la fase de la señal. Un filtro puede ser analógico o digital. Nos centraremos en los filtros digitales porque estamos trabajando con una señal digital. 2.2.2 Filtros digitales Un filtro digital [15] es un algoritmo que tiene como entrada un señal digital, es decir, una secuencia discreta de valores, y otra señal digital como salida. Se trata de operaciones matemáticas que alteran el espectro o el contenido frecuencial de la señal entrante, pudiendo modificar su amplitud o su fase. Se suelen utilizar para fortalecer o atenuar frecuencias, mejorar la calidad de la señal o para síntesis de sonido logrando efectos auditivos. En Procesamiento digital de señales (DSP por sus siglas en inglés) los filtros digitales se usan sobre los valores numéricos asociados a las muestras tomadas de señales analógicas. Siempre se puede hacer una conversión de señal analógica a 8Capítulo 2. Diseño e implementación digital y viceversa. Nosotros ya tenemos nuestra señal de audio en muestras y usaremos los filtros digitales. Es interesante destacar que los filtros digitales muestran, en general, un mejor desempeño que los filtros analógicos, que operan con señales continuas y suelen consistir en un dispositivo hardware. Algunas de las ventajas de los filtros digitales sobre los analógicos son que los filtros digitales son programables y, por tanto, no tienen tantas restricciones como los segundos, se pueden conseguir características muy extremas e incluso hacer que se adapten a la señal según vaya siendo procesada. Son más fáciles de diseñar e implementar, y no les afectan las condiciones del ambiente. Por estos motivos, entre otros, cuando se quiere filtrar una señal analógica y seguir obteniendo una señal analógica, se hace una conversión A/D tomando muestras de la señal analógica de entrada para obtener una señal digital (valores discretos). Después se le aplica un filtro digital para posteriormente hacer otra conversión D/A y volver a obtener una señal continua a partir de la señal digital ya filtrada. REF En la figura 2.3 se aprecia cómo se utilizan los filtros digitales para procesar señales analógicas con ayuda de conversores A/D (ADC) y conversores D/A (DAC). FIGURA 2.3: Proceso típico en DSP(Digital signal processing) Recordemos que nuestro objetivo principal es ser capaces de comparar dos señales de audio. En esta fase inicial usaremos un filtro digital para quedarnos con un rango de frecuencias útiles. Las frecuencias que podemos percibir los humanos se encuentran entre 200 Hz y 20000 Hz. Y específicamente la voz humana se encuentra en un rango aún más pequeño como vimos en la sección anterior y puede observarse en la figura 2.4. Los límites de la voz están entre 200-800 Hz y 3000-3500 Hz de frecuencia. Y serán valores como estos los que serán las frecuencias de corte en nuestro filtro. 2.2.3 Tipos de filtros digitales Veremos a los filtros digitales como funciones que reciben una secuencia de números o valores (la señal de entrada) y produce una nueva secuencia de valores (la señal de salida filtrada). Habrá varios tipos de filtros según el criterio que se escoja. Esta información nos ayudará a decidir qué filtros usaremos para nuestro propósito. 2.2. Filtrando el audio 9 FIGURA 2.4: Límites de audición humanos. [9] Según la respuesta en frecuencia Es decir, de acuerdo a la parte del espectro que dejan pasar y que atenúan. De esta forma los filtros se puede seleccionar qué frecuencias quieren alterar y cuáles bloquear. Según esto podemos diferenciar 4 tipos básicos: •Filtro paso bajo o corte alto. Deja pasar las frecuencias que están por debajo de una determinada frecuencia, por tanto, atenúa las frecuencia altas. •Filtro paso alto o corte bajo. Deja pasar las frecuencias que están por encima de una determinada frecuencia, por tanto, para las frecuencia bajas. •Filtro pasa banda. Es la combinación de un filtro paso bajo y uno paso alto, este filtro deja pasar las frecuencias que están en una determinada banda de frecuencia, es decir, entre dos frecuencias determinadas. •Filtro rechaza banda. También es combinación de un paso bajo y uno paso alto, pero este deja pasar la mayor parte de las frecuencias sin alterar y atenúa las de un rango especificado, es decir, bloquea las frecuencias de la banda determinada por dos frecuencias. Los dos primeros tipos se definen por su frecuencia de corte. Y los dos últimos tipos de filtros se definen por su frecuencia central y su ancho de banda. La frecuencia de corte es aquella se encuentra en el límite entre la banda pasante y la atenuada. Las frecuencias bien por encima o por debajo de ella se ven atenuadas por un factor de 1/√2(aproximadamente 0.707). Llamamos banda pasante (passband) al rango de frecuencias que no se verán afectadas por el filtro y simplemente pasarán. Mientras que la banda atenuada (stopband) son aquellas frecuencias que el filtro bloquea. Las transiciones entre la banda pasante y la banda de corte no son generalmente limpias en los filtros reales. Existe, por tanto, una banda de transición. Expresión general de un filtro y clasificación por respuesta al impulso Podemos ver la ecuación de un filtro en función del número de muestra (n): 10 Capítulo 2. Diseño e implementación y(n) = N X k=0 bk·x(n−k)− M X k=1 ak·y(n−k)(2.1) El filtro se ve definido por la elección de los coeficientes ayb. Y depende tanto de las muestras de entrada anteriores como de las muestras ya filtradas. El número de muestras anteriores que el filtro utiliza y mezcla con la nueva muestra de entrada nos da el orden del filtro. Si la salida y(n)solo se calcula con las muestras de entrada se dice que el filtro definido es no-recursivo. Por otro lado, un filtro recursivo es aquel que también utiliza los valores de salida calculados antes. Estos dos filtros también son conocidos como FIR (Respuesta finita al impulso oFinite Impulse Response) e IIR (Respuesta infinita al impulso o Infinite Impulse Response), respectivamente. Estos términos son la clasificación de los filtros según su respuesta al impulso. La respuesta al impulso de un filtro digital es la secuencia de salida cuando el filtro tiene como entrada la señal impulso o entrada unitaria, siendo un esta una muestra con el valor 1 seguida de más muestras pero con valor cero [16]. Filtros FIR Los filtros FIR cuando tienen como entrada la señal impulso producen como salida un número finito de términos. Para obtener las salidas y(n)se retrasa la señal de entrada hasta ese momento y se combina con la nueva señal de entrada x(n). Se trata de un combinación lineal y solo están implicadas señales de la entrada, tanto la presente como las pasadas. Si vemos la ecuación anterior 2.1, para los filtros FIR queda de la siguiente forma y[n] = b0·x[n] + b1·x[n−1] + b2·x[n−2] + ···+bN·x[n−N] Solo están presentes los coeficientes bique determinan el comportamiento del filtro. Se tienen N+ 1 coeficientes y Nes el orden filtro. De hecho, la respuesta del filtro FIR a la señal impulso x={1,0,0,0,0,0,0, . . .} es la señal y={b0, b1, b2, b3, . . . , bN,0,0,0, . . .} donde se pueden ver los coeficientes y la finitud. Filtros IIR Los filtros IIR producen una salida infinita, esto se produce por la recursión en su ecuación. Ya que tanto a como b son no nulos y la ecuación siempre es de la forma y[n] = b0·x[n] + b1·x[n−1] + b2·x[n−2] + ···+bN·x[n−N](2.2) −a1·y[n−1] −a2·y[n−2] −a3·y[n−3] −···−aM·y[n−M] Es decir, para la respuesta y[n]se tiene una combinación lineal de entradas hasta ese momento, la señal de entrada actual y señales de salida anteriores. Se tienen N+ 1 términos del coeficiente byMtérminos del coeficiente a. El orden de un filtro IIR es el máximo entre NyM. 2.2. Filtrando el audio 11 Se dice que se retroalimenta, por eso son también llamados recursivos o de feedback. Y por ese motivo se dice que su respuesta es teóricamente infinita, siempre habrá términos de salida que sirvan entrada en la fórmula. Pero en realidad, a términos prácticos, la respuesta de casi todos los filtros IIR se reduce a cero en tiempo finito. FIR vs IIR. Función de transferencia La función de transferencia de ambos filtros se calcula con el uso de la transformada Z sobre la respuesta al impulso. Lo que teníamos, una función cuyo dominio discreto es el tiempo, con la aplicación de esta transformación, ahora es una función con dominio la frecuencia y cuya variable es compleja. De esta manera, vemos la respuesta en impulso como respuesta en frecuencia. Esta forma de representar los filtros nos da información sobre los ceros y polos de la ecuación del filtro. H(z) = B(z) A(z)=b0+b1z−1+b2z−2+···+bNz−N 1 + a1z−1+a2z−2+···+aMz−M(2.3) Los filtros IIR y FIR se distinguen en los siguientes elementos: •Tiempo de cómputo. Mirando las ecuaciones 2.2 y2.3 parece que los filtros IIR o recursivos requieren realizar más cálculos ya que dependen tanto de términos de la señal de entrada como de términos ya calculados de la salida. Pero, en general, ocurre lo contrario. Para conseguir la respuesta según unas ciertas especificaciones, los filtros IIR necesitan un menor número de coeficientes que los filtros FIR. Es decir, el filtro IIR requiere un orden menor para conseguir las especificaciones, haciendo que el cómputo sea más rápido, la memoria requerida, el número de operaciones y el tiempo de cómputo es menor. •Estabilidad. Si vemos la función de transferencia de ambos filtros se ve que un filtro IIR puede tener polos y por tanto, inestabilidad, mientras que un FIR sólo tiene ceros, y por eso, siempre es estable y no entra en oscilación •Respuesta de fase lineal. La fase es la relación que se hay entre un punto de la señal de entrada y su imagen por el filtro. La fase es así una función que idealmente es lineal. Pero esta linealidad solo se consigue realmente con los filtros FIR. La respuesta de fase de los filtros IIR no es lineal, sobre todo cerca a la banda de transición, pero se pueden hacer buenas aproximaciones. Además, si estas bandas de transición son muy cortas, es decir se hacen cortes muy abruptos, los FIR pueden requerir un gran número de retardos. Mientras que los IIR pueden ofrecer cortes muy marcados. Estas son las diferencias más notables, pero con la tecnología actual la diferencia entre los dos tipos es poco perceptible. Los filtros que usaremos Sabemos que los filtros pasa banda se pueden construir a partir de los filtros paso bajo. Lo que queremos es desechar las frecuencias que se salen del rango especificado y por eso usaremos un pasa banda. Habrá cortes que atenúen frecuencias muy bajas y muy altas. El filtro lowpass que usaremos como base para el bandpass debe intentar hacer un corte limpio. Este filtro electrónico ideal del que hablamos es el llamado filtro brick-wall, el cual deja pasar por completo la banda de paso y atenúa 12 Capítulo 2. Diseño e implementación el resto con una transición muy abrupta. El nombre se debe a la forma que tiene su función de transferencia: constante hasta que se llega a la frecuencia de corte donde la intensidad de la señal tiende a menos infinito casi de inmediato. FIGURA 2.5: Diagramas de Bode a partir de la función de transferencia de los filtros Bessel, Butterworth, Chebyshev y elíptico Los filtros electrónicos cuyo comportamiento más se asemejan a este filtro ideal son Butterworth, Chebyshev I, Chebyshev II, elíptico y Bessel, podemos ver su diagrama de Bode en al figura 2.5. Estos son la versión digital de sus homónimos analógicos. Casi todos los filtros analógicos son IIR, sin embargo los filtros digitales pueden ser FIR o IIR. Recordamos que la presencia de la retroalimentación en el filtro hace que este sea IIR. Entre las opciones que tenemos elegimos usar el filtro Butterworth, que va a preservar la parte de la señal que queremos. 2.2.4 IMPLEMENTACIÓN Programar un filtro conlleva dos pasos. Primero, teniendo claro que nuestro filtro digital es IIR, sabemos que debemos conseguir los coeficiente aybque definirán a nuestro filtro. Y segundo, una vez tenemos los coeficientes podemos aplicarlos a cualquier entrada que le demos a nuestro filtro y obtendremos la señal filtrada. Para obtener los coeficientes que definen al filtro lo que hicimos fue documentarnos sobre cómo lo implementan en bibliotecas de lenguajes como Python y Matlab. Al principio se intentó aprovechar que Python tiene métodos específicos para el filtrado de señales pero como en esos momentos se intentaba hacer una aplicación android en Android Studio, trabajar desde ese entorno con Python no resultó muy fructuoso. Se estudiaron Jython [17] y SL4A (Script Layer for Android) [18] como posibles puentes. Pero resultaron un poco complicados para alguien que no tiene experiencia en Android. Como la final se optó por una aplicación Java se implementó el cálculo de los coeficientes y el filtrado en una clase de Java. 2.3. Transformación 13 Para calcular ambos coeficientes se necesita usar números complejos así que se añadió la biblioteca commons-math3-3.6.1 y se utilizó en concreto la clase org.apache.commons.math3.complex.Complex. Por otro lado, ambos coeficientes dependen tanto de la frecuencia de muestreo fs, las frecuencias de corte y del orden del filtro. Estos datos serán parámetros que se especifican al crear el filtro. Cuando le pasemos estos parámetros a nuestro constructor del filtro, hay que hacer un pequeño preprocesamiento. Lo que se quiere es tener en cuenta el Teorema de muestreo de Nyquist-Shannon y hacer que los cortes estén entre 0 y 1. Lo que haremos es usar la mitad de fscomo el máximo de las frecuencias captadas fm según el teorema mencionado y después calcular las razones de los cortes, es decir la frecuencia de corte dividido entre fm. El orden del filtro condicionará el número de términos que tendrán ayb. Para conseguir un filtro Butterworth se realizan una serie de operaciones que pueden ser consultadas en el código fuente de ese método en Pyhton [19] , obtendremos 2∗N+1 términos para aybsiendo Nel orden del filtro. Una vez que tenemos los coeficientes calculados ya podemos aplicar la ecuación 2.1 para conseguir la salida y. De esta manera obtenemos nuestra señal filtrada. 2.3 Transformación En este momento del proceso tenemos la señal digitalizada y filtrada con los rangos de frecuencia elegidos. Queda usar la transformación de Fourier para construir el espectrograma y trabajar con él. Veamos en qué consiste esa transformación. La señal digital con la que estamos trabajando se encuentra todavía en el dominio del tiempo, un ejemplo en la figura 2.6. Tenemos las intensidades representadas con 16 bits a lo largo del tiempo, lo que nos da el rango de valores de -32768 a +32767. Lo que queremos es cambiar el dominio de tiempo a frecuencia. FIGURA 2.6: Intensidad de la onda a través del tiempo. Para este análisis de frecuencias utilizaremos la Transformada de Fourier. La transformada de Fourier convierte una señal continua en el tiempo en su espectro de frecuencias, descomponiendo la señal en distintas frecuencias. La transformada de Fourier de una función en el tiempo es una función compleja con dominio la frecuencia, donde los módulos de sus valores complejos representan la cantidad de las frecuencias presentes en la función inicial; y los argumentos representan la fase en una sinusoide básica en esa frecuencia. La transformada de Fourier 14 Capítulo 2. Diseño e implementación es reversible, siempre se puede hacer el cambio de un dominio a otro. ¿Qué frecuencias son las detectadas por la transformada de Fourier? La señal contiene muchas frecuencias que pueden ser detectadas. Si queremos detectar una frecuencia fparticular debemos tener en cuenta la frecuencia de muestreo fsde nuestra señal. Recordamos que el teorema de Shannon nos dice que dada una señal, esta no puede contener frecuencias por encima de la mitad de su frecuencia de muestreo. Es decir, si fes una frecuencia contenida en la señal entonces −fs/2≤f≤fs/2. Si por el contrario fs≤2f, esto es, la frecuencia elegida es muy alta, se dará lo que llamamos aliasing. Por lo que la frecuencia detectable más alta es justo la mitad de la frecuencia de muestreo fsy se la llama frecuencia de Nyquist o de doblado (fs/2) [11]. De esta forma, una señal muestreada con frecuencia de muestreo fs, por el teorema de Shannon, los componentes de su espectro que pueden ser extraídos para frecuencias fque cumplen |f| ≤ fs/2. Nuestra señal no es continua, es discreta, por lo que utilizaremos la Transformada de Fourier Discreta (DFT), que requiere que la entrada sea discreta y de duración finita. Como resultado obtendremos una secuencia con la misma longitud que es una función de la frecuencia con valores complejos. La DFT recibe como entrada una secuencia de muestras equiespaciadas como la que tenemos. Para nuestra señal discreta con frecuencia de muestreo fs, la DFT nos devuelve una secuencia con la misma longitud, donde sus componentes también están equiespaciados para las distintas frecuencias detectadas. Si la señal está compuesta por nmuestras, los valores de la transformada estarán separados por ∆f=fs/n Hz. A este valor se le llama resolución espectral o de frecuencia es la mínima frecuencia detectada [?]. Siempre puede ser menor si reducimos la frecuencia de muestreo fso trabajamos con una señal más duradera en el tiempo. La Transformada de Fourier Discreta (DFT) se puede calcular de manera eficiente con el algoritmo FFT (Fast Fourier Transform). Este algoritmo fue publicado en 1965 por J. Cooley y J. Tuckey [20] y tiene diversas aplicaciones con señales. Esta técnica hace que el algoritmo consiga una complejidad de O(nlog n)cuando aplicando la definición se tiene una complejidad de O(n2), donde nes el tamaño de la entrada. El algoritmo FFT puede ser aplicado a secuencias con longitud que no sea potencia de 2. Pero el algoritmo más usado es aquel en el que divide la transformada en 2 con la mitad de tamaño en cada paso y por lo tanto solo acepta como entrada secuencias de longitud potencia de 2. Veremos que cuando apliquemos el algoritmo esta no será una limitación muy grande. Como hemos visto, la secuencia de números complejos que nos da el FFT tendrá una longitud igual a la de nuestra señal discreta con dominio en el tiempo, mientras que las frecuencias detectadas irán desde −fs/2afs/2. La segunda mitad de sus componentes corresponde a las frecuencias negativas y contiene los conjugados complejos de la primera mitad positiva de frecuencias, por lo que no añade nueva información. De hecho, la secuencia de longitud nconstruida por el FFT está formado por un primer elemento que es la amplitud de la señal para la frecuencia f= 0, seguido de n/2elementos para las frecuencias fs/n, 2fs/n, . . . , (n/2)fs/n =fs/2 2.3. Transformación 15 siendo esta última frecuencia la resolución espectral, el elemento para esta frecuencia tiene parte imaginaria nula por lo que coincide con el elemento para la frecuencia −fs/2. Los últimos n/2−1elementos se corresponden con las frecuencias negativas ordenadas de menor a mayor: (n/2−1)fs/n, . . . , −2fs/n, −fs/n Si suponemos que nuestra frecuencia de muestreo fses 44.1 kHz y el número de muestras igual a la longitud de la secuencia FFT es n= 1024, entonces las frecuencias para las que se calcula la amplitud en la señal serán: 0:0∗44100/1024 = 0.0Hz 1:1∗44100/1024 = 43.1Hz 2:2∗44100/1024 = 86.1Hz 3:3∗44100/1024 = 129.2Hz . . . 511 : 511 ∗44100/1024 = 22006.9Hz Cabe resaltar que las frecuencias útiles son, en efecto, las n/2primeras. La última amplitud útil para aplicaciones prácticas es la asignada a la frecuencia (n/2−1)- ésima, 22006.9 Hz en nuestro ejemplo. La magnitud para la frecuencia n/2∗fs/n o frecuencia de Nyquist, 22050 Hz en el ejemplo, no es usada generalmente. Ya que, en casos prácticos, para evitar el aliasing no se utilizan las señales a frecuencia fs/2y superiores. Sin embargo, si aplicamos DFT con el algoritmo FFT a toda nuestra señal, nos encontramos que perdemos toda la información con respecto al tiempo, sabemos la magnitud de la señal con respecto a la frecuencia pero no sabemos en qué momento se están dando esas magnitudes, por lo que para calcular la magnitud haremos uso de una ventana deslizante, esto es, dividir la señal total en partes o chunks formados por un número fijo de muestras. Y aplicar la transformada de Fourier discreta a cada una, así sabremos las magnitudes por frecuencia en cada chunk. El tamaño de estos chunks será de alguna potencia de 2 (256, 512 o 1024 muestras equivalente a 512,1024 o 2048 bytes) que es la longitud que debe tener el input del FFT. De esta forma obtenemos el espectrograma que es una representación visual de tres dimensiones de la señal de audio, podemos ver un ejemplo en la figura 2.7. En un espectrograma se puede observar en el eje vertical las frecuencias, en el eje horizontal el tiempo (los chunks) y en cada punto la magnitud de la intensidad de la señal en ese tiempo y esa frecuencia. De esta forma, una línea horizontal representa un tono puro, es decir una señal con una sola frecuencia y una línea vertical significa una ráfaga de ruido blanco, es decir, una señal que tiene la misma intensidad en frecuencias distintas. El objetivo de utilizar el espectrograma es conseguir una representación gráfica del audio. Esta es la representación de la que partimos para comparar posteriormente dos señales de audio. 22 Capítulo 2. Diseño e implementación las dimensiones del blob b:xmin,xmax,ymin yymax se actualizan. Después se examinan los píxeles vecinos para ver si ellos también son parte de b, para ello se hace una llamada recursiva: se examina de la misma forma a los vecinos del píxel actual y se examina a los vecinos de estos últimos. Cada vez que se explora un nuevo píxel se marca como visitado. Al final tenemos definidos varios blobs dado un umbral definido. Nosotros ejecutamos este proceso para todos los umbrales definidos en la etapa de thresholding. Por lo que para cada nivel, tenemos un conjunto de blobs detectados. Por la naturaleza de los espectrogramas, no tenemos regiones detectadas que sean grandes o significativas por sí solas. Por lo que nos quedaremos con los xmin,xmax, ymin yymax de todos los blobs detectados en cada nivel. Esta es la información que nos será útil en el siguiente paso. 2.5 Comparación Esta es la última etapa de nuestra aplicación y de nuestro recorrido. A partir del procesamiento que ha pasado la señal de voz del inicio vamos a obtener una matriz. De esta forma la comparación de voces se ha reducido a comparar matrices. Los valores del espectrograma serán la base para la matriz que represente la pronunciación grabada. Para cada valor que toma el umbral en la detección de blobs, se formará una matriz que será el espectrograma que hemos contruido pero recortada según lo que valgan las variables xmin,xmax,ymin yymax. Para ellos hemos construido los métodos recortarX yrecortarY que recortan la matriz. Esto significa que dado un umbral, podemos obtener matrices de distintas dimensiones para cada archivo de audio que se usará en la comparación. Pero vamos a querer que, si dos matrices se van a comparar, sean de dimensiones iguales. Esto lo conseguiremos gracias a la interpolación lineal. En nuestro proyecto Java una matriz está formada por un array con los elementos de la matriz y dos enteros: alto (número de filas) y ancho (el número de columnas), ya que nuestras matrices son de dos dimensiones (como los espectrogramas y las imágenes). Para igualar las dimensiones de dos matrices, hallamos la mayor altura y la mayor anchura, y posteriormente interpolamos ambas matrices haciendo que su alto y ancho coincidan con los máximos calculados. Una vez tenemos dos matrices que comparten dimensiones, podemos pasar a los métodos de comparación de matrices. En primer lugar, mediremos la similitud entre las matrices con la similitud del coseno. Esta medida sirve para determinar la similitud entre vectores no nulos, nos da el valor del coseno del ángulo entre los vectores independientemente de la magnitud de los vectores. La similitud de dos vectores AyBviene dada por cos (θ) = A·B kAkkBk Analicemos, lo que esto significa, el coseno del ángulo entre AyBvaría entre -1 y 1, si este es positivo los vectores forman un ángulo agudo, si es 0 son perpendiculares y si es negativo forman un ángulo obtuso. Teniendo que si vale 1, tienen la misma dirección y si vale -1, son opuestos. 2.5. Comparación 23 Para nuestros cálculos, consideraremos a la matriz como un solo vector de alto*ancho elementos. Según hemos construido el espectrograma, solo tenemos elementos positivos, por lo que el rango del coseno del ángulo se reduce a ser de 0 a 1, y el ángulo varía de 0 a π/2. Lo cual nos permite decir que la distancia y la similitud entre Ay Bson: distancia =cos−1(similitudCoseno) π/2 similitud = 1 −distancia El resto de métodos estarán basados en el cálculo de distancias entre matrices. Extraeremos una matriz de la otra y mediremos la diferencia con las correspondientes normas de matrices. Las normas aplicadas serán: •Norma infinito, que es simplemente la máxima suma absoluta de las columnas de la matriz. kAk1= max 1≤j≤n m X i=1 |aij| •Norma 1, que es simplemente la máxima suma absoluta de las filas de la matriz. kAk∞= max 1≤i≤m n X j=1 |aij| •Norma Frobenius, que es equivalente a la norma 2 en vectores de una dimensión. kAkF=v u u t m X i=1 n X j=1 |aij|2 Lo siguiente será hacer pruebas y valorar los resultados. Probaremos 3 frases de distintos idiomas: •Japonés: Itadakimasu (gracias por la comida; comamos) •Coreano: bogo sip-eoyo, eodiyeyo? (te echo de menos, ¿dónde estás?; quiero verte, ¿dónde estás?) •Español: Ellos vinieron a casa mientras estabas fuera. 24 Capítulo 2. Diseño e implementación Tendremos una muestra maestra para cada frase y 3 intentos de una persona pronunciando la frase, ver figuras 2.12,2.13,y2.14. FIGURA 2.12: Audio máster y 3 de prueba en japonés FIGURA 2.13: Audio máster y 3 de prueba en coreano Veamos los resultados obtenidos si comparamos cada frase con los 9 intentos guardados. Primero explicaremos el formato de los resultados que hemos adjuntado en la memoria en el apéndice A. Para cada comparación guardamos la similitud, la distancia infinito, la distancia uno y la distancia Frobenius para cada umbral. El umbral define el grado de similitud de color entre los píxeles que se pide, mientras más alto el umbral es más estricta la formación de blobs. Estamos trabajando con 12 umbrales o niveles: 2.5. Comparación 25 FIGURA 2.14: Audio máster y 3 de prueba en español •25.0% •31.25% •37.5% •43.75% •50.0% •56.25% •62.5% •68.75% •75.0% •81.25% •87.5% •93.75% Para la similitud del coseno, mientras el valor sea más cercano a 1, más parecidas serán las muestras de audio. Como tomamos la similitud para varios niveles, hemos calculado la media de los 12 valores. Para las distancias, por el contrario, mientras más se acerquen a cero, más similares serán los audios. En este caso, comparamos los resultados de los intentos para ver cuál ha tenido más éxito. Una forma de verlo, es ver cuál de los intentos ha obtenido más mínimos comparando con los demás.Veamos casos más concretos. Cuando comparamos el máster de japonés con sus 3 intentos, según la similitud del coseno el tercer intento es el más similar. Si miramos la distancia infinito, los valores del tercer audio son menores que el resto, esto también significa que el tercer intento ha tenido un mejor resultado para esta distancia. Además la distancia 1 y la de Frobenius están de acuerdo con esta decisión. 26 Capítulo 2. Diseño e implementación ¿Qué pasa si hablamos en otro idioma cuando el programa espera esta frase en japonés? La similitud del coseno, nos da resultados que no muestran mucha diferencia comparados con el caso japonés-japonés. Sin embargo, las tres distancias muestran, en su mayoría, valores superiores a la comparación con la misma frase, lo que se traduce a más diferentes. Por tanto, más similitud conseguida para las mismas frases gracias a las distancias. La excepción ha sido el tercer intento de coreano, que muestra resultados de ser muy similar. si observamos sus muestras, podemos ver que efectivamente, son muy parecidas. Otra de las pruebas es con coreano. Primero se comparan los 3 intentos de decir la frase elegida y luego otros idiomas con frases distintas. En este caso, los valores más altos en la similitud del coseno dan la mejor similitud, por poco, a la comparación coreano-coreano. La distancia 1 deja claro que la frase en español es muy distinta a la coreana pero la japonesa no tanto; los resultados son muy similares. Frobenius sí que nos ayuda a confirmar que las frases en coreano son las más parecida, las diferencia con el resto de frases es significativa. Para el español hemos guardado, en los intentos 2 y 3, versiones natural e intencionadamente distorsionadas de la frase. Para las cuatro comparaciones, se muestras mejores resultados, como esperábamos, del intento 1. 27 Capítulo 3 Conclusiones En la actualidad, en el campo de verificación de la pronunciación, hay poco software abierto. Casi todo el software que un usuario puede usar con esta funcionalidad es privado. La mayoría de estos software ofrecen una subscripción para el uso de su producto que suele ser una aplicación de aprendizaje de idiomas bastante completo, incluyendo muchas otras actividades además del refuerzo en la pronunciación. Algunas de estas aplicaciones son: •Duolingo [25]. •Rosetta Stone y su tecnologia TruAccent [26]. Esta empresa compró Tellmemore de Auralog [27]. •Mango [28]. •Saundz [29]. •saundz [30]. •Babbel [31]. En este proyecto hemos visto el paso a paso del procesamiento del habla, cómo se captura la voz, las configuraciones necesarias según las aplicaciones que se le quieran dar. Cómo es suficiente solo un canal y cuál debe ser la frecuencia de muestreo necesaria para capturar la voz. Hemos visto que hay distintos filtros para las señales digitales, que nosotros necesitamos un filtro paso banda y el filtro Butterworth es una buena opción porque conserva las distintas intensidades de la onda. Hemos visto qué frecuencias del resultado de la transformada de Fourier son las necesarias para la creación del espectrograma, las frecuencias positivas. Y aprendimos que la detección de blobs en imágenes se puede hacer buscando lo que es más similar a una referencia o buscando los contrastes en toda la imagen haciendo que los blobs se formen solos a partir de la creación de bordes. En contraste con el guión [2]: •La sustracción del sonido de fondo del modo que se describe no muestra buenos resultados. •La comparación de matrices deja no es muy precisa si se trata de distintas frases comparadas. •Al tratarse de espectrogramas de frases de palabras, elegir el blob más grande no es buena opción, ya que se pierde mucha información. Optamos por eso elegir la unión de los blobs. 28 Capítulo 3. Conclusiones También investigamos si aplicaciones de reconocimiento de música nos podrían ser útiles, como Shazam [32], que lo que hace es buscar una canción, dada una muestra, en una base de datos con millones de canciones. El proceso en este caso es muy parecido al nuestro: construye un espectrograma y luego aplica una extracción de características diferente, al final consigue un código con los features importantes de la canción y lo guarda en una tabla clave-valor [33]. Esto nos demuestra que una versión de la aproximación he hemos tomado es usada en una de las aplicaciones más conocidas a nivel mundial. El trabajo, al estar escrito en Java, puede ser utilizado en una gran diversidad de sistemas operativos y hardware. El proyecto ha llevado a cabo las etapas individuales exitosamente pero al final de todo el recorrido es indiscutible ver que aún faltan cosas por pulir y hacerlas más a la medida de los datos, es decir, adaptarnos aún más a su naturaleza, por ejemplo, lo espectrogramas que tratamos con visión artificial no son imágenes que el ojo humano está acostumbrado a ver y con las que esta área de investigación trabaja, por lo que la detección del feature principal de la imagen se podría practicar otros métodos de extracción de features [34] o otra implementación del detector de blobs. 3.1 Dificultades encontradas Como hemos mencionado anteriormente, nos topamos con muchos muros difíciles de enfrentar. Muchos de ellos los superamos tomando caminos alternativos. El primer problema fue lo ambicioso del proyecto, el tiempo necesario para terminar un proyecto de estas características supera el tiempo el de un TFG y por tanto no pudo llevarse a cabo. Hay muchos caminos que nos habría gustado explorar más y llevar a cabo más pruebas. Al principio del proyecto, se quería implementar una aplicación Android preparada para la interacción con el usuario. Con imágenes a tiempo real y más utilidades complementarias. Pero al tratarse de sola una persona con el tiempo limitado, y las dificultades que surgían para adaptar el guión [2] a una aplicación Android, se decidió implementar solo el procesamiento de voz y preparar el software de tal manera que se pudiera utilizar en cualquier plataforma y ser utilizado dentro de otras aplicaciones. Más en concreto, una de las dificultades encontradas fue al principio, en la fase de investigación para empezar el desarrollo. Al ser tratamiento de señal de voz, lo que más se encuentra buscando sobre este tema son soluciones Python o Matlab. Se estudiaron Jython [17] y SL4A (Script Layer for Android) [18] como posibles enlaces pero el paso de datos de un lenguaje a otro lo complicaba innecesariamente. Más adelante surgió la pregunta de cómo enfrentarse al resultado que daba el detector de blobs y el entendimiento del código fuente que usamos. Al final, se solucionó como demostramos en el capítulo 2. 3.2 Trabajo futuro Este trabajo, al tratarse de una posible vía de muchas para implementar el procesamiento y la comparación de pronunciaciones, el software tiene mucha cabida para 3.2. Trabajo futuro 29 su mejora. Inspirándonos en los programas que existen en la actualidad y en la experiencia y toma de decisiones hecha durante el desarrollo de la aplicación, aquí tenemos algunas posibles extensiones o mejoras: •Representación de la señal de onda y del espectrograma en tiempo real para comparar los sonidos cuando se haya optado por una interfaz de usuario. •Comparar con varias muestras hechas por nativos en cada comparación y no solo con una. •Estudiar el caso de pasar un reconocimiento de voz para verificar las palabras usadas además de comparar la entonación. •Estudiar la comparación de señales de voz por correlación. 31 Apéndice A Resultados de la pruebas Incluimos el resultado de las pruebas. Estos han sido analizados y podemos ver su interpretación al final del capítulo 2. korean Página 7 kor0-esp2 or0-esp3 or0-esp4 cosine similarity 0,774960232 0,76117031 0,76985079 0,782369647 0,777490153 0,776887349 0,779910401 0,774505802 0,776447218 0,771754074 0,767556681 0,766599311 0,772076071 0,771498785 0,767174358 0,794893252 0,790880338 0,789013591 0,794851545 0,78688292 0,793678412 0,796835383 0,784595078 0,796391021 0,792771152 0,784342322 0,794322792 0,799700193 0,81720137 0,801820231 0,805596486 0,813516378 0,810711574 0,823461078 0,836867972 0,830589713 0,796745111 0,79076496 0,788875676 0,789457196 0,79076496 dist inf 113,4484197 135,043392 87,95414742 150,3768599 87,95414742 110,4342861 123,3408974 122,3933847 142,5153617 122,3933847 99,63481765 111,5030152 106,5354196 128,6471703 106,5354196 132,3637724 134,285415 142,5128444 159,47866 134,285415 115,8717825 134,2071439 142,0004545 158,3258405 134,2071439 104,5282301 94,18993476 99,10945156 115,7976064 94,18993476 63,98904112 96,78041628 112,5582454 101,127204 96,78041628 63,43039586 80,86739861 79,99843747 96,9647379 79,99843747 64,86366646 75,22456247 80,14110972 83,20552423 75,22456247 62,2342437 47,08126844 41,71376256 74,13949582 41,71376256 30,99271674 29,62427945 34,02714398 36,62869039 29,62427945 5,646428652 7,183759232 7,056933011 6,101297469 6,101297469 Dist 1 24,4703707 36,9919981 35,97837255 49,45132125 35,97837255 24,30829814 39,13518658 37,85060077 44,90709526 37,85060077 22,20779791 37,52219777 37,24544087 47,47676055 37,24544087 22,82391557 38,63509897 40,69028344 49,86295711 38,63509897 23,81765547 37,09589877 37,96046413 50,21712601 37,09589877 24,65142039 41,76961083 47,18892672 55,34531513 41,76961083 20,19668854 42,29722111 41,38991468 54,8988134 41,38991468 21,31150689 31,4080424 36,08658069 35,44793508 31,4080424 17,91725772 29,46574111 28,35022847 40,94285809 28,35022847 19,68295783 28,14023964 29,65641803 42,03720581 28,14023964 19,5117203 30,38418283 31,90015937 34,34946315 30,38418283 15,28382039 26,38379901 23,27627389 37,35716692 23,27627389 dist Frobenius 33,67679425 57,06255646 47,80771328 62,95161451 47,80771328 38,77430418 54,29138488 55,16147898 60,00154999 54,29138488 30,37953386 51,01763199 52,33534737 56,22816645 51,01763199 37,06500167 59,02510481 59,7323329 65,14798638 59,02510481 39,17016204 58,98322212 59,03369704 65,04667488 58,98322212 37,04933979 46,45664919 49,31404416 52,88295463 46,45664919 29,14235009 46,2923597 47,07641981 50,61182585 46,2923597 korean Página 8 26,89212085 40,39285939 43,30797396 47,71439898 40,39285939 26,36900379 38,20016933 41,06004015 43,94564126 38,20016933 25,6943739 30,49755717 27,92595515 40,50002272 27,92595515 17,19254424 24,86012604 27,34891042 28,85657225 24,86012604 8,109179688 10,33233615 9,444946494 11,15558875 9,444946494 spanish Página 9 esp1-esp2 esp1-esp3 esp1-esp4 esp1-jap1 esp1-jap2 cosine similarity cosine similarity 0,822641475 0,801569899 0,822860709 0,781321483 0,774080052 0,801345552 0,792812393 0,799840004 0,787230543 0,791345307 0,816260667 0,808916203 0,811771963 0,78458393 0,77568375 0,802338634 0,797650732 0,800184779 0,784126667 0,773737997 0,801979449 0,797228098 0,8005974 0,779461515 0,787041353 0,820382565 0,799319971 0,799742282 0,784073929 0,788503415 0,80457146 0,823290359 0,801801904 0,790191026 0,773925329 0,829350765 0,817059418 0,79945312 0,793637814 0,771901643 0,82710804 0,831499386 0,803517418 0,797110116 0,77339283 0,839437056 0,827693603 0,815149852 0,812050708 0,812172636 0,852089683 0,822165042 0,828660001 0,799046339 0,816522657 0,848806155 0,829294421 0,839154673 0,809422287 0,815580746 0,822192625 0,812374961 0,810227842 0,822192625 0,791854697 0,787823976 dist inf dist inf 145,3418793 123,5937754 173,2274316 123,5937754 263,1608237 132,022834 142,2499721 141,9169067 176,7382848 141,9169067 241,7672547 138,2417511 163,1937888 152,0126961 189,7437868 152,0126961 276,0518859 139,2793049 129,213706 156,8182661 131,77201 129,213706 238,5765212 123,0992488 132,9590804 155,1784986 132,5220781 132,5220781 227,9255317 134,2871179 113,2257607 119,9029829 122,4172356 113,2257607 239,4118433 135,3873937 129,2442222 125,1621248 119,9867766 119,9867766 225,6244679 114,1699763 99,44856329 112,5299697 109,0171794 99,44856329 228,0826233 114,8094424 92,24114633 85,93142372 111,8779484 85,93142372 220,5952136 101,3271754 59,46214476 79,53435156 79,24785634 59,46214476 119,1824726 72,76059161 32,2439948 61,0316864 35,48315745 32,2439948 59,60874704 37,02517284 8,049137835 7,635113004 8,062826905 7,635113004 8,873604182 7,390077977 Dist 1 Dist 1 27,91345407 39,8935788 37,06597076 27,91345407 34,4522941 38,1331934 35,95554925 35,14048796 38,62041082 35,14048796 38,5419762 39,37950724 32,67043826 32,53894676 49,8212631 32,53894676 37,40231527 42,95972073 32,67686451 33,57056402 41,49523117 32,67686451 35,17230361 40,16860306 33,01430425 35,56417314 41,3924425 33,01430425 37,89102007 42,63651074 26,49196054 31,25718393 38,48287548 26,49196054 40,7196699 38,43733605 28,94450072 25,32806408 43,23971213 25,32806408 35,52584949 41,39658914 26,6354045 29,84330974 38,89012208 26,6354045 36,05628505 39,4347472 25,70091092 31,55497779 44,60871187 25,70091092 39,96593783 37,64665043 27,96195931 35,67324331 34,70753059 27,96195931 33,35869168 26,74196138 21,77456391 35,25759538 30,28681706 21,77456391 33,1393798 36,46906785 23,14784812 29,81966125 34,23982009 23,14784812 27,75939548 35,85205015 dist Frobenius dist Frobenius 44,99875692 45,62033905 48,68426358 44,99875692 48,40226264 48,93994178 48,94629234 50,66934779 53,05666877 48,94629234 47,76001292 47,15803011 49,71565386 51,03513758 54,32241015 49,71565386 48,8927066 48,66991982 48,65775488 49,51608829 53,00275786 48,65775488 45,14491493 46,74141043 48,69979725 49,49610353 52,85917603 48,69979725 45,70437154 47,27011327 42,80488775 47,49103461 50,52335447 42,80488775 47,87545758 47,25902125 44,28826582 41,08432403 48,84332668 41,08432403 43,57973388 44,36098749 spanish Página 10 38,73968424 42,72780788 47,06089456 38,73968424 42,45896015 42,32160264 35,29032118 38,10636441 41,89986834 35,29032118 42,06776195 37,95332185 29,61322975 37,04849188 37,84784534 29,61322975 31,76677481 29,1440011 20,80302327 29,61351557 26,13790434 20,80302327 24,20327855 24,84268516 9,493903603 10,89481912 10,83131644 9,493903603 11,17713736 10,79648194 spanish Página 11 esp1-jap3 esp1-kor1 esp1-kor2 esp1-kor3 cosine similarity cosine similarity 0,789612692 0,814587017 0,769259761 0,816398027 0,808359529 0,802173289 0,788402398 0,833420296 0,797443486 0,805561026 0,774553442 0,829204232 0,803651453 0,789356352 0,791812291 0,827621342 0,806406525 0,788749209 0,772397487 0,831957851 0,805857183 0,789566232 0,776743751 0,83297196 0,799129526 0,796576994 0,761232299 0,830756177 0,802595957 0,800609293 0,769048757 0,830691502 0,815673012 0,821946185 0,796119034 0,83590469 0,808791897 0,820259809 0,783203479 0,847121446 0,815427657 0,819308783 0,791561512 0,854018528 0,84839896 0,831588004 0,796322909 0,852990592 0,808445656 0,808445656 0,806690183 0,780888093 0,83525472 0,83525472 dist inf 110,6261204 110,6261204 153,2847558 152,9496932 162,7464372 152,9496932 98,23237209 98,23237209 128,699921 174,7037004 143,9830021 128,699921 108,3172791 108,3172791 153,7655243 152,0061641 138,0032114 138,0032114 106,4326582 106,4326582 154,0678393 156,4274838 124,7495009 124,7495009 95,50206297 95,50206297 150,035166 140,1650959 140,9685662 140,1650959 102,703549 102,703549 138,0620666 115,3335786 127,8006815 115,3335786 98,16480728 98,16480728 145,9829584 130,729052 123,6478853 123,6478853 83,2852176 83,2852176 136,8926287 123,8561776 105,6694147 105,6694147 63,45193137 63,45193137 86,67057069 71,0762207 108,5219707 71,0762207 74,70550525 72,76059161 84,11826006 84,29567125 75,07945451 75,07945451 52,18277092 37,02517284 47,39295879 44,80214986 44,63144604 44,63144604 7,460970744 7,390077977 6,698070048 7,53323756 6,332681695 6,332681695 Dist 1 40,13377298 34,4522941 29,91386291 35,27650175 40,34929974 29,91386291 37,96085797 37,96085797 32,21586448 38,05398751 33,45887576 32,21586448 35,84592225 35,84592225 30,04733308 30,78457107 30,69753556 30,04733308 33,04898594 33,04898594 37,32750587 34,77723306 32,79682412 32,79682412 39,12086111 37,89102007 36,35701229 33,82475057 31,60804338 31,60804338 35,67081749 35,67081749 34,65938594 32,0156622 31,68767604 31,68767604 33,78114496 33,78114496 28,10200936 40,6188498 30,61952881 28,10200936 30,70594353 30,70594353 26,6162232 34,67860775 26,46591666 26,46591666 32,81584203 32,81584203 30,17425669 32,64913834 29,05858326 29,05858326 33,62377437 26,74196138 26,92928576 40,69917736 37,00809659 26,92928576 43,25744013 33,1393798 36,40636008 37,4416361 34,25604344 34,25604344 34,03289886 27,75939548 28,63430026 29,98428419 27,09911416 27,09911416 dist Frobenius dist Frobenius 49,40471169 48,40226264 42,5208845 49,11080152 57,39820372 42,5208845 44,3930431 44,3930431 42,03275167 51,12236196 44,08464987 42,03275167 48,20007353 48,20007353 44,49445688 48,62002687 48,0796948 44,49445688 43,84372865 43,84372865 50,16954234 47,46445689 46,18189956 46,18189956 42,86446887 42,86446887 49,51658117 46,49835729 45,41719078 45,41719078 45,48749338 45,48749338 47,24462551 45,10968048 43,38672222 43,38672222 42,3633879 42,3633879 41,52395393 46,61276608 41,89174574 41,52395393 spanish Página 12 38,48079104 38,48079104 39,07902694 42,74110228 39,53907409 39,07902694 32,05178539 32,05178539 33,46673689 34,59697172 37,33967091 33,46673689 31,95884226 29,1440011 31,32099157 44,43523674 32,3554433 31,32099157 32,76137116 24,20327855 28,99165784 31,54390859 25,18367613 25,18367613 11,15767669 10,79648194 10,13326335 11,64252492 10,58601881 10,13326335 45 Bibliografía [1] Repositorio del projecto https://github.com/Aryalexa/LearnLanguage [2] Algorithm - How to detect how similar a speech recording is to another speech recording, https://stackoverflow.com/questions/17010516/ how-to-detect-how-similar-a-speech-recording-is-to-another-speech-recording [3] Muestro digital, https://es.wikipedia.org/wiki/Muestreo_digital [4] Cuantificación, https://es.wikipedia.org/wiki/Cuantificación_ digital [5] Pulse-code modulation (PCM) https://en.wikipedia.org/wiki/ Pulse-code_modulation [6] Señal de voz, https://es.wikipedia.org/wiki/Se~nal_de_voz [7] Voice Acoustics: an introduction, http://newt.phys.unsw.edu.au/jw/ voice.html [8] Umbrales de la audición, http://www.eumus.edu.uy/docentes/ maggiolo/acuapu/umb.html [9] Límites de audición, https://sites.google.com/ site/lasondasyelsonido/ontaminacion-acustica/ limites-de-audicion [10] Record, play and visualize raw audio data in Android, https://www.newventuresoftware.com/blog/ record-play-and-visualize-raw-audio-data-in-android [11] Teorema de muestreo, https://es.wikipedia.org/wiki/Teorema_de_ muestreo_de_Nyquist-Shannon [12] WAVE PCM soundfile format, http://soundfile.sapp.org/doc/ WaveFormat/ [13] Audacity http://www.audacityteam.org/ [14] Filtro electrónico, https://es.wikipedia.org/wiki/Filtro_ electrónico [15] Filtro digital, https://es.wikipedia.org/wiki/Filtro_digital [16] Respuesta al impulso, http://www.atmel.com/Images/doc2527.pdf [17] Jython, http://www.jython.org/ [18] SL4A, https://github.com/damonkohler/sl4a 46 BIBLIOGRAFÍA [19] Butterworth filter, https://github.com/scipy/scipy/blob/v0.18.1/ scipy/signal/filter_design.py#L1861-L1932 [20] Cooley, James W.; Tukey, John W. (1965). "An algorithm for the machine calculation of complex Fourier series". Mathematics of Computation. 19 (90): 297–301. ISSN 0025-5718. doi:10.1090/S0025-5718-1965-0178586-1 [21] Detección de blobs, https://en.wikipedia.org/wiki/Blob_ detection [22] Metaballs (also known as: Blobs), http://www.geisswerks.com/ryan/ BLOBS/blobs.html [23] Processing, https://processing.org/ [24] RGB, https://en.wikipedia.org/wiki/RGBA_color_space [25] Duolingo, https://es.duolingo.com/ [26] Rosetta stone, http://www.rosettastone.com/speech-recognition [27] Tellmemore, http://www.edukwest.com/rosetta-stone-acquires-tell-me-more/ [28] Mango, https://blog.mangolanguages.com/ intuitive-language-contruction-part-ii-pronunciation/ [29] Saundz, http://saundz.com/the-saundz-way-of-teaching-english-pronunciation/ [30] VowelViz, http://completespeech.com/vowelvizpro/ [31] Babbel, https://blog.babbel.com/tech-background-babbel-speech-recognition/ [32] Shazam, https://www.shazam.com/es [33] , How Shazam works, https://laplacian.wordpress.com/2009/01/ 10/how-shazam-works/ [34] Feature extraction, https://en.wikipedia.org/wiki/Feature_ extraction