Comment déterminer la «variabilité» dans une gamme de fréquences?

8

Il s'agit d'une continuation d'une question précédente .

J'essaie d'analyser les sons de respiration et de ronflement, et bien que je puisse assez bien détecter le ronflement maintenant, la respiration est un plus grand défi.

J'ai appris que si je casse la plage de fréquences analysée (environ 4KHz, échantillonnée à environ 8KHz, avec une taille de trame de 1024) en environ 5 sous-plages, très souvent l'une des sous-plages présente une bonne sensibilité (en utilisant la différence spectrale) qui est enterrée dans le bruit dans la gamme globale. L'astuce consiste à déterminer la sous-gamme à laquelle «faire confiance» quand.

On peut supposer que la sous-gamme "digne de confiance" présenterait une variabilité à un taux compris entre environ 2 Hz et 0,05 Hz, tandis que les "mauvaises" sous-gammes se comporteraient de manière plus aléatoire, la plupart de leur variation étant à des intervalles plus courts.

Je pourrais bricoler une sorte d'algorithme pour lisser les valeurs à une résolution inférieure à la seconde, puis calculer la variabilité sur des intervalles plus longs, mais je me demande s'il n'y a pas d'algorithme "en conserve" pour ce genre de choses - quelque chose avec peut-être un minimum de théorie derrière cela?

Aucune suggestion?

[Remarque: je me rends compte que l'on pourrait, en théorie, utiliser une FFT pour extraire ces informations, mais cela ressemble à utiliser une batte de baseball pour tuer une puce. Peut-être quelque chose d'un peu plus léger?]

Ajoutée:

Dans un sens (pour utiliser une analogie), j'essaie de détecter un signal de "bande de base" dans une transmission RF (seul le "RF" est des fréquences audio et la "bande de base" est inférieure à 8 Hz). Et, dans un sens, le "RF" est un "spectre étalé" - les sons que je veux détecter ont tendance à générer beaucoup d'harmoniques et / ou ont plusieurs composantes de fréquence distinctes, donc si une bande du spectre est trop bruyante je peux probablement en utiliser un autre. Le but est de déterminer fondamentalement une métrique ressemblant au SNR pour les différentes bandes de fréquences, en supposant que la plupart du "bruit" est> 2 Hz et que mon signal est inférieur à 2 Hz.

J'ai en entrée dans cet algorithme les amplitudes brutes (somme des amplitudes FFT à toutes les fréquences incluses) pour chaque bande, mesurées à des intervalles de 8 Hz.

(Il convient de noter que, bien que je n'aie fait aucune mesure formelle du SNR, le SNR global sur le spectre traité semble être fréquemment proche ou inférieur à 1,0 - si vous observez visuellement l'enveloppe sonore dans un outil comme Audacity, aucune modulation du enveloppe est perceptible (même si l'oreille peut clairement discerner les bruits respiratoires. C'est pourquoi il est nécessaire d'analyser les bandes pour trouver celles avec un SNR décent.)

Daniel R Hicks
la source
Par variabilité, voulez-vous dire dans le temps ou entre les fréquences?
Phonon
Variabilité dans le temps. À une fréquence comprise entre environ 0,05 Hz et 2 Hz, en ignorant la variabilité à des intervalles plus ou moins longs.
Daniel R Hicks
1
@DanielRHicks Qu'essayons-nous de détecter ici exactement? Je veux m'assurer de bien comprendre la (les) question (s) - J'essaie de quantifier la ou les fonctions que vous souhaitez mesurer en premier.
Spacey
Voir les détails ajoutés.
Daniel R Hicks

Réponses:

4

Daniel,

En relisant votre question, il semble que ce que j'ai appris à être connu sous le nom de «bande passante de Gabor» pourrait vous être utile dans ce cas, pour vous essayant de mesurer la «variabilité spectrale» (Dilip a fourni une bonne réponse à ma question sur les moments spectraux ici).

Quand je l'ai étudié plus en détail, la bande passante de Gabor semble vraiment être juste une mesure de la façon dont «étaler» le spectre par rapport à sa moyenne. (D'où la manipulation des moments).

Jetez un coup d'œil et voyons ce que vous pensez.

Spacey
la source
1

Ce dont vous avez besoin semble bien plus gros qu'une puce. Vous devrez donc peut-être aller dans la direction opposée et faire plus que juste une FFT. Peut-être une analyse du cepstre à basse fréquence ou du cepstre pour trouver votre fréquence "d'exiter".

hotpaw2
la source
Ouais, ça a l'air d'être intéressant (ou devrais-je dire otni?).
Daniel R Hicks
Je suppose que je ne vois pas de façon évidente d'appliquer "cepstrum" à mes données pour analyser des intervalles de temps plus longs que mon intervalle de trame.
Daniel R Hicks
1

Votre entrée est une représentation de type spectrogramme basse résolution X(m,n)où m est l'indice de trame et n la bande (indice de sous-plage). Droite?

Voici ce que je propose:

Pour chaque n:

  • Calculer l'autocorrélation rn(l) de la séquence X(:,n)
  • Calculez toute mesure de pic de rn(l) pour un décalage l dans la plage de 0,05 à 2 Hz (8 à 31 en supposant un chevauchement de 50% entre les trames).

Choisissez la sous-bande avec le plus haut pic d'autocorrélation (= le plus "pitchy").

Mesures de pointe pour examiner:

  • maximum de l'autocorrélation normalisée sur la plage considérée. maxlLrn(l)rn(0)
  • kurtosis
  • rapport de la moyenne géométrique à la moyenne arithmétique

Ce type de métriques est par exemple utilisé pour distinguer la parole vocale / non vocale.

pichenettes
la source
Pouvez-vous préciser quelle valeur donne la moyenne géométrique sur la moyenne arithmatique? De plus, lorsque vous mentionnez le maximum de l'autocorrélation normalisée par rapport à l'autocorrélation à tau = 0, pourquoi est-ce un chiffre de mérite?
Spacey