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

📄 getcbvec.cpp

📁 KphoneSI (kpsi) is a SIP (Session Initiation Protocol) user agent for Linux, with which you can in
💻 CPP
字号:
   /******************************************************************       iLBC Speech Coder ANSI-C Source Code       getCBvec.c       Copyright (C) The Internet Society (2004).       All Rights Reserved.   ******************************************************************/   #include "iLBC_define.h"   #include "constants.h"   #include <string.h>   /*----------------------------------------------------------------*    *  Construct codebook vector for given index.    *---------------------------------------------------------------*/   void getCBvec(       float *cbvec,   /* (o) Constructed codebook vector */       float *mem,     /* (i) Codebook buffer */       int index,      /* (i) Codebook index */       int lMem,       /* (i) Length of codebook buffer */       int cbveclen/* (i) Codebook vector length */   ){       int j, k, n, memInd, sFilt;       float tmpbuf[CB_MEML];       int base_size;       int ilow, ihigh;       float alfa, alfa1;       /* Determine size of codebook sections */       base_size=lMem-cbveclen+1;       if (cbveclen==SUBL) {           base_size+=cbveclen/2;       }       /* No filter -> First codebook section */       if (index<lMem-cbveclen+1) {           /* first non-interpolated vectors */           k=index+cbveclen;           /* get vector */           memcpy(cbvec, mem+lMem-k, cbveclen*sizeof(float));       } else if (index < base_size) {           k=2*(index-(lMem-cbveclen+1))+cbveclen;           ihigh=k/2;           ilow=ihigh-5;           /* Copy first noninterpolated part */           memcpy(cbvec, mem+lMem-k/2, ilow*sizeof(float));           /* interpolation */           alfa1=(float)0.2;           alfa=0.0;           for (j=ilow; j<ihigh; j++) {               cbvec[j]=((float)1.0-alfa)*mem[lMem-k/2+j]+                   alfa*mem[lMem-k+j];               alfa+=alfa1;           }           /* Copy second noninterpolated part */           memcpy(cbvec+ihigh, mem+lMem-k+ihigh,               (cbveclen-ihigh)*sizeof(float));       }       /* Higher codebook section based on filtering */       else {           /* first non-interpolated vectors */           if (index-base_size<lMem-cbveclen+1) {               float tempbuff2[CB_MEML+CB_FILTERLEN+1];               float *pos;               float *pp, *pp1;               memset(tempbuff2, 0,                   CB_HALFFILTERLEN*sizeof(float));               memcpy(&tempbuff2[CB_HALFFILTERLEN], mem,                   lMem*sizeof(float));               memset(&tempbuff2[lMem+CB_HALFFILTERLEN], 0,                   (CB_HALFFILTERLEN+1)*sizeof(float));               k=index-base_size+cbveclen;               sFilt=lMem-k;               memInd=sFilt+1-CB_HALFFILTERLEN;               /* do filtering */               pos=cbvec;               memset(pos, 0, cbveclen*sizeof(float));               for (n=0; n<cbveclen; n++) {                   pp=&tempbuff2[memInd+n+CB_HALFFILTERLEN];                   pp1=&cbfiltersTbl[CB_FILTERLEN-1];                   for (j=0; j<CB_FILTERLEN; j++) {                       (*pos)+=(*pp++)*(*pp1--);                   }                   pos++;               }           }           /* interpolated vectors */           else {               float tempbuff2[CB_MEML+CB_FILTERLEN+1];               float *pos;               float *pp, *pp1;               int i;               memset(tempbuff2, 0,                   CB_HALFFILTERLEN*sizeof(float));               memcpy(&tempbuff2[CB_HALFFILTERLEN], mem,                   lMem*sizeof(float));               memset(&tempbuff2[lMem+CB_HALFFILTERLEN], 0,                   (CB_HALFFILTERLEN+1)*sizeof(float));               k=2*(index-base_size-                   (lMem-cbveclen+1))+cbveclen;               sFilt=lMem-k;               memInd=sFilt+1-CB_HALFFILTERLEN;               /* do filtering */               pos=&tmpbuf[sFilt];               memset(pos, 0, k*sizeof(float));               for (i=0; i<k; i++) {                   pp=&tempbuff2[memInd+i+CB_HALFFILTERLEN];                   pp1=&cbfiltersTbl[CB_FILTERLEN-1];                   for (j=0; j<CB_FILTERLEN; j++) {                       (*pos)+=(*pp++)*(*pp1--);                   }                   pos++;               }               ihigh=k/2;               ilow=ihigh-5;               /* Copy first noninterpolated part */               memcpy(cbvec, tmpbuf+lMem-k/2,                   ilow*sizeof(float));               /* interpolation */               alfa1=(float)0.2;               alfa=0.0;               for (j=ilow; j<ihigh; j++) {                   cbvec[j]=((float)1.0-alfa)*                       tmpbuf[lMem-k/2+j]+alfa*tmpbuf[lMem-k+j];                   alfa+=alfa1;               }               /* Copy second noninterpolated part */               memcpy(cbvec+ihigh, tmpbuf+lMem-k+ihigh,                   (cbveclen-ihigh)*sizeof(float));           }       }   }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -