diff viterbi.cpp @ 122:21181297da99 monophonicness

replacing unsigned/size_t iterators by int and casting others to int
author matthiasm
date Fri, 15 Apr 2011 11:31:37 +0000
parents 7a8956e903e1
children 3c731acad404
line wrap: on
line diff
--- a/viterbi.cpp	Fri Apr 15 10:21:07 2011 +0000
+++ b/viterbi.cpp	Fri Apr 15 11:31:37 2011 +0000
@@ -4,11 +4,11 @@
 
 std::vector<int> ViterbiPath(std::vector<double> init, std::vector<vector<double> > trans, std::vector<vector<double> > obs, double *delta, vector<double> *scale) {
     
-    unsigned nState = init.size();
-    unsigned nFrame = obs.size();
+    int nState = init.size();
+    int nFrame = obs.size();
     
     // check for consistency
-    if (trans[0].size() != nState || trans.size() != nState || obs[0].size() != nState) {
+    if ((int)trans[0].size() != nState || (int)trans.size() != nState || (int)obs[0].size() != nState) {
         cerr << "ERROR: matrix sizes inconsistent." << endl;
     }
 
@@ -18,24 +18,24 @@
     double deltasum = 0;
     
     /* initialise first frame */
-    for (unsigned iState = 0; iState < nState; ++iState) {
+    for (int iState = 0; iState < nState; ++iState) {
         delta[iState] = init[iState] * obs[0][iState];
         deltasum += delta[iState];
     }
-    for (unsigned iState = 0; iState < nState; ++iState) delta[iState] /= deltasum; // normalise (scale)
+    for (int iState = 0; iState < nState; ++iState) delta[iState] /= deltasum; // normalise (scale)
     scale->push_back(1.0/deltasum);
     psi.push_back(vector<int>(nState,0));
     
     /* rest of the forward step */
-    for (unsigned iFrame = 1; iFrame < nFrame; ++iFrame) {
+    for (int iFrame = 1; iFrame < nFrame; ++iFrame) {
         deltasum = 0;
         psi.push_back(vector<int>(nState,0));
         /* every state wants to know which previous state suits it best */
-        for (unsigned jState = 0; jState < nState; ++jState) {            
+        for (int jState = 0; jState < nState; ++jState) {            
             int bestState = nState - 1;
             double bestValue = 0;
             if (obs[iFrame][jState] > 0) {
-                for (unsigned iState = 0; iState < nState; ++iState) {
+                for (int iState = 0; iState < nState; ++iState) {
                     double currentValue = delta[(iFrame-1) * nState + iState] * trans[iState][jState];
                     if (currentValue > bestValue) {
                         bestValue = currentValue;
@@ -49,12 +49,12 @@
             psi[iFrame][jState] = bestState;
         }
         if (deltasum > 0) {
-            for (unsigned iState = 0; iState < nState; ++iState) {            
+            for (int iState = 0; iState < nState; ++iState) {            
                 delta[iFrame * nState + iState] /= deltasum; // normalise (scale)
             }
             scale->push_back(1.0/deltasum);
         } else {
-            for (unsigned iState = 0; iState < nState; ++iState) {            
+            for (int iState = 0; iState < nState; ++iState) {            
                 delta[iFrame * nState + iState] = 1.0/nState;
             }
             scale->push_back(1.0);
@@ -64,7 +64,7 @@
     
     /* initialise backward step */
     double bestValue = 0;
-    for (unsigned iState = 0; iState < nState; ++iState) {
+    for (int iState = 0; iState < nState; ++iState) {
         double currentValue = delta[(nFrame-1) * nState + iState];
         if (currentValue > bestValue) {
             bestValue = currentValue;