/* constantHMM -
 *  Initialises an HMM with constant transition log probabilities.
 */
void constantHMM(Hmm *m, int upper_triangular)
{ int u, v;
  zeroHMM(m);
  for (u = 0; u<m->uu; u++)
  { VECTOR(m->logB)[u] = 0;
    for (v = upper_triangular?u:0; v<m->uu; v++) MATRIX(m->logA)[u][v] = 0;}
  normaliseHMM(m, upper_triangular);}
/* randomiseHMM -
 *  Initialises an HMM with normalised random transition log probabilities.
 */
void randomiseHMM(Hmm *m, int upper_triangular)
{ int u, v;
  zeroHMM(m);
  for (u = 0; u<m->uu; u++)
  { VECTOR(m->logB)[u] = my_log(RANDOM);
    for (v = upper_triangular?u:0; v<m->uu; v++)
    { MATRIX(m->logA)[u][v] = my_log(RANDOM);}}
  normaliseHMM(m, upper_triangular);}
Beispiel #3
0
/* Add noise to m */
void noiseHMM(Hmm *m, int upper_triangular, Real delta){
  int u, v;
  for (u = 0; u < m->uu; u ++){
    VECTOR(m->logB)[u] = add_exp(VECTOR(m->logB)[u], my_log(delta * RANDOM));
    for (v = (upper_triangular? u: 0); v < m->uu; v ++){
      MATRIX(m->logA)[u][v] = add_exp(MATRIX(m->logA)[u][v], my_log(delta * RANDOM));
    }
  }
  normaliseHMM(m, upper_triangular);
}
Beispiel #4
0
void smoothHMM(Hmm *m, int upper_triangular, Real eps){
  int u, v;
  for (u = 0; u < m->uu; u ++){
    if (VECTOR(m->logB)[u] == NEGATIVE_INFINITY)
      VECTOR(m->logB)[u] = my_log(eps);
    for (v = (upper_triangular? u: 0); v < m->uu; v ++)
      if (MATRIX(m->logA)[u][v] == NEGATIVE_INFINITY)
	MATRIX(m->logA)[u][v] = my_log(eps);
  }
  normaliseHMM(m, upper_triangular);
}