Procesamiento del habla humana

Compactación y codificación de fonemas

Ya sea para almacenamiento optimizado, o con vistas a reconocimiento automático.

Un método de compresión del habla se basa en un modelo físico simplificado del tracto
vocal (desde las "cuerdas vocales" hasta los labios), modelado como una sucesión de
"tramos de caño" desadaptados en impedancia acústica.
La desadaptación proviene de las diferentes "secciones" del tracto vocal, y genera
múltiples reflexiones internas. Resultado de estas reflexiones, a la salida se obtiene un
único fonema.
Aquí se puede ver un aparato que realiza ese proceso físicamente, con un tracto vocal
hecho en silicona y controlado por unas pinzas que le daban la sección a cada tramo.



Así, el tracto se puede representar mediante el conjunto de coeficientes que describen

el sistema. Estos son los coeficientes de predicción lineal o LPC.
Los LPC representan las sucesivas desadaptaciones acústicas entre un "tramo de caño"
los vecinos.
Para el cálculo de los LPC se suele emplear el método de Durbin-Watson basado en la
autocorrelación
de la señal.
Entonces los fonemas se pueden "codificar" mediante los LPC del tracto vocal (apenas
14 coeficientes por fonema). Y como a cada fonema le corresponde un único conjunto
LPC es posible usar este método para almacenar el habla humana en forma compactada.

Para darse una idea:

Supongamos querer almacenar el fonema "la", de 1 segundo de duración, muestreado
con un pic a 10.000 muestras por segundo (10 kSps).
Almacenando todas las muestras digitalizadas se deberían guardar 10.000 datos (10 kB).
El método LPC permite describir el mismo fonema con solo 14 coeficientes ...
lográndose una compresión de casi 1000 veces !!!
Nota: El valor óptimo que surge del análisis de errores es 14. Con mucho menos de 14
coeficientes se tiene una resolución pobre, con mucho más de 14 el sistema de ecuaciones
se vuelve inestable.

Hasta ahí sería una ventaje enorme.

Pero además esto permitiría pensar en identificar fonemas, haciendo el cálculo de los LPC
a tiempo real, y luego comparando con LPC previamente almacenados en una biblioteca.
Ver También:

Reconocimiento de palabras usando LPC y DTW para control de robot

El promedio del espectro del habla. Fundamentos y aplicaciones clínicas.

Inteligibilidad del Habla (1) - Inteligibilidad del Habla (2)

Reconocimiento del Habla - Estado del avance del tema en el mundo (Estado del arte)


 
Última edición:
Si, es verdad. Yo prefiero el procesamiento digital con salida por parlante, ... je je !

alejandro te pregunto algo:

en verdad te parece que el procesamiento digital es mucho mas eficiente ???
o sea que este estudio que vos colocaste en realidad es digamos un "analisis matematico" de como funciona la voz humana , pero es de matematica compleja por qu eanaliza o describe matematicamente a un proceso natural.

contestame seriamente el tema por que me interesa llegar a algo .
un saludo
 
:unsure: terrible aporte (y) ; Ya habia estado incursionando en la teoria basica de DTW y LPC para aplicarlo a un proyecto con picaxe similar al ejemplo del primer link, pero me quede en la teoria por que no logre un 80% de eficacia a la hora de las pruebas... Osea, la reproduccion de una señal entrante lo logre, lo que no logre pulir fue el reconocimiento de la voz con un 80% de eficacia... Quizas lo retome implementando PicBasic PRO... este tema me inspiro nuevamente :)
 
:unsure: terrible aporte (y) ; Ya habia estado incursionando en la teoria basica de DTW y LPC para aplicarlo a un proyecto con picaxe similar al ejemplo del primer link, pero me quede en la teoria por que no logre un 80% de eficacia a la hora de las pruebas... Osea, la reproduccion de una señal entrante lo logre, lo que no logre pulir fue el reconocimiento de la voz con un 80% de eficacia... Quizas lo retome implementando PicBasic PRO... este tema me inspiro nuevamente :)

Si, la verdad que yo armé algo de esto en el año 1991.
Empecé ayudándole a un primo para presentar la tesis de ingeniería en electrónica.
El había hecho toda la búsqueda de bibliografía y yo tenía una placa conversora AD,
montada en una AT286 !!!
Le ayudé a digitalizar los fonemas, pero luego seguí solo y llegué a hacerme una "fonoteca"
que no andaba muy bien que digamos.

Ahora a mí también me picó el bichito y me voy a poner a ver qué puedo aprovechar de todo
lo nuevo que ha salido.
Si te interesa, nos ponemos de acuerdo y encaramos algo.

Saludos.
 
