icbconstruct.c

来自「Asterisk-1.4.4最新内核源代码」· C语言 代码 · 共 109 行

C
109
字号
/******************************************************************    iLBC Speech Coder ANSI-C Source Code    iCBConstruct.c     Copyright (C) The Internet Society (2004).     All Rights Reserved.******************************************************************/#include <math.h>#include "iLBC_define.h"#include "iCBConstruct.h"#include "gainquant.h"#include "getCBvec.h"/*----------------------------------------------------------------* *  Convert the codebook indexes to make the search easier *---------------------------------------------------------------*/void index_conv_enc(    int *index          /* (i/o) Codebook indexes */){    int k;    for (k=1; k<CB_NSTAGES; k++) {                if ((index[k]>=108)&&(index[k]<172)) {            index[k]-=64;        } else if (index[k]>=236) {            index[k]-=128;        } else {            /* ERROR */        }    }}void index_conv_dec(    int *index          /* (i/o) Codebook indexes */){    int k;    for (k=1; k<CB_NSTAGES; k++) {                if ((index[k]>=44)&&(index[k]<108)) {            index[k]+=64;        } else if ((index[k]>=108)&&(index[k]<128)) {            index[k]+=128;        } else {            /* ERROR */        }    }}/*----------------------------------------------------------------* *  Construct decoded vector from codebook and gains. *---------------------------------------------------------------*/void iCBConstruct(    float *decvector,   /* (o) Decoded vector */    int *index,         /* (i) Codebook indices */    int *gain_index,/* (i) Gain quantization indices */    float *mem,         /* (i) Buffer for codevector construction */    int lMem,           /* (i) Length of buffer */    int veclen,         /* (i) Length of vector */    int nStages         /* (i) Number of codebook stages */){    int j,k;    float gain[CB_NSTAGES];    float cbvec[SUBL];    /* gain de-quantization */    gain[0] = gaindequant(gain_index[0], 1.0, 32);    if (nStages > 1) {        gain[1] = gaindequant(gain_index[1],             (float)fabs(gain[0]), 16);      }    if (nStages > 2) {        gain[2] = gaindequant(gain_index[2],             (float)fabs(gain[1]), 8);    }    /* codebook vector construction and construction of     total vector */    getCBvec(cbvec, mem, index[0], lMem, veclen);    for (j=0;j<veclen;j++){        decvector[j] = gain[0]*cbvec[j];    }    if (nStages > 1) {        for (k=1; k<nStages; k++) {            getCBvec(cbvec, mem, index[k], lMem, veclen);            for (j=0;j<veclen;j++) {                decvector[j] += gain[k]*cbvec[j];            }        }    }}

⌨️ 快捷键说明

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