亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? prob_calc.cpp

?? Intel開發的IPP庫的應用實例
?? CPP
字號:
/*
//
//                  INTEL CORPORATION PROPRIETARY INFORMATION
//     This software is supplied under the terms of a license agreement or
//     nondisclosure agreement with Intel Corporation and may not be copied
//     or disclosed except in accordance with the terms of that agreement.
//          Copyright(c) 1999-2006 Intel Corporation. All Rights Reserved.
//
//     Intel(R) Integrated Performance Primitives Gaussian Mixture Sample for Windows*
//
//  By downloading and installing this sample, you hereby agree that the
//  accompanying Materials are being provided to you under the terms and
//  conditions of the End User License Agreement for the Intel(R) Integrated
//  Performance Primitives product previously accepted by you. Please refer
//  to the file ippEULA.rtf located in the root directory of your Intel(R) IPP
//  product installation for more information.
//
//
//     Gaussian Mixture Calculation Class
//
*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <ipps.h>
#include <ippsr.h>

#include "prob_calc.h"
#include "feat_calc.h"

struct Param_File_Header{
   int vecSize;                    // feature vector size
   unsigned short maxComp;         // maximum component number in mixture
   unsigned short fileType;        // mixture parameter file type
   int mixNum;                     // number of Gaussian mixtures
   int wgtNum;                     // total number of weights
   int gaussNum;                   // total number of Gaussians
   int trpNum;                     // total number of transition values
};

struct File_Mixture{
   int compNum;                     // component number
   int wgtInd;                      // compInd of the first weight
   int compInd;                     // compInd of the first component
};

/////////////////////////////////////////////////////////////
//                                                         //
//       Mixture parameter file structure                  //
//                                                         //
//       Param_File_Header header;                         //
//       File_Mixture exstates[header.mixNum]              //
//       float weights[wgtNum]                             //
//       float means[wgtNum*((vecSize+3)&(-3))]            //
//       float vars[wgtNum*((vecSize+3)&(-3))]             //
//       float dets[wgtNum]                                //
//       float trpdets[trpNum]                             //
//                                                         //
/////////////////////////////////////////////////////////////


Prob_Calc::Prob_Calc(Calc_Hint hint) {
   state_number = 0;
   max_gauss    = 0;
   space_dim    = 0;
   gauss_num    = 0;
   max_len      = 0;
   min_len      = 0;
   space_dim4   = 0;
   state_number4= 0;
   gauss_num4   = 0;
   curidx       = 0;
   lastidx      = 0;
   delta_delay  = 0;
   sen_end      = false;
   type         = hint;
   feat         = NULL;
   buffer       = NULL;
   features     = NULL;
   tmp_prob     = NULL;
   states       = NULL;
   weights      = NULL;
   dets         = NULL;
   means        = NULL;
   vars         = NULL;
   curfeat      = NULL;
   endfeat      = NULL;
   lastfeat     = NULL;
   flog         = NULL;
   ready        = -2;
}

int Prob_Calc::Init_Arrays(void) {
   int model_len=0;
   if ((type!=calcNone)&&(type!=calcVect)&&(type!=calcVecM)&&(type!=calcMMix)&&(type!=calcMix))
                                return -1;
   if (state_number<=0)         return -1;
   if (max_gauss<=0)            return -1;
   if (space_dim<=0)            return -1;
   if (max_len<=0)              return -1;
   if (min_len<=0)              return -1;
   if (max_len<100)             max_len=100;
   if (min_len<12)              min_len=12;
   if (min_len>(max_len>>3))    min_len=(max_len>>3);
   space_dim4=(space_dim+3)&(~3);
   state_number4=(state_number+3)&(~3);
   gauss_num4=(gauss_num+3)&(~3);
   model_len=sizeof(Mixture)*state_number4+sizeof(float)*(gauss_num4+gauss_num4+
             gauss_num*space_dim4+gauss_num*space_dim4);

   if (!(features  = ippsMalloc_32f(space_dim4*max_len)))   return -2;

   int tmp_len=(max_gauss>max_len)?max_gauss:max_len;
   if (!(tmp_prob  = ippsMalloc_32f(tmp_len)))              return -2;

   if (!(buffer    = (void*)ippsMalloc_8u(model_len)))      return -2;

   states     = (Mixture*)buffer;
   weights    = (float*)(states+state_number4);
   dets       = weights+gauss_num4;
   means      = dets+gauss_num4;
   vars       = means+gauss_num*space_dim4;

   return 0;
}

int Prob_Calc::Init_LogFile(char *feat_log) {

   if (ready!=-1)               return -10;

   if (!feat_log) {
      flog=NULL;
   } else if (!feat_log[0]) {
      flog=NULL;
   } else {
      if (!(flog=fopen(feat_log, "wb")))                    return -3;
   }
   return 0;
}

int Prob_Calc::Init_Calc(int N, int G, int L, int F, int M) {

   if (ready!=-2)                                           return -10;

   state_number = N;
   max_gauss    = G;
   space_dim    = L;
   max_len      = F;
   min_len      = M;
   gauss_num    = state_number*max_gauss;

   int ret=Init_Arrays();
   if (ret<0) return ret;

   for (int i=0; i<state_number; i++) {
      states[i].compInd=i*max_gauss;
      states[i].compNum=max_gauss;
   }

   ippsSet_32f(1.0f/(float)max_gauss,weights,state_number);
   ippsSet_32f((float)space_dim,dets,state_number);
   ippsSet_32f(0.0f,means,state_number*space_dim4);
   ippsSet_32f(1.0f,vars,state_number*space_dim4);
   ippsOutProbPreCalc_32f_I(Weight(0),Det(0),gauss_num);

   ready=-1;
   return 0;
}

static FILE* create_param_file(char *file, int stateNum, int maxComp, int vecSize, int trpNum) {
   Param_File_Header header;
   FILE *fptr=NULL;
   int i;
   if (!(fptr=fopen(file, "wb")))  return fptr;
   header.vecSize=vecSize;
   header.maxComp=3;
   header.fileType=0;
   header.mixNum=stateNum;
   header.wgtNum=stateNum*maxComp;
   header.gaussNum=stateNum*maxComp;
   header.trpNum=trpNum;
   if (fwrite((void*)(&header), sizeof(Param_File_Header), 1, fptr)<1) {
      fclose(fptr); return fptr;
   }
   File_Mixture *states=(File_Mixture*)calloc(sizeof(File_Mixture),header.mixNum);
   if (!states) {
      fclose(fptr); return fptr;
   }
   for (i=0; i<header.mixNum; i++) {
       states[i].compNum=maxComp;
       states[i].wgtInd=maxComp*i;
       states[i].compInd=maxComp*i;
   }
   if (fwrite((void*)(states), sizeof(File_Mixture), header.mixNum, fptr)<1) {
      fclose(fptr); return fptr;
   }
   free(states);
   float *weights=(float*)calloc(sizeof(float),header.wgtNum);
   for (i=0; i<header.mixNum; i++) {
//       weights[i]=(float)log(1.0/maxComp);
       weights[i]=-1.0f-((float)(rand())/(float)RAND_MAX); // -2.0 ... -1.0
   }
   if (fwrite((void*)(weights), sizeof(float)*header.wgtNum, 1, fptr)<1) {
      fclose(fptr); return fptr;
   }
   free(weights);
   float *means=(float*)calloc(sizeof(float),header.gaussNum*((header.vecSize+3)&(-3)));
   for (i=0; i<stateNum*((header.vecSize+3)&(-3)); i++) {
//       means[i]=0.0f;
       means[i]=-4.0f+((float)(rand())*8.0f/(float)RAND_MAX); // -4.0 ... 4.0
   }
   if (fwrite((void*)(means), sizeof(float)*header.gaussNum*((header.vecSize+3)&(-3)), 1, fptr)<1) {
      fclose(fptr); return fptr;
   }
   free(means);
   float *vars=(float*)calloc(sizeof(float),header.gaussNum*((header.vecSize+3)&(-3)));
   for (i=0; i<stateNum*((header.vecSize+3)&(-3)); i++) {
//       vars[i]=1.0f;
       vars[i]=0.1f+((float)(rand())*0.4f/(float)RAND_MAX); // 0.1 ... 0.5
   }
   if (fwrite((void*)(vars), sizeof(float)*header.gaussNum*((header.vecSize+3)&(-3)), 1, fptr)<1) {
      fclose(fptr); return fptr;
   }
   free(vars);
   float *dets=(float*)calloc(sizeof(float),header.gaussNum);
   for (i=0; i<header.mixNum; i++) {
//       dets[i]=10.0f;
       dets[i]=90.0f+((float)(rand())*40.0f/(float)RAND_MAX); // 90.0 ... 130.0
   }
   if (fwrite((void*)(dets), sizeof(float)*header.gaussNum, 1, fptr)<1) {
      fclose(fptr); return fptr;
   }
   free(dets);
   float *trans=(float*)calloc(sizeof(float),header.trpNum);
   for (i=0; i<header.trpNum; i++) {
       trans[i]=0.1f;
   }
   if (fwrite((void*)(trans), sizeof(float), header.trpNum, fptr)<1) {
      fclose(fptr); return fptr;
   }
   free(trans);
   fclose(fptr);
   fptr=fopen(file, "rb");
   return fptr;
}

int Prob_Calc::Init_Calc(char* file, int F, int M) {

   int i;
   FILE  *fptr;
   Param_File_Header header;
   File_Mixture *exstates=NULL;

   if (ready!=-2)                                           return -10;

   if (!(fptr=fopen(file, "rb")))
   if (!(fptr=create_param_file(file,6000,4,36,100)))       return -3;
   if (fread((void*)(&header), sizeof(Param_File_Header), 1, fptr)<1) {
      fclose(fptr); return -3;
   }

   state_number = header.mixNum;
   max_gauss    = 1;
   space_dim    = header.vecSize;
   max_len      = F;
   min_len      = M;

   gauss_num    = header.wgtNum;
   if (gauss_num<=0)                          {fclose(fptr); return -1;}
   if (header.fileType&0x0111!=0)             {fclose(fptr); return -1;}

   int ret=Init_Arrays();
   if (ret<0)                                 {fclose(fptr); return ret;};

   if (!(exstates  = (File_Mixture*)malloc(sizeof(File_Mixture)*state_number)))
      return -2;
   if ((int)fread((void*)exstates, sizeof(File_Mixture), state_number, fptr)<state_number) {
      fclose(fptr); free(exstates); return -3;
   }
   for (i=0; i<state_number; i++) {
      if (max_gauss<exstates[i].compNum) max_gauss=exstates[i].compNum;
      states[i].compInd=exstates[i].compInd;
      states[i].compNum=exstates[i].compNum;
   }
   free(exstates);

   if ((int)fread((void*)weights, sizeof(float), gauss_num, fptr)<gauss_num) {
      fclose(fptr); return -3;
   }
   if ((int)fread((void*)means, sizeof(float)*space_dim4, gauss_num, fptr)<gauss_num) {
      fclose(fptr); return -3;
   }
   if ((int)fread((void*)vars, sizeof(float)*space_dim4, gauss_num, fptr)<gauss_num) {
      fclose(fptr); return -3;
   }
   if ((int)fread((void*)dets, sizeof(float), gauss_num, fptr)<gauss_num) {
      fclose(fptr); return -3;
   }
   fclose(fptr);
   ippsOutProbPreCalc_32f_I(Weight(0),Det(0),gauss_num);

   ready=-1;
   return 0;
}

Prob_Calc::~Prob_Calc(void) {
   state_number = 0;
   max_gauss    = 0;
   space_dim    = 0;
   gauss_num    = 0;
   max_len      = 0;
   min_len      = 0;
   space_dim4   = 0;
   state_number4= 0;
   gauss_num4   = 0;
   curidx       = 0;
   lastidx      = 0;
   delta_delay  = 0;
   sen_end      = false;
   type         = calcNone;
   if (features) ippsFree(features);
   if (tmp_prob) ippsFree(tmp_prob);
   if (buffer)   ippsFree(buffer);
   if (flog)     fclose(flog);
   feat         = NULL;
   buffer       = NULL;
   features     = NULL;
   tmp_prob     = NULL;
   states       = NULL;
   weights      = NULL;
   dets         = NULL;
   means        = NULL;
   vars         = NULL;
   curfeat      = NULL;
   endfeat      = NULL;
   lastfeat     = NULL;
   flog         = NULL;
   ready        = -2;
}

bool Prob_Calc::Attach_Feat(Feat_Calc *f) {
   if (ready!=-1)                                      return false;
   feat=f;
   if (!feat)                                          return false;
   if (!feat->Ready())                                 return false;
   if (feat->Feature_Length()!=space_dim)              return false;

   sen_end     = false;
   curfeat     = features;
   endfeat     = features;
   lastfeat    = features;
   curidx      = 0;
   lastidx     = 0;
   delta_delay = feat->Delta_Delay();

   if (flog)
      feat->Write_LogHeader(flog);

   ready       = 0;
   return true;
}

bool Prob_Calc::Detach_Feat(void) {
   if (ready!=0)                                       return false;
   sen_end=true;
   feat=NULL;
   curfeat=NULL;
   endfeat=NULL;
   lastfeat=NULL;
   curidx=0;
   lastidx=0;
   delta_delay=0;
   ready=-1;

   if (flog)
      fclose(flog);
   flog=NULL;

   return true;
}

bool Prob_Calc::Step_Forward(void) {
   if (ready!=0)                                       return false;
   curfeat+=space_dim4;
   curidx++;
   if ((sen_end)&&(lastidx==curidx)) {
      return false;
   } else if (curidx>=max_len-min_len-delta_delay) {  //  switch to buffer beginning
      ippsCopy_32f(curfeat,features,lastfeat-curfeat+delta_delay*space_dim4);
      lastfeat=features+(lastfeat-curfeat);
      lastidx=lastidx-curidx;
      curfeat=features;
      curidx=0;
   }
   return true;
}

int Prob_Calc::Obv_Prob_Vec(int state, float *result, int len) {
   int m,num;
   if (ready!=0)                                       return -1;
   if (!sen_end) {
      if (lastidx-curidx<min_len) {
         num=feat->Get_Feature(lastfeat,max_len-lastidx,&sen_end);
         if (flog)
            for (m=0; m<num; m++)
               fwrite((void*)(lastfeat+m*space_dim4), sizeof(float), space_dim, flog);
         // here wait if num==0 if features are consumed faster
         lastidx+=num;
         lastfeat+=num*space_dim4;
      }
   }

   num=lastidx-curidx;
   if (len<num) num=len;

   float *mean=Mean(state);
   float *var=Var(state);
   float *det=Det(state);
   float *feat=curfeat;

   switch (type) {
   case calcVect:
      ippsLogGauss_32f_D2(curfeat,space_dim4,mean,var,space_dim,result,num,det[0]);
      for (m=1; m<states[state].compNum; m++) {
         mean+=space_dim4;
         var+=space_dim4;
         ippsLogGaussAdd_32f_D2(curfeat,space_dim4,mean,var,space_dim,result,num,det[m]);
      }
      break;
   case calcVecM:
      ippsLogGauss_32f_D2(curfeat,space_dim4,mean,var,space_dim,result,num,det[0]);
      for (m=1; m<states[state].compNum; m++) {
         mean+=space_dim4;
         var+=space_dim4;
         ippsLogGaussMax_32f_D2(curfeat,space_dim4,mean,var,space_dim,result,num,det[m]);
      }
      break;
   case calcMMix:
      for (m=0; m<num; m++) {
         ippsCopy_32f(det,tmp_prob,states[state].compNum);
         ippsLogGaussMultiMix_32f_D2(mean,var,space_dim4,feat,space_dim,
            tmp_prob,states[state].compNum);
         ippsLogSum_32f(tmp_prob,result+m,states[state].compNum,ippAlgHintNone);
         feat+=space_dim4;
      }
      break;
   case calcMix:
      for (m=0; m<num; m++) {
         ippsLogGaussMixture_32f_D2(feat,mean,var,states[state].compNum,space_dim4,
            space_dim,det,result+m);
         feat+=space_dim4;
      }
      break;
   case calcNone:
      fake_sum=det[0];
      for (m=0; m<space_dim4*states[state].compNum; m+=8)
         fake_sum+=mean[m];
      for (m=0; m<space_dim4*states[state].compNum; m+=8)
         fake_sum+=var[m];
      for (m=0; m<space_dim4*num; m+=8)
         fake_sum+=curfeat[m];
      break;
   default:
      return -1;
   }

   return num;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲女子a中天字幕| 亚洲 欧美综合在线网络| 色综合天天综合给合国产| 午夜精品福利一区二区蜜股av | 精品在线免费视频| 国产精品第13页| 精品电影一区二区| 在线视频一区二区三| 国产aⅴ综合色| 免费成人在线播放| 午夜视频在线观看一区| 中文字幕免费不卡在线| 日韩一区和二区| 在线观看欧美黄色| 成人av网站大全| 国产麻豆精品一区二区| 日韩精品一二三区| 一区二区三区中文在线| 日本一区二区三区高清不卡| 日韩欧美另类在线| 7799精品视频| 精品视频免费看| 色婷婷久久一区二区三区麻豆| 国产一区二区三区高清播放| 美女视频第一区二区三区免费观看网站 | 99精品视频一区二区| 精品亚洲成a人在线观看 | 美女视频网站黄色亚洲| 午夜视频一区在线观看| 亚洲国产精品久久久久秋霞影院| 亚洲免费毛片网站| 日韩美女视频一区二区| 国产精品久久国产精麻豆99网站| 国产精品丝袜一区| 国产清纯美女被跳蛋高潮一区二区久久w | 精品国产91乱码一区二区三区| 制服视频三区第一页精品| 欧美另类高清zo欧美| 91精品国产色综合久久不卡蜜臀 | 国产欧美日产一区| 久久久国产精品不卡| 欧美精品一区二区久久婷婷| 欧美成人r级一区二区三区| 91精品蜜臀在线一区尤物| 欧美巨大另类极品videosbest| 欧美日韩日日摸| 欧美一区二视频| 精品国产一区二区三区四区四 | 午夜私人影院久久久久| 日韩精品一区第一页| 青草国产精品久久久久久| 蜜桃视频一区二区三区在线观看| 久久精品国产亚洲a| 国产精品一区二区久激情瑜伽| 国产美女一区二区三区| 成人黄色在线看| 色婷婷综合中文久久一本| 欧美日韩视频在线第一区| 欧美一区二区三区四区在线观看| 日韩欧美一二三区| 国产婷婷色一区二区三区| 国产精品私房写真福利视频| 亚洲精品乱码久久久久久| 视频一区国产视频| 蜜臀av性久久久久蜜臀aⅴ流畅| 激情综合亚洲精品| thepron国产精品| 欧美日韩午夜在线| 亚洲精品在线观看视频| 欧美韩国日本综合| 尤物av一区二区| 久久精品国产久精国产爱| 成人黄色软件下载| 欧美唯美清纯偷拍| 亚洲精品一区二区三区99| 国产精品久久久久久久久免费丝袜| 亚洲精品欧美专区| 九九精品一区二区| 99精品黄色片免费大全| 欧美日韩精品一二三区| 久久精品一区二区三区不卡| 亚洲精品视频一区| 精品一区免费av| 色婷婷激情一区二区三区| 欧美v国产在线一区二区三区| 亚洲色图欧美激情| 久久99精品久久久久久国产越南| 成人91在线观看| 日韩午夜小视频| 日韩理论电影院| 韩国中文字幕2020精品| 色综合久久久久| 2021久久国产精品不只是精品| 亚洲欧美偷拍另类a∨色屁股| 美日韩一级片在线观看| 日本韩国精品一区二区在线观看| 欧美成人一区二区三区| 亚洲少妇30p| 国产揄拍国内精品对白| 欧美精品v日韩精品v韩国精品v| 国产精品美女www爽爽爽| 久久成人久久鬼色| 欧美性大战久久久久久久| 欧美国产一区在线| 久久激五月天综合精品| 日本韩国欧美一区| 国产精品久久免费看| 蜜臀av一区二区| 欧美日韩精品是欧美日韩精品| 国产精品久久看| 国产精一品亚洲二区在线视频| 欧美日本在线播放| 亚洲男人的天堂在线观看| 国产乱码精品一品二品| 日韩免费电影网站| 日韩精品五月天| 在线观看免费成人| 综合电影一区二区三区| 丁香另类激情小说| 久久久综合网站| 激情图片小说一区| 日韩欧美一卡二卡| 日本欧洲一区二区| 欧美日韩免费观看一区二区三区| 综合久久国产九一剧情麻豆| 成人黄色在线视频| 中文av一区特黄| youjizz国产精品| 国产日韩在线不卡| 国产成人精品免费视频网站| 久久嫩草精品久久久久| 国产乱码精品一区二区三| 久久视频一区二区| 国产在线乱码一区二区三区| 欧美成人a视频| 国产一区二区导航在线播放| 久久品道一品道久久精品| 国产乱子轮精品视频| 久久久久久久久久电影| 国产精品自在在线| 国产午夜一区二区三区| 高清shemale亚洲人妖| 欧美激情艳妇裸体舞| 99久久精品免费看| 一区二区三区四区中文字幕| 色哟哟一区二区在线观看| 亚洲一区二区欧美日韩| 欧美高清视频一二三区 | 日韩精品午夜视频| 91精品黄色片免费大全| 欧美a级理论片| 欧美精品一区二区久久久 | 337p亚洲精品色噜噜| 美女网站一区二区| 国产亚洲1区2区3区| 成人久久18免费网站麻豆 | 国产成人午夜精品5599| 日韩美女视频一区二区| 欧美性欧美巨大黑白大战| 蜜桃av噜噜一区| 中文字幕av一区二区三区高 | 欧美色网一区二区| 美女视频网站黄色亚洲| 欧美国产精品一区二区三区| 91香蕉视频污| 日韩高清在线观看| 国产欧美日韩久久| 色婷婷精品大在线视频 | 久久精品国产精品亚洲综合| 国产清纯美女被跳蛋高潮一区二区久久w| 成人v精品蜜桃久久一区| 亚洲不卡一区二区三区| 精品91自产拍在线观看一区| 91丨九色丨黑人外教| 免费一区二区视频| 国产精品视频yy9299一区| 欧日韩精品视频| 麻豆成人免费电影| 亚洲欧美日本在线| 精品国产一区二区在线观看| 97久久超碰国产精品电影| 美国三级日本三级久久99| 亚洲欧美在线观看| 91麻豆精品国产91久久久使用方法| 国产一区在线观看麻豆| 亚洲国产视频一区| 国产欧美视频一区二区三区| 欧美中文字幕一区二区三区亚洲| 国产一区二区在线观看视频| 一区二区三区欧美| 久久综合久久99| 欧美唯美清纯偷拍| 成人免费毛片高清视频| 日韩电影在线观看电影| 亚洲人成小说网站色在线| 久久久噜噜噜久久中文字幕色伊伊| 欧美亚洲高清一区二区三区不卡| 成人午夜视频在线观看| 美脚の诱脚舐め脚责91| 亚洲电影你懂得|