È un'interpretazione corretta della fase DCT nel calcolo MFCC?


9

Questa è una continuazione della discussione qui . Vorrei commentare lì, ma non ho 50 rappresentanti quindi sto facendo una nuova domanda.

Ecco come comprendo il passaggio DCT nel processo di calcolo dell'MFCC: la logica alla base è quella di separare la correlazione nelle magnitudini log-spettrali (dalla banca del filtro) a causa della sovrapposizione dei filtri. In sostanza, il DCT leviga la rappresentazione dello spettro data da queste magnitudini log-spettrali.

Sarebbe corretto dire che la linea blu nell'immagine qui sotto rappresenta lo spettro rappresentato dal vettore delle magnitudini log-spettrali, e la linea rossa è quel vettore una volta che è stato DCT-ified?

Magnitudini log-spettrali ified DCT (cioè MFCC) rispetto a magnitudini semplicemente log-spettrali ???


dove posso scaricare il codice per il test?
auraham,

L'immagine qui sotto? Nessuna immagine nel post.
Eric Platon,

Risposte:


16

Lasciate che cominci dall'inizio. Il modo standard di calcolare il porcospino è il seguente:

C(x(t))=F1[log(F[x(t)])]

Nel caso dei coefficienti MFCC, il caso è un po 'diverso, ma comunque simile.

Dopo la pre-enfasi e il windowing, si calcola il DFT del segnale e si applica il banco di filtri dei filtri triangolari sovrapposti, separati in scala mel (sebbene in alcuni casi la scala lineare sia migliore di mel):

inserisci qui la descrizione dell'immagine

Rispetto alla definizione di ceppo, ora rappresentavi l'inviluppo dello spettro (spettro ridotto) in scala di frequenza mel. Se lo rappresenti, vedrai che in qualche modo assomiglia allo spettro del segnale originale.

Il prossimo passo è calcolare il logaritmo dei coefficienti ottenuti sopra. Ciò è dovuto al fatto che il cepstrum dovrebbe essere una trasformazione omomorfa che separa il segnale dalla risposta all'impulso del tratto vocale, ecc. Come?

s(t)h(t)

s^(t)=s(t)h(t)

Nella frequenza la convoluzione è una moltiplicazione di spettri:

S^(f)=S(f)H(f)

log(ab)=log(a)+log(b)

Ci aspettiamo anche che la risposta all'impulso non cambi nel tempo, quindi può essere facilmente rimossa sottraendo la media. Ora capisci perché prendiamo i logaritmi delle energie della nostra band.

F1ifft

inserisci qui la descrizione dell'immagine

Quindi ora vedi che ora è piuttosto difficile capire come fosse lo spettro originale. Inoltre, di solito prendiamo solo i primi 12 MFCC, poiché quelli più alti descrivono rapidi cambiamenti nelle energie di log, il che di solito sta peggiorando il tasso di riconoscimento. Quindi i motivi per fare DCT erano i seguenti:

  • Inizialmente è necessario eseguire IFFT, ma è più facile ottenere i coefficienti a valore reale da DCT. Inoltre, non abbiamo più uno spettro completo (tutti i bin di frequenza), ma i coefficienti di energia all'interno dei banchi di filtri mel, quindi l'utilizzo di IFFT è un po 'eccessivo.

  • Si vede nella prima figura che i banchi di filtri si sovrappongono, quindi l'energia proveniente da uno accanto all'altro si sta diffondendo tra due: DCT consente di decorrelarli. Ricorda che questa è una buona proprietà, ad esempio nel caso di modelli di miscele gaussiane, in cui puoi usare matrici di covarianza diagonale (nessuna correlazione tra altri coefficienti), invece di quelle complete (tutti i coefficienti sono correlati) - questo semplifica molto le cose.

  • Un altro modo di decorrelare i coefficienti di frequenza mel sarebbe la PCA (Principal Component Analysis), tecnica utilizzata esclusivamente per questo scopo. Per nostra fortuna è stato dimostrato che DCT è un'ottima approssimazione della PCA quando si tratta di segnali di decorrelazione, quindi un altro vantaggio dell'utilizzo della Trasformazione discreta del coseno.


Qualche letteratura:

Hyoung-Gook Kim, Nicolas Moreau, Thomas Sikora - MPEG-7 Audio and Beyond: indicizzazione e recupero di contenuti audio


1
Perché non possiamo prendere il valore assoluto dei numeri complessi dall'IFFT? Se i numeri complessi sono molto più difficili da gestire, perché prendiamo mai la IFFT quando calcoliamo un ceppo e non facciamo sempre sempre la DCT? Grazie per la spiegazione. Quella cifra è stata particolarmente utile.
acannon828,

1
@ acannon828: vedere gli ultimi 3 punti della mia risposta modificata. Spero che ora spieghi tutto.
jojek

Ottima risposta .. Qualsiasi letteratura tu possa allegare a questo.
Bob Burt,

1
@BobBurt: Ecco qua!
jojek

Grazie per il libro La maggior parte delle cose sembrano spiegate in quello. Il libro tratta anche la teoria del tratto vocale? Non riesco a trovare nulla di simile.
Bob Burt,

3

Più che lisciare il DCT riduce il numero di dimensioni necessarie per rappresentare lo spettro. Il DCT è buono per la riduzione della dimensionalità perché tende a compattare la maggior parte dell'energia dello spettro nei primi coefficienti.


Grazie. Questo mi ha aiutato a capire cosa intendesse @pichenettes per riduzione della dimensionalità.
acannon828,

3

La logica alla base è quella di separare la correlazione nelle magnitudini log-spettrali (dalla banca del filtro) a causa della sovrapposizione dei filtri. In sostanza, il DCT leviga la rappresentazione dello spettro data da queste magnitudini log-spettrali.

Questo non è corretto Esiste una correlazione tra le magnitudini log-spettrali non solo perché si sovrappongono, ma anche perché nessuna sequenza numerica rappresenta una serie "significativa" (come in, che si verifica nel linguaggio e nel suono naturali) di magnitudo log-spettrale. le magnitudini "significative" log-spettrali tendono ad essere piuttosto lisce, con una diminuzione complessiva di energia nelle frequenze più alte, ecc. Si direbbe che la dimensione dello spazio di tutti i vettori di "logaritmo" significativi sia inferiore a 40 o qualunque numero di bande usi; e il DCT può essere visto come una riduzione della dimensionalità per mappare i dati a 40 canali su questo spazio più piccolo.

In sostanza, il DCT leviga la rappresentazione dello spettro data da queste magnitudini log-spettrali.

Il DCT non esegue alcun livellamento. Si vede il livellamento quando si ricostruisce dai dati DCT - il livellamento è dovuto alla perdita di informazioni da parte del DCT e al troncamento del coefficiente che segue.

Ma i coefficienti MFCC non memorizzano lo spettro levigato, ma memorizzano una sequenza di coefficienti DCT non correlati.

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.