2 /******************************************************************
4 iLBC Speech Coder ANSI-C Source Code
8 Copyright (C) The Internet Society (2004).
13 ******************************************************************/
17 #include "constants.h"
18 #include "gainquant.h"
21 /*----------------------------------------------------------------*
22 * quantizer for the gain in the gain-shape coding of residual
23 *---------------------------------------------------------------*/
25 float gainquant(/* (o) quantized gain value */
26 float in
, /* (i) gain value */
27 float maxIn
,/* (i) maximum of gain value */
28 int cblen
, /* (i) number of quantization indices */
29 int *index
/* (o) quantization index */
32 float minmeasure
,measure
, *cb
, scale
;
34 /* ensure a lower bound on the scaling factor */
42 /* select the quantization table */
46 } else if (cblen
== 16) {
52 /* select the best index in the quantization table */
54 minmeasure
=10000000.0;
56 for (i
=0; i
<cblen
; i
++) {
57 measure
=(in
-scale
*cb
[i
])*(in
-scale
*cb
[i
]);
59 if (measure
<minmeasure
) {
66 /* return the quantized value */
70 return scale
*cb
[tindex
];
73 /*----------------------------------------------------------------*
74 * decoder for quantized gains in the gain-shape coding of
76 *---------------------------------------------------------------*/
78 float gaindequant( /* (o) quantized gain value */
79 int index
, /* (i) quantization index */
80 float maxIn
,/* (i) maximum of unquantized gain */
81 int cblen
/* (i) number of quantization indices */
85 /* obtain correct scale factor */
87 scale
=(float)fabs(maxIn
);
93 /* select the quantization table and return the decoded value */
96 return scale
*gain_sq3Tbl
[index
];
97 } else if (cblen
==16) {
98 return scale
*gain_sq4Tbl
[index
];
100 else if (cblen
==32) {
101 return scale
*gain_sq5Tbl
[index
];