DSP - Detección de actividad de voz: ¿cuáles son mis opciones?

En un entorno sensible al rendimiento, tengo una transmisión de audio. Necesito clasificar cada cuadro como habla/no habla. Para este propósito, solo la voz "limpia" debe clasificarse como discurso. La voz con un ruido de fondo considerable (quizás música) debe clasificarse como sin habla.

¿Qué características/métodos podría sugerir?

¿Cuánto es un marco? ¿Qué más podría haber aparte del habla? Distinguir entre el habla humana y el habla sintetizada, por ejemplo, sería difícil. Distinguir entre el habla humana y un martillo neumático sería fácil.
Desafortunadamente, el habla sintetizada es una opción. Pero me doy cuenta de que probablemente tratar de abordar esto sería una exageración, y estoy dispuesto a hacer este sacrificio. En cuanto al tamaño del marco, estoy bastante seguro de que puedo controlarlo. Funciona con 4000 cuadros de muestra a 8000 smp/seg. El retraso de 500 ms está bien, pero no me gustaría hacerlo más grande.
No tuve malos resultados con los coeficientes de regresión lineal del espectro.
A pesar de la mención de "DSP" (¡solo en el título!), esta parece ser una pregunta de software y no tiene nada que ver con la electrónica. Votado para cerrar.
Su respuesta actualmente es solo un comentario, ¿puede explicar más sobre cómo lo ha hecho, qué significa y/o por qué funciona?
Todavía es un trabajo en progreso, no tengo mucho más que decir todavía. Usé Matlab para calcular la pendiente y=ax+b de la fft y vi a simple vista que había una diferencia significativa entre el habla y el no habla.

Respuestas (4)

Estoy de acuerdo. Anteriormente investigué este tema antes y descubrí que es un tema muy complejo. Aquí hay algunos algoritmos básicos: http://en.wikipedia.org/wiki/Speech_recognition#Algorithms .. Le sugiero que investigue mucho. Aquí hay algunos enlaces para que los disfrute :) http://www.dsprelated.com/showmessage/83934/1.php & http://www.ee.columbia.edu/~dpwe/pubs/LeeE06-vad.pdf y muchos más en google.

¡Grandes enlaces! Realmente espero no tener que programar y entrenar un HMM... gracias

Lo que haría: primero tratar de encontrar la frecuencia fundamental. Una voz que habla no tiene una nota fija en este sentido, por lo que debe hacerlo con una respuesta bastante rápida, un método de bloqueo de fase directo puede ser mejor que hacerlo con FFT. Luego, alimente esta frecuencia a un filtro de peine, para eliminar la fundamental y todos sus sobretonos. Entonces, lo que queda es, idealmente, solo ruidos pop y silbidos, ambos de frecuencia bastante baja o bastante alta, por lo que el paso de banda del rango medio debería, para una señal de voz clara y única, dejar solo una señal restante muy débil. Para la música u otros ruidos, por otro lado, tiene una amplia combinación de frecuencias en todo el rango medio, por lo que el filtro de peine no debilitará mucho el RMS. Por lo tanto, un nivel alto después del proceso de filtrado de peine/banda indicará que la fuente no fuevoz limpia.


Intenté esto con un programa simple de SynthMaker, Esquema de SynthMaker para la detección de voz clara

y todavía no es realmente confiable, pero en principio funciona.

Resultado para el habla solo:

Resultado del esquema de SynthMaker para la detección de voz clara para el habla

La señal filtrada en peine es 6 dB más débil que la de paso de banda único.

Resultado para música (voz+guitarra acústica, solo para probar):

Resultado del esquema de SynthMaker para la detección de voz clara para habla+guitarra acústica

Aquí, la señal filtrada en peine es en realidad más fuerte (el filtro está mal normalizado).

Este no es un problema simple, y es más una conjetura que una respuesta.

Una distinción que me viene a la mente es que la voz pura tendrá muy poca amplitud en frecuencias más altas, como por encima de 3 kHz. Desafortunadamente, cosas como un sonido S fuerte (silbido) ocurren en la voz y pueden tener componentes de hasta alrededor de 8 kHz. A veces, la música y otros ruidos de fondo también tendrán frecuencias limitadas a 3 kHz. Entonces, la distinción de frecuencia ayudará, pero no es lo suficientemente buena por sí sola.

Mucha música tendrá un ritmo rítmico, especialmente cuando se observan solo las frecuencias base. Sin embargo, eso no es cierto para todos los tipos de ruido.

Como dije, este no es un problema simple y probablemente requerirá una experimentación sustancial.

De todos modos, solo tengo 4 kHz de señal, así que tendré que encontrar algo más. ¡Gracias!

Mi (hace mucho) tesis de maestría implicó hacer esto como una parte menor de la tarea general, en gran parte con hardware. Puedo desenterrar y ver lo que concluí :-). Según recuerdo, la naturaleza del contenido de energía alrededor de 400 Hz es un indicador importante. Esto fue para su uso en circuitos telefónicos. También tuve algunos documentos de British Telecom sobre el tema a los que puedo proporcionar referencias y (solo) posiblemente copias de los documentos.

¡Vaya, eso sería genial! Gracias :)