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

📄 gmm.c

📁 利用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 + -