Este es un viaje secundario desde mi aplicación de ronquidos .
Tuve una grieta al producir una autocorrelación de la señal de audio, para ver si eso "se correlaciona" muy bien con los ronquidos / respiración. Tengo un algoritmo simple que funciona (produce 1.0 como elemento cero, lo cual es una buena señal), pero me pregunto cómo evaluar el resultado para determinar si la autocorrelación es fuerte y, tal vez, cómo usarlo para separar varias posibles fuentes de sonido.
Pregunta n. ° 1: ¿Es el RMS de la autocorrelación (omisión del elemento cero) una métrica de "calidad" tan buena como cualquiera, o hay algo mejor?
Para elaborar: simplemente quiero una forma numérica (vs "mirar" en un gráfico) para distinguir una señal altamente autocorrelacionada de una señal menos autocorrelacionada.
(Realmente no sé lo suficiente como para saber qué otras preguntas hacer).
Algunos resultados iniciales: en algunos casos, la autocorrelación (ya sea RMS o pico) muestra un salto dramático en un ronquido, precisamente la respuesta que me gustaría ver. En otros casos no hay movimiento aparente en absoluto en estas medidas (y esto puede ser dos ronquidos sucesivos con las dos respuestas), y en situaciones de mucho ruido, las mediciones realmente caen (ligeramente) durante un ronquido.
Actualización - 22 de mayo: finalmente tuve más tiempo para trabajar en esto un poco más. (Me detuvieron en otra aplicación que es literalmente un dolor). Introduje la salida de la autocorrelación en una FFT y la salida es algo interesante: muestra un pico bastante dramático cerca del origen cuando comienza un ronquido.
Así que ahora me enfrento al problema de cuantificar este pico de alguna manera. Curiosamente, los picos más altos, en términos de magnitud absoluta, ocurren en otros momentos, pero probé la relación de pico a media aritmética y eso sigue bastante bien. Entonces, ¿cuáles son algunas buenas maneras de medir el "pico" de la FFT. (Y por favor no digas que necesito tomar un FFT de esto, esta cosa ya está cerca de tragarse su propia cola. :))
Además, se me ocurrió que la calidad de la FFT podría mejorar un poco si reflejara los resultados de la autocorrelación, con cero (que es, por definición, magnitud 1.0) en el medio. Esto pondría las "colas" en ambos extremos. ¿Es esta (posiblemente) una buena idea? ¿Debería la imagen especular estar vertical o invertida? (Por supuesto, lo intentaré independientemente de lo que digas, pero pensé que tal vez podría obtener algunas pistas sobre los detalles).
Intención planificada
Mis casos de prueba se pueden dividir aproximadamente en la categoría de "buen comportamiento" y la categoría de "niños problemáticos".
Para los casos de prueba de "buen comportamiento", la planitud de la FFT de la autocorrelación se reduce drásticamente y la proporción de autocorrelación pico a promedio aumenta durante un ronquido. La relación de esos dos números (relación de pico dividida por la planeidad) es particularmente sensible, exhibiendo un ascenso de 5-10x durante una respiración / ronquido.
Sin embargo, para los "niños problemáticos", los números se dirigen exactamente en la dirección opuesta. La relación pico / promedio baja ligeramente, mientras que la planeidad en realidad aumenta en un 50-100%
La diferencia entre estas dos categorías es (principalmente) triple:
- Los niveles de ruido son (generalmente) más altos en los "niños problemáticos"
- Los niveles de audio son (casi siempre) más bajos en los "niños problemáticos"
- Los "niños problemáticos" tienden a consistir en más respiración y menos ronquidos reales (y necesito detectar ambos)
¿Algunas ideas?
Actualización: 25/05/2012: es un poco prematuro tener un baile de la victoria, pero cuando reflejé la autocorrelación sobre un punto, tomé la FFT de eso y luego hice la planitud espectral, mi esquema de relación combinada mostró un buen salto en Varios ambientes diferentes. Reflejar la autocorrelación parece mejorar la calidad de la FFT.
Sin embargo, un punto menor es que, dado que el "componente DC" de la "señal" reflejada es cero, el resultado cero de FFT es siempre cero, y esto rompe un poco la media geométrica que incluye cero. Pero omitir el elemento cero parece funcionar.
El resultado que obtengo está lejos de ser suficiente para identificar ronquidos / respiraciones por sí mismo, pero parece ser una "confirmación" bastante sensible: si no obtengo el "salto", entonces probablemente no sea un ronquido / respiración.
No lo he analizado de cerca, pero sospecho que lo que está sucediendo es que se produce un silbido en algún lugar durante la respiración / ronquido, y ese silbato es lo que se está detectando.