gainquant.cxx

来自「MiniSip Client with DomainKeys Authentic」· CXX 代码 · 共 108 行

CXX
108
字号
//A.22 gainquant.c        /******************************************************************            iLBC Speech Coder ANSI-C Source Code            gainquant.c             Copyright (c) 2001,        Global IP Sound AB.        All rights reserved.        ******************************************************************/        #include <string.h>    #include <math.h> #include"constants.h" #include"filter.h"        /*----------------------------------------------------------------*     *  quantizer for the gain in the gain-shape coding of residual     *---------------------------------------------------------------*/        float gainquant(/* (o) quantized gain value */        float in,       /* (i) gain value */        float maxIn,/* (i) maximum of gain value */        int cblen,      /* (i) number of quantization indices */        int *index      /* (o) quantization index */    ){        int i, tindex;        float minmeasure,measure, *cb, scale;            /* ensure a lower bound on the scaling factor */            scale=maxIn;                if (scale<0.1) {            scale=(float)0.1;        }            /* select the quantization table */                if (cblen == 8) {            cb = gain_sq3Tbl;        } else if (cblen == 16) {            cb = gain_sq4Tbl;             } else  {            cb = gain_sq5Tbl;        }            /* select the best index in the quantization table */                minmeasure=10000000.0;        tindex=0;        for (i=0;i<cblen;i++) {            measure=(in-scale*cb[i])*(in-scale*cb[i]);                        if (measure<minmeasure) {                tindex=i;                minmeasure=measure;            }        }        *index=tindex;                   /* return the quantized value */                return scale*cb[tindex];    }        /*----------------------------------------------------------------*     *  decoder for quantized gains in the gain-shape coding of      *  residual                               *---------------------------------------------------------------*/        float gaindequant(  /* (o) quantized gain value */        int index,      /* (i) quantization index */        float maxIn,/* (i) maximum of unquantized gain */        int cblen       /* (i) number of quantization indices */    ){        float scale;            /* obtain correct scale factor */            scale=(float)fabs(maxIn);                if (scale<0.1) {            scale=(float)0.1;        }            /* select the quantization table and return the decoded value */            if (cblen==8) {            return scale*gain_sq3Tbl[index];        } else if (cblen==16) {            return scale*gain_sq4Tbl[index];        }        else if (cblen==32) {            return scale*gain_sq5Tbl[index];        }                 return 0.0;    }         

⌨️ 快捷键说明

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