Última edición:
Ahora a mí también me picó el bichito y me voy a poner a ver qué puedo aprovechar de todo lo nuevo que ha salido.
Si te interesa, nos ponemos de acuerdo y encaramos algo.

Saludos.

Dale, yo estoy pensando en algo innovador de relativamente pocos recursos para ayudar a la gente con problemas de motricidad... Estaba estudiando de hacer un sistema de silla de ruedas y control remoto de entorno inteligente para personas con problemas motores... Pense al principio que seria mas facil encararlo con una NOTEBOOK ya que tenia medio resuelto el tema de deteccion de ojos para controlar el mouse, sumado al software de reconocimiento de voz de win7....Pero me estoy topando con algunas cuestiones que lo hacen complejo y un tanto obsoleto...
Quizas esta sea la manera de realizarlo mucho mas facil, ya que con un par de comandos de voz, podria la persona controlar el movimiento de la silla, y quizas, hasta se podria incluir una pequeña seccion de domotica para controlar luces, y otras variables mas.... El 1er salto es la tecnica de reconocimiento de voz... Despues, el resto...osea, la parte de electronica seria relativamente facil; Vos que opinas? gastamos tiempo en algo productivo? lohacemos open source? Yo trabajo PicBasic Pro - Basic Picaxe - Basic KicChip - Asm (este ultimo mas o menos le escapo por que hace mucho que no le doy practica y uno se va poniendo un poco duro, vio? :D)...
Saludos amigo
 
Yo pensaba más en algo como armar un sistema elemental y de ahí empezar a tratar de ir
logrando algunos resultados concretos aplicados.

Por ejemplo optimizar el sistema de captura a tiempo real, cosa que con una pc no es fácil.

Luego agregar una memoria externa, ... un display para mostrar el texto, por ejemplo.
Experimentar con algunos algoritmos, simples primero, algo más grosos después ...
Luego, a eso uno le puede ir agregando inteligencia según en qué lo que quiera aplicar.

Yo diría que primero intentemos reproducir lo que ya está en la web tratando de usar recursos

mínimos, o que sean de disponibilidad asegurada. Por ejemplo no pensar en micros demasiado
caros o que no se consigan en todas partes.

Esa parte sí mantenerla open source, como para que cualquiera con conocimientos elementales

pueda empezar a experimentar con una base ya probada y bien económica.
Si luego la cosa se deriva a algo más específico, bueno, veremos.
De acuerdo con el esfuerzo que se ha puesto habrá que ver cómo sacarle rédito, pero eso ya
queda fuera de "forosdeelectronica", porque lo comercial no es el objetivo del foro.

Con respecto a las herramientas:
Si son rutinas pequeñas prefiero programar en assembler, pero si la aplicación crece más de
una página de memoria del pic, prefiero el lenguaje C.
Manejo los displays con cierta comodidad: 128x64 y
128x128 pixels GLCD, 16x2 LCD.
En general me gusta no depender de la pc, salvo para almacenamiento via RS232 o USB,
o por ahí para graficar algo.

En cuestión de planificación:
A mi entender, cualquier análisis, decisión o plan de tareas debería empezar por aquí:
Reconocimiento del Habla - Estado del avance del tema en el mundo (Estado del arte)

Partir de lo básico sería avanzar con:
- Preprocesado de la señal
- Conversión analógico/digital[/SIZE]
(y almacenamiento de la señal) - Detección del habla.
Algo como lo del sistema de captura https://www.forosdeelectronica.com/f24/trasmicion-voz-pic-pcm-55885/#post492261
que nos trajo hasta aquí.

Si de "reconocimiento del habla" se trata, habría que seguir con la optimización de las diferentes etapas que allí se señalan: - Segmentación
- Etiquetado de segmentos

Para la "
identificación del hablante", una aplicación diferente, pero algo relacionada, con sus ventajas y desventajas, se debería seguir una ruta algo diferente:
- Extracción de características
- Clasificación
- Identificación o autenticación

Esto es solamente un borrador como para ir definiendo ideas.

Estamos en contacto.


PD1: Hace tiempo hice también un detector de movimientos oculares pensando en una persona

cuadripléjica. Pero eso es otro tema.

PD2: Los que usan linux pueden explorar aquí.
 
Última edición:
La seguimos por acá o arrancamos un tema nuevo? pasame tu e-mail asi te mando por correo un proyecto que me compartieron en C... Justamente digitaliza la voz, la guarda en una memoria SD y luego, la reproduce...
Saludos
 
Son muchas las cosas que pueden hacerse con el conjunto de coeficientes
de predicción lineal o LPC. Una de ellas es representar unívocamente un
tramo de señal acústica generada por el tracto vocal.
Acá les subo un poco de la matemática involucrada con el método LPC.


