Antecedentes: estoy trabajando en una aplicación para iPhone (aludida en varias otras publicaciones ) que "escucha" roncar / respirar mientras uno está dormido y determina si hay signos de apnea del sueño (como una pantalla previa para el "laboratorio del sueño" pruebas). La aplicación emplea principalmente "diferencia espectral" para detectar ronquidos / respiraciones, y funciona bastante bien (correlación ca 0.85-0.90) cuando se prueba contra grabaciones de laboratorio de sueño (que en realidad son bastante ruidosas).
Problema: Puedo filtrar la mayoría del ruido de "dormitorio" (ventiladores, etc.) a través de varias técnicas y, a menudo, detecto la respiración de manera confiable a niveles de S / N donde el oído humano no puede detectarla. El problema es el ruido de la voz. No es inusual tener una televisión o una radio funcionando en segundo plano (o simplemente tener a alguien hablando a lo lejos), y el ritmo de la voz coincide estrechamente con la respiración / ronquidos. De hecho, realicé una grabación del difunto autor / narrador de cuentos Bill Holm a través de la aplicación y era esencialmente indistinguible de roncar en ritmo, variabilidad de nivel y varias otras medidas. (Aunque puedo decir que aparentemente no tenía apnea del sueño, al menos no mientras estaba despierto).
Así que esta es una posibilidad remota (y probablemente una extensión de las reglas del foro), pero estoy buscando algunas ideas sobre cómo distinguir la voz. No necesitamos filtrar los ronquidos de alguna manera (pensé que sería bueno), sino que solo necesitamos una forma de rechazar como sonido "demasiado ruidoso" que está demasiado contaminado con la voz.
¿Algunas ideas?
Archivos publicados: he colocado algunos archivos en dropbox.com:
La primera es una pieza de música rock bastante aleatoria (supongo), y la segunda es una grabación del difunto discurso de Bill Holm. Ambos (que utilizo para que mis muestras de "ruido" se diferencien de los ronquidos) se han mezclado con ruido para ofuscar la señal. (Esto hace que la tarea de identificarlos sea significativamente más difícil). El tercer archivo es diez minutos de una grabación tuya en la que el primer tercio respira principalmente, el tercio medio es respiración / ronquido mixto y el tercio final es ronquido bastante constante. (Tienes tos por un bono).
Se ha cambiado el nombre de los tres archivos de ".wav" a "_wav.dat", ya que muchos navegadores dificultan enormemente la descarga de archivos wav. Simplemente cámbielos de nuevo a ".wav" después de la descarga.
Actualización: pensé que la entropía estaba "haciendo el truco" para mí, pero resultó ser principalmente peculiaridades de los casos de prueba que estaba usando, además de un algoritmo que no estaba muy bien diseñado. En el caso general, la entropía me está haciendo muy poco.
Posteriormente probé una técnica en la que calculo la FFT (usando varias funciones de ventana diferentes) de la magnitud de la señal general (probé la potencia, el flujo espectral y varias otras medidas) muestreada aproximadamente 8 veces por segundo (tomando las estadísticas del ciclo principal de FFT que es cada 1024/8000 segundos). Con 1024 muestras, esto cubre un rango de tiempo de aproximadamente dos minutos. Esperaba poder ver patrones en esto debido al lento ritmo de los ronquidos / respiración frente a la voz / música (y que también podría ser una mejor manera de abordar el problema de la " variabilidad "), pero si bien hay indicios de un patrón aquí y allá, no hay nada en lo que realmente pueda aferrarme.
( Más información: para algunos casos, la FFT de magnitud de la señal produce un patrón muy distinto con un pico fuerte a aproximadamente 0.2Hz y armónicos escalonados. Pero el patrón no es tan distinto la mayor parte del tiempo, y la voz y la música pueden generar menos distinción versiones de un patrón similar. Puede haber alguna forma de calcular un valor de correlación para una figura de mérito, pero parece que requeriría un ajuste de curva a aproximadamente un polinomio de cuarto orden, y hacerlo una vez por segundo en un teléfono parece poco práctico).
También intenté hacer la misma FFT de amplitud promedio para las 5 "bandas" individuales en las que he dividido el espectro. Las bandas son 4000-2000, 2000-1000, 1000-500 y 500-0. El patrón para las primeras 4 bandas fue generalmente similar al patrón general (aunque no hubo una banda "sobresaliente" real, y a menudo una señal extremadamente pequeña en las bandas de frecuencia más altas), pero la banda 500-0 generalmente fue aleatoria.
Recompensa: le daré la recompensa a Nathan, a pesar de que no se le ofreció nada nuevo, dado que la suya fue la sugerencia más productiva hasta la fecha. Sin embargo, todavía tengo algunos puntos que estaría dispuesto a otorgarle a otra persona, si presentaran algunas buenas ideas.