Ejemplo n.º 1
0
/* HTS_PStream_conv_gv: subfunction for mlpg using GV */
static void HTS_PStream_conv_gv(HTS_PStream *pst, const int m)
{
   int t;
   double ratio;
   double mean;
   double vari;

   HTS_PStream_calc_gv(pst, &mean, &vari);
   ratio = sqrt(pst->gv_mean[m] / vari);
   for (t = 0; t < pst->length; t++)
      pst->gv_buff[t] = ratio * (pst->gv_buff[t] - mean) + mean;
}
Ejemplo n.º 2
0
/* HTS_PStream_calc_derivative: subfunction for mlpg using GV */
static double HTS_PStream_calc_derivative(HTS_PStream * pst, const int m)
{
   int t, i;
   double mean;
   double vari;
   double dv;
   double h;
   double gvobj;
   double hmmobj;
   const double w = 1.0 / (pst->win_size * pst->length);

   HTS_PStream_calc_gv(pst, &mean, &vari);
   gvobj = -0.5 * W2 * vari * pst->gv_vari[m] * (vari - 2.0 * pst->gv_mean[m]);
   dv = -2.0 * pst->gv_vari[m] * (vari - pst->gv_mean[m]) / pst->length;

   for (t = 0; t < pst->length; t++) {
      pst->sm.g[t] = pst->sm.wuw[t][0] * pst->gv_buff[t];
      for (i = 1; i < pst->width; i++) {
         if (t + i < pst->length)
            pst->sm.g[t] += pst->sm.wuw[t][i] * pst->gv_buff[t + i];
         if (t + 1 > i)
            pst->sm.g[t] += pst->sm.wuw[t - i][i] * pst->gv_buff[t - i];
      }
   }

   for (t = 0, hmmobj = 0.0; t < pst->length; t++) {
      hmmobj +=
          W1 * w * pst->gv_buff[t] * (pst->sm.wum[t] - 0.5 * pst->sm.g[t]);
      h = -W1 * w * pst->sm.wuw[t][1 - 1]
          - W2 * 2.0 / (pst->length * pst->length) *
          ((pst->length - 1) * pst->gv_vari[m] * (vari - pst->gv_mean[m])
           + 2.0 * pst->gv_vari[m] * (pst->gv_buff[t] -
                                      mean) * (pst->gv_buff[t] - mean));
      if (pst->gv_switch[t])
         pst->sm.g[t] =
             1.0 / h * (W1 * w * (-pst->sm.g[t] + pst->sm.wum[t]) +
                        W2 * dv * (pst->gv_buff[t] - mean));
      else
         pst->sm.g[t] = 1.0 / h * (W1 * w * (-pst->sm.g[t] + pst->sm.wum[t]));
   }

   return (-(hmmobj + gvobj));
}