Je suis en train de mettre en œuvre un code de hereComprendre algorithme de Viterbi
Et je me suis entraîné HMM avec mes coefficients mais ne comprennent pas comment fonctionne l'algorithme de Viterbi décodeur, par exemple:
viterbi_decode(MFCC, M, model, q);
where MFCC = coefficents
M = size of MFCC
model = Model of HMM training using the MFCC coefficients
q = unknown (believed to be the outputted path).
Mais voici ce que je ne comprends pas: j'essaie de comparer deux signaux de parole (entraînement, échantillon) pour trouver le plus proche possible. Avec l'algorithme DTW par exemple, un seul entier est retourné où je peux alors trouver le plus proche, cependant, avec cet algorithme, il renvoie un int* array
et donc la différenciation est difficile.
Voici comment fonctionne le programme actuel:
vector<DIMENSIONS_2> MFCC = mfcc.transform(rawData, sample_rate);
int N = MFCC.size();
int M = 13;
double** mfcc_setup = setupHMM(MFCC, N, M);
model_t* model = hmm_init(mfcc_setup, N, M, 10);
hmm_train(mfcc_setup, N, model);
int* q = new int[N];
viterbi_decode(mfcc_setup, M, model, q);
Quelqu'un pourrait-il s'il vous plaît me dire comment fonctionne le décodeur Viterbi pour le problème de l'identification qui est le meilleur chemin à prendre de la formation, à l'entrée? J'ai essayé à la fois la distance euclidienne ainsi que la distance de Hamming sur le chemin de décodage (q)
mais n'a pas eu une telle chance.
Toute aide serait grandement appréciée
Les signaux d'apprentissage et d'échantillonnage sont-ils de même longueur? Si c'est le cas, le tableau int * peut renvoyer les distances entre le tableau mfcc de l'entraînement et l'échantillon. Rappelons que habituellement mfcc signifie que vous coupez d'abord l'audio en segments puis extrayez ~ 13 coeffecients de chaque audio obtenez les fonctions mel, donc la sortie de mfcc est un tableau 2d, donc la différence entre deux échantillons (2 2d tableaux), est un 1d tableau où chaque entrée est la différence respective d'une rangée particulière des tableaux 2d. –