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

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

?? encoder.c

?? Intel開發的IPP庫的應用實例
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*
//
//                  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) 2003-2006 Intel Corporation. All Rights Reserved.
//
//     Intel(R) Integrated Performance Primitives Aurora 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.
//
//  ES 201 108 v1.1.3 is the international standard promoted by ETSI
//   and other organizations. Implementations of these standards, or the standard
//   enabled platforms may require licenses from various entities, including
//  Intel Corporation.
//
*/

#include "encoderapi.h"
#include <malloc.h>
#include <stdio.h>
#include <math.h>

#include "tab_8kHz.inc"
#include "tab_16kHz.inc"
#include "mframe.h"

#define EMPHASIS_COEFF           0.97f

#define NUM_CHANNELS             23
#define STARTING_FREQ            64.0

typedef struct EncoderStruct{
    IppsFBankState_16s* pFBank;
    IppsDCTLifterState_16s* pDCTLifter;
    IppsCdbkState_16s  **ppCdbkState;
    int FFTOrder;
    int FrameLength;
    int FrameShift;
    int FFTLength;
    int numCepCoeff;
    int numChannels;
    short Dst0;
    short pSrc0;
    short preFloat;
    short *workBuffer;
    short *pWwork;
    int curPosition;
    AuroraDataType EncoderOutput;
    AuroraDataType EncoderInput;
    AuroraRate freq;
    double weight_c0;
    double weight_logE;
    unsigned char pIndexVQBuffer[2*NUM_CODEBOOK];
    short *pFeatBuffer;
    short *HammingWindow;
    int iCountFrame;
    int NumberFrame;
    int mframeCounter;
    MFrame *pFrame;
    int crc;
    int BufferData;
    int Curr;
    int Prev;
    int Last;
    int Start;
    int BufferSize;
    int done;

};


void ResetAuroraEncoder(AuroraEncoder *pCodec){
   pCodec->Dst0=0;
   pCodec->preFloat=0;
   pCodec->pSrc0=0;
   pCodec->curPosition = 0;
   pCodec->iCountFrame = 0;
   pCodec->mframeCounter = 1;
   pCodec->pFrame->pos=6;
   pCodec->NumberFrame = 0;
}

