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

📄 ht_project_5.cc

📁 这是处理语音信号的程序
💻 CC
字号:
// file: ht_project_5.cc//// isip include files//#include "hmm_train.h"#include "hmm_train_constants.h"// method: active_trace_cc//// arguments://  Train_Link_list** phtr_list : (input) list of all phone-level traces//  Train_Link_node** phmarker : (input) marker position in phone-level trace list//  Train_Link_node** prev_phmark : (input) previous marker position in phone-level//                            trace list//  Train_Link_list** wdtr_list : (input) list of all word-level traces//  Train_Link_node** wdmarker : (input) marker position in word-level trace list//  Train_Link_node** prev_wdmark : (input) previous marker position in word-level//                            trace list//  int_4* ph_active : (input) list of active phones//  int_4 ph_numact : (input) number of active phones//  int_4* wd_active : (input) list of active words//  int_4 wd_numact : (input) number of active words//  int_4*& ngen : (output) number of traces generated//  int_4*& ndel : (output) number of traces deleted//  float_8 sp : (input) the score for skipping the sp phone//  float_8& max_score : (output) the maximum path score so far//// return: a logical_1 indicating status//// this method loops over all phone and word level traces and removes// all inactive traces, it also creates word-level traces for newly// completed words//logical_1 active_trace_cc(Train_Link_list** phtr_list_a, Train_Link_node** phmarker_a,			  Train_Link_node** prev_phmark_a, Train_Link_list** wdtr_list_a,			  Train_Link_node** wdmarker_a, Train_Link_node** prev_wdmark_a,			  int_4* ph_active_a, int_4 ph_numact_a,			  int_4* wd_active_a, int_4 wd_numact_a,			  float_8 sp_a, float_4 penalty_a,			  int_4*& ngen_a, int_4*& ndel_a, 			  float_8& max_score_a) {    // local variables   //  Train_Trace* trace = (Train_Trace*)NULL;  Train_Link_node* nd = (Train_Link_node*)NULL;  // variables to grow trace  //  int_4 ind = (int_4)0;  int_4 phone = (int_4)0;  float_8 prune_sc = (float_8)0;  Train_Trace* tr = (Train_Trace*)NULL;  Train_Word* word = (Train_Word*)NULL;  Train_Lattice_node* latnode = (Train_Lattice_node*)NULL;  Train_Lex_node* lexnode = (Train_Lex_node*)NULL;  Train_Lex_node* newlex = (Train_Lex_node*)NULL;    // memory manager  //  Train_Memory_manager* manager = Train_Link_list::get_manager_cc();    // loop over all active word-level trace lists  //  for (int_4 ww = 0; ww < wd_numact_a; ww++) {      // loop over all the previous word-level traces and remove the    // traces that are no longer active    //    for (Train_Link_node* node = prev_wdmark_a[wd_active_a[ww]];	 (node != (Train_Link_node*)NULL) && (node != wdmarker_a[wd_active_a[ww]]);	 node = nd) {            // get the next node      //      nd = node->get_next_cc();            // get the trace in this node      //      trace = (Train_Trace*)(node->get_item_cc());      // remove if this trace was not active in the current frame      //      if (trace->get_active_cc() == ISIP_FALSE) {	// decrement the appropriate count	//	ndel_a[HT_WORD_LEVEL]++;	// delete the trace	//      	manager->delete_cc(trace);	wdtr_list_a[wd_active_a[ww]]->remove_cc(node);      }            // otherwise reset the active flag      //      else {	trace->set_active_cc(ISIP_FALSE);      }    } // end for loop over all nodes  } // end for loop over all active words      // loop over all active phone-level trace lists  //  for (int_4 pp = 0; pp < ph_numact_a; pp++) {      // loop over all the previous phone-level traces and remove the    // traces that are no longer active    //    for (Train_Link_node* node = prev_phmark_a[ph_active_a[pp]];	 (node != (Train_Link_node*)NULL) && (node != phmarker_a[ph_active_a[pp]]);	 node = nd) {      // get the next node      //      nd = node->get_next_cc();            // get the trace in this node      //      trace = (Train_Trace*)(node->get_item_cc());      // remove if this trace was not active in the current frame      //      if (trace->get_active_cc() == ISIP_FALSE) {	// decrement the appropriate count	//	ndel_a[HT_PHONE_LEVEL]++;	// delete the trace	//      	manager->delete_cc(trace);	phtr_list_a[ph_active_a[pp]]->remove_cc(node);      }            // otherwise reset the active flag      //      else {	trace->set_active_cc(ISIP_FALSE);      }    } // end for loop over all nodes    // for the currently active phone-level traces at end of word make    // word-level traces    //    if (phtr_list_a[ph_active_a[pp]] != (Train_Link_list*)NULL) {      // make sure there is at least one active trace      //      nd = phtr_list_a[ph_active_a[pp]]->get_curr_cc();      if (nd != (Train_Link_node*)NULL) {		// now loop over all the active phone-end traces and grow	// sp-skipped word ends	//	for (Train_Link_node* node = phmarker_a[ph_active_a[pp]];	     node != nd->get_next_cc(); node = node->get_next_cc()) {	  	  // get the trace in this node	  //	  trace = (Train_Trace*)(node->get_item_cc());	  tr = (Train_Trace*)NULL;	  	  // the current trace parameters	  //	  lexnode = trace->get_lex_node_cc();	  phone = lexnode->get_phone_cc();	  	  // if this is an end of word trace create the word-level	  // trace	  //	  if (phone == TRAIN_LXN_STOP_PHONE) {	    // copy the trace and add word insertion penalty	    //	    tr = manager->new_trace_cc();	    tr->project_trace_cc(trace, penalty_a);	    // make sure the phone is not sp	    //	    tr->set_phone_ind_cc(ph_active_a[pp]);	  }	  	  // otherwise if the word ends in sp phone, create word level	  // trace corresponding to the sp skip	  //	  else if (phone == HT_SP_PHONE) {	    	    // copy the trace and add sp skip score and the word	    // insertion penalty	    //	    tr = manager->new_trace_cc();	    tr->project_trace_cc(trace, sp_a + penalty_a);	    // make sure the phone is not sp	    //	    tr->set_phone_ind_cc(ph_active_a[pp]);	    // set the correct lexical node	    //	    newlex = lexnode->get_node_cc(TRAIN_LXN_STOP_PHONE);	    tr->set_lex_node_cc(newlex);	  }	  // otherwise subtract the lex node score added to this trace	  // for beam pruning purposes	  //	  else {	    prune_sc = lexnode->get_max_score_cc();	    trace->incr_score_cc(-prune_sc);	  }	    	  // insert the new trace, if any, in the appropriate word list	  //	  if (tr != (Train_Trace*)NULL) {	    	    // set the trace back-pointer and level index	    //	    tr->set_level_cc(HT_WORD_LEVEL);	    tr->set_back_size_cc(HT_WORD_BACKPTR);	    tr->add_back_ptr_cc(trace);	    // find out the active word this belongs to	    //	    latnode = trace->get_lat_node_cc();	    word = latnode->get_word_cc();	    ind = word->get_index_cc();	    	    // insert the new trace in the trace list	    //	    insert_trace_cc(wdtr_list_a[ind], tr, wdmarker_a[ind],			    ngen_a[HT_WORD_LEVEL], max_score_a);	    // update the word list marker position	    //	    if (wdmarker_a[ind] == (Train_Link_node*)NULL) {	      wdmarker_a[ind] = wdtr_list_a[ind]->get_curr_cc();	    }	  }	} // end for all current link nodes      } // end if nd is not NULL    } // end if trace list is not NULL  } // end for all active phones    // exit gracefully  //  return ISIP_TRUE;}

⌨️ 快捷键说明

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