亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美aaa在线| 欧美日韩中字一区| 欧美久久久一区| 国产欧美在线观看一区| 亚洲成人福利片| jiyouzz国产精品久久| 91精品免费观看| 亚洲一区二三区| 国产宾馆实践打屁股91| 欧美成人在线直播| 亚洲成人自拍一区| 91在线精品一区二区| 久久精品亚洲精品国产欧美 | 欧美不卡视频一区| 国产精品美女久久久久高潮| 亚洲一区在线视频观看| 精品1区2区在线观看| 日韩av电影免费观看高清完整版| 亚洲丝袜精品丝袜在线| 国产成人亚洲综合a∨婷婷| 欧美一区二区美女| 婷婷中文字幕一区三区| 欧美性感一区二区三区| 亚洲黄色尤物视频| 99re这里只有精品6| 中文字幕一区二区三区蜜月| 国产91清纯白嫩初高中在线观看| 久久精品亚洲麻豆av一区二区| 韩国v欧美v日本v亚洲v| 精品日韩在线一区| 九九久久精品视频| 久久夜色精品国产欧美乱极品| 精品一区二区三区在线观看国产| 91精品一区二区三区久久久久久| 日韩极品在线观看| 91精品国产全国免费观看| 天天综合色天天综合色h| 欧美日韩视频在线第一区| 婷婷综合在线观看| 精品伦理精品一区| 成人午夜激情影院| 亚洲女爱视频在线| 欧美三级中文字幕| 看片的网站亚洲| 日本一区二区三区久久久久久久久不| 国产成人综合自拍| 一区二区三区不卡视频| 精品视频一区二区不卡| 久久精品国产免费看久久精品| 精品国产三级电影在线观看| 国产999精品久久久久久绿帽| 亚洲视频资源在线| 91精品国产欧美一区二区18 | 国产亚洲欧美中文| 欧美日韩视频在线一区二区| 欧美一区二区在线观看| 欧美一区在线视频| 亚洲精品一区二区三区在线观看| 欧美另类z0zxhd电影| 欧美精品久久99久久在免费线| 日韩一区二区三免费高清| 欧美成人三级在线| 国产欧美日韩不卡免费| 亚洲摸摸操操av| 9久草视频在线视频精品| 亚洲综合一二区| 日韩一区二区在线看| 懂色av一区二区夜夜嗨| 亚洲男女一区二区三区| 欧美精品一区二区蜜臀亚洲| 懂色av一区二区三区蜜臀| 亚洲伊人色欲综合网| 久久久久久久综合色一本| 色菇凉天天综合网| 国产伦精品一区二区三区免费迷| 亚洲女厕所小便bbb| 久久嫩草精品久久久精品| 99久久综合精品| 免费观看一级欧美片| 亚洲精品成人在线| 久久综合久久综合九色| 欧美午夜精品一区二区蜜桃| 国产91高潮流白浆在线麻豆| 日韩激情一二三区| 亚洲天堂a在线| 久久久蜜臀国产一区二区| 欧美三级电影一区| 97超碰欧美中文字幕| 国产美女娇喘av呻吟久久| 婷婷开心激情综合| 亚洲欧美另类在线| 国产欧美日韩三级| 精品成人免费观看| 日韩一级完整毛片| 欧美日韩国产成人在线91| 99视频精品免费视频| 国产精品18久久久久久久网站| 捆绑变态av一区二区三区| 婷婷综合久久一区二区三区| 夜色激情一区二区| 亚洲美女偷拍久久| 亚洲视频图片小说| 国产精品丝袜91| 国产精品午夜久久| 中文字幕精品一区| 亚洲国产精品成人综合| 国产日韩欧美精品一区| 精品久久国产老人久久综合| 国产精品高潮呻吟久久| 色综合久久久久久久久久久| 丁香桃色午夜亚洲一区二区三区| 国产精品一区二区x88av| 国产一区二区中文字幕| 国产麻豆精品95视频| 狠狠色丁香久久婷婷综| 国产一区二区女| 国产a级毛片一区| 成人在线视频一区| 懂色av中文一区二区三区| 成人免费不卡视频| 91小视频免费观看| 不卡电影一区二区三区| 一本色道久久综合精品竹菊| 在线精品视频一区二区三四| 欧美视频自拍偷拍| 91精品国产综合久久精品app| 91精品国产一区二区三区| 日韩你懂的在线观看| 久久老女人爱爱| 国产精品视频麻豆| 亚洲黄色性网站| 亚洲最大成人综合| 日本麻豆一区二区三区视频| 老司机免费视频一区二区| 国产精品一区二区三区四区| www.性欧美| 亚洲欧美日韩一区二区三区在线观看| 午夜精品久久久久久久| 亚洲色图在线视频| 依依成人精品视频| 偷拍一区二区三区四区| 免费观看在线色综合| 成人性生交大片免费看中文网站| 欧美亚洲高清一区| 成人激情视频网站| 成人的网站免费观看| 欧美日韩一级黄| 精品女同一区二区| 日韩毛片一二三区| 亚洲不卡在线观看| 老司机免费视频一区二区| 欧美一区二区精品久久911| 在线视频国产一区| 欧美中文字幕一区二区三区亚洲| 欧美日本一区二区| 国产免费成人在线视频| 亚洲欧美一区二区久久| 美日韩一区二区三区| 波多野结衣91| 91精品国产高清一区二区三区| 国产欧美一区二区精品性 | 日韩精品中文字幕一区二区三区| 欧美精品久久一区| 一区二区三区日韩在线观看| 香蕉av福利精品导航| 成人午夜电影网站| 国产精品三级av在线播放| 91精品视频网| 日本一区二区视频在线观看| 亚洲色图欧美偷拍| 午夜私人影院久久久久| 捆绑紧缚一区二区三区视频 | 精品久久久久久综合日本欧美| 国产一区视频网站| 日韩伦理av电影| 国产999精品久久久久久 | 国产91对白在线观看九色| 亚洲影院理伦片| 一区二区高清免费观看影视大全 | 丁香亚洲综合激情啪啪综合| 日韩视频在线一区二区| 日本成人中文字幕在线视频 | 精品国产一区二区在线观看| 热久久久久久久| 成人免费电影视频| 国产亚洲1区2区3区| 91片黄在线观看| 国产精品久久久久婷婷| 成人免费视频视频| 欧美aⅴ一区二区三区视频| 久久精品男人的天堂| 91精品国产综合久久精品性色| 国产麻豆精品久久一二三| 婷婷一区二区三区| 中文字幕亚洲不卡| 777亚洲妇女| 国产91高潮流白浆在线麻豆| 国产精品少妇自拍| 在线亚洲高清视频| 成人黄色小视频在线观看|