Questo è un viaggio laterale dalla mia app russare .
Ho avuto una crepa nel produrre un'autocorrelazione del segnale audio, per vedere se "correla" con il russare / respirare molto bene. Ho un semplice algoritmo in corso (produce 1.0 come elemento zeroth, che è un buon segno), ma mi chiedo come valutare il risultato per determinare se l'autocorrelazione è forte e, forse, come usarlo per separare varie possibili fonti sonore.
Domanda n. 1: l'RMS dell'autocorrelazione (ignorando l'elemento zero) è una metrica di "qualità" buona come una qualsiasi, o c'è qualcosa di meglio?
Per elaborare: voglio semplicemente un modo numerico (vs "guardare" un grafico) per distinguere un segnale altamente autocorrelato da uno meno autocorrelato.
(Non so abbastanza per sapere quali altre domande porre.)
Alcuni risultati iniziali: in alcuni casi l'autocorrelazione (RMS o picco) mostra un salto drammatico su un russare - precisamente la risposta che mi piacerebbe vedere. In altri casi non c'è alcun movimento apparente in queste misure (e questo può essere due russamenti successivi con le due risposte), e in situazioni ad alto rumore le misurazioni in realtà si abbassano (leggermente) durante un russare.
Aggiornamento - 22 maggio: finalmente ho avuto del tempo per lavorarci ancora un po '. (Sono stato estratto su un'altra app che è letteralmente un dolore.) Ho inserito l'output dell'autocorrelazione in una FFT e l'output è piuttosto interessante: mostra un picco abbastanza drammatico vicino all'origine quando inizia un russare.
Quindi ora mi trovo di fronte al problema di quantizzare questo picco in qualche modo. Stranamente, i picchi più alti, in termini di magnitudine assoluta, si verificano altre volte, ma ho provato il rapporto tra picco e media aritmetica e che segue abbastanza bene. Quindi quali sono alcuni buoni modi per misurare il "picco" della FFT. (E per favore non dire che ho bisogno di prenderne una FFT - questa cosa è già vicina a ingoiare la sua coda. :))
Inoltre, mi è venuto in mente che la qualità della FFT potrebbe essere leggermente migliorata se rispecchiassi i risultati dell'autocorrelazione in ingresso, con zero (che è per definizione 1,0 magnitudo) nel mezzo. Ciò metterebbe le "code" su entrambe le estremità. È (forse) una buona idea? L'immagine speculare deve essere verticale o invertita? (Certo, lo proverò indipendentemente da quello che dici, ma ho pensato che forse avrei potuto avere qualche suggerimento sui dettagli.)
Provato piattezza--
I miei casi di test possono essere suddivisi approssimativamente nella categoria "ben educati" e nella categoria "bambini problematici".
Per i casi di test "ben educati", la planarità della FFT dell'autocorrelazione diminuisce drasticamente e il rapporto tra picco e autocorrelazione media sale durante un russare. Il rapporto tra questi due numeri (rapporto di picco diviso per planarità) è particolarmente sensibile, mostrando una salita di 5-10 volte durante un respiro / russare.
Per i "bambini problematici", tuttavia, i numeri vanno esattamente nella direzione opposta. Il rapporto picco / medio diminuisce leggermente mentre la planarità aumenta effettivamente del 50-100%
La differenza tra queste due categorie è (principalmente) triplice:
- I livelli di rumore sono (di solito) più alti nei "bambini problematici"
- I livelli audio sono (quasi sempre) più bassi nei "bambini problematici"
- Il "problema dei bambini" tende a consistere in più respiro e meno russamento effettivo (e devo rilevare entrambi)
Qualche idea?
Aggiornamento - 25/05/2012: è un po 'prematuro fare una danza della vittoria, ma quando ho riflettuto sull'autocorrelazione di un punto, ne ho preso la FFT e poi ho fatto la planarità spettrale, il mio schema di rapporto combinato ha mostrato un buon salto in diversi ambienti diversi. Riflettere l'autocorrelazione sembra migliorare la qualità della FFT.
Un punto minore, tuttavia, è che, poiché il "componente DC" del "segnale" riflesso è zero, il risultato FFT di zeroth è sempre zero, e questo tipo rompe una media geometrica che include zero. Ma saltare l'elemento zeroth sembra funzionare.
Il risultato che sto ottenendo è tutt'altro che sufficiente per identificare russamenti / respiri da solo, ma sembra essere una "conferma" abbastanza sensibile - se non ottengo il "salto", probabilmente non è un russare / respiro.
Non l'ho analizzato da vicino, ma sospetto che ciò che sta accadendo è che un suono sibilante si manifesta da qualche parte durante il respiro / russare e quel fischio è ciò che viene rilevato.