簡體   English   中英

了解維特比算法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM