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);
         }
         
     }