Ceci est un détour par mon application de ronflement .
J'ai eu du mal à produire une autocorrélation du signal audio, pour voir si cela "corrélait" très bien avec le ronflement / la respiration. J'ai un algorithme simple (produit 1.0 comme élément zéro, ce qui est un bon signe), mais je me demande comment évaluer le résultat pour déterminer si l'autocorrélation est forte et, peut-être plus loin, comment l'utiliser pour séparer diverses sources sonores possibles.
Question n ° 1: Le RMS de l'autocorrélation (saut d'élément zéro) est-il une métrique de "qualité" aussi bonne, ou y a-t-il quelque chose de mieux?
Pour élaborer: je veux simplement une méthode numérique (vs "regarder" un graphique) pour distinguer un signal hautement autocorrélé d'un signal moins bien autocorrélé.
(Je ne sais pas vraiment assez pour savoir quelles autres questions poser.)
Quelques premiers résultats: dans certains cas, l'autocorrélation (RMS ou pic) montre un saut spectaculaire sur un ronflement - précisément la réponse que j'aimerais voir. Dans d'autres cas, il n'y a aucun mouvement apparent dans ces mesures (et cela peut être deux ronflements successifs avec les deux réponses), et dans des situations de bruit élevé, les mesures plongent réellement (légèrement) pendant un ronflement.
Mise à jour - 22 mai: J'ai enfin eu un peu de temps pour y travailler encore. (J'ai été retiré sur une autre application qui est littéralement une douleur.) J'ai alimenté la sortie de l'autocorrélation dans une FFT et la sortie est quelque peu intéressante - elle montre un pic assez dramatique près de l'origine quand un ronflement commence.
Alors maintenant, je suis confronté au problème de quantifier ce pic d'une manière ou d'une autre. Curieusement, les pics les plus élevés, en termes de magnitude absolue, se produisent à d'autres moments, mais j'ai essayé le rapport pic / moyenne arithmétique et cela suit assez bien. Alors, quelles sont les bonnes façons de mesurer le "pic" de la FFT. (Et s'il vous plaît , ne dites pas que je dois en prendre une FFT - cette chose est déjà proche d'avaler sa propre queue. :))
De plus, il m'est venu à l'esprit que la qualité de la FFT pourrait être quelque peu améliorée si je reflétais les résultats d'autocorrélation alimentés en miroir, avec zéro (qui est par définition de magnitude 1,0) au milieu. Cela mettrait la «queue» aux deux extrémités. Est-ce (peut-être) une bonne idée? L'image miroir doit-elle être verticale ou inversée? (Bien sûr, je vais l'essayer indépendamment de ce que vous dites, mais j'ai pensé que je pourrais peut-être obtenir des indices sur les détails.)
Planéité éprouvée -
Mes cas de test peuvent être divisés en gros dans la catégorie «bien élevé» et la catégorie «enfants à problème».
Pour les cas de test "bien comportés", la planéité de la FFT de l'autocorrélation baisse de façon spectaculaire et le rapport du pic à l'autocorrélation moyenne grimpe pendant un ronflement. Le rapport de ces deux nombres (rapport de pic divisé par la planéité) est particulièrement sensible, présentant une montée de 5 à 10 fois pendant un souffle / ronflement.
Pour les «enfants à problème», cependant, les chiffres vont exactement dans la direction opposée. Le rapport pic / moyenne baisse légèrement tandis que la planéité augmente en fait de 50 à 100%
La différence entre ces deux catégories est (principalement) triple:
- Les niveaux de bruit sont (généralement) plus élevés chez les "enfants à problèmes"
- Les niveaux audio sont (presque toujours) plus bas chez les "enfants à problèmes"
- Les «enfants à problèmes» consistent généralement en plus de respiration et moins de ronflements réels (et je dois détecter les deux)
Des idées?
Mise à jour - 25/05/2012: C'est un peu prématuré d'avoir une danse de victoire, mais quand j'ai réfléchi à l'autocorrélation sur un point, j'ai pris la FFT de cela, puis j'ai fait la planéité spectrale, mon schéma de rapport combiné a montré un bon saut dans plusieurs environnements différents. La réflexion de l'autocorrélation semble améliorer la qualité de la FFT.
Un point mineur, cependant, est que, puisque la "composante continue" du "signal" réfléchi est nulle, le résultat nul de la FFT est toujours nul, et cela casse un peu une moyenne géométrique qui inclut zéro. Mais sauter l'élément zéro semble fonctionner.
Le résultat que j'obtiens est loin d'être suffisant pour identifier les ronflements / respirations par lui-même, mais cela semble être une "confirmation" assez sensible - si je n'obtiens pas le "saut", ce n'est probablement pas un ronflement / respiration.
Je ne l'ai pas analysé de près, mais je soupçonne que ce qui se passe est qu'un sifflement se produit quelque part pendant le souffle / ronflement, et que ce sifflement est ce qui est détecté.
la source
Réponses:
Préliminaires
Cette démonstration est plus simple avec le package MATLAB audioread , qui permet de lire / écrire des fichiers MP3. Alternativement, vous pouvez convertir le fichier MP3 de l'exemple en WAV manuellement.
Étui facile
Avant d'examiner votre fichier problématique, dirigeons-nous vers SoundCloud et saisissons un ronflement décent afin que nous sachions à quoi nous attendre lorsque le SNR est élevé. Il s'agit d'un MP3 stéréo à 44,1 kHz 52s. Téléchargez-le dans un dossier dans le chemin de MATLAB.
Calculons maintenant le spectrogramme (j'ai choisi une fenêtre Hann de 8192 échantillons) et la planéité spectrale:
Les immenses creux dans la planéité spectrale (c'est-à-dire la déviation du bruit blanc) crient "Je ronfle". Nous pouvons facilement le classer en examinant l'écart par rapport à la ligne de base (médiane):
Nous avons eu plus de deux écarts-types d'espace libre. La variation standard elle-même, pour référence, est de 6,8487 .
Étui rigide
Jetons maintenant un œil à votre dossier . Il s'agit d'un fichier WAV de 8 minutes à 8 kHz. Étant donné que le niveau est si bas, il aide à compand le signal.
Voir ces belles trempettes accompagnant chaque ronflement? Moi non plus. Et les beaux sommets? Ils ne ronflent pas, mais le son du sujet en mouvement. L'écart type est dérisoire 0,9388
Conclusion
Vous devez acquérir un signal plus propre si vous voulez vous fier à la planéité spectrale! Je l'avais compand juste pour entendre quoi que ce soit. Si un SNR faible est détecté, incitez l'utilisateur à rapprocher le téléphone ou utilisez un microphone comme le téléphone fourni avec le casque.
La bonne nouvelle est qu'il est possible de détecter le ronflement même dans le cas problématique. Cependant, comme cette question ne concernait pas seulement la détection des ronflements, je m'arrêterai ici et expliquerai comment procéder dans votre autre question .
la source
L'autocorrélation est directement liée à la DFT inverse de la densité spectrale de puissance de votre signal. En ce sens, toutes les informations contenues dans l'amplitude au carré de votre DFT sont également contenues dans la fonction d'autocorrélation.
Cela dit, la seule chose que l'autocorrélation peut vous dire est la présence d'harmoniques. (La distance entre le pic central et le plus haut suivant). Peut-être que la respiration du ronflement VS a différentes harmoniques fondamentales, et si c'est le cas, la `` méthode d'autocorrélation '' serait certainement un bon point de départ pour extraire des caractéristiques (dans ce cas, les harmoniques).
Ainsi, l'autocorrélation du bruit blanc, sera une fonction delta, et n'aura aucun pic secondaire (ou tout autre pic d'ailleurs) hors de son pic central. En revanche, si le signal a des harmoniques, sa fonction d'autocorrélation contiendra des pics secondaires et tertiaires, proportionnels à l'harmonique fondamentale présente. La distance entre le pic principal (centre) et le pic secondaire, la période de votre fréquence fondamentale.
ÉDITER:
Je pense que ce que vous recherchez est une mesure - un nombre - codifiant à quel point une fonction d'autocorrélation est similaire à un delta, VS une fonction d'autocorrélation qui semble avoir de nombreux pics. À cette fin, la mesure de la planéité spectrale pourrait être applicable, ou dans un cas plus général, la mesure de votre moyenne géométrique en moyenne arithmétique.
la source