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

📄 main.cpp

📁 利用语音识别技术改写释然率的计算
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include<iostream.h>
#include<fstream.h>
#include<iomanip.h>
#define  NUM_MIX     4     /*the number of mixtures in the random function*/
#define  DIM_FEAT    13		/*维数*/
#define  FIRST       0

 struct GMM {   
  float  C[NUM_MIX];
  double  mV[NUM_MIX][DIM_FEAT];
  double  Sigma[NUM_MIX][DIM_FEAT];   
  double SigmaMult[NUM_MIX];        
}; 
struct HMM
{
	GMM gmm[3];//3个状态,每个状态都为一个高斯分布
	char phone_name;//对于某个phone的

};
HMM hmm[27];//27 个phone
 
double x[10][DIM_FEAT]; 					
//初始化GMM模型
void initialize()
{
	double SigmaMultiple;
	int *p = NULL;
	for(int i=0;i<NUM_MIX;i++)
	{
		SigmaMultiple = 1.0;
		gmm.C[i]=1/NUM_MIX;//权重设定相等
		for(int j=0;j<DIM_FEAT;j++)
		{
			SigmaMultiple *=gmm.Sigma[i][j]*gmm.Sigma[i][j];
		}
		gmm.SigmaMult[i]=SigmaMultiple;
	}

} 
//计算Zk列表
double *z_table()
{
	double *z = new double;
	for(int i=0;i<NUM_MIX;i++)
	{
		z[i]=gmm.C[i]/(pow(2*3.14,DIM_FEAT/2)*gmm.SigmaMult[i]);
	}
	return z;
} 
//计算第DMAX
 
double DMAX(double *z_t)
{
	double D_result;
	double Sum=0;
	for(int i=0;i<DIM_FEAT;i++)
	{
		Sum+=(x[FIRST][i]-gmm.mV[FIRST][i])*(x[FIRST][i]-gmm.mV[FIRST][i])/(gmm.Sigma[FIRST][i]*gmm.Sigma[FIRST][i]);
	
	}
	D_result=log(z_t[FIRST]) - 0.5*Sum;
	return D_result;
}
//PDE算法 
double PDE(double *z_t)
{
	
	double d_max=DMAX(z_t);
	double d_tmp;

	for(int i=1;i<NUM_MIX;i++)
	{
		double sum = 0;
		for(int k=0;k<DIM_FEAT;k++)
		{
			sum+=(x[2][k]-gmm.mV[i][k])*(x[2][k]-gmm.mV[i][k])/(gmm.Sigma[i][k]*gmm.Sigma[i][k]);
			d_tmp = log(z_t[i]) - 0.5*sum;
			if(d_tmp<d_max)
				break;
			if(k == DIM_FEAT-1)
				d_max =d_tmp;
		}
	
	
	}
	return d_max;
}

void initializemean()
{
	double a[39];
	ifstream infile("d:\\t1.txt");
	if(!infile)
		exit(1);
	for(int k=0;k<39;k++)
		a[k]=0;
 	for(int i=0;i<39;i++)
	{
		infile>>gmm.mV[0][i];
		
	} 
	for( i=0;i<39;i++)
	 cout<<gmm.mV[0][i]<<endl;
	infile.close();
}
void opentest()
{
	FILE *fp;
	char s[20];
	double f;
	fp = fopen("d:\\test","r");
	while(!feof(fp))
	{
		fscanf(fp,"%f",f);
		
		printf("%f\n",f);
		//printf(...);
	}
}
void main()
	{    
	//initializemean();
	opentest();
		 
	}

 

⌨️ 快捷键说明

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