⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 addlog.c

📁 about sound recognition.i want to downlod
💻 C
字号:
/** * @file   addlog.c * @author Akinobu LEE * @date   Thu Feb 17 13:23:50 2005 *  * <JA> * @brief  滦眶猛の光庐下换簇眶 * </JA> *  * <EN> * @brief  Rapid addition of log values * </EN> *  * $Revision: 1.4 $ *  *//* * Copyright (c) 1991-2006 Kawahara Lab., Kyoto University * Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology * Copyright (c) 2005-2006 Julius project team, Nagoya Institute of Technology * All rights reserved */#include <sent/stddefs.h>#include <sent/hmm.h>#define TBLSIZE 500000		///< Table size (precision depends on this)#define VRANGE 15               ///< Must be larger than -LOG_ADDMIN#define TMAG 33333.3333         ///< TBLSIZE / VRANGEstatic LOGPROB tbl[TBLSIZE];    ///< Table of @f$\log (1+e^x)@f$static boolean built_tbl = FALSE;///< TRUE after tbl has built/**  * @brief  Generate a value tables of @f$\log (1+e^x)@f$. * * @f$x@f$ is from 0 to (- VRANGE), and table size is TBLSIZE. *  */voidmake_log_tbl(){  LOGPROB f;  int i;  if (built_tbl == FALSE) {    j_printerr("Generating addlog table...");    for (i=0;i<TBLSIZE;i++){      f = - ((float)VRANGE * (float)i / (float)TBLSIZE);      tbl[i] = log(1 + exp(f));      /*if (i < 10 || i > TBLSIZE - 10) j_printf("%f: %d(%f)\n", f, i, tbl[i]);*/    }    j_printerr("%d kb...done\n",(TBLSIZE * sizeof(LOGPROB)) / 1024);    built_tbl = TRUE;  }}/**  * Rapid computation of @f$\log (e^x + e^y)@f$. * * If value differs more than LOG_ADDMIN, the larger value will be returned * as is. *  * @param x [in] log value * @param y [in] log value *  * @return result value. */LOGPROBaddlog(LOGPROB x, LOGPROB y){  /* return(log(exp(x)+exp(y))) */  LOGPROB tmp;  unsigned int idx;    if (x < y) {    if ((tmp = x - y) < LOG_ADDMIN) return y;    else {      idx = (unsigned int)((- tmp) * TMAG + 0.5);      /* j_printf("%f == %f\n",tbl[idx],log(1 + exp(tmp))); */      return (y + tbl[idx]);    }  } else {    if ((tmp = y - x) < LOG_ADDMIN) return x;    else {      idx =(unsigned int)((- tmp) * TMAG + 0.5);      /* j_printf("%f == %f\n",tbl[idx],log(1 + exp(tmp))); */      return (x + tbl[idx]);    }  }}/**  * Rapid computation of @f$\log (\sum_{i=1}^N e^{x_i})@f$. *  * @param a [in] array of log values * @param n [in] length of above *  * @return the result value. */LOGPROBaddlog_array(LOGPROB *a, int n){  LOGPROB tmp;  LOGPROB x,y;  unsigned int idx;  y = LOG_ZERO;  for(n--; n >= 0; n--) {    x = a[n];    if (x > y) {      tmp = x; x = y; y = tmp;    }    /* always y >= x */    if ((tmp = x - y) < LOG_ADDMIN) continue;    else {      idx = (unsigned int)((- tmp) * TMAG + 0.5);      y += tbl[idx];    }  }  return(y);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -