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

📄 bw_comp_0.cc

📁 这是处理语音信号的程序
💻 CC
字号:
// file: bw_comp_0.cc//// isip include files//#include "bw_train.h"#include "bw_train_constants.h"// method: comp_for_prob_cc//// arguments://  float_8** for_probt : (output) the forward probabilities//  float_8** for_probt1 : (input) the forward prob. of previous frame//  float_8*** back_prob : (input) the backward probabilities//  int_2* upper : (input) the upper states bound//  int_2* lower : (input) the lower states bound//  int_4 frame : (input) the current index of frame//  float_4*** transitions : (input) the old transition matrix//  State** states : (input) the whole states sequence//  int_4 num_mod : (input) the number of input models//  int_4* model_list : (input) the index of each model//  Model** models : (input) the whole models sequence//  int_4* trans_map : (input) the mapping from model index to trans index//  float_8** vectors : (input) the observations//  int_4** st_map : (input) the mapping from model index and local state//                             index to global state index//  float_8* max_back : (input) the maximum back probability at each frame//  float_8** max_mback : (input) the maximum back probability for each model//                                at each frame//  float_4 width : (input) the beam width//  float_8 utt_prob : (input) the utterance probability//  float_8*** state_scores : (input) the state scores array//  float_4 min_mpd : (input) the minimum model probability//// return: a logical flag to indicate success//// this method computes forward probability by looping all the time frames,// all the models and all the states within the model//logical_1 comp_for_prob_cc(float_8** for_probt_a, float_8** for_probt1_a,			   float_8*** back_prob_a, int_2* upper_a,			   int_2* lower_a, int_4 frame_a,			   float_4*** transitions_a, Train_State** states_a,			   int_4 num_mod_a, int_4* model_list_a,			   Train_Model** models_a, int_4* trans_map_a,			   float_8** vectors_a, int_4** st_map_a,			   float_8* max_back_a, float_8** max_mback_a,			   float_4 width_a, float_8 utt_prob_a,			   float_8*** state_scores_a, float_4 min_mpd_a) {    // local variables  //  int_4 loc_st = (int_4)0;  int_4 pre_loc_st = (int_4)0;  int_4 tmp_mix = (int_4)0;  float_8 tmp_score = (float_8)0.0;  float_8 tmp_trans = (float_8)0.0;  float_8 tmp_trans1 = (float_8)0.0;  float_8 tmp_prob = (float_8)0.0;  // pruning  //  int_4 start_model = lower_a[frame_a];  int_4 end_model = upper_a[frame_a];    // loop over the models  //  for (int_2 q = start_model; q <= end_model; q++) {    // if this is not the first model then get the number of states    // of the previous model to calculate the forward    // probabilities    //    if (q > 1) {      pre_loc_st = models_a[model_list_a[q-2]]->get_num_states_cc();    }    // get the num states for the current model    //    loc_st = models_a[model_list_a[q-1]]->get_num_states_cc();    // loop through all the states    //    for (int_4 j = 1; j <= loc_st; j++) {      // check if beta pruning is done      // if done do not consider the corresponding alpha values      //      if(max_mback_a[frame_a][q] <= BW_LOG_ZERO) {	for_probt_a[q][j] = BW_LOG_ZERO;      }      // if the model has not been pruned then calculate the      // forward probability      //      else {		// set the initial conditions	//	// check if this is the first time frame	//	if (frame_a == 1) {	  	  // forward prob of first model's first state at the	  // first time frame is 1.0	  //	  if ((q == 1) && (j == 1)) {	    for_probt_a[q][j] = 0.0;	  }	  // if this is not the first model	  //	  else {	    // check if this is the first state	    //	    if (j == 1) {	      tmp_trans = transitions_a[trans_map_a[model_list_a[q-2]]]		[j-1][pre_loc_st-1];	      for_probt_a[q][j] = for_probt_a[q-1][j] + tmp_trans;	    }	    // check if this is the last state	    //	    else if (j == loc_st) {	      tmp_score = BW_LOG_ZERO;	      for(int_4 ii = 2; ii <= loc_st-1; ii++) {				// find the transition score		//		tmp_trans = transitions_a[trans_map_a[model_list_a[q-1]]]		  [ii-1][loc_st-1];		tmp_score = log_add_cc(tmp_score, for_probt_a[q][ii] +				       tmp_trans);	      }	      for_probt_a[q][j] = tmp_score;	    }	    else {	      // calculate the forward probability of emitting states	      // in the first time frame	      //	      	      // compute the output probability	      //	      if (state_scores_a[frame_a][q][j] != BW_LOG_ZERO) {		tmp_prob = state_scores_a[frame_a][q][j];	      }	      else {		tmp_prob = states_a[st_map_a[model_list_a[q-1]][j-1]]		  ->eval_score_cc(vectors_a[frame_a-1], frame_a, tmp_mix);		state_scores_a[frame_a][q][j] = tmp_prob;	      }	      	      // compute the transitions probability	      //	      tmp_trans = transitions_a[trans_map_a[model_list_a[q-1]]]		[0][j-1];	      for_probt_a[q][j] = tmp_trans + tmp_prob;	    }	  }	  	}      	// compute the major part of forward probability	// when it is not in the first time frame	//	else {	  // forward probability of being in the first model's	  // first state is zero	  //	  if ((q == 1) && (j == 1)) {	    for_probt_a[q][j] = BW_LOG_ZERO;	  }	  // if this not the first model and first time frame	  //	  else {	    // check if this is the first state	    //	    if (j == 1) {	      tmp_trans = transitions_a[trans_map_a[model_list_a[q-2]]]		[j-1][pre_loc_st-1];	      tmp_score = for_probt1_a[q-1][pre_loc_st];	      if ((q > lower_a[frame_a]) && (tmp_trans > BW_LOG_MIN)) {		tmp_score = log_add_cc(tmp_score, (for_probt_a[q-1][j] +						   tmp_trans));	      }	      for_probt_a[q][j] = tmp_score;	    }	    // check if this is the last state	    //	    else if (j == loc_st) {	      tmp_score = BW_LOG_ZERO;	      for (int_4 jj = 2; jj <= loc_st-1; jj++) {				// find the transition score		//		tmp_trans = transitions_a[trans_map_a[model_list_a[q-1]]]		  [jj-1][loc_st-1];		if ((tmp_trans > BW_LOG_MIN) && (for_probt_a[q][jj] >						 BW_LOG_MIN)) {		  tmp_score = log_add_cc(tmp_score, (for_probt_a[q][jj] +						     tmp_trans));		}	      }	      for_probt_a[q][j] = tmp_score;	    }	    // if this is one of the emitting states	    //	    else {	      	      // compute the output probability	      //	      if (state_scores_a[frame_a][q][j] != BW_LOG_ZERO) {		tmp_prob = state_scores_a[frame_a][q][j];	      }	      else {		tmp_prob = states_a[st_map_a[model_list_a[q-1]][j-1]]		  ->eval_score_cc(vectors_a[frame_a-1], frame_a, tmp_mix);		state_scores_a[frame_a][q][j] = tmp_prob;	      }	      	      // compute the first transition	      //	      tmp_trans = transitions_a[trans_map_a[model_list_a[q-1]]]		[0][j-1];	      	      // compute the summation	      //	      tmp_score = BW_LOG_ZERO;	      if (tmp_trans > BW_LOG_MIN) {		tmp_score = for_probt_a[q][1] + tmp_trans;	      }	      for (int_4 kk = 2; kk <= loc_st-1; kk++) {		tmp_trans1 = transitions_a[trans_map_a[model_list_a[q-1]]]		  [kk-1][j-1];		if ((tmp_trans1>BW_LOG_MIN) && (for_probt1_a[q][kk]>BW_LOG_MIN))		  {		    tmp_score = log_add_cc(tmp_score, (for_probt1_a[q][kk] +						       tmp_trans1));		  }	      }	      for_probt_a[q][j] = tmp_score + tmp_prob;	    }	  }	} // end of computing major part of forward probability		// floor	//	if (for_probt_a[q][j] < BW_LOG_ZERO) {	  for_probt_a[q][j] = BW_LOG_ZERO;	}      }// end of beta pruning not done    } // end of looping over each state  } // end of looping over each model    // exit gracefully  //  return(ISIP_TRUE);}

⌨️ 快捷键说明

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