Contexte: Je travaille sur une application iPhone (mentionnée dans plusieurs autres articles ) qui "écoute" le ronflement / la respiration pendant que l'on est endormi et détermine s'il y a des signes d'apnée du sommeil (en tant que pré-écran pour "laboratoire de sommeil" essai). L'application utilise principalement la «différence spectrale» pour détecter les ronflements / respirations, et elle fonctionne assez bien (corrélation d'environ 0,85 à 0,90) lorsqu'elle est testée par rapport aux enregistrements de laboratoire du sommeil (qui sont en fait assez bruyants).
Problème: la plupart des bruits «de chambre» (ventilateurs, etc.) peuvent être filtrés par plusieurs techniques et détectent souvent de manière fiable la respiration à des niveaux S / N où l'oreille humaine ne peut pas la détecter. Le problème est le bruit de la voix. Il n'est pas inhabituel d'avoir une télévision ou une radio en arrière-plan (ou simplement d'avoir quelqu'un qui parle au loin), et le rythme de la voix correspond étroitement à la respiration / ronflement. En fait, j'ai exécuté un enregistrement de feu l'auteur / conteur Bill Holm via l'application et il était essentiellement impossible de distinguer le ronflement du rythme, la variabilité du niveau et plusieurs autres mesures. (Bien que je puisse dire qu'il n'a apparemment pas eu d'apnée du sommeil, du moins pas lorsqu'il est éveillé.)
C'est donc un peu long (et probablement un tronçon de règles du forum), mais je cherche quelques idées sur la façon de distinguer la voix. Nous n'avons pas besoin de filtrer les ronflements d'une manière ou d'une autre (ce serait bien), mais nous avons juste besoin d'un moyen de rejeter le son "trop bruyant" qui est trop pollué par la voix.
Des idées?
Fichiers publiés: j'ai placé des fichiers sur dropbox.com:
Le premier est un morceau plutôt aléatoire de musique rock (je suppose), et le second est un enregistrement de feu Bill Holm. Les deux (que j'utilise pour différencier mes échantillons de "bruit" du ronflement) ont été mélangés avec du bruit pour obscurcir le signal. (Cela rend la tâche de les identifier beaucoup plus difficile.) Le troisième fichier contient dix minutes de votre enregistrement, où le premier tiers respire le plus, le tiers du milieu est une respiration / ronflement mixte et le dernier tiers est un ronflement assez stable. (Vous obtenez une toux pour un bonus.)
Les trois fichiers ont été renommés de ".wav" en "_wav.dat", car de nombreux navigateurs rendent le téléchargement des fichiers wav incroyablement difficile. Renommez-les simplement en ".wav" après le téléchargement.
Mise à jour: Je pensais que l'entropie "faisait l'affaire" pour moi, mais il s'est avéré être principalement des particularités des cas de test que j'utilisais, plus un algorithme qui n'était pas trop bien conçu. Dans le cas général, l'entropie fait très peu pour moi.
J'ai ensuite essayé une technique où je calcule la FFT (en utilisant plusieurs fonctions de fenêtre différentes) de l'amplitude globale du signal (j'ai essayé la puissance, le flux spectral et plusieurs autres mesures) échantillonné environ 8 fois par seconde (en prenant les statistiques du cycle FFT principal qui est toutes les 1024/8000 secondes). Avec 1024 échantillons, cela couvre une plage de temps d'environ deux minutes. J'espérais que je serais en mesure de voir des schémas en raison du rythme lent du ronflement / respiration vs voix / musique (et que cela pourrait également être un meilleur moyen de résoudre le problème de la " variabilité "), mais bien qu'il y ait des indices d'un motif ici et là, il n'y a rien que je puisse vraiment accrocher.
( Plus d'informations: Dans certains cas, la FFT de l'amplitude du signal produit un motif très distinct avec un fort pic à environ 0,2 Hz et des harmoniques de marches. Mais le motif n'est pas aussi distinct la plupart du temps, et la voix et la musique peuvent générer moins distinctes versions d'un modèle similaire. Il pourrait y avoir un moyen de calculer une valeur de corrélation pour un chiffre de mérite, mais il semble que cela nécessiterait l'ajustement de la courbe à un polynôme de 4e ordre, et le faire une fois par seconde dans un téléphone semble peu pratique.)
J'ai également essayé de faire la même FFT d'amplitude moyenne pour les 5 "bandes" individuelles dans lesquelles j'ai divisé le spectre. Les bandes sont 4000-2000, 2000-1000, 1000-500 et 500-0. Le modèle pour les 4 premières bandes était généralement similaire au modèle global (bien qu'il n'y ait pas de véritable bande «hors concours», et souvent un signal extrêmement faible dans les bandes de fréquences plus élevées), mais la bande 500-0 était généralement aléatoire.
Bounty: Je vais donner à Nathan la prime, même s'il n'a rien offert de nouveau, étant donné que c'était la suggestion la plus productive à ce jour. J'ai encore quelques points que je serais prêt à attribuer à quelqu'un d'autre, s'ils venaient avec de bonnes idées.