📄 mouthdiscretehmm.h
字号:
/************************************************
*
*离散HMM封装类头文件
*作者:周庚涛
*时间:2006.03.29
*
*第一次修改者:周庚涛
*第一次修改时间 :2006.6.21
*第二次此改者:周庚涛
*第二次修改时间 :2006.9.18
*************************************************/
#ifndef _MOUTHDISCRETEHMM_H
#define _MOUTHDISCRETEHMM_H
#define VITHUGE 10000000000.0
#define DELTA 0.001
#include "myconst.h"
class CMouthDiscreteHmm
{
protected:
enum { N = 3, M = 130 , T= 48, NUM = TRAINNUM};//N:状态个数,M:观察值个数,T观察序列长度;
public:
double A[N][N]; //状态转移距阵
double B[N][M]; //观查值概率距阵
double pi[N]; //初始状态分布
public:
CMouthDiscreteHmm();
~CMouthDiscreteHmm();
void ForwardWithScale(int O[T], double alpha[T][N],double scale[T], double & pprob);
void BackwardWithScale(int O[T], double beta[T][N],double scale[T]/*,double & pprob*/);
int BaumWelch(int O[NUM][T]);
void ComputeGamma(double alpha[T][N], double beta[T][N], double gamma[T][N]);
void ComputeXi(int O[T], double alpha[T][N], double beta[T][N], double xi[T][N][N]);
void ViterbiLog(int O[T], int q[T], double &pprob);
int GetN()
{
return N;
}
int GetM()
{
return M;
}
int GetT()
{
return T;
}
/*
void printHmm()
{
cout << endl;
cout <<"////////////////////////////////////////////////";
cout << endl;
int i = 0;
int j = 0;
for(i=0; i<N; i++)
{
cout << pi[i]<< " ";
}
cout << endl;
cout << "************************************************";
cout << endl;
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
{
cout << A[i][j] << " ";
}
cout << endl;
}
cout << endl;
cout << "************************************************";
cout << endl;
for(i=0; i<N; i++) //M个观察值
{
for(j=0; j<M; j++)
{
cout << B[i][j]<< " ";
}
cout << endl;
}
cout << endl;
cout << "************************************************";
cout << endl;
cout <<"//////////////////////////////////////////////";
cout << endl;
}*/
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -