Come determinare la "variabilità" in un intervallo di frequenza?


8

Questa è una continuazione di una domanda precedente .

Sto cercando di analizzare i suoni della respirazione e del russare, e mentre ora riesco a rilevare abbastanza bene il russare, la respirazione è una sfida più grande.

Ho imparato che se interrompo la gamma di frequenza analizzata (circa 4KHz, campionata a circa 8KHz, con una dimensione dei fotogrammi di 1024) in circa 5 subrange, molto spesso uno dei subrange mostra una buona sensibilità (usando la differenza spettrale) che è sepolta nel rumore nella gamma complessiva. Il trucco è determinare quale sottofondo di "fidarsi" quando.

Presumibilmente il subrange "affidabile" mostrerebbe una variabilità a una velocità compresa tra circa 2Hz e 0,05Hz, mentre i subrange "cattivi" si comporterebbero in modo più casuale, con la maggior parte delle loro variazioni a intervalli più brevi.

Potrei mettere insieme una sorta di algoritmo per appianare i valori con una risoluzione inferiore al secondo e quindi calcolare la variabilità su intervalli più lunghi, ma mi chiedo se non ci sia un algoritmo "fisso" per questo tipo di cose - qualcosa con forse un briciolo di teoria dietro di esso?

Eventuali suggerimenti?

[Nota: mi rendo conto che si potrebbe, in teoria, usare una FFT per estrarre queste informazioni, ma sembra come usare una mazza da baseball per uccidere una pulce. Forse qualcosa di un po 'più leggero?]

Inserito il:

In un certo senso (per usare un'analogia) sto cercando di rilevare un segnale "baseband" in una trasmissione RF (solo la "RF" è frequenze audio e la "baseband" è inferiore a 8Hz). E, in un certo senso, la "RF" è "spettro diffuso" - i suoni che voglio rilevare tendono a generare molte armoniche e / o hanno diversi componenti di frequenza separati, quindi se una banda dello spettro è troppo rumorosa posso probabilmente ne farò uso un altro. L'obiettivo è fondamentalmente determinare alcune metriche simili a SNR per le varie bande di frequenza, supponendo che la maggior parte del "rumore" sia> 2Hz e il mio segnale sia inferiore a 2Hz.

Ho come input per questo algoritmo le ampiezze grezze (somma delle ampiezze FFT a tutte le frequenze incluse) per ciascuna banda, misurate a intervalli di 8Hz.

(Va notato che, sebbene non abbia eseguito alcuna misurazione SNR formale, l'SNR complessivo attraverso lo spettro elaborato sembra essere frequentemente vicino o inferiore a 1,0 - se si osserva visivamente l'inviluppo del suono in uno strumento come Audacity nessuna modulazione del l'inviluppo è evidente (anche se l'orecchio può discernere chiaramente i suoni della respirazione). Ecco perché è necessario analizzare le bande per trovare quelli con SNR decente.)


Per variabilità, intendi nel tempo o tra le frequenze?
Phonon,

Variabilità nel tempo. A una velocità compresa tra circa 0,05Hz e 2Hz, ignorando la variabilità a intervalli più o meno lunghi.
Daniel R Hicks,

1
@DanielRHicks Cosa stiamo cercando di rilevare esattamente qui? Voglio essere sicuro di comprendere le domande - Sto cercando di quantificare le caratteristiche che vuoi misurare per prime.
Spacey,

Vedi i dettagli aggiunti.
Daniel R Hicks,

Risposte:


4

Daniel,

Rileggendo la tua domanda, sembra che ciò che ho imparato a essere conosciuto come "larghezza di banda di Gabor" possa esserti utile in questo caso, perché cerchi di misurare la "variabilità spettrale" (Dilip ha fornito una buona risposta alla mia domanda su Spectral Moments qui).

Quando l'ho studiato ulteriormente, la larghezza di banda di Gabor sembra davvero essere solo una misura di quanto "diffuso" lo spettro sia dalla sua media. (Da qui la manipolazione dei momenti).

Dai un'occhiata e vedi cosa ne pensi.



1

Ciò di cui hai bisogno sembra molto più grande di una pulce. Quindi potrebbe essere necessario andare nella direzione opposta e fare più di un semplice FFT. Forse un ceppo a bassa frequenza o un'analisi cefalica per trovare la frequenza "exiter".


Sì, sembra che valga la pena esaminare (o dovrei dire otni?).
Daniel R Hicks,

Immagino di non vedere un modo ovvio di applicare "cepstrum" ai miei dati per analizzare intervalli di tempo più lunghi del mio intervallo di frame.
Daniel R Hicks,

1

Il tuo input è una rappresentazione simile a uno spettrogramma a bassa risoluzione X(m,n)dove m è l'indice del frame e n la banda (indice di sottorange). Giusto?

Ecco cosa suggerisco:

Per ogni n:

  • Calcola l'autocorrelazione rn(l) della sequenza X(:,n)
  • Calcola qualsiasi misura di picco di rn(l) per un ritardo l nell'intervallo da 0,05 a 2 Hz (da 8 a 31 presupponendo una sovrapposizione del 50% tra i frame).

Scegli il sottoband con il picco più alto di autocorrelazione (= il più "pungente").

Misure di picco per esaminare:

  • massimo dell'autocorrelazione normalizzata nell'intervallo considerato. maxlLrn(l)rn(0)
  • curtosi
  • rapporto tra media geometrica e aritmetica

Questo tipo di metriche viene ad esempio utilizzato per distinguere il parlato espresso / non sonoro.


Potete per favore elaborare quale valore dà la media geometrica rispetto alla media aritmica? Inoltre, quando si parla del massimo dell'autocorrelazione normalizzata rispetto all'autocorrelazione a tau = 0, perché è una figura di merito?
Spacey,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.