[英]Understanding Viterbi Algorithm
我正在嘗試從這里實現一些代碼
而且我已經用系數訓練了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);
誰能告訴我維特比解碼器是如何工作的,以便確定從培訓到輸入的最佳途徑是哪一條? 我在解碼路徑(q)
上嘗試了歐幾里得距離和漢明距離,但沒有這樣的運氣。
任何幫助將不勝感激
在此示例中,在我看來(q)是隱藏狀態序列,因此從0-> 9的數字列表。 如果您有兩個音頻樣本,分別進行測試和訓練,並生成兩個序列q_test和q_train,則考慮| q_test-q_train |(范數為逐分量距離)是沒有用的,因為它不表示距離的概念正確,因為HMM中的隱藏狀態標簽可能是任意的。
考慮距離的一種更自然的思考方式可能是:在給定q_train的情況下,您對測試樣本采用相同路徑的可能性很感興趣,一旦擁有轉換矩陣和發射概率,就可以計算出該路徑。
如果我誤解了您的問題,請告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.