protected override void UpdateEmissions()
{
double[,] B = model.Emissions;
int states = model.States;
int symbols = model.Symbols;
for (int i = 0; i < states; i++)
{
for (int j = 0; j < symbols; j++)
{
double sum = 0, num = 0;
for (int k = 0; k < discreteObservations.Length; k++)
{
int T = discreteObservations[k].Length;
double[,] gammak = Gamma[k];
for (int l = 0; l < T; l++)
{
if (discreteObservations[k][l] == j)
num += gammak[l, i];
sum += gammak[l, i];
}
}
// avoid locking a parameter in zero.
if (num == 0) num = 1e-10;
B[i, j] = (sum != 0) ? num/sum : num;
}
}
}