Mercurial > hg > nnls-chroma
diff viterbi.cpp @ 106:99b87ce4bb70 monophonicness
implemented loglikelihood stuff
author | matthiasm |
---|---|
date | Sun, 19 Dec 2010 21:55:01 +0900 |
parents | 19f3b33a19fb |
children | bf894897436d |
line wrap: on
line diff
--- a/viterbi.cpp Sat Dec 18 21:41:40 2010 +0900 +++ b/viterbi.cpp Sun Dec 19 21:55:01 2010 +0900 @@ -2,7 +2,7 @@ #include "viterbi.h" #include <iostream> -std::vector<int> ViterbiPath(std::vector<double> init, std::vector<vector<double> > trans, std::vector<vector<double> > obs, double *delta) { +std::vector<int> ViterbiPath(std::vector<double> init, std::vector<vector<double> > trans, std::vector<vector<double> > obs, double *delta, vector<double> *scale) { int nState = init.size(); int nFrame = obs.size(); @@ -16,7 +16,7 @@ // vector<vector<double> > delta; // "matrix" of conditional probabilities vector<vector<int> > psi; // "matrix" of remembered indices of the best transitions 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) - vector<double> scale = vector<double>(nFrame, 0); // remembers by how much the vectors in delta are scaled. + // vector<double> scale = vector<double>(nFrame, 0); // remembers by how much the vectors in delta are scaled. double deltasum = 0; @@ -27,7 +27,7 @@ deltasum += delta[iState]; } for (int iState = 0; iState < nState; ++iState) delta[iState] /= deltasum; // normalise (scale) - scale.push_back(1.0/deltasum); + scale->push_back(1.0/deltasum); psi.push_back(vector<int>(nState,0)); /* rest of the forward step */ @@ -57,12 +57,12 @@ for (int iState = 0; iState < nState; ++iState) { delta[iFrame * nState + iState] /= deltasum; // normalise (scale) } - scale.push_back(1.0/deltasum); + scale->push_back(1.0/deltasum); } else { for (int iState = 0; iState < nState; ++iState) { delta[iFrame * nState + iState] = 1.0/nState; } - scale.push_back(1.0); + scale->push_back(1.0); } }