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.
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 N
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 .
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 ]
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 (?).
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.
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?