Teoría de predicción lineal (super-resumida)

Supongamos tener una sucesión de muestras de sonido:

{S(n)}, n=1, 2, 3, ...

digitalizadas a intervalos iguales Δt, es decir en los instantes:

t = n Δt, con n=1, 2, 3, ...

Se puede asegurar que bajo ciertas condiciones la sucesión
puede escribirse mediante la relación:

S(n) = G u(n) + a(1) S(n-1) + a(2) S(n-2) + a(3) S(n-3) + ... + a(p) S(n-p)

con p del orden de 10.

Donde:

G es un factor de ganancia a especificar.

u(n) es una función generadora de sonido (puede ser sinusoidal).

Es decir que una muestra tomada en el instante t puede escribirse como
una combinación lineal de las muestras tomadas en instantes anteriores,
más una señal generadora de amplitud G.
(Nota del traductor: Esta relación se comprueba a medida que avanzamos en la sucesión
para cualquier conjunto de p muestras sucesivas, sin importar el instante
donde se inicia el conjunto.)

En forma compacta:

S(n) = G u(n) + Suma(k=1:p) [ a(k) S(n-k) ]

Un predictor lineal con coeficientes a(k) se define como aquél sistema
que tiene una salida:

Z(n) = Suma(k=1:p) [ a(k) S(n-k) ]

El error del predictor se define como:

E(n) = S(n) - Z(n)

E(n) = G u(n)

Si denominamos "cercanas a S(m)" a las muestras Sm(n) = S(m+n),
tiene sentido definir el "error cuadrátrico medio cercano a la muestra S(m)"
o ECMC, como:

E_m = Suma(m=1:N)[ E_m(n) ]² (N no es infinito)

Puede demostrarse rigurosamente que existe un conjunto de coeficientes
a(k) = z(k) que minimizan el error E_m en un entorno de N muestras alrededor
de S(m).

Si ahora se define:

Fn(i,k) = Suma(m=1:N) [ Sn(m-i) Sn(m-k) ]

puede escribirse el sistema de ecuaciones para calcular los a(k):

Suma(k=1:p) a(k) Fn(i,k) = F(i,0) para i=1,2,...,p

Entonces este sistema de p ecuaciones y p incógnitas puede resolverse
eficientemente para obtener los coeficientes a(k) del predictor lineal,
los que minimizan el error cuadrático ECMC.


Método de la autocorrelación

Si uno se asegura que la forma de onda es cero fuera del intervalo

0 <= m <= N-1

entonces, el error del predictor de orden p (p coeficientes) será
no nulo dentro del intervalo:

0 <= m <= N-1+p

y nulo fuera del mismo.
Esto puede lograrse multiplicando las muestras por una función
ventana (de Hamming) que cumpla esa condición.
En este caso, la función de correlación a tiempos cortos, definida
como:

Rn(k) = Suma(m=0:N-1-k) [ Sn(m) Sn(m+k) ]

luego de algunas cuidadosas conversiones de índices, puede comprobarse
que cumple:

Rn(i-k) = Fn(i,k) para 1<=i<=p, 0<=k<=p

Con esto, se llega al sistema de ecuaciones:

Rn(0) a(1) + Rn(1) a(2) + Rn(2) a(3) + ... + Rn(p-1) a(p) = Rn(1)
Rn(1) a(1) + Rn(0) a(2) + Rn(1) a(3) + ... + Rn(p-2) a(p) = Rn(2)
Rn(2) a(1) + Rn(1) a(2) + Rn(0) a(3) + ... + Rn(p-3) a(p) = Rn(3)
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
Rn(p-1)a(1) + Rn(p-2)a(2) + Rn(p-3)a(3) + ... + Rn(0) a(p) = Rn(p)

que también puede escribirse en forma matricial:

M a = r

donde M es la matriz pxp:

Rn(0) Rn(1) Rn(2) ... Rn(p-1)
Rn(1) Rn(0) Rn(1) ... Rn(p-2)
Rn(2) Rn(1) Rn(0) ... Rn(p-3)
... ... ... ... ... ... ... ... ...
Rn(p-1) Rn(p-2) Rn(p-3) ... Rn(0)

a es el vector de coeficientes {a(k):k=1,p}:

a(1), a(2), a(3), ... , a(p)

y r es el vector de autocorrelación {R(k):k=1,p}:

R(1), R(2), R(3), ... , R(p)


Las propiedades de la matriz M (simétrica y de Toeplitz) serán aprovechadas
para obtener la solución a = {a(k)} mediante un algoritmo eficiente.

Con un procedimiento adicional a partir de razonamientos de conservación
de la energía, puede determinarse la ganancia G con la relación:

