1

ここからいくつかのコードを実装しようとしています

また、係数を使用してHMMをトレーニングしましたが、ビタビ復号アルゴリズムがどのように機能するかを理解していません。たとえば、次のようになります。

 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).

しかし、これが私が理解していないことです。私は2つの音声信号(トレーニング、サンプル)を比較して、可能な限り最も近い一致を見つけようとしています。たとえば、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)が、そのような運はありませんでした。

どんな助けでも大歓迎です

4

1 に答える 1

1

この例では、(q)は非表示の状態シーケンスであるように思われるため、0から>9までの数値のリストです。テストとトレーニングの2つのオーディオサンプルがあり、2つのシーケンスq_testとq_trainを生成する場合、ノルムがコンポーネントごとの距離である| q_test --q_train |について考えることは、距離の概念を表していないため、役に立ちません。正しくは、HMMの非表示の状態ラベルは任意である可能性があるためです。

距離について考えるより自然な方法は次のとおりです。q_trainが与えられた場合、テストサンプルが同じパスをたどる確率に関心があります。これは、遷移行列と放出確率が得られたら計算できます。

私があなたの質問を誤解しているならば、私に知らせてください。

于 2013-03-14T07:48:13.060 に答える