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

📄 bw_pdf_1.cc

📁 这是处理语音信号的程序
💻 CC
字号:
// file: bw_pdf_1.cc//// isip include files//#include "bw_train.h"#include "bw_train_constants.h"// method: update_pdf_cc//// arguments://  State** states : (output) the updated states//  float_8*** means : (input) the accumulated means//  float_8*** covars : (input) the accumulated covariance//  float_8** mix_weights : (input) the accumulated weights//  float_8* states_occ : (input) the accumulated state occupancy//  int_4 num_states : (input) the number of total states//  int_4 num_features : (input) the number of features;//  float_4* var_floor : (input) variance floor//  Model** models : (input) the models//  int_4* model_access_counts : (input) the number of times each model was//                               accessed//  int_4 num_models : (input) the number of models//  int_4 min_count : (input) the minimum number of times a model must occur//                    for its states to be updated//// return a logical flag to indicate success//// this method updates the means and covariances of all the// states in all the models if necessary//logical_1 update_pdf_cc(Train_State** states_a, float_8*** means_a,			float_8*** covars_a, float_8** mix_weights_a,			float_8* states_occ_a, int_4 num_states_a,			int_4 num_features_a, float_4* var_floor_a,			Train_Model** models_a, int_4* model_access_counts_a,			int_4 num_models_a, int_4 min_count_a) {    // local variables  //  int_4 num_mix = (int_4)0;  float_4 tmp_covar = (float_4)0.0;  float_4* temp_scale = (float_4*)NULL;  float_4* old_weights = (float_4*)NULL;  float_4* old_scale = (float_4*)NULL;  float_4** old_mean = (float_4**)NULL;  float_4** old_covar = (float_4**)NULL;    logical_1* update_state = new logical_1[num_states_a];  for (int_4 i = 0; i < num_states_a; i++) {    update_state[i] = ISIP_FALSE;  }    // loop over each model's states and see if they need to be updated  //  for (int_4 mod_num = 0; mod_num < num_models_a; mod_num++) {    // check if a model has been accessed required number    // of times for it to get updated    //    if (model_access_counts_a[mod_num] >= min_count_a) {            Train_Model* this_model = models_a[mod_num];            // loop over the number of states in the model      //      Train_State** st_list = this_model->get_states_cc();      for (int_4 st_num = 1; st_num < this_model->get_num_states_cc() - 1; 	   st_num++) {		// find this state in the state list	//	Train_State* this_state = st_list[st_num];		int_4 i = 0;	for (i = 0; i < num_states_a; i++) {	  if (states_a[i] == this_state) {	    break;	  }	}		if ((i >= 0)  && (i < num_states_a)) {	  update_state[i] = ISIP_TRUE;	}      }    }  }    // loop over all the states  //  for (int_4 i = 0; i < num_states_a; i++) {        // see if we need to update    //    if (update_state[i] == ISIP_TRUE) {            // get the number of mixtures       //      num_mix = states_a[i]->get_num_mixtures_cc();            // check the state      //      if (num_mix > (int_4)0) {		// get the old value	//	old_weights = states_a[i]->get_weights_cc();	old_scale = states_a[i]->get_scale_cc();	old_mean = states_a[i]->get_mean_cc();	old_covar = states_a[i]->get_covar_cc();		// allocate memory to scale arraies	//	temp_scale = new float_4[num_mix];		// loop over the mixture components	//	for (int_4 m = 0; m < num_mix; m++) {	  	  // check if update is valid	  //	  temp_scale[m] = (float_4)0.0;	  if (mix_weights_a[i][m] != (float_8)0.0) {	    	    // update current mixture component	    //	    for (int_4 feat = 0; feat < num_features_a; feat++) {	      	      means_a[i][m][feat] /= mix_weights_a[i][m];	      old_mean[m][feat] = means_a[i][m][feat];	      tmp_covar = covars_a[i][m][feat] / mix_weights_a[i][m];	      tmp_covar = tmp_covar - means_a[i][m][feat] *		means_a[i][m][feat];	      	      if (tmp_covar < var_floor_a[feat]) {		covars_a[i][m][feat] = 1.0 / var_floor_a[feat];	      }	      else {		covars_a[i][m][feat] = 1.0 / tmp_covar;	      }	      old_covar[m][feat] = covars_a[i][m][feat];	      	      temp_scale[m] += log(((float_8)1.0/				    (float_8)covars_a[i][m][feat]) *				   ISIP_TWOPI);	    }	    mix_weights_a[i][m] = log((float_8)mix_weights_a[i][m]/				      (float_8)states_occ_a[i]);	    old_weights[m] = mix_weights_a[i][m];	    old_scale[m] = temp_scale[m];	  }	} // end of looping over mixtures      }            // clean up      //      delete [] temp_scale;      temp_scale = (float_4*)NULL;    } // end of a valid state updating  }  // clean up  //  delete [] update_state;    // exit gracefully  //  return(ISIP_TRUE);}

⌨️ 快捷键说明

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