Mercurial > hg > nnls-chroma
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)); |