📄 gmm.c
字号:
#include "_stdio.h"
#include "iface.h"
#include "allnodes.h"
#include "stdlib.h"
#include "math.h"
#include "GMM.h"
#include "targetstruct.h"
asm("#include <def21060.h>");
#define PI 3.1415926
#define GS_RUNTIME 12
//#define ADAPT_NUM 5
#define INIT_NUM 150
#define MAX_TIME 1000
#define MIN_CHANGE 0.001
#define MAX_DISTANCE 100000000
#define VAR_MIN 1.0
float pnewmean[GS_NUM][F_DIMENSION];
float pnewcovariance[GS_NUM][F_DIMENSION];
int classnumoframes[INIT_NUM];
extern SENDBACK result[18];
float init_fvector1[INIT_NUM][F_DIMENSION];
//33.3k
float init_fvector2[INIT_NUM][F_DIMENSION];
//33.3k
float init_fvector3[INIT_NUM][F_DIMENSION];
//33.3k
float* pinit_fvector[3]={(float*)init_fvector1,(float*)init_fvector2,(float*)init_fvector3};
//float adapt_fvector1[ADAPT_NUM][F_DIMENSION];
//float adapt_fvector2[ADAPT_NUM][F_DIMENSION];
//float adapt_fvector3[ADAPT_NUM][F_DIMENSION];
//3K
//float* padapt_fvector[3]={(float*)adapt_fvector1,(float*)adapt_fvector2,(float*)adapt_fvector3};
extern PUnitPower punitpower[18];
extern PUnitBuoy punitbuoy[6];
extern UnitCancelLost unitcancellost[6];
const int bound[F_DIMENSION+1]={0,13,28,42,57,72,87,102,118,134,151,167,184,201,219,237,
255,273,292,311,330,350,370,390,411,432,454,476,498,521,544,567,
591,615,640,665,691,717,743,770,798,826,854,883,912,942,972,
1003,1035,1067,1100};
int infeaturenum[3]={0,0,0};
//int adaptnum[3]={0,0,0};
//0.5k
float* wg_vector;
float* mean_vector[GS_NUM];
float* variance_vector[GS_NUM];
float* init_fvector[INIT_NUM];
//float* adapt_fvector[ADAPT_NUM];
//1K
//main
int gsmnum;
int trainnum;
void modelmain(int oid){
int i;
float* fp;
int bouid=oid%3;
if(unitcancellost[oid/3].lost_state[bouid]==1)//目标有效
{
if(infeaturenum[bouid]<INIT_NUM)//初始训练
{
fp=(float*)pinit_fvector[bouid]+infeaturenum[bouid]*F_DIMENSION;
mel_div((float*)punitpower[oid].wave_out,fp);
infeaturenum[bouid]++;
for(i=0;i<F_DIMENSION;i++)
{
if(fp[i]<0||fp[i]>MAX_DISTANCE)
break;
}
if(i<F_DIMENSION) infeaturenum[bouid]--;
if(infeaturenum[bouid]>=15)
{
trainnum=infeaturenum[bouid];
if(infeaturenum[bouid]<40) gsmnum=1;
else if(infeaturenum[bouid]<80) gsmnum=2;
else if(infeaturenum[bouid]<INIT_NUM) gsmnum=4;
else gsmnum=GS_NUM;
if(trainnum % 5==0)
{
result[oid].gsmnum=gsmnum;
wg_vector=result[oid].wg_vector;
for(i=0;i<GS_NUM;i++)
{
mean_vector[i]=(float*)result[oid].mean_vector+i*F_DIMENSION;
variance_vector[i]=(float*)result[oid].variance_vector+i*F_DIMENSION;
}
for(i=0;i<trainnum;i++)
init_fvector[i]=(float*)pinit_fvector[bouid]+i*F_DIMENSION;
gmmtrain();
}
if(infeaturenum[bouid]==INIT_NUM)
{
for(i=0;i<INIT_NUM-5;i++)
memcpy(pinit_fvector[bouid]+i*F_DIMENSION,pinit_fvector[bouid]+(i+5)*F_DIMENSION,F_DIMENSION*sizeof(float));
infeaturenum[bouid]-=5;
}
}//>=15
}//<150
}//end 有效目
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -