我正在尝试从这里实现一些代码
我已经用我的系数训练了 HMM,但不明白 Viterbi 解码器算法是如何工作的,例如:
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).
但这是我不明白的:我试图比较两个语音信号(训练、样本)以找出最接近的可能匹配。例如,使用 DTW 算法,返回一个整数,然后我可以在其中找到最接近的整数,但是,使用此算法,它返回 a int* array
,因此很难区分。
以下是当前程序的工作方式:
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);
谁能告诉我维特比解码器如何解决识别从训练到输入的最佳路径的问题?我在解码路径上尝试了欧几里得距离和汉明距离,(q)
但没有这样的运气。
任何帮助将不胜感激