G² = Rn(0) - Suma(k=1:p) a(k) Rn(k)

que también es igual a E_n.


Fuente: "Digital Processing of Speech Signals"
Autores: Lawrence R. Rabiner y Ronald W. Schafer
Prentice Hall
1980


Ver también: http://es.wikipedia.org/wiki/Linear_Predictive_Coding
 
Última edición:
Algunos avances en síntesis digital del CANTO aquí.

Está en inglés, pero se entiende bastante la idea de lo que hacen.

SPASMHead.gif


Vocalizando Aprendiendo a Cantar.
 
Última edición:
Más sobre los coeficientes de predicción lineal (LPC)

Este soft se puede descargar en la pc, sin instalación, se copian el ejecutable
(que se baja desde acá) y la DLL "glut32.dll" (que se baja desde acá) ambos
en una misma carpeta. Se ejecuta desde ahí y ya funciona.
Requiere tener habilitado el micrófono y los parlantes.

Funciona más o menos así:

ourplan.jpg

Cuando uno habla frente al micrófono, el sistema captura el sonido (original), calcula los
coeficientes del tracto vocal, genera una señal propia (predicted) y la manda a los parlantes.

También se pueden modificar algunos parámetros del proceso. Para eso, simultáneamente se abre una ventana tipo DOS con información para manejo desde teclado.

pantallaDOS.PNG

Para que funcione, al tipear las teclas, el "foco" debe estar en la ventana gráfica.

La pantalla que se abre en Windows es como esta.
rt_lpc.jpg

En lo más alto de la gráfica se ven ambos oscilogramas: original y predicho.
Mas o menos en el centro de las gráficas, en color rosa, se muestra una representación del tracto vocal. Con el comando "v" se puede ver en forma de tramos de tubo consecutivos.

Fuente: http://soundlab.cs.princeton.edu/software/rt_lpc/
 
Última edición:
:unsure: Ale, pero por lo que veo, vos lo estas perfilando mas para el lado de soft que para el lado de los micros... puede ser que te mal interprete?
A fines de esta semana, ya me voy liberando de las pocas obligaciones que me quedan ;)
 
Hola. Vuelvo sobre este tema porque recientemente tuve oportunidad de presenciar una aplicación interesante.

Se trata de un programa para sordos que se llama "Note Speak & Listen"
Está implementado en android, y utiliza herramientas de Google como un reconocedor del habla on-line.
El programa tiene dos versiones: una demo que se baja gratis y una versión de pago que vale unos 5 euros.
Una verdadera bicoca.
Puede funcionar en una tablet o celular que use android pero, sí o sí, requiere conexión a internet.
El programa lo que hace es capturar un tramo de señal de audio y enviarla a un servidor de Google, que se
encarga de hacer la conversión AD y detectar las palabras.
El servidor remoto devuelve la cadena de texto ya armada y el dispositivo la muestra en la pantalla.
La tasa de error de palabras es muy baja (según he leído) porque trabaja sobre una base de datos monstruosamente grande, situada en el servidor.
La aplicación funciona bien, pero todavía tiene varios detalles que resolver para mejorar la usabilidad (a mi criterio).
.- No sirve para discurso contínuo, ya que se debe accionar cada vez que uno quiere escuchar lo que otro dice.
.- No sirve para entornos ruidosos o en conversaciones múltiples. Sólo detiene la recepción del sonido y envía a traducir cuando pasa más de 1 segundo de silencio.
.- No distingue entre varios hablantes.
.- No funciona off-line.

Para funcionar off-line el volumen de la base de datos estaría limitado por el tamaño de la memoria
disponible en el dispositivo, y eso podría afectar la tasa de error (WER: word error rate).
Decididamente es impensable de hacer todo sobre un pic.
A lo sumo sobre un micro de gama media o alta se puede implementar la etapa de captura y decodificación
de fonemas. Pero la separación de las palabras la tiene que hacer un sistema bastante más complejo.
Estos sistemas tienen una etapa de entrenamiento con varios hablantes, se basa en un modelo acústico que depende del idioma, y en un modelo estadístico para identificar las palabras similares según el contexto (las palabras que están más cerca en el discurso).

Según el autor de un proyecto abierto llamado SIMON (para el idioma inglés):
"Los modelos en sí no son de código, sino de datos. Probablemente no publicaré los conjuntos de datos en cualquier lugar, ya que son muy grandes (varias decenas de GB) a menos que alguien pregunte por ellos. Pero el modelo producido (que es sólo un poco más de 100 MB) va a terminar en un lugar público, junto con el resto del material producido al final de este proyecto.
Fuente: Ver la sección de "comments" AQUÍ
 
Última edición:
Atrás
Arriba