1/*
2 *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10
11/*
12 * SWB_KLT_Tables_LPCGain.c
13 *
14 * This file defines tables used for entropy coding of LPC Gain
15 * of upper-band.
16 *
17 */
18
19#include "lpc_gain_swb_tables.h"
20#include "settings.h"
21#include "webrtc/typedefs.h"
22
23const double WebRtcIsac_kQSizeLpcGain = 0.100000;
24
25const double WebRtcIsac_kMeanLpcGain = -3.3822;
26
27/*
28* The smallest reconstruction points for quantiztion of
29* LPC gains.
30*/
31const double WebRtcIsac_kLeftRecPointLpcGain[SUBFRAMES] =
32{
33   -0.800000, -1.000000, -1.200000, -2.200000, -3.000000, -12.700000
34};
35
36/*
37* Number of reconstruction points of quantizers for LPC Gains.
38*/
39const int16_t WebRtcIsac_kNumQCellLpcGain[SUBFRAMES] =
40{
41    17,  20,  25,  45,  77, 170
42};
43/*
44* Starting index for entropy decoder to search for the right interval,
45* one entry per LAR coefficient
46*/
47const uint16_t WebRtcIsac_kLpcGainEntropySearch[SUBFRAMES] =
48{
49     8,  10,  12,  22,  38,  85
50};
51
52/*
53* The following 6 vectors define CDF of 6 decorrelated LPC
54* gains.
55*/
56const uint16_t WebRtcIsac_kLpcGainCdfVec0[18] =
57{
58     0,    10,    27,    83,   234,   568,  1601,  4683, 16830, 57534, 63437,
59 64767, 65229, 65408, 65483, 65514, 65527, 65535
60};
61
62const uint16_t WebRtcIsac_kLpcGainCdfVec1[21] =
63{
64     0,    15,    33,    84,   185,   385,   807,  1619,  3529,  7850, 19488,
65 51365, 62437, 64548, 65088, 65304, 65409, 65484, 65507, 65522, 65535
66};
67
68const uint16_t WebRtcIsac_kLpcGainCdfVec2[26] =
69{
70     0,    15,    29,    54,    89,   145,   228,   380,   652,  1493,  4260,
71 12359, 34133, 50749, 57224, 60814, 62927, 64078, 64742, 65103, 65311, 65418,
72 65473, 65509, 65521, 65535
73};
74
75const uint16_t WebRtcIsac_kLpcGainCdfVec3[46] =
76{
77     0,     8,    12,    16,    26,    42,    56,    76,   111,   164,   247,
78   366,   508,   693,  1000,  1442,  2155,  3188,  4854,  7387, 11249, 17617,
79 30079, 46711, 56291, 60127, 62140, 63258, 63954, 64384, 64690, 64891, 65031,
80 65139, 65227, 65293, 65351, 65399, 65438, 65467, 65492, 65504, 65510, 65518,
81 65523, 65535
82};
83
84const uint16_t WebRtcIsac_kLpcGainCdfVec4[78] =
85{
86     0,    17,    29,    39,    51,    70,   104,   154,   234,   324,   443,
87   590,   760,   971,  1202,  1494,  1845,  2274,  2797,  3366,  4088,  4905,
88  5899,  7142,  8683, 10625, 12983, 16095, 20637, 28216, 38859, 47237, 51537,
89 54150, 56066, 57583, 58756, 59685, 60458, 61103, 61659, 62144, 62550, 62886,
90 63186, 63480, 63743, 63954, 64148, 64320, 64467, 64600, 64719, 64837, 64939,
91 65014, 65098, 65160, 65211, 65250, 65290, 65325, 65344, 65366, 65391, 65410,
92 65430, 65447, 65460, 65474, 65487, 65494, 65501, 65509, 65513, 65518, 65520,
93 65535
94};
95
96const uint16_t WebRtcIsac_kLpcGainCdfVec5[171] =
97{
98     0,    10,    12,    14,    16,    18,    23,    29,    35,    42,    51,
99    58,    65,    72,    78,    87,    96,   103,   111,   122,   134,   150,
100   167,   184,   202,   223,   244,   265,   289,   315,   346,   379,   414,
101   450,   491,   532,   572,   613,   656,   700,   751,   802,   853,   905,
102   957,  1021,  1098,  1174,  1250,  1331,  1413,  1490,  1565,  1647,  1730,
103  1821,  1913,  2004,  2100,  2207,  2314,  2420,  2532,  2652,  2783,  2921,
104  3056,  3189,  3327,  3468,  3640,  3817,  3993,  4171,  4362,  4554,  4751,
105  4948,  5142,  5346,  5566,  5799,  6044,  6301,  6565,  6852,  7150,  7470,
106  7797,  8143,  8492,  8835,  9181,  9547,  9919, 10315, 10718, 11136, 11566,
107 12015, 12482, 12967, 13458, 13953, 14432, 14903, 15416, 15936, 16452, 16967,
108 17492, 18024, 18600, 19173, 19736, 20311, 20911, 21490, 22041, 22597, 23157,
109 23768, 24405, 25034, 25660, 26280, 26899, 27614, 28331, 29015, 29702, 30403,
110 31107, 31817, 32566, 33381, 34224, 35099, 36112, 37222, 38375, 39549, 40801,
111 42074, 43350, 44626, 45982, 47354, 48860, 50361, 51845, 53312, 54739, 56026,
112 57116, 58104, 58996, 59842, 60658, 61488, 62324, 63057, 63769, 64285, 64779,
113 65076, 65344, 65430, 65500, 65517, 65535
114};
115
116/*
117* An array of pointers to CDFs of decorrelated LPC Gains
118*/
119const uint16_t* WebRtcIsac_kLpcGainCdfMat[SUBFRAMES] =
120{
121    WebRtcIsac_kLpcGainCdfVec0, WebRtcIsac_kLpcGainCdfVec1,
122    WebRtcIsac_kLpcGainCdfVec2, WebRtcIsac_kLpcGainCdfVec3,
123    WebRtcIsac_kLpcGainCdfVec4, WebRtcIsac_kLpcGainCdfVec5
124};
125
126/*
127* A matrix to decorrellate LPC gains of subframes.
128*/
129const double WebRtcIsac_kLpcGainDecorrMat[SUBFRAMES][SUBFRAMES] =
130{
131    {-0.150860,  0.327872,  0.367220,  0.504613,  0.559270,  0.409234},
132    { 0.457128, -0.613591, -0.289283, -0.029734,  0.393760,  0.418240},
133    {-0.626043,  0.136489, -0.439118, -0.448323,  0.135987,  0.420869},
134    { 0.526617,  0.480187,  0.242552, -0.488754, -0.158713,  0.411331},
135    {-0.302587, -0.494953,  0.588112, -0.063035, -0.404290,  0.387510},
136    { 0.086378,  0.147714, -0.428875,  0.548300, -0.570121,  0.401391}
137};
138