📄 icbconstruct.c
字号:
/****************************************************************** 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -