1470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*
2470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
4470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  Use of this source code is governed by a BSD-style license
5470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  that can be found in the LICENSE file in the root of the source
6470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  tree. An additional intellectual property rights grant can be found
7470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  in the file PATENTS.  All contributing project authors may
8470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  be found in the AUTHORS file in the root of the source tree.
9470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com */
10470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
11470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*
12470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * SWB_KLT_Tables_LPCGain.c
13470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
14470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * This file defines tables used for entropy coding of LPC Gain
15470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * of upper-band.
16470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
17470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com */
18470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
19470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#include "lpc_gain_swb_tables.h"
20470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#include "settings.h"
21262e676a08fc29ee6c414f5858d68697be983515andresp@webrtc.org#include "webrtc/typedefs.h"
22470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
23470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comconst double WebRtcIsac_kQSizeLpcGain = 0.100000;
24470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
25470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comconst double WebRtcIsac_kMeanLpcGain = -3.3822;
26470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
27470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*
28470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com* The smallest reconstruction points for quantiztion of
29470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com* LPC gains.
30470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com*/
31470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comconst double WebRtcIsac_kLeftRecPointLpcGain[SUBFRAMES] =
32470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com{
33470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com   -0.800000, -1.000000, -1.200000, -2.200000, -3.000000, -12.700000
34470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com};
35470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
36470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*
37470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com* Number of reconstruction points of quantizers for LPC Gains.
38470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com*/
390946a56023d821e0deca04029bb016ae1f23aa82pbos@webrtc.orgconst int16_t WebRtcIsac_kNumQCellLpcGain[SUBFRAMES] =
40470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com{
41470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com    17,  20,  25,  45,  77, 170
42470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com};
43470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*
44470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com* Starting index for entropy decoder to search for the right interval,
45470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com* one entry per LAR coefficient
46470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com*/
470946a56023d821e0deca04029bb016ae1f23aa82pbos@webrtc.orgconst uint16_t WebRtcIsac_kLpcGainEntropySearch[SUBFRAMES] =
48470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com{
49470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com     8,  10,  12,  22,  38,  85
50470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com};
51470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
52470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*
53470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com* The following 6 vectors define CDF of 6 decorrelated LPC
54470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com* gains.
55470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com*/
560946a56023d821e0deca04029bb016ae1f23aa82pbos@webrtc.orgconst uint16_t WebRtcIsac_kLpcGainCdfVec0[18] =
57470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com{
58470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com     0,    10,    27,    83,   234,   568,  1601,  4683, 16830, 57534, 63437,
59470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 64767, 65229, 65408, 65483, 65514, 65527, 65535
60470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com};
61470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
620946a56023d821e0deca04029bb016ae1f23aa82pbos@webrtc.orgconst uint16_t WebRtcIsac_kLpcGainCdfVec1[21] =
63470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com{
64470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com     0,    15,    33,    84,   185,   385,   807,  1619,  3529,  7850, 19488,
65470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 51365, 62437, 64548, 65088, 65304, 65409, 65484, 65507, 65522, 65535
66470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com};
67470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
680946a56023d821e0deca04029bb016ae1f23aa82pbos@webrtc.orgconst uint16_t WebRtcIsac_kLpcGainCdfVec2[26] =
69470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com{
70470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com     0,    15,    29,    54,    89,   145,   228,   380,   652,  1493,  4260,
71470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 12359, 34133, 50749, 57224, 60814, 62927, 64078, 64742, 65103, 65311, 65418,
72470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 65473, 65509, 65521, 65535
73470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com};
74470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
750946a56023d821e0deca04029bb016ae1f23aa82pbos@webrtc.orgconst uint16_t WebRtcIsac_kLpcGainCdfVec3[46] =
76470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com{
77470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com     0,     8,    12,    16,    26,    42,    56,    76,   111,   164,   247,
78470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com   366,   508,   693,  1000,  1442,  2155,  3188,  4854,  7387, 11249, 17617,
79470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 30079, 46711, 56291, 60127, 62140, 63258, 63954, 64384, 64690, 64891, 65031,
80470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 65139, 65227, 65293, 65351, 65399, 65438, 65467, 65492, 65504, 65510, 65518,
81470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 65523, 65535
82470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com};
83470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
840946a56023d821e0deca04029bb016ae1f23aa82pbos@webrtc.orgconst uint16_t WebRtcIsac_kLpcGainCdfVec4[78] =
85470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com{
86470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com     0,    17,    29,    39,    51,    70,   104,   154,   234,   324,   443,
87470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com   590,   760,   971,  1202,  1494,  1845,  2274,  2797,  3366,  4088,  4905,
88470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com  5899,  7142,  8683, 10625, 12983, 16095, 20637, 28216, 38859, 47237, 51537,
89470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 54150, 56066, 57583, 58756, 59685, 60458, 61103, 61659, 62144, 62550, 62886,
90470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 63186, 63480, 63743, 63954, 64148, 64320, 64467, 64600, 64719, 64837, 64939,
91470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 65014, 65098, 65160, 65211, 65250, 65290, 65325, 65344, 65366, 65391, 65410,
92470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 65430, 65447, 65460, 65474, 65487, 65494, 65501, 65509, 65513, 65518, 65520,
93470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 65535
94470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com};
95470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
960946a56023d821e0deca04029bb016ae1f23aa82pbos@webrtc.orgconst uint16_t WebRtcIsac_kLpcGainCdfVec5[171] =
97470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com{
98470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com     0,    10,    12,    14,    16,    18,    23,    29,    35,    42,    51,
99470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com    58,    65,    72,    78,    87,    96,   103,   111,   122,   134,   150,
100470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com   167,   184,   202,   223,   244,   265,   289,   315,   346,   379,   414,
101470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com   450,   491,   532,   572,   613,   656,   700,   751,   802,   853,   905,
102470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com   957,  1021,  1098,  1174,  1250,  1331,  1413,  1490,  1565,  1647,  1730,
103470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com  1821,  1913,  2004,  2100,  2207,  2314,  2420,  2532,  2652,  2783,  2921,
104470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com  3056,  3189,  3327,  3468,  3640,  3817,  3993,  4171,  4362,  4554,  4751,
105470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com  4948,  5142,  5346,  5566,  5799,  6044,  6301,  6565,  6852,  7150,  7470,
106470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com  7797,  8143,  8492,  8835,  9181,  9547,  9919, 10315, 10718, 11136, 11566,
107470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 12015, 12482, 12967, 13458, 13953, 14432, 14903, 15416, 15936, 16452, 16967,
108470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 17492, 18024, 18600, 19173, 19736, 20311, 20911, 21490, 22041, 22597, 23157,
109470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 23768, 24405, 25034, 25660, 26280, 26899, 27614, 28331, 29015, 29702, 30403,
110470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 31107, 31817, 32566, 33381, 34224, 35099, 36112, 37222, 38375, 39549, 40801,
111470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 42074, 43350, 44626, 45982, 47354, 48860, 50361, 51845, 53312, 54739, 56026,
112470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 57116, 58104, 58996, 59842, 60658, 61488, 62324, 63057, 63769, 64285, 64779,
113470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com 65076, 65344, 65430, 65500, 65517, 65535
114470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com};
115470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
116470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*
117470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com* An array of pointers to CDFs of decorrelated LPC Gains
118470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com*/
1190946a56023d821e0deca04029bb016ae1f23aa82pbos@webrtc.orgconst uint16_t* WebRtcIsac_kLpcGainCdfMat[SUBFRAMES] =
120470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com{
121470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com    WebRtcIsac_kLpcGainCdfVec0, WebRtcIsac_kLpcGainCdfVec1,
122470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com    WebRtcIsac_kLpcGainCdfVec2, WebRtcIsac_kLpcGainCdfVec3,
123470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com    WebRtcIsac_kLpcGainCdfVec4, WebRtcIsac_kLpcGainCdfVec5
124470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com};
125470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
126470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*
127470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com* A matrix to decorrellate LPC gains of subframes.
128470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com*/
129470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comconst double WebRtcIsac_kLpcGainDecorrMat[SUBFRAMES][SUBFRAMES] =
130470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com{
131470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com    {-0.150860,  0.327872,  0.367220,  0.504613,  0.559270,  0.409234},
132470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com    { 0.457128, -0.613591, -0.289283, -0.029734,  0.393760,  0.418240},
133470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com    {-0.626043,  0.136489, -0.439118, -0.448323,  0.135987,  0.420869},
134470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com    { 0.526617,  0.480187,  0.242552, -0.488754, -0.158713,  0.411331},
135470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com    {-0.302587, -0.494953,  0.588112, -0.063035, -0.404290,  0.387510},
136470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com    { 0.086378,  0.147714, -0.428875,  0.548300, -0.570121,  0.401391}
137470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com};
138