int InitAuroraEncoder(AuroraEncoder **pCodec, AuroraRate SamplingFrequency,AuroraDataType EncoderInput,AuroraDataType EncoderOutput){
   IppStatus status;
   int FrameShift=0;
   int FrameLength=0;
   float startingFeq=0;
   int i;
   float freq;
   short *qCoeffLog, *qCoeff;
   float pLiftCoeff[NUM_CEP_COEFF-1] = {1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,1.0f,};
/*   float pLiftCoeff[NUM_CEP_COEFF-1] = {0.740585f,1.18330f,1.60780f,2.00544f,2.36814f,2.68850f,
      2.96001f,3.17714f,3.33547f,3.43178f,3.46410f,3.43178f};*/


   pCodec[0] = malloc(sizeof(AuroraEncoder));
   if (pCodec[0]==NULL) return -1;
   status = ippStsNoErr;
   pCodec[0]->pFBank = NULL;
   pCodec[0]->pDCTLifter = NULL;
   pCodec[0]->workBuffer = NULL;
   pCodec[0]->ppCdbkState = NULL;
   pCodec[0]->pWwork = NULL;
   pCodec[0]->pFeatBuffer = NULL;
   pCodec[0]->HammingWindow = NULL;
   pCodec[0]->pFeatBuffer = ippsMalloc_16s(NUM_CEP_COEFF+1);
   pCodec[0]->iCountFrame = 0;
   pCodec[0]->mframeCounter = 1;
   pCodec[0]->NumberFrame = 0;
   pCodec[0]->EncoderInput = EncoderInput;
   pCodec[0]->pFrame = (MFrame*)ippsMalloc_8u(sizeof(MFrame));
   if ( !((SamplingFrequency == r8KHz) || (SamplingFrequency == r11KHz) || (SamplingFrequency == r16KHz))){
      free(pCodec[0]);
      return -1;
   }

   if (SamplingFrequency == r8KHz){
      FrameLength = FRAME_LEN_8;
      FrameShift = FRAME_SHIFT_8;
      startingFeq = STARTING_FREQ;
      pCodec[0]->freq = r8KHz;
      freq = 8000.0f;
      pCodec[0]->weight_c0 = w8kHz_C0;
      pCodec[0]->weight_logE = w8kHz_LE;
      qCoeff = (short*)qCoeff8kHz;
      qCoeffLog = (short*)qCoeff8kHz_Log;
      pCodec[0]->pFrame->sampRate = 0;
   }
   else if (SamplingFrequency == r11KHz){
      FrameLength = FRAME_LEN_11;
      FrameShift = FRAME_SHIFT_11;
      startingFeq = STARTING_FREQ;
      pCodec[0]->freq = r11KHz;
      freq = 11000.0f;
      pCodec[0]->weight_c0 = w8kHz_C0;
      pCodec[0]->weight_logE = w8kHz_LE;
      qCoeff = (short*)qCoeff8kHz;
      qCoeffLog = (short*)qCoeff8kHz_Log;
      pCodec[0]->pFrame->sampRate = 1;
   }
   else if (SamplingFrequency == r16KHz){
      FrameLength = FRAME_LEN_16;
      FrameShift = FRAME_SHIFT_16;
      startingFeq = STARTING_FREQ;
      pCodec[0]->freq = r16KHz;
      freq = 16000.0f;
      pCodec[0]->weight_c0 = w16kHz_C0;
      pCodec[0]->weight_logE = w16kHz_LE;
      qCoeff = (short*)(qCoeff16kHz);
      qCoeffLog = (short*)qCoeff16kHz_Log;
      pCodec[0]->pFrame->sampRate = 3;
   }

   pCodec[0]->FrameLength = FrameLength;
   pCodec[0]->FrameShift = FrameShift;
   pCodec[0]->Dst0 = 0;
   pCodec[0]->pSrc0 = 0;
   pCodec[0]->preFloat = 0;
   pCodec[0]->numChannels = NUM_CHANNELS;
   pCodec[0]->numCepCoeff = NUM_CEP_COEFF;
   if (EncoderInput==WAVEFORM){
      pCodec[0]->HammingWindow = ippsMalloc_16s(FrameLength);
      ippsZero_16s(pCodec[0]->HammingWindow,FrameLength);
      for (i = 0; i < FrameLength / 2; i++)
           pCodec[0]->HammingWindow[i] = (short)((0.54 - 0.46 * cos (IPP_2PI * i / (FrameLength - 1)))*16384);
      for (i = FrameLength / 2; i < FrameLength; i++)
           pCodec[0]->HammingWindow[i] = pCodec[0]->HammingWindow[FrameLength - 1 - i];
   }
   pCodec[0]->pFrame->pos=6;
   pCodec[0]->curPosition = 0;
   pCodec[0]->EncoderOutput = EncoderOutput;

   if (EncoderInput==WAVEFORM){
      status = ippsMelFBankInitAlloc_16s(&pCodec[0]->pFBank,&pCodec[0]->FFTOrder,FrameLength,freq,
         startingFeq, freq/2,NUM_CHANNELS,2595.0,700,(IppMelMode)(IPP_FBANK_FREQWGT | IPP_POWER_SPECTRUM));

   pCodec[0]->FFTLength = 1<<pCodec[0]->FFTOrder;
   pCodec[0]->workBuffer = ippsMalloc_16s(pCodec[0]->FFTLength);
   pCodec[0]->pWwork = ippsMalloc_16s (pCodec[0]->FFTLength);

      status = ippsDCTLifterInitAlloc_Mul_16s(&pCodec[0]->pDCTLifter,NUM_CHANNELS,pLiftCoeff,NUM_CEP_COEFF-1);

   if(status!=ippStsNoErr){
       if(pCodec[0]->pFBank) ippsFBankFree_16s(pCodec[0]->pFBank);
          pCodec[0]->pFBank=NULL;
          return -1;
   }
   }
   if (EncoderOutput == QUANTIZED || EncoderOutput == MULTIFRAME){
      pCodec[0]->ppCdbkState = (IppsCdbkState_16s  **)ippsMalloc_8u (sizeof(IppsCdbkState_16s  *)*NUM_CODEBOOK);
      if (pCodec[0]->ppCdbkState==NULL){
         printf("Memory not allocated");
         return -1;
      }

      for (i=0; i < 6; i++)
         ippsCdbkInitAlloc_L2_16s(&(pCodec[0]->ppCdbkState[i]),(const short*)(qCoeff+i*128),2,2,64,64,IPP_CDBK_FULL);
      for (i=0; i<256;i++){
         qCoeffLog[i*2+0] = (short)(qCoeffLog[i*2+0] * pCodec[0]->weight_c0);
         qCoeffLog[i*2+1] = (short)(qCoeffLog[i*2+1] * pCodec[0]->weight_logE);
      }
      ippsCdbkInitAlloc_L2_16s(&(pCodec[0]->ppCdbkState[6]),(const short*)qCoeffLog,2,2,256,256,IPP_CDBK_FULL);
   }
   return 0;
}


