Antecedentes: estou trabalhando em um aplicativo para iPhone (mencionado em várias outras postagens ) que "ouve" roncar / respirar enquanto alguém está dormindo e determina se há sinais de apneia do sono (como uma pré-tela para "laboratório do sono" teste). O aplicativo emprega principalmente "diferença espectral" para detectar roncos / respirações e funciona muito bem (correlação de 0,85 a 0,90) quando testado em gravações do laboratório do sono (que na verdade são bastante barulhentas).
Problema: A maioria dos ruídos do "quarto" (ventiladores, etc.) posso filtrar através de várias técnicas e, freqüentemente, detectai de forma confiável a respiração nos níveis S / N, onde o ouvido humano não pode detectá-la. O problema é o ruído da voz. Não é incomum ter uma televisão ou rádio funcionando em segundo plano (ou simplesmente ter alguém falando à distância), e o ritmo da voz se aproxima da respiração / ronco. Na verdade, eu fiz uma gravação do falecido autor / contador de histórias Bill Holm através do aplicativo e era essencialmente indistinguível de roncar no ritmo, variabilidade de nível e várias outras medidas. (Embora eu possa dizer que aparentemente ele não teve apneia do sono, pelo menos não enquanto estava acordado.)
Portanto, este é um longo plano (e provavelmente uma série de regras do fórum), mas estou procurando algumas idéias sobre como distinguir a voz. Não precisamos filtrar os roncos de alguma forma (achei que seria legal), mas precisamos apenas de uma maneira de rejeitar o som "muito barulhento" que é excessivamente poluído com a voz.
Alguma ideia?
Arquivos publicados: coloquei alguns arquivos no dropbox.com:
O primeiro é uma peça de rock bastante aleatória (eu acho), e o segundo é uma gravação do falecido Bill Holm. Ambos (que eu uso como minhas amostras de "ruído" são diferenciados de ronco) foram misturados com ruído para ofuscar o sinal. (Isso torna a tarefa de identificá-los significativamente mais difícil.) O terceiro arquivo consiste em dez minutos de uma gravação sua, na qual o primeiro terço é principalmente a respiração, o terço do meio é misto de respiração / ronco e o terço final é o ronco bastante constante. (Você tosse por um bônus.)
Todos os três arquivos foram renomeados de ".wav" para "_wav.dat", pois muitos navegadores dificultam o download de arquivos wav. Apenas renomeie-os novamente para ".wav" após o download.
Atualização: Eu pensei que a entropia estava "fazendo o truque" para mim, mas acabou sendo principalmente peculiaridades dos casos de teste que eu estava usando, além de um algoritmo que não foi muito bem projetado. No caso geral, a entropia está fazendo muito pouco por mim.
Posteriormente, tentei uma técnica na qual calculei a FFT (usando várias funções diferentes da janela) da magnitude geral do sinal (tentei potência, fluxo espectral e várias outras medidas) amostradas cerca de 8 vezes por segundo (tomando as estatísticas do ciclo principal da FFT) (a cada 1024/8000 segundos). Com 1024 amostras, isso abrange um intervalo de tempo de cerca de dois minutos. Eu esperava poder ver padrões nisso devido ao ritmo lento do ronco / respiração versus voz / música (e que também poderia ser uma maneira melhor de resolver o problema da " variabilidade "), mas enquanto houver dicas de um padrão aqui e ali, não há nada em que realmente possa me agarrar.
( Informações adicionais: em alguns casos, a FFT de magnitude do sinal produz um padrão muito distinto, com um pico forte em cerca de 0.2Hz e harmônicos na escada. Mas o padrão não é tão distinto na maioria das vezes, e a voz e a música podem gerar menos distintas pode haver alguma maneira de calcular um valor de correlação para uma figura de mérito, mas parece que isso exigiria o ajuste de curva para um polinômio de quarta ordem, e fazer isso uma vez por segundo no telefone parece impraticável.)
Também tentei fazer o mesmo FFT de amplitude média para as 5 "bandas" individuais em que dividi o espectro. As bandas são 4000-2000, 2000-1000, 1000-500 e 500-0. O padrão para as 4 primeiras bandas era geralmente semelhante ao padrão geral (embora não houvesse uma banda real "destacada" e muitas vezes um sinal extremamente pequeno nas bandas de frequência mais alta), mas a banda 500-0 geralmente era apenas aleatória.
Recompensa: eu vou dar a recompensa a Nathan, mesmo que ele não tenha oferecido nada de novo, já que essa foi a sugestão mais produtiva até hoje. Ainda tenho alguns pontos que gostaria de premiar com outra pessoa, se eles tivessem boas idéias.