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

📄 ih_comp_0.cc

📁 这是处理语音信号的程序
💻 CC
字号:
// file: ih_comp_0.cc//// system include files//#include <string.h>// isip include files//#include "init_hmm.h"#include "init_hmm_constants.h"// method: compute_cc//// arguments://  FILE* fin : (input) the input feature list file//  float_4* means : (output) the computed mean array//  float_4** covar: (output) the computed covariance metrix//  int_4 num_feat : (input) the number of the features in a vector//  int_4 mode     : (input) input feature file mode//  logical_1 delta : (input) delta coeff. computations//  logical_1 acc : (input) acceleration coeff. computations//  int_4 delta_win : (input) window size//  logical_1 feature_format : (input) input feature file format//// return: a logical_1 flag indication success//// this method read the feature file from the input list and compute the// the mean and the covariance metrix of the feature vectors in all// feature files//logical_1 compute_cc(FILE* fin_a, float_4* means_a,		     float_4** covar_a, int_4 num_feat_a, int_4 mode_a,		     logical_1 delta_a, logical_1 acc_a, int_4 delta_win_a,		     logical_1 feature_format_a) {    // variables  //  int_4 num_feat = 0;  int_4 num_vect = 0;  int_4 total_num_vect = 0;  int_4 num_file = 0;  int_4 n_samples;  int_4 samp_period;  int_2 samp_size;  int_2 samp_kind;  int_4 flag = ISIP_TRUE;  int_4 total_bytes = (int_4)0;  int_4 header_bytes = (int_4)0;  int_4 temp_num_feat = (int_4)0;  float_8** data = (float_8**)NULL;  float_4* temp_data = (float_4*)NULL;   float_8* feature = new float_8[num_feat_a];  memset(feature, 0, num_feat_a * sizeof(float_8));     char_1* input_file = new char_1[ISIP_MAX_STRING_LENGTH];  char_1* buffer = new char_1[ISIP_MAX_STRING_LENGTH];  FILE* fpi = (FILE*)NULL;    // read the corresponding data file from feature list and compute the  // sum of the feature vectors  //  while (fgets((char*)input_file, ISIP_MAX_STRING_LENGTH, fin_a) !=	 (char*)NULL) {    // strip newline characters and expand the filenames    //    expand_filename_cc(input_file);        // open the input feature file to read    //    if (mode_a == IH_ASCII_MODE) {      fpi = fopen((char*)input_file, "r");    }    else {      fpi = fopen((char*)input_file, "rb");    }    if (fpi == (FILE*)NULL) {      fprintf(stdout, "Warning : cannot open feature file %s\n", input_file);      continue;    }    else {      num_file++;    }    // loop all the feature vectors in the current feature file    //    // if input mode is ascii    //    if (mode_a == IH_ASCII_MODE) {      if (feature_format_a == IH_HTK_FORMAT) {	 fprintf(stdout, "Warning: ASCII HTK input feature file not supported %s\n", input_file);	flag = ISIP_FALSE;       }              while (fgets((char*)buffer, ISIP_MAX_STRING_LENGTH, fpi) !=	     (char*)NULL) {		// count the number of feature vector	//	total_num_vect++;		// loop all the features in this feature vector	//	char* temp_buf = strtok((char*)buffer, " ");		// loop all the features in the current feature vector	//	while ((temp_buf != (char*)NULL) && (num_feat < num_feat_a)) {	  	  // store the value of this feature into sum array	  //	  feature[num_feat] = (float_8)atof(temp_buf);	  means_a[num_feat] += (float_4)(feature[num_feat]);	  // count the features in this vector	  //	  num_feat++;	  	  // read the following feature	  //	  temp_buf = strtok((char*)NULL, " ");	}	// store product of features into covariance metrix	//	for (int_4 i = 0; i < num_feat_a; i++) {	  for (int_4 j = 0; j < num_feat_a; j++) {	    covar_a[i][j] += (float_4)(feature[i] * feature[j]);	  }	}	// reset the count varable	//	num_feat = 0;      }          }    else {            // read the htk header mfcc's and calculate the mfcc file size      //      if (feature_format_a == IH_HTK_FORMAT) {		fseek (fpi, 0L, SEEK_SET);		if (!fread (&n_samples, sizeof(int_4), 1, fpi)) {	  fprintf(stdout, "Warning: No. of Samples not specified in HTK Header file %s\n", input_file);	  flag = ISIP_FALSE;	}  	if (!fread (&samp_period, sizeof(int_4), 1, fpi)) {	  fprintf(stdout, "Warning: Sampling Period not specified in HTK Header file %s\n", input_file);	  flag = ISIP_FALSE;	}		if (!fread (&samp_size, sizeof(int_2), 1, fpi)) {	  fprintf(stdout, "Warning: Sampling size notspecified in HTK Header file %s\n", input_file);	  flag = ISIP_FALSE;	}		if (!fread (&samp_kind, sizeof(int_2), 1, fpi)) {	  fprintf(stdout, "Warning: Sampling kind not specified in HTK Header file %s\n", input_file);	  flag = ISIP_FALSE;	}		header_bytes = ftell(fpi);	fseek(fpi, 0, SEEK_END);	total_bytes = ftell(fpi) - header_bytes;      }            else {	fseek(fpi, 0, SEEK_END);	total_bytes = ftell(fpi);      }       if (acc_a == ISIP_TRUE) {   temp_num_feat = num_feat_a / (int_4)3; }  else if (delta_a == ISIP_TRUE) {   temp_num_feat = num_feat_a / (int_4)2; }  else   temp_num_feat = num_feat_a;  // compute number of vectors in the input mfcc file // if (feature_format_a == IH_HTK_FORMAT) {   num_vect = total_bytes / (temp_num_feat * sizeof(float_4)); } else num_vect = total_bytes / (temp_num_feat * sizeof(float_8));  total_num_vect += num_vect;    // allocate memory // data = new float_8*[num_vect]; rewind(fpi); if (feature_format_a == IH_HTK_FORMAT) {      fseek (fpi, 0L, SEEK_SET);      if (!fread (&n_samples, sizeof(int_4), 1, fpi)) {     fprintf(stdout, "Warning: No. of Samples not specified in HTK Header file %s\n", input_file);     flag = ISIP_FALSE;   }      if (!fread (&samp_period, sizeof(int_4), 1, fpi)) {     fprintf(stdout, "Warning: Sampling Period not specified in HTK Header file %s\n", input_file);     flag = ISIP_FALSE;   }      if (!fread (&samp_size, sizeof(int_2), 1, fpi)) {     fprintf(stdout, "Warning: Sampling size notspecified in HTK Header file %s\n", input_file);     flag = ISIP_FALSE;   }      if (!fread (&samp_kind, sizeof(int_2), 1, fpi)) {     fprintf(stdout, "Warning: Sampling kind not specified in HTK Header file %s\n", input_file);     flag = ISIP_FALSE;   }   // read the features as float and cast to double   //   temp_data = new float_4[num_feat_a];   for (int_4 i = 0; i < num_vect; i++) {     data[i] = new float_8[num_feat_a];     if ((int_4)fread(temp_data, sizeof(float_4), temp_num_feat, fpi)	 != temp_num_feat) {       flag = ISIP_FALSE;       break;     }     for ( int_4 j = 0; j < num_feat_a; j++) {       data[i][j] = (float_8)temp_data[j];     }   }    } // read the features as doubles // else {   for (int_4 i = 0; i < num_vect; i++) {     data[i] = new float_8[num_feat_a];     if ((int_4)fread(data[i], sizeof(float_8), temp_num_feat, fpi)	 != temp_num_feat) {       flag = ISIP_FALSE;       break;     }   } }  // compute the deltas and accelerations // if (delta_a == ISIP_TRUE) {   Extract_feature::compute_delta_cc(data, num_vect, 0, temp_num_feat,				     delta_win_a); }  if (acc_a == ISIP_TRUE) {   Extract_feature::compute_delta_cc(data, num_vect, temp_num_feat,				     temp_num_feat, delta_win_a); }  // compute the means and the variances // for (int_4 i = 0; i < num_vect; i++) {      for (int_4 j = 0; j < num_feat_a; j++) {          // add the feature values to the mean     //     means_a[j] += (float_4)(data[i][j]);          // store product of features into covariance metrix     //     for (int_4 k = 0; k < num_feat_a; k++) {              // increment the covariance       covar_a[j][k] += (float_4)(data[i][j] * data[i][k]);     }   } }  // free memory // if (temp_data != (float_4*)NULL) {   delete [] temp_data; }  if (data != (float_8**)NULL) {   for (int_4 i = 0; i < num_vect; i++) {     if (data[i] != (float_8*)NULL) {       delete [] data[i];     }   }   delete [] data; }      } // end else binary mode        // close the current feature file    //    fclose(fpi);            } // end loop over all feature files    // print number of feature files read  //  fprintf(stdout, "Number of feature files read:\t%ld\n", num_file);  // compute the mean for each feature in feature vector  //  for (int_4 i = 0; i < num_feat_a; i++) {    means_a[i] /= (float_4)(total_num_vect);  }    // compute the covariance matrix for the feature vectors  //  for (int_4 l = 0; l < num_feat_a; l++) {    for (int_4 k = 0; k < num_feat_a; k++) {      covar_a[l][k] /= (float_4)(total_num_vect-1);      covar_a[l][k] -= (means_a[l] * means_a[k]);    }  }  // free memory  //  delete [] buffer;  delete [] input_file;  delete [] feature;  fpi = (FILE*)NULL;    // exit gracefully  //  return flag;}

⌨️ 快捷键说明

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