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

📄 slev_09.cc

📁 这是一个从音频信号里提取特征参量的程序
💻 CC
字号:
// file: $isip/class/search/SearchLevel/slev_09.cc// version: $Id: slev_09.cc,v 1.10 2003/04/17 16:20:35 huang Exp $//// isip include files//#include "SearchLevel.h"#ifndef ISIP_SOF#include <Sof.h>#endif#ifndef ISIP_SUPPORT_VECTOR_MODEL#include <SupportVectorModel.h>#endif#ifndef ISIP_UNIFORM_MODEL#include <UniformModel.h>#endif// method: connectStatisticalModels//// arguments: none//// return: a boolean indicating status//// this method maps the statistical models to the symbols in the symbol table//boolean SearchLevel::connectStatisticalModels() {    // check if the statistical models have already been loaded  //  if (stat_models_d.length() == 0 ) {    return false;  }    // loop through all the subgraphs in the last level  //  long num_subgraphs = sub_graphs_d.length();  for(long index = 0; index < num_subgraphs; index++) {        // get the graph    //    DiGraph<SearchNode>& subgraph = sub_graphs_d(index);    // variable for searching nodes in the graph    //    long num_vertices = subgraph.length() + 2;        GraphVertex<SearchNode>* tmp_vert[num_vertices];     // go through all the vertices of the subgraph    //    tmp_vert[0] = subgraph.getStart();        subgraph.gotoFirst();    for (long i = 1; i < num_vertices - 1; i++) {      // get the search node for the vertex      //      SearchNode* snode;      tmp_vert[i] = (GraphVertex<SearchNode>*)subgraph.getCurr();        snode = tmp_vert[i]->getItem();             // get the search symbol corresponding to the given node      //      SearchSymbol hashed_symbol;      snode->getSymbol(hashed_symbol);      // get statistical model index from the level's symbol_hash_d      // and then set statistical model for this search node      //      Long* model_index = symbol_hash_d.get(hashed_symbol);      if (model_index == NULL) {	String message(L"connectStatisticalModels - load ");	message.concat(L"\n Symbol: \"");	message.concat(hashed_symbol);	message.concat(L"\" not found in statistical model hash table!");	return Error::handle(name(), message, Error::ARG, __FILE__, __LINE__);      }      snode->setModelId((long)*model_index);      snode->setStatisticalModel(&stat_models_d(*model_index));      // move to the next vertex      //      subgraph.gotoNext();    }      // the last vertex is the terminal node    //    tmp_vert[num_vertices - 1] = subgraph.getTerm();  }     // exit gracefully  //  return true;}// method: createStatisticalModels//// arguments://  Sof& sof: (input) sof file object for statistical model file//  long tag: (input) sof object instance tag//// return: a boolean indicating status//// this method create the statistical models from Sof file, and assumes// the input sof file has already been opened correctly//boolean SearchLevel::createStatisticalModels(Sof& sof_a, long tag_a) {    // make sure the symbol table has been loaded  //    long num_keys = 0;  // if no tag is specified, the tag should be zero  //  if (tag_a == DEF_TAG) {    tag_a = (long)level_index_d;  }     // read the hashtable from the input sof file  //  if(symbol_hash_d.read(sof_a, tag_a, PARAM_STAT_HASH)) {    // set the num_symbols    //    num_keys = symbol_hash_d.getNumItems();  }  else {        return false;  }  // set up empty statistical models  //  stat_models_d.clear();  stat_models_d.setLength(num_keys);  stat_models_d.setCapacity(num_keys);    // set each stat models  //  for (long i = 0; i < num_keys; i++) {    MixtureModel mix_model;    VectorFloat weights(num_of_mixtures_d);    mix_model.setWeights(weights);    for (long j = 0; j < num_of_mixtures_d; j++ ){      // set statistical models      //      if ( stat_model_type_d == StatisticalModel::GAUSSIAN_MODEL ){	GaussianModel gau_model;	gau_model.setMean(0.0);	MatrixFloat cov;	cov.setDimensions(1, 1, false, Integral::DIAGONAL);	cov.assign(1.0);	gau_model.setCovariance(cov);	mix_model.add(gau_model);      }      else if ( stat_model_type_d == StatisticalModel::UNIFORM_MODEL ){	UniformModel uni_model;	mix_model.add(uni_model);      }      else if ( stat_model_type_d == StatisticalModel::SUPPORT_VECTOR_MODEL ){	SupportVectorModel svm_model;	mix_model.add(svm_model);      }      else{	return Error::handle(name(), L"createStatisticalModels: wrong model type", Error::ARG, __FILE__, __LINE__);      }    }    // set statistical model    //    stat_models_d(i).setType(StatisticalModel::MIXTURE_MODEL);    stat_models_d(i).assign(mix_model);  }    // gracefully exit  //  return true;}// method: loadStatisticalModels//// arguments://  Sof& sof: (input) sof file object for statistical model file//  long tag: (input) sof object instance tag//// return: a boolean indicating status//// this method read the statistical models from Sof file, and assumes// the input sof file has already been opened correctly//boolean SearchLevel::loadStatisticalModels(Sof& sof_a, long tag_a) {    // make sure the symbol table has been loaded  //    long num_symbols = symbol_table_d.length();  if (num_symbols == 0) {    return Error::handle(name(), L"loadStatisticalModels", Error::ARG, __FILE__, __LINE__);  }   // if no tag is specified, the tag should be zero  //  if (tag_a == DEF_TAG) {    tag_a = (long)level_index_d;  }     // read the hashtable from the input sof file  //  if(symbol_hash_d.read(sof_a, tag_a, PARAM_STAT_HASH)) {    // make sure the number of keys in the hashtable    // is the same as that of the symbols in the symbol_table_d    //        if (symbol_hash_d.getNumItems() != num_symbols) {      return Error::handle(name(), L"loadStatisticalModels", Error::ARG, __FILE__, __LINE__);    }  }  else {        return false;  }    // read statistical models if being present in file  //  if (stat_models_d.read(sof_a, tag_a, PARAM_STAT)) {          // make sure the number of stat models is no more than that of symbols    //    if (stat_models_d.length() > num_symbols) {         return Error::handle(name(), L"loadStatisticalModels", Error::ARG, __FILE__, __LINE__);    }  }  else {    return false;  }    // gracefully exit  //  return true;}// method: storeStatisticalModels//// arguments://  Sof& sof: (input) sof file object for statistical model file//  long tag: (input) sof object instance tag//// return: a boolean indicating status//// this method writes the statistical models from Sof file//boolean SearchLevel::storeStatisticalModels(Sof& sof_a, long tag_a) {   // if no tag is specified, the tag should be zero  //  if (tag_a == DEF_TAG) {    tag_a = (long)level_index_d;  }     // write the hashtable from the input sof file  //  if (!symbol_hash_d.isEmpty()) {    if(!symbol_hash_d.write(sof_a, tag_a, PARAM_STAT_HASH)) {      return Error::handle(name(), L"storeStatisticalModels", Error::ARG, __FILE__, __LINE__);    }  }    // write statistical models if being present in file  //  if (!stat_models_d.write(sof_a, tag_a, PARAM_STAT)) {      return Error::handle(name(), L"storeStatisticalModels", Error::ARG, __FILE__, __LINE__);  }    // gracefully exit  //  return true;}

⌨️ 快捷键说明

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