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 * SWB16_KLT_Tables.c
13 *
14 * This file defines tables used for entropy coding of LPC shape of
15 * upper-band signal if the bandwidth is 16 kHz.
16 *
17 */
18
19#include "lpc_shape_swb16_tables.h"
20#include "settings.h"
21#include "webrtc/typedefs.h"
22
23/*
24* Mean value of LAR
25*/
26const double WebRtcIsac_kMeanLarUb16[UB_LPC_ORDER] =
27{
280.454978, 0.364747, 0.102999, 0.104523
29};
30
31/*
32* A rotation matrix to decorrelate intra-vector correlation,
33* i.e. correlation among components of LAR vector.
34*/
35const double WebRtcIsac_kIintraVecDecorrMatUb16[UB_LPC_ORDER][UB_LPC_ORDER] =
36{
37    {-0.020528, -0.085858, -0.002431,  0.996093},
38    {-0.033155,  0.036102,  0.998786,  0.004866},
39    { 0.202627,  0.974853, -0.028940,  0.088132},
40    {-0.978479,  0.202454, -0.039785, -0.002811}
41};
42
43/*
44* A rotation matrix to remove correlation among LAR coefficients
45* of different LAR vectors. One might guess that decorrelation matrix
46* for the first component should differ from the second component
47* but we haven't observed a significant benefit of having different
48* decorrelation matrices for different components.
49*/
50const double WebRtcIsac_kInterVecDecorrMatUb16
51[UB16_LPC_VEC_PER_FRAME][UB16_LPC_VEC_PER_FRAME] =
52{
53    { 0.291675, -0.515786,  0.644927,  0.482658},
54    {-0.647220,  0.479712,  0.289556,  0.516856},
55    { 0.643084,  0.485489, -0.289307,  0.516763},
56    {-0.287185, -0.517823, -0.645389,  0.482553}
57};
58
59/*
60* The following 16 vectors define CDF of 16 decorrelated LAR
61* coefficients.
62*/
63const uint16_t WebRtcIsac_kLpcShapeCdfVec01Ub16[14] =
64{
65     0,      2,     20,    159,   1034,   5688,  20892,  44653,
66 59849,  64485,  65383,  65518,  65534,  65535
67};
68
69const uint16_t WebRtcIsac_kLpcShapeCdfVec1Ub16[16] =
70{
71     0,      1,      7,     43,    276,   1496,   6681,  21653,
72 43891,  58859,  64022,  65248,  65489,  65529,  65534,  65535
73};
74
75const uint16_t WebRtcIsac_kLpcShapeCdfVec2Ub16[18] =
76{
77     0,      1,      9,     54,    238,    933,   3192,   9461,
78 23226,  42146,  56138,  62413,  64623,  65300,  65473,  65521,
79 65533,  65535
80};
81
82const uint16_t WebRtcIsac_kLpcShapeCdfVec3Ub16[30] =
83{
84     0,      2,      4,      8,     17,     36,     75,    155,
85   329,    683,   1376,   2662,   5047,   9508,  17526,  29027,
86 40363,  48997,  55096,  59180,  61789,  63407,  64400,  64967,
87 65273,  65429,  65497,  65526,  65534,  65535
88};
89
90const uint16_t WebRtcIsac_kLpcShapeCdfVec4Ub16[16] =
91{
92     0,      1,     10,     63,    361,   1785,   7407,  22242,
93 43337,  58125,  63729,  65181,  65472,  65527,  65534,  65535
94};
95
96const uint16_t WebRtcIsac_kLpcShapeCdfVec5Ub16[17] =
97{
98     0,      1,      7,     29,    134,    599,   2443,   8590,
99 22962,  42635,  56911,  63060,  64940,  65408,  65513,  65531,
100 65535
101};
102
103const uint16_t WebRtcIsac_kLpcShapeCdfVec6Ub16[21] =
104{
105     0,      1,      5,     16,     57,    191,    611,   1808,
106  4847,  11755,  24612,  40910,  53789,  60698,  63729,  64924,
107 65346,  65486,  65523,  65532,  65535
108};
109
110const uint16_t WebRtcIsac_kLpcShapeCdfVec7Ub16[36] =
111{
112     0,      1,      4,     12,     25,     55,    104,    184,
113   314,    539,    926,   1550,   2479,   3861,   5892,   8845,
114 13281,  20018,  29019,  38029,  45581,  51557,  56057,  59284,
115 61517,  63047,  64030,  64648,  65031,  65261,  65402,  65480,
116 65518,  65530,  65534,  65535
117};
118
119const uint16_t WebRtcIsac_kLpcShapeCdfVec8Ub16[21] =
120{
121     0,      1,      2,      7,     26,    103,    351,   1149,
122  3583,  10204,  23846,  41711,  55361,  61917,  64382,  65186,
123 65433,  65506,  65528,  65534,  65535
124};
125
126const uint16_t WebRtcIsac_kLpcShapeCdfVec01Ub160[21] =
127{
128     0,      6,     19,     63,    205,    638,   1799,   4784,
129 11721,  24494,  40803,  53805,  60886,  63822,  64931,  65333,
130 65472,  65517,  65530,  65533,  65535
131};
132
133const uint16_t WebRtcIsac_kLpcShapeCdfVec01Ub161[28] =
134{
135     0,      1,      3,     11,     31,     86,    221,    506,
136  1101,   2296,   4486,   8477,  15356,  26079,  38941,  49952,
137 57165,  61257,  63426,  64549,  65097,  65351,  65463,  65510,
138 65526,  65532,  65534,  65535
139};
140
141const uint16_t WebRtcIsac_kLpcShapeCdfVec01Ub162[55] =
142{
143     0,      3,     12,     23,     42,     65,     89,    115,
144   150,    195,    248,    327,    430,    580,    784,   1099,
145  1586,   2358,   3651,   5899,   9568,  14312,  19158,  23776,
146 28267,  32663,  36991,  41153,  45098,  48680,  51870,  54729,
147 57141,  59158,  60772,  62029,  63000,  63761,  64322,  64728,
148 65000,  65192,  65321,  65411,  65463,  65496,  65514,  65523,
149 65527,  65529,  65531,  65532,  65533,  65534,  65535
150};
151
152const uint16_t WebRtcIsac_kLpcShapeCdfVec01Ub163[26] =
153{
154     0,      2,      4,     10,     21,     48,    114,    280,
155   701,   1765,   4555,  11270,  24267,  41213,  54285,  61003,
156 63767,  64840,  65254,  65421,  65489,  65514,  65526,  65532,
157 65534,  65535
158};
159
160const uint16_t WebRtcIsac_kLpcShapeCdfVec01Ub164[28] =
161{
162     0,      1,      3,      6,     15,     36,     82,    196,
163   453,   1087,   2557,   5923,  13016,  25366,  40449,  52582,
164 59539,  62896,  64389,  65033,  65316,  65442,  65494,  65519,
165 65529,  65533,  65534,  65535
166};
167
168const uint16_t WebRtcIsac_kLpcShapeCdfVec01Ub165[34] =
169{
170     0,      2,      4,      8,     18,     35,     73,    146,
171   279,    524,    980,   1789,   3235,   5784,  10040,  16998,
172 27070,  38543,  48499,  55421,  59712,  62257,  63748,  64591,
173 65041,  65278,  65410,  65474,  65508,  65522,  65530,  65533,
174 65534,  65535
175};
176
177const uint16_t WebRtcIsac_kLpcShapeCdfVec01Ub166[71] =
178{
179     0,      1,      2,      6,     13,     26,     55,     92,
180   141,    191,    242,    296,    355,    429,    522,    636,
181   777,    947,   1162,   1428,   1753,   2137,   2605,   3140,
182  3743,   4409,   5164,   6016,   6982,   8118,   9451,  10993,
183 12754,  14810,  17130,  19780,  22864,  26424,  30547,  35222,
184 40140,  44716,  48698,  52056,  54850,  57162,  59068,  60643,
185 61877,  62827,  63561,  64113,  64519,  64807,  65019,  65167,
186 65272,  65343,  65399,  65440,  65471,  65487,  65500,  65509,
187 65518,  65524,  65527,  65531,  65533,  65534,  65535
188};
189
190/*
191* An array of pointers to CDFs of decorrelated LARs
192*/
193const uint16_t* WebRtcIsac_kLpcShapeCdfMatUb16
194[UB_LPC_ORDER * UB16_LPC_VEC_PER_FRAME] = {
195     WebRtcIsac_kLpcShapeCdfVec01Ub16,
196     WebRtcIsac_kLpcShapeCdfVec1Ub16,
197     WebRtcIsac_kLpcShapeCdfVec2Ub16,
198     WebRtcIsac_kLpcShapeCdfVec3Ub16,
199     WebRtcIsac_kLpcShapeCdfVec4Ub16,
200     WebRtcIsac_kLpcShapeCdfVec5Ub16,
201     WebRtcIsac_kLpcShapeCdfVec6Ub16,
202     WebRtcIsac_kLpcShapeCdfVec7Ub16,
203     WebRtcIsac_kLpcShapeCdfVec8Ub16,
204     WebRtcIsac_kLpcShapeCdfVec01Ub160,
205     WebRtcIsac_kLpcShapeCdfVec01Ub161,
206     WebRtcIsac_kLpcShapeCdfVec01Ub162,
207     WebRtcIsac_kLpcShapeCdfVec01Ub163,
208     WebRtcIsac_kLpcShapeCdfVec01Ub164,
209     WebRtcIsac_kLpcShapeCdfVec01Ub165,
210     WebRtcIsac_kLpcShapeCdfVec01Ub166
211};
212
213/*
214* The smallest reconstruction points for quantiztion of LAR coefficients.
215*/
216const double WebRtcIsac_kLpcShapeLeftRecPointUb16
217[UB_LPC_ORDER * UB16_LPC_VEC_PER_FRAME] =
218{
219 -0.8250,  -0.9750,  -1.1250,  -2.1750,  -0.9750,  -1.1250,  -1.4250,
220 -2.6250,  -1.4250,  -1.2750,  -1.8750,  -3.6750,  -1.7250,  -1.8750,
221 -2.3250,  -5.4750
222};
223
224/*
225* Number of reconstruction points of quantizers for LAR coefficients.
226*/
227const int16_t WebRtcIsac_kLpcShapeNumRecPointUb16
228[UB_LPC_ORDER * UB16_LPC_VEC_PER_FRAME] =
229{
230   13,    15,    17,    29,    15,    16,    20,    35,    20,
231   20,    27,    54,    25,    27,    33,    70
232};
233
234/*
235* Starting index for entropy decoder to search for the right interval,
236* one entry per LAR coefficient
237*/
238const uint16_t WebRtcIsac_kLpcShapeEntropySearchUb16
239[UB_LPC_ORDER * UB16_LPC_VEC_PER_FRAME] =
240{
241    6,     7,     8,    14,     7,     8,    10,    17,    10,
242   10,    13,    27,    12,    13,    16,    35
243};
244
245/*
246* LAR quantization step-size.
247*/
248const double WebRtcIsac_kLpcShapeQStepSizeUb16 = 0.150000;
249