comparison viterbi.cpp @ 94:19f3b33a19fb matthiasm-plugin

corrected viterbi frame initialisation
author matthiasm
date Thu, 02 Dec 2010 23:39:57 +0900
parents b6cddb109482
children 99b87ce4bb70
comparison
equal deleted inserted replaced
93:12cdf228c47d 94:19f3b33a19fb
10 10
11 // check for consistency 11 // check for consistency
12 if (trans[0].size() != nState || trans.size() != nState || obs[0].size() != nState) { 12 if (trans[0].size() != nState || trans.size() != nState || obs[0].size() != nState) {
13 cerr << "ERROR: matrix sizes inconsistent." << endl; 13 cerr << "ERROR: matrix sizes inconsistent." << endl;
14 } 14 }
15
16 for (int iState = 0; iState < nState; ++iState) delta[iState] = init[iState];
17 for (int iFrame = 1; iFrame < nFrame; ++iFrame) {
18 for (int iState = 0; iState < nState; ++iState) delta[iFrame*nState + iState];
19 }
20 15
21 // vector<vector<double> > delta; // "matrix" of conditional probabilities 16 // vector<vector<double> > delta; // "matrix" of conditional probabilities
22 vector<vector<int> > psi; // "matrix" of remembered indices of the best transitions 17 vector<vector<int> > psi; // "matrix" of remembered indices of the best transitions
23 vector<int> path = vector<int>(nFrame, nState-1); // the final output path (current assignment arbitrary, makes sense only for Chordino, where nChord-1 is the "no chord" label) 18 vector<int> path = vector<int>(nFrame, nState-1); // the final output path (current assignment arbitrary, makes sense only for Chordino, where nChord-1 is the "no chord" label)
24 vector<double> scale = vector<double>(nFrame, 0); // remembers by how much the vectors in delta are scaled. 19 vector<double> scale = vector<double>(nFrame, 0); // remembers by how much the vectors in delta are scaled.
26 double deltasum = 0; 21 double deltasum = 0;
27 22
28 /* initialise first frame */ 23 /* initialise first frame */
29 // delta.push_back(init); 24 // delta.push_back(init);
30 for (int iState = 0; iState < nState; ++iState) { 25 for (int iState = 0; iState < nState; ++iState) {
31 delta[iState] *= obs[0][iState]; 26 delta[iState] = init[iState] * obs[0][iState];
32 deltasum += delta[iState]; 27 deltasum += delta[iState];
33 } 28 }
34 for (int iState = 0; iState < nState; ++iState) delta[iState] /= deltasum; // normalise (scale) 29 for (int iState = 0; iState < nState; ++iState) delta[iState] /= deltasum; // normalise (scale)
35 scale.push_back(1.0/deltasum); 30 scale.push_back(1.0/deltasum);
36 psi.push_back(vector<int>(nState,0)); 31 psi.push_back(vector<int>(nState,0));