Beispiel #1
0
void Gradient::viterbiDecoding(Beliefs bel, iVector& ystar, dMatrix& pystar)
{
  int nbNodes, nbStates, xi, yi;
  double max_val;
  
  nbNodes = (int)bel.belStates.size();
  nbStates = 0;
  if(nbNodes > 0)
    nbStates = bel.belStates[0].getLength();
  
  ystar.create(nbNodes);
  pystar.create(nbNodes,nbStates);
  
  // Viterbi decoding
  for( xi=0; xi<nbNodes; xi++) {
    ystar.setValue(xi, 0);
    max_val = bel.belStates[xi][0];
    pystar.setValue(0, xi, bel.belStates[xi][0]);
    for( yi=1; yi<nbStates; yi++) {
      pystar.setValue(yi, xi, bel.belStates[xi][yi]);
      if(max_val < bel.belStates[xi][yi]) {
        ystar.setValue(xi,yi);
        max_val = bel.belStates[xi][yi];
      }
    }
  }
}