void ReleaseAuroraEncoder(AuroraEncoder *pCodec){
   int i;

   if (pCodec){
        if(pCodec->pFrame)ippsFree(pCodec->pFrame);
        if(pCodec->pFeatBuffer)ippsFree(pCodec->pFeatBuffer);
        if(pCodec->HammingWindow)ippsFree(pCodec->HammingWindow);
        if(pCodec->workBuffer) ippsFree(pCodec->workBuffer);
        if(pCodec->pWwork) ippsFree(pCodec->pWwork);
        if(pCodec->pFBank) ippsFBankFree_16s(pCodec->pFBank);
        if(pCodec->pDCTLifter) ippsDCTLifterFree_16s(pCodec->pDCTLifter);
        if(pCodec->ppCdbkState){
           for (i=0; i<NUM_CODEBOOK; i++){
             if (pCodec->ppCdbkState[i])ippsCdbkFree_16s(pCodec->ppCdbkState[i]);
           }
           ippsFree(pCodec->ppCdbkState);
        }
        free(pCodec);
   }
}

/*   WAVEFORM -> FEATURE   */
int ApplyAuroraEncoder_WF(AuroraEncoder *pCodec,short *pSrc,int InputLength,
                       short * pDst, int StreamEnd){

   int i,iCount;
   short *pFwork,*WaveBuffer;
   int FrameCounter;
   int tailSample;
   int step;
   float LogEnergy;
   int pFBBuffer[NUM_CHANNELS];
   float tmp,C0;

   if (InputLength<=0){
      FrameCounter=0;
      ResetAuroraEncoder(pCodec);
      return FrameCounter;
   }

   if (pCodec->EncoderOutput == FEATURE){
      pFwork =(short*) pDst/*+FeatureSize*pCodec->NumberFrame*/;
   }
   else {
      printf("\n!!! ERROR: encoder was initialized with another output flag !!!");
      return 0;
   }

   WaveBuffer = pSrc;
   FrameCounter = InputLength;
   if (pCodec->EncoderInput==WAVEFORM){
      if (pCodec->curPosition+InputLength >= pCodec->FrameLength){
            FrameCounter = (pCodec->curPosition+InputLength-(pCodec->FrameLength-pCodec->FrameShift)) / pCodec->FrameShift;
            tailSample = (pCodec->curPosition+InputLength-(pCodec->FrameLength-pCodec->FrameShift)) % pCodec->FrameShift;
            step = pCodec->FrameLength - pCodec->curPosition;
      }
      else{
            FrameCounter = 0;
            tailSample = InputLength;
      }
   }
   else {
      printf("\n!!! ERROR: encoder was initialized with another input flag !!!");
      return 0;
   }
   /*   calculate feature   */
   for (iCount=0;iCount<FrameCounter;iCount++){
      /* Offset Compensation*/
      ippsRShiftC_16s(WaveBuffer,1,pCodec->pWwork+pCodec->curPosition,step);
      ippsCompensateOffset_16s_I(pCodec->pWwork+pCodec->curPosition,
         step,&(pCodec->pSrc0),pCodec->Dst0,0.999f);

      pCodec->pSrc0 = WaveBuffer[step-1]>>1;
      pCodec->Dst0 = pCodec->pWwork[pCodec->FrameLength-1];

      WaveBuffer+=step;

      pCodec->curPosition = pCodec->FrameLength - pCodec->FrameShift;
      step = pCodec->FrameShift;

      /* logE computation */
      LogEnergy = 0.0;

      ippsDotProd_16s32f(pCodec->pWwork,pCodec->pWwork,pCodec->FrameLength,&LogEnergy);
      LogEnergy*=4;
      if (LogEnergy <= 0)
         LogEnergy = (float)-50.0f;
      else{
         LogEnergy = (float) log ((double) LogEnergy);
      }

      /* Pre-emphasis */
      ippsCopyWithPadding_16s(pCodec->pWwork, pCodec->FrameLength, pCodec->workBuffer,pCodec->FFTLength);

      ippsPreemphasize_16s(pCodec->workBuffer, pCodec->FrameLength, EMPHASIS_COEFF);

      pCodec->workBuffer[0] = (short)(pCodec->pWwork[0] - EMPHASIS_COEFF * pCodec->preFloat);

      /* Replace WorkBuffer*/
      pCodec->preFloat = pCodec->pWwork[pCodec->FrameShift-1];
      ippsMove_16s(pCodec->pWwork+pCodec->FrameShift, pCodec->pWwork,
         pCodec->FrameLength-pCodec->FrameShift);

      /* Windowing */
      ippsMul_16s_ISfs(pCodec->HammingWindow,pCodec->workBuffer,pCodec->FrameLength,15);

      /* Mel filtering with FFT and Magnitude spectrum*/
      ippsEvalFBank_16s32s_Sfs(pCodec->workBuffer,pFBBuffer,pCodec->pFBank,-2);

      /* Natural logarithm computation */
      C0=0;
      for (i = 0; i < pCodec->numChannels; i++){
         tmp = (float)pFBBuffer[i];
         if (tmp <=0)
            pFBBuffer[i] = (int)-50*1024;
         else
            tmp = (float) log ((double) tmp);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久美女高清视频| 成人综合在线观看| 日韩毛片高清在线播放| 久久精品视频网| 久久免费电影网| 欧美精品一区二区三区很污很色的 | 欧美激情在线一区二区| 精品国产91乱码一区二区三区| 欧美喷潮久久久xxxxx| 欧美日韩国产中文| 欧美日韩亚洲丝袜制服| 欧美精品久久99久久在免费线| 欧美日韩亚洲高清一区二区| 欧美天堂亚洲电影院在线播放| 欧美性生活一区| 欧美性大战久久久久久久蜜臀| 欧洲精品中文字幕| 在线免费观看不卡av| 欧洲一区在线观看| 欧美精品一二三| 欧美电影精品一区二区| 久久久久青草大香线综合精品| 国产亚洲人成网站| 亚洲精品视频在线观看网站| 一区二区三区免费| 欧美96一区二区免费视频| 蜜桃av一区二区| 成人一区二区三区中文字幕| 一本大道久久a久久综合婷婷| 欧美日韩精品电影| 精品奇米国产一区二区三区| 国产精品无码永久免费888| 一区二区三区四区在线免费观看 | 亚洲大片在线观看| 老司机精品视频在线| 东方aⅴ免费观看久久av| 色网站国产精品| 日韩女优毛片在线| 中文字幕中文乱码欧美一区二区 | 精品国产网站在线观看| 亚洲国产精品传媒在线观看| 亚洲成人手机在线| 国产毛片一区二区| 欧美视频一二三区| 久久综合狠狠综合久久综合88| 亚洲欧美综合另类在线卡通| 亚洲成人av一区| 成人av网址在线观看| 3atv一区二区三区| 亚洲欧美一区二区在线观看| 久久91精品国产91久久小草| 色乱码一区二区三区88| 精品久久久久久久久久久久久久久| 日韩一区欧美一区| 国产精品一区二区久激情瑜伽| 色综合一个色综合| 久久亚洲二区三区| 男男gaygay亚洲| 日本韩国欧美三级| 欧美激情中文不卡| 国产一区二区美女诱惑| 欧美顶级少妇做爰| 一二三区精品视频| 91色视频在线| 国产精品传媒视频| 成人福利视频在线| 26uuuu精品一区二区| 日韩在线一二三区| 日本乱人伦aⅴ精品| 国产精品久久久久久久浪潮网站| 极品少妇一区二区三区精品视频| 欧美群妇大交群中文字幕| 亚洲视频免费在线观看| 高清成人免费视频| 久久网这里都是精品| 美女网站在线免费欧美精品| 欧美三级日韩三级国产三级| 综合激情成人伊人| 91网址在线看| 亚洲综合av网| 欧美性生活一区| 日日骚欧美日韩| 欧美精品三级在线观看| 亚洲成人av在线电影| 7777精品伊人久久久大香线蕉的| 午夜久久福利影院| 欧美一区二区日韩一区二区| 麻豆精品久久久| 欧美va亚洲va| 国产成都精品91一区二区三 | 成人黄色电影在线| 国产精品区一区二区三| aaa国产一区| 亚洲自拍偷拍麻豆| 91精品国模一区二区三区| 欧美aaa在线| 欧美精彩视频一区二区三区| 成人国产精品视频| 亚洲最新在线观看| 欧美疯狂做受xxxx富婆| 久久国产欧美日韩精品| 亚洲国产精品国自产拍av| 91免费观看视频在线| 亚洲高清在线精品| 久久综合九色综合欧美就去吻 | 三级在线观看一区二区| 日韩一级免费一区| 风流少妇一区二区| 亚洲视频在线一区| 日韩欧美中文字幕制服| 国产suv精品一区二区883| 亚洲摸摸操操av| 日韩欧美二区三区| 成人国产在线观看| 亚洲v中文字幕| 中文字幕乱码久久午夜不卡| 色呦呦一区二区三区| 日本亚洲天堂网| 1区2区3区国产精品| 欧美日韩性生活| 国产99精品视频| 日韩在线一二三区| 国产精品不卡视频| 精品国产乱码久久久久久闺蜜 | 国产自产2019最新不卡| 中文字幕五月欧美| 91精品婷婷国产综合久久性色 | 69av一区二区三区| 91亚洲精品一区二区乱码| 麻豆91在线播放| 亚洲一区在线观看免费观看电影高清| 欧美va亚洲va| 欧美日韩一区在线| 懂色一区二区三区免费观看| 久久国产精品一区二区| 夜夜操天天操亚洲| 国产精品久久国产精麻豆99网站| 日韩欧美不卡在线观看视频| 色国产精品一区在线观看| 精品一区二区三区视频在线观看| 亚洲小少妇裸体bbw| 亚洲视频综合在线| 亚洲精品在线观| 91精品国产综合久久香蕉麻豆| 9i在线看片成人免费| 国产丶欧美丶日本不卡视频| 日本不卡中文字幕| 五月婷婷欧美视频| 亚洲精品精品亚洲| 亚洲另类在线视频| 日韩美女精品在线| 国产精品成人免费在线| 国产精品久久精品日日| 国产精品麻豆欧美日韩ww| 精品国产乱码久久久久久蜜臀 | 日本韩国欧美在线| 91福利国产精品| 色综合久久天天综合网| 91豆麻精品91久久久久久| 成人黄色一级视频| 91天堂素人约啪| 99综合影院在线| 色播五月激情综合网| 欧美午夜片在线看| 欧美美女一区二区| 日韩一区二区在线看| 欧美一级日韩一级| 精品国产成人在线影院 | 欧美视频在线一区| 欧美日韩亚洲国产综合| 51久久夜色精品国产麻豆| 欧美一级淫片007| 欧美一级欧美一级在线播放| 精品少妇一区二区三区免费观看| 久久尤物电影视频在线观看| 国产喷白浆一区二区三区| 国产精品久久久久影院| 亚洲男人天堂av| 日韩不卡一二三区| 国产精品综合一区二区三区| 国产99一区视频免费| 成人免费看黄yyy456| 欧美做爰猛烈大尺度电影无法无天| 色94色欧美sute亚洲线路一ni| 欧美日韩国产高清一区| 国产片一区二区| 曰韩精品一区二区| 视频一区国产视频| 国产精品123| 欧美综合久久久| 5858s免费视频成人| 久久久久久黄色| 亚洲精品国久久99热| 亚洲aⅴ怡春院| 精品写真视频在线观看| 成人免费视频免费观看| 欧美日韩激情在线| 国产欧美日韩在线视频| 亚洲综合在线视频| 久久国产精品99精品国产|