我試圖實現從here瞭解Viterbi算法
一些代碼,我與我的係數訓練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算法爲例,返回一個整數,然後我可以找到最接近的整數,但是,使用此算法,它將返回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);
誰能告訴我Viterbi解碼器是如何工作的,用於識別是從訓練拿地,到輸入端的最佳路徑的問題?我已經嘗試瞭解碼路徑(q)
上的歐幾里得距離以及漢明距離,但沒有這樣的運氣。
任何幫助,將不勝感激
訓練和樣本信號的長度是否相同?如果是這樣,那麼int *數組可能會返回訓練和樣本的mfcc數組之間的距離。回想一下,通常mfcc意味着你首先將音頻塊分段,然後從每個音頻中提取〜13 coeffecients得到mel特徵,所以mfcc的輸出是一個二維數組,因此兩個樣本(2 2d數組)之間的差異是1d數組,其中每個條目是二維數組的特定行的相應差異。 – 2013-03-14 07:39:46