Esta es una continuación de una pregunta anterior .
Estoy tratando de analizar los sonidos de la respiración y los ronquidos, y aunque ahora puedo detectar bastante bien los ronquidos, la respiración es un desafío mayor.
He aprendido que si rompo el rango de frecuencia analizado (aproximadamente 4KHz, muestreado a aproximadamente 8KHz, con un tamaño de fotograma de 1024) en aproximadamente 5 subranges, muy a menudo una de las subranges exhibe una buena sensibilidad (usando la diferencia espectral) que está enterrada en el ruido en el rango general. El truco consiste en determinar en qué subrango confiar "cuándo".
Presumiblemente, el subrango "confiable" exhibiría variabilidad a una velocidad entre aproximadamente 2Hz y 0.05Hz, mientras que los subranges "malos" se comportarían de manera más aleatoria, siendo la mayor parte de su variación a intervalos más cortos.
Podría improvisar algún tipo de algoritmo para suavizar los valores en una resolución inferior a un segundo y luego calcular la variabilidad en intervalos más largos, pero me pregunto si no hay un algoritmo "enlatado" para este tipo de cosas, algo con tal vez ¿Un mínimo de teoría detrás de esto?
¿Alguna sugerencia?
[Nota: me doy cuenta de que uno podría, en teoría, usar una FFT para extraer esta información, pero eso parece usar un bate de béisbol para matar una pulga. ¿Quizás algo un poco más liviano?]
Adicional:
En cierto sentido (para usar una analogía), estoy tratando de detectar una señal de "banda base" en una transmisión de RF (solo la "RF" son frecuencias de audio, y la "banda base" está por debajo de 8Hz). Y, en cierto sentido, el "RF" es "espectro extendido": los sonidos que quiero detectar tienden a generar muchos armónicos y / o tienen varios componentes de frecuencia separados, por lo que si una banda del espectro es demasiado ruidosa, puedo Probablemente haga uso de otro. El objetivo es determinar básicamente alguna métrica que se parezca a la SNR para las diversas bandas de frecuencia, bajo el supuesto de que la mayoría del "ruido" es> 2Hz y mi señal es inferior a 2Hz.
Tengo como entrada a este algoritmo las amplitudes sin procesar (suma de amplitudes FFT en todas las frecuencias incluidas) para cada banda, medida a intervalos de 8Hz.
(Debe tenerse en cuenta que, si bien no he realizado ninguna medición formal de SNR, la SNR general en todo el espectro procesado parece estar con frecuencia cerca o por debajo de 1.0, si observa visualmente la envolvente de sonido en una herramienta como Audacity, no hay modulación del la envolvente es notable (a pesar de que el oído puede discernir claramente los sonidos de respiración). Es por eso que es necesario analizar las bandas para encontrar aquellas con SNR decente).