Aiuta a calcolare / comprendere gli MFCC: Coefficienti di ceppo di frequenza mel


17

Ho letto pezzi online ma non riesco proprio a mettere tutto insieme. Ho una certa conoscenza di base dei segnali / cose DSP che dovrebbero essere sufficienti prerequisiti per questo. Sono interessato a codificare questo algoritmo in Java ma non lo capisco ancora del tutto, motivo per cui sono qui (conta come matematica, giusto?).

Ecco come penso che funzioni insieme alle lacune nelle mie conoscenze.

  1. Inizia con il tuo esempio audio vocale, ad esempio un file .wav, che puoi leggere in un array. Chiama questo array , dove varia da (quindi campioni). I valori corrispondono all'intensità audio immagino - ampiezze.n 0 , 1 , , N - 1 Nx[n]n0,1,,N-1N

  2. Suddividere il segnale audio in "frame" distinti di circa 10 ms in cui si assume che il segnale vocale sia "stazionario". Questa è una forma di quantizzazione. Pertanto, se la frequenza di campionamento è 44,1 KHz, 10 ms è pari a 441 campioni o valori di .X[n]

  3. Esegui una trasformazione di Fourier (FFT per amor di calcolo). Ora questo viene fatto sull'intero segnale o su ciascun fotogramma separato di ? Penso che ci sia una differenza perché in generale la trasformata di Fourier guarda tutti gli elementi di un segnale, quindi unito a unito a dove sono i frame più piccoli. Ad ogni modo, diciamo che facciamo un po 'di FFT e finiamo con per il resto.F ( x [ n ] ) F ( x 1 [ n ] ) F ( x 2 [ n ] ) F ( x N [ n ] ) x i [ n ] X [ k ]X[n]F(X[n])F(X1[n])F(X2[n])...F(XN[n])Xio[n]X[K]

  4. Mappatura sulla scala Mel e registrazione. So come convertire i numeri di frequenza regolari nella scala Mel. Per ogni di (l '"asse x" se me lo permetti), puoi fare la formula qui: http://en.wikipedia.org/wiki/Mel_scale . Ma che dire dei "valori y" o delle ampiezze di ? Rimangono solo gli stessi valori ma vengono spostati nei punti appropriati sul nuovo asse Mel (x-)? Ho visto in alcuni articoli che c'era qualcosa nel registrare i valori effettivi di perché quindi se cui si presume che uno di quei segnali sia un rumore che non vuoi , l'operazione di registro su questa equazione trasforma il rumore moltiplicativo in rumore additivo, che si spera possa essere filtrato (?).KX[K]X[K]X[K]X[k]=A[k]B[k]

  5. Ora il passo finale è prendere un DCT della tua modificata dall'alto (tuttavia alla fine è stata modificata). Quindi prendi le ampiezze di questo risultato finale e quelli sono i tuoi MFCC. Ho letto qualcosa sull'eliminazione dei valori ad alta frequenza.X[K]

Quindi sto cercando di capire come calcolare questi ragazzi passo dopo passo, e chiaramente alcune cose mi sfuggono dall'alto.

Inoltre, ho sentito parlare dell'utilizzo dei "banchi filtro" (sostanzialmente una matrice di filtri passa banda) e non so se questo si riferisce alla creazione dei frame dal segnale originale, o forse crei i frame dopo la FFT?

Infine, c'è qualcosa che ho visto sugli MFCC con 13 coefficienti?


1
Questa è un'ottima domanda, ma qui c'è molto da rispondere. Consiglierei di suddividerlo in 2-3 domande diverse (puoi fare riferimento l'una all'altra se vuoi mantenere la continuità) in modo che possa essere più facilmente risposto.
jonsca,

Poiché in precedenza hai posto la stessa domanda su math.SE (e ti è stato consigliato che dsp.SE è una casa migliore per questo), forse dovresti eliminare la domanda su math.SE.
Dilip Sarwate,

Ho eliminato la versione su math.SE
YoungMoney il

Tutorial molto bello e informativo graziesssssssssssss

1
Ehi, nella tua domanda, hai detto che "Mappatura sulla scala Mel e registrazione. So come convertire i numeri di frequenza regolari sulla scala Mel". mi potete aiutare per calcolare questa parte. Dato che ho il mio output FFt di x [k] = 1 * 184 ma il mio filtro passa banda triangolare è impostato su 20 * 3. allora come posso moltiplicare entrambi. Per favore, ASAp
Ayush Agrawal,

Risposte:


25

Passo dopo passo...

1. e 2 . Questo è corretto. Si noti che i frame di solito si sovrappongono, ad esempio il frame 0 è campioni da 0 a 440; il frame 1 è campioni da 220 a 660; il frame 2 è campioni da 440 a 880 e così via ... Notare anche che una funzione finestra viene applicata ai campioni nel frame.

3 . La trasformazione di Fourier viene eseguita per ciascun fotogramma. La motivazione alla base di ciò è semplice: un segnale vocale varia nel tempo, ma è fermo su segmenti brevi. Si desidera analizzare ciascun segmento corto individualmente, perché su questi segmenti il ​​segnale è abbastanza semplice da essere descritto in modo efficiente con pochi coefficienti. Pensa a qualcuno che dice "ciao". Non vuoi vedere tutti i fonemi collassati in un singolo spettro (FFT comprime le informazioni temporali) analizzando tutto il suono in una volta. Volete vedere "hhhheeeeeeeeeeeelloooooooooo" per riconoscere la parola tappa per tappa, quindi deve essere suddivisa in brevi segmenti.

NN=40

Una volta definite queste frequenze, calcoliamo una somma ponderata delle magnitudini (o energie) FFT attorno a ciascuna di queste frequenze.

Guarda la seguente immagine, che rappresenta un banco di filtri con 12 bin:

Banco di filtri in frequenza mel con 12 canali

L'ottavo bin ha una frequenza centrale di circa 2kHz. L'energia nell'ottavo contenitore viene ottenuta sommando le energie FFT ponderate tra i 1600 e i 2800 Hz circa - con il peso che raggiunge un picco di circa 2 kHz.

Nota di implementazione: Questo gruppo di somme ponderate può essere fatto in una singola operazione: una moltiplicazione di matrice di una "matrice di banca di filtri" per il vettore di energie FFT.

Quindi in questa fase abbiamo "riassunto" lo spettro FFT in un insieme di 40 (12 nell'illustrazione) valori di energia, ciascuno corrispondente a una diversa gamma di frequenze. Prendiamo il registro di questi valori.

KK=13


Solo una breve domanda sul banco di filtri Mel: l'altezza / ampiezza varia da 1,8 a 2 è importante o può essere l'altezza dell'unità (1)?
YoungMoney

1
Questo non è importante L'effetto dell'utilizzo di un max. l'ampiezza tra 1,0 e 2,0 sposterà l'energia di log solo di una costante nella fase 4. e quindi avrà un impatto solo sul primo coefficiente nella fase 5 (che spesso viene scartata comunque). Si noti che alcune implementazioni utilizzano la normalizzazione dell'energia in modo che più ampio è il filtro, minore è la sua ampiezza di picco ( i.imgur.com/IOaLa.gif ). Ciò potrebbe causare lievi variazioni delle prestazioni nelle applicazioni di riconoscimento. Se guardi le implementazioni MFCC in uso, ci sono in realtà molte piccole variazioni ad ogni passo - bit.ly/ULatdL
pichenettes

È un vecchio argomento qui, ma c'è qualcosa che dovrei chiedere sul grafico. Se il Nyquist è 4kHz, perché quei filtri limitati di banda superano il punto 4kHz. va bene per MFCC. Normalmente, non vuoi che il filtro passi il Nyquist? Ho ragione?
Celdor il

2
Hai un riferimento al perché vengono utilizzate le frequenze N = 40 mel filterbank bank (o 26, un altro valore comune che ho visto)?
James Owers,

1
da dove viene il 39 melpassaggio 4?
Gert Kommer,
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.