1/*
2 * G723.1 compatible decoder data tables.
3 * Copyright (c) 2006 Benjamin Larsson
4 * Copyright (c) 2010 Mohamed Naufal Basheer
5 *
6 * This file is part of FFmpeg.
7 *
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * FFmpeg is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 */
22
23/**
24 * @file
25 * G723.1 compatible decoder data tables
26 */
27
28#ifndef AVCODEC_G723_1_DATA_H
29#define AVCODEC_G723_1_DATA_H
30
31#include <stdint.h>
32
33#define SUBFRAMES       4
34#define SUBFRAME_LEN    60
35#define FRAME_LEN       (SUBFRAME_LEN << 2)
36#define HALF_FRAME_LEN  (FRAME_LEN / 2)
37#define LPC_FRAME       (HALF_FRAME_LEN + SUBFRAME_LEN)
38#define LPC_ORDER       10
39#define LSP_BANDS       3
40#define LSP_CB_SIZE     256
41#define PITCH_MIN       18
42#define PITCH_MAX       (PITCH_MIN + 127)
43#define PITCH_ORDER     5
44#define GRID_SIZE       2
45#define PULSE_MAX       6
46#define GAIN_LEVELS     24
47#define COS_TBL_SIZE    512
48
49/**
50 * G723.1 frame types
51 */
52typedef enum FrameType {
53    ACTIVE_FRAME,        ///< Active speech
54    SID_FRAME,           ///< Silence Insertion Descriptor frame
55    UNTRANSMITTED_FRAME
56} FrameType;
57
58static const uint8_t frame_size[4] = { 24, 20, 4, 1 };
59
60typedef enum Rate {
61    RATE_6300,
62    RATE_5300
63} Rate;
64
65/**
66 * G723.1 unpacked data subframe
67 */
68typedef struct G723_1_Subframe {
69    int ad_cb_lag;     ///< adaptive codebook lag
70    int ad_cb_gain;
71    int dirac_train;
72    int pulse_sign;
73    int grid_index;
74    int amp_index;
75    int pulse_pos;
76} G723_1_Subframe;
77
78/**
79 * Pitch postfilter parameters
80 */
81typedef struct {
82    int     index;    ///< postfilter backward/forward lag
83    int16_t opt_gain; ///< optimal gain
84    int16_t sc_gain;  ///< scaling gain
85} PPFParam;
86
87/**
88 * Harmonic filter parameters
89 */
90typedef struct {
91    int index;
92    int gain;
93} HFParam;
94
95/**
96 * Optimized fixed codebook excitation parameters
97 */
98typedef struct {
99    int min_err;
100    int amp_index;
101    int grid_index;
102    int dirac_train;
103    int pulse_pos[PULSE_MAX];
104    int pulse_sign[PULSE_MAX];
105} FCBParam;
106
107/**
108 * Postfilter gain weighting factors scaled by 2^15
109 */
110static const int16_t ppf_gain_weight[2] = {0x1800, 0x2000};
111
112/**
113 * LSP DC component
114 */
115static const int16_t dc_lsp[LPC_ORDER] = {
116    0x0c3b,
117    0x1271,
118    0x1e0a,
119    0x2a36,
120    0x3630,
121    0x406f,
122    0x4d28,
123    0x56f4,
124    0x638c,
125    0x6c46
126};
127
128/**
129 * Cosine table scaled by 2^14
130 */
131static const int16_t cos_tab[COS_TBL_SIZE+1] = {
132    16384,  16383,  16379,  16373,  16364,  16353,  16340,  16324,
133    16305,  16284,  16261,  16235,  16207,  16176,  16143,  16107,
134    16069,  16029,  15986,  15941,  15893,  15843,  15791,  15736,
135    15679,  15619,  15557,  15493,  15426,  15357,  15286,  15213,
136    15137,  15059,  14978,  14896,  14811,  14724,  14635,  14543,
137    14449,  14354,  14256,  14155,  14053,  13949,  13842,  13733,
138    13623,  13510,  13395,  13279,  13160,  13039,  12916,  12792,
139    12665,  12537,  12406,  12274,  12140,  12004,  11866,  11727,
140    11585,  11442,  11297,  11151,  11003,  10853,  10702,  10549,
141    10394,  10238,  10080,   9921,   9760,   9598,   9434,   9269,
142     9102,   8935,   8765,   8595,   8423,   8250,   8076,   7900,
143     7723,   7545,   7366,   7186,   7005,   6823,   6639,   6455,
144     6270,   6084,   5897,   5708,   5520,   5330,   5139,   4948,
145     4756,   4563,   4370,   4176,   3981,   3786,   3590,   3393,
146     3196,   2999,   2801,   2603,   2404,   2205,   2006,   1806,
147     1606,   1406,   1205,   1005,    804,    603,    402,    201,
148        0,   -201,   -402,   -603,   -804,  -1005,  -1205,  -1406,
149    -1606,  -1806,  -2006,  -2205,  -2404,  -2603,  -2801,  -2999,
150    -3196,  -3393,  -3590,  -3786,  -3981,  -4176,  -4370,  -4563,
151    -4756,  -4948,  -5139,  -5330,  -5520,  -5708,  -5897,  -6084,
152    -6270,  -6455,  -6639,  -6823,  -7005,  -7186,  -7366,  -7545,
153    -7723,  -7900,  -8076,  -8250,  -8423,  -8595,  -8765,  -8935,
154    -9102,  -9269,  -9434,  -9598,  -9760,  -9921, -10080, -10238,
155   -10394, -10549, -10702, -10853, -11003, -11151, -11297, -11442,
156   -11585, -11727, -11866, -12004, -12140, -12274, -12406, -12537,
157   -12665, -12792, -12916, -13039, -13160, -13279, -13395, -13510,
158   -13623, -13733, -13842, -13949, -14053, -14155, -14256, -14354,
159   -14449, -14543, -14635, -14724, -14811, -14896, -14978, -15059,
160   -15137, -15213, -15286, -15357, -15426, -15493, -15557, -15619,
161   -15679, -15736, -15791, -15843, -15893, -15941, -15986, -16029,
162   -16069, -16107, -16143, -16176, -16207, -16235, -16261, -16284,
163   -16305, -16324, -16340, -16353, -16364, -16373, -16379, -16383,
164   -16384, -16383, -16379, -16373, -16364, -16353, -16340, -16324,
165   -16305, -16284, -16261, -16235, -16207, -16176, -16143, -16107,
166   -16069, -16029, -15986, -15941, -15893, -15843, -15791, -15736,
167   -15679, -15619, -15557, -15493, -15426, -15357, -15286, -15213,
168   -15137, -15059, -14978, -14896, -14811, -14724, -14635, -14543,
169   -14449, -14354, -14256, -14155, -14053, -13949, -13842, -13733,
170   -13623, -13510, -13395, -13279, -13160, -13039, -12916, -12792,
171   -12665, -12537, -12406, -12274, -12140, -12004, -11866, -11727,
172   -11585, -11442, -11297, -11151, -11003, -10853, -10702, -10549,
173   -10394, -10238, -10080,  -9921,  -9760,  -9598,  -9434,  -9269,
174    -9102,  -8935,  -8765,  -8595,  -8423,  -8250,  -8076,  -7900,
175    -7723,  -7545,  -7366,  -7186,  -7005,  -6823,  -6639,  -6455,
176    -6270,  -6084,  -5897,  -5708,  -5520,  -5330,  -5139,  -4948,
177    -4756,  -4563,  -4370,  -4176,  -3981,  -3786,  -3590,  -3393,
178    -3196,  -2999,  -2801,  -2603,  -2404,  -2205,  -2006,  -1806,
179    -1606,  -1406,  -1205,  -1005,   -804,   -603,   -402,   -201,
180        0,    201,    402,    603,    804,   1005,   1205,   1406,
181     1606,   1806,   2006,   2205,   2404,   2603,   2801,   2999,
182     3196,   3393,   3590,   3786,   3981,   4176,   4370,   4563,
183     4756,   4948,   5139,   5330,   5520,   5708,   5897,   6084,
184     6270,   6455,   6639,   6823,   7005,   7186,   7366,   7545,
185     7723,   7900,   8076,   8250,   8423,   8595,   8765,   8935,
186     9102,   9269,   9434,   9598,   9760,   9921,  10080,  10238,
187    10394,  10549,  10702,  10853,  11003,  11151,  11297,  11442,
188    11585,  11727,  11866,  12004,  12140,  12274,  12406,  12537,
189    12665,  12792,  12916,  13039,  13160,  13279,  13395,  13510,
190    13623,  13733,  13842,  13949,  14053,  14155,  14256,  14354,
191    14449,  14543,  14635,  14724,  14811,  14896,  14978,  15059,
192    15137,  15213,  15286,  15357,  15426,  15493,  15557,  15619,
193    15679,  15736,  15791,  15843,  15893,  15941,  15986,  16029,
194    16069,  16107,  16143,  16176,  16207,  16235,  16261,  16284,
195    16305,  16324,  16340,  16353,  16364,  16373,  16379,  16383,
196    16384
197};
198
199/**
200 *  LSP VQ tables
201 */
202static const int16_t lsp_band0[LSP_CB_SIZE][3] = {
203    {    0,      0,      0}, { -270,  -1372,  -1032}, { -541,  -1650,  -1382},
204    { -723,  -2011,  -2213}, { -941,  -1122,  -1942}, { -780,  -1145,  -2454},
205    { -884,  -1309,  -1373}, {-1051,  -1523,  -1766}, {-1083,  -1622,  -2300},
206    { -777,  -1377,  -2147}, { -935,  -1467,  -2763}, { -802,  -1327,  -3471},
207    { -935,  -1959,  -3999}, { -240,    -89,    222}, { -661,   -257,   -160},
208    { -994,   -466,   -419}, { -188,   -164,   -278}, { -342,   -512,   -415},
209    { -607,   -511,   -797}, {   16,     19,   -716}, {  374,    425,   -972},
210    { -346,    245,   -282}, { -265,    506,   -754}, { -620,   -147,   1955},
211    { -742,   -860,   2597}, { -150,   -352,   2704}, {  305,    880,   1954},
212    {  123,    731,   2766}, { -348,    765,   3327}, {  618,    221,   3258},
213    { -178,    -47,   4219}, {  393,   1304,   3842}, {  698,   1702,   4801},
214    {   63,   -584,   1229}, { -215,   -732,   1704}, {  172,   -335,   1909},
215    {   -2,    216,   1797}, {  353,    127,   2205}, {-1208,    188,     11},
216    { -513,    -75,   -683}, { -973,    222,   -646}, { -616,   -843,   -388},
217    { -950,  -1113,   -359}, {-1431,   -623,   -705}, {-1398,  -1063,   -178},
218    {  -45,   -461,     35}, {   -9,   -657,   -216}, {  127,  -1078,     95},
219    { -950,  -1156,    584}, {-1480,  -1494,    449}, { -120,   -705,    516},
220    { -368,   -961,    727}, { -378,   -526,    973}, { -793,   -614,    676},
221    { -801,   -755,   1287}, {-1476,   -340,   1636}, { -505,  -1254,   1543},
222    {-1243,  -1622,   1532}, { -776,  -1477,   -655}, {-1151,  -1296,   -823},
223    {-1153,  -1672,  -1124}, {-1291,  -2003,  -1702}, { -622,  -1283,     57},
224    { -471,  -1611,    509}, {-1060,  -1570,   -139}, { -873,  -2156,   -536},
225    {-1716,  -2021,   -364}, {-2150,  -3218,  -1291}, {-1248,  -1945,  -2904},
226    {-1215,  -2633,  -2855}, {  167,   -244,     84}, {  349,   -412,   -217},
227    {  -40,   -352,    632}, {  227,   -529,    405}, {   68,   -383,   -443},
228    {  167,   -558,   -706}, { -275,   -854,    -14}, { -351,  -1089,   -449},
229    {  341,    -72,   -289}, {  603,   -106,   -474}, {  322,   -219,   -649},
230    {  179,   -317,   -998}, {  450,   -291,   -996}, {  555,    195,   -525},
231    {  784,    272,   -831}, { -148,   -384,   -849}, {   82,   -536,  -1357},
232    {  238,   -172,  -1354}, {  422,   -268,  -1841}, {  297,   -737,  -2079},
233    { -111,   -801,   -598}, {    1,   -668,   -984}, { -131,   -818,  -1299},
234    { -329,   -521,  -1310}, { -151,   -778,  -1834}, {  -93,   -352,  -1746},
235    { -568,   -640,  -1821}, { -509,   -941,  -2183}, {  464,   -815,  -1250},
236    {   79,  -1133,  -1597}, { -184,  -1353,  -2123}, { -196,   -410,  -2427},
237    { -192,   -833,  -2810}, { -259,  -1382,  -3045}, { -217,      4,  -1166},
238    { -800,   -325,  -1219}, { -363,   -830,   -898}, { -661,  -1134,   -960},
239    { -386,   -980,  -1501}, { -627,  -1159,  -1722}, { -903,   -829,   -855},
240    { -685,   -829,  -1313}, {-1065,   -959,  -1405}, {  441,     25,   -847},
241    {  655,    -27,  -1181}, { 1159,   -110,   -705}, {  856,    253,  -1671},
242    {  415,    404,     -1}, {  322,    903,   -398}, {  670,    499,   -292},
243    {  803,    591,   -610}, { 1144,    591,   -814}, {  717,    183,    393},
244    {  857,    381,    106}, {  609,     62,    -27}, {  792,    198,   -325},
245    {  735,    805,     88}, { 1142,    812,     78}, { 1028,    366,   -292},
246    { 1309,    743,   -237}, { 1615,    589,    -79}, { 1010,    639,   -243},
247    {  999,    964,   -311}, { 1500,   1137,   -615}, {  988,    357,    646},
248    { 1227,    667,    683}, { 1164,   1565,    894}, { 1392,   2015,    477},
249    { 1138,    533,    250}, { 1437,    896,    391}, { 1765,   1118,     99},
250    { 1112,   1090,    802}, { 1596,    846,   1134}, {  937,   1161,    279},
251    { 1719,   1254,    683}, { 1338,   1086,     35}, { 1419,   1324,    428},
252    { 1428,   1524,     40}, { 2108,   1594,     89}, { 1015,    544,   1222},
253    { 1121,    925,   1263}, { 1030,   1318,   1485}, { 1295,    789,   1817},
254    { 1323,   1272,   1909}, { 1724,   1237,   1803}, { 1797,   1689,    858},
255    { 2149,   1367,   1301}, { 2302,   1867,    761}, { 2863,   2351,   1053},
256    {   52,    163,    -76}, {  230,    309,   -492}, {  -71,    619,     39},
257    { -218,    856,    499}, { -654,    736,   -207}, { -535,   1259,    155},
258    { -480,   1476,    643}, {  262,   1081,    102}, {  309,   1592,   -182},
259    {  627,   1629,    534}, {  337,    643,    456}, {  758,    670,    713},
260    {  202,   1126,    658}, {  612,   1131,    666}, {  686,   1223,   1136},
261    { -131,    377,    525}, {   42,    708,    907}, {   87,   1488,   1035},
262    {  432,   2117,    904}, {  137,    981,   1332}, { -447,   1014,   1136},
263    { -839,   1793,   1246}, { -559,    297,    198}, { -850,    685,    446},
264    {-1273,    632,    826}, { -401,   -544,    173}, { -753,   -793,    144},
265    { -436,     -9,    772}, { -115,   -243,   1310}, { -670,   -269,    374},
266    {-1027,    -13,    639}, { -887,    -81,   1137}, {-1277,   -455,    158},
267    {-1411,   -720,    736}, {  172,     88,    403}, {  386,    255,    756},
268    { -500,    522,    910}, { -958,    659,   1388}, { -395,    301,   1344},
269    { -356,    768,   1813}, { -613,    841,   2419}, {  445,   -122,    252},
270    {  629,    -87,    723}, {  283,   -253,    870}, {  456,   -116,   1381},
271    {  757,    180,   1059}, {  532,    408,   1509}, {  947,    288,   1806},
272    { 1325,    994,   2524}, {  892,   1219,   3023}, { 1397,   1596,   3406},
273    { 1143,   1552,   2546}, { 1850,   1433,   2710}, {  -10,    134,   1002},
274    {  154,    499,   1323}, {  508,    792,   1117}, {  509,   1340,   1616},
275    {  762,    862,   1608}, {  787,    740,   2320}, {  794,   1727,   1283},
276    {  465,   2108,   1660}, { -120,   1451,   1613}, { -386,   2016,   2169},
277    {  891,   1225,   2050}, {  456,   1480,   2185}, { 1493,   1283,   1209},
278    { 1397,   1636,   1518}, { 1776,   1738,   1552}, { 1572,   1698,   2141},
279    { 1389,   2126,   1271}, { 1959,   2413,   1119}, { 1365,   2892,   1505},
280    { 2206,   1971,   1623}, { 2076,   1950,   2280}, { 1717,   2291,   1867},
281    { 2366,   2515,   1953}, { 2865,   2838,   2522}, { 2535,   3465,   2011},
282    { 3381,   4127,   2638}, {  836,   2667,   2289}, { 1761,   2773,   2337},
283    { 1415,   3325,   2911}, { 2354,   3138,   3126}, { 2659,   4192,   4010},
284    { 1048,   1786,   1818}, { 1242,   2111,   2240}, { 1512,   2079,   2780},
285    { 1573,   2491,   3138}, { 2230,   2377,   2782}, {  416,   1773,   2704},
286    {  725,   2336,   3297}, { 1252,   2373,   3978}, { 2094,   2268,   3568},
287    { 2011,   2712,   4528}, { 1341,   3507,   3876}, { 1216,   3919,   4922},
288    { 1693,   4793,   6012}
289};
290
291static const int16_t lsp_band1[LSP_CB_SIZE][3] = {
292    {    0,      0,      0}, {-2114,  -1302,     76}, {-2652,  -1278,  -1368},
293    {-2847,   -828,   -349}, {-3812,  -2190,   -349}, {-3946,   -364,   -449},
294    {-2725,  -4492,  -3607}, {-3495,  -4764,  -1744}, {  -51,   -756,     84},
295    { -153,  -1191,    504}, {  108,  -1418,   1167}, { -835,   -896,    390},
296    { -569,  -1702,     87}, {-1151,  -1818,    933}, {-1826,  -2547,    411},
297    {-1842,  -1818,   1451}, {-2438,  -1611,    781}, {-2747,  -2477,   1311},
298    { -940,   1252,    477}, {-1629,   1688,    602}, {-1202,    617,    280},
299    {-1737,    393,    580}, {-1528,   1077,   1199}, {-2165,   -161,   1408},
300    {-2504,  -1087,   2371}, {-3458,   -175,   1395}, {-1397,    -98,   -843},
301    {-2252,   -177,  -1149}, {-1489,   -726,  -1283}, {-1558,   -265,  -1744},
302    {-1867,   -821,  -1897}, {-2062,  -1516,  -2340}, {-2595,  -1142,  -2861},
303    {  170,     46,   -819}, { -193,   -204,  -1151}, {  326,   -196,  -1532},
304    {  780,    329,   -816}, {  201,    369,  -1243}, {  650,   -209,  -1060},
305    { 1144,    -15,  -1216}, { 1203,   -259,  -1867}, { -890,   -564,  -1430},
306    { -638,   -852,  -1921}, {  177,   -739,  -1358}, { -261,   -526,  -1666},
307    {  206,   -407,  -2255}, {  338,   -526,   -822}, {  421,  -1095,  -1009},
308    {  765,   -607,  -1408}, {  825,  -1295,  -2004}, {  357,   -905,  -1815},
309    {  -58,  -1248,  -1588}, { -596,  -1436,  -2046}, {  -73,  -1159,  -2116},
310    { -115,  -1382,  -2581}, { -160,  -1723,  -1952}, {   -6,  -2196,  -2954},
311    { -649,  -1705,  -2603}, { -617,  -1453,  -3282}, { -949,  -2019,  -3102},
312    { -812,   1544,   1937}, {-1854,    574,   2000}, {-1463,   1140,   2649},
313    {-2683,   1748,   1452}, {-2486,   2241,   2523}, {  783,   1910,   1435},
314    {  581,   2682,   1376}, {  236,   2197,   1885}, { -453,   2943,   2057},
315    { -682,   2178,   2565}, {-1342,   3201,   3328}, { -288,   -184,    262},
316    {  121,   -149,   -183}, {  758,   -412,    206}, { 1038,   -204,    853},
317    { 1577,   -457,    700}, {  937,   -640,   -567}, { 1508,   -528,  -1024},
318    { -225,   -527,   -427}, { -564,  -1095,   -332}, { -742,   -353,   -186},
319    {-1288,   -459,     84}, {-1853,   -484,   -274}, {-1554,   -731,    825},
320    {-2425,   -234,    382}, {-1722,    293,   -271}, {-2515,    425,   -564},
321    {-2599,    818,    464}, { -358,    118,   -375}, { -613,    198,   -874},
322    { -690,    683,   -324}, {-1352,   1155,   -168}, {-1093,    129,   -324},
323    {-1184,    611,   -858}, {  433,    386,   -372}, { -120,    486,   -634},
324    {  234,    851,   -631}, {  602,    128,     46}, { 1099,    410,    159},
325    {  715,   -145,   -424}, { 1198,    -85,   -593}, { 1390,    367,   -358},
326    { 1683,    362,   -964}, { 1711,    622,     45}, { 2033,    833,   -383},
327    { 2890,    549,   -506}, {    7,    401,     52}, {   72,    811,    415},
328    {  566,    668,     41}, {  467,   1218,    130}, {   68,    957,   -187},
329    {  -25,   1649,   -103}, { -661,    260,    214}, { -925,    -94,    612},
330    { -321,   -422,    965}, { -788,   -672,   1783}, {  400,   -673,    779},
331    {  741,   -595,   1635}, { -161,    307,    657}, { -382,    836,    871},
332    { -814,    400,   1223}, {  364,    606,   1247}, {   57,     75,   1571},
333    {  151,    471,   2287}, {  -81,   1021,   1502}, {  227,   1470,   1097},
334    {  658,   1275,   1653}, {  664,   1478,   2377}, {  263,   -127,    444},
335    {  264,     89,    969}, {  794,    171,    576}, {  821,    186,   1226},
336    {  404,    462,    517}, {  339,    918,    794}, { 1280,   1423,    196},
337    { 1453,   2019,    365}, { 1615,   1481,    672}, { 2394,   1708,    508},
338    {  806,   1238,    573}, {  713,   1158,   1078}, { 1285,   1436,   1232},
339    { 1790,   1188,   1141}, {  765,    643,    864}, { 1032,    797,   1279},
340    {  900,    563,   1827}, { 1514,    673,   2312}, { 1544,   1129,   3240},
341    { 1469,   1050,   1594}, { 1945,   1318,   1988}, { 2397,   2026,   2060},
342    { 3538,   2057,   2620}, { 1249,   -118,     74}, { 1727,    194,    421},
343    { 2078,    -50,   -463}, {  970,    688,   -432}, { 1149,    952,   -110},
344    { 1254,   1275,   -651}, { 1386,    929,    401}, { 1960,   1167,    232},
345    {  407,   -752,   -243}, {  859,  -1118,    172}, { -227,   -860,   -992},
346    { -796,  -1175,  -1380}, {    8,  -1282,   -388}, {  353,  -1781,  -1037},
347    { -732,   -397,   -807}, { -853,    -28,  -1342}, {-1229,  -1207,  -1959},
348    {-1015,  -1125,  -2543}, {-1452,  -1791,  -2725}, {-1891,  -2416,  -3269},
349    { -918,  -1629,   -783}, { -580,  -2155,   -698}, {-1097,  -2364,    -96},
350    {-1387,  -1513,      7}, {-1588,  -2076,   -664}, {-1473,  -2740,   -784},
351    {-2378,  -3149,    -56}, {-2856,  -2092,   -169}, {-3391,  -3708,    316},
352    {-1176,   -890,   -614}, {-1944,  -1061,   -800}, { -299,  -1517,  -1000},
353    { -640,  -1850,  -1526}, {-1454,  -1536,  -1233}, {-1890,  -1955,  -1756},
354    {-1086,  -1921,  -2122}, { -750,  -2325,  -2260}, {-1325,  -2413,  -2673},
355    {-1114,  -2542,  -3459}, {-1341,  -2901,  -3963}, {-1160,  -2226,  -1393},
356    {-1001,  -2772,  -1573}, {-1594,  -2641,  -1978}, {-1534,  -3046,  -2624},
357    {-2224,  -2196,   -675}, {-2807,  -3054,  -1102}, {-2008,  -2840,  -1186},
358    {-1980,  -3332,  -1695}, {-1715,  -3562,   -505}, {-2527,  -4000,  -1887},
359    {-2333,  -2734,  -2296}, {-3440,  -2401,  -3211}, {-2008,  -3528,  -3337},
360    {-2247,  -3291,  -4510}, { -475,    949,    155}, { -149,   1365,    545},
361    { -757,   1644,   1083}, { -217,   2053,   1353}, {-1433,   2301,   1462},
362    {  495,   1661,    529}, {   10,   2037,    740}, { 2082,   1898,    978},
363    { 2831,   2294,    911}, {  842,    793,    420}, { 1223,   1023,    863},
364    { 1237,    451,    780}, { 1744,    708,    822}, { 1533,    284,   1384},
365    { 2135,    609,   1538}, { 2305,    626,    540}, { 2368,   1187,    955},
366    { 2586,   1255,     -7}, { 3116,   1131,    726}, { 3431,   1730,    428},
367    { 2734,   1648,   1307}, { 2988,   1231,   2010}, { 3523,   2024,   1488},
368    { 1034,   1657,    871}, { 1206,   2163,   1036}, { 1807,   2372,   1233},
369    { 1808,   1769,   1493}, { 1573,   2332,   1779}, { 1216,   1609,   1866},
370    { 1480,   1898,   2513}, {  465,   2708,   2776}, {  771,   3638,   3338},
371    { 1869,   2599,   2623}, { 2825,   2745,   2468}, { 2638,   2439,   1585},
372    { 2094,   2970,   1308}, { 2022,   3057,   1999}, { 3428,   2912,   1816},
373    { 4536,   2974,   2129}, { 1046,   2563,   2086}, { 1363,   3562,   2318},
374    { 2511,   1891,   2984}, { 1866,   2306,   3986}, { 3272,   2924,   3682},
375    { 3146,   3564,   2272}, { 3592,   3968,   2822}, { 2431,   3369,   3069},
376    { 1931,   4709,   3090}, { 2629,   4220,   3986}, { 4639,   4056,   3664},
377    { 4035,   5334,   4912}
378};
379
380static const int16_t lsp_band2[LSP_CB_SIZE][4] = {
381    {    0,      0,      0,      0}, {  601,    512,   -542,    334},
382    {  428,   1087,   -484,   -132}, {  652,    622,   -391,   -572},
383    {  378,    799,    141,   -860}, { 1040,    409,    112,   -554},
384    { 1123,    670,    -75,   -847}, { 1421,    494,   -315,  -1095},
385    {  787,   1001,    114,   -460}, {  988,   1672,    216,   -681},
386    { 1007,   1241,   -132,  -1247}, { 1073,    399,    186,     -5},
387    { 1262,    193,   -694,   -129}, {  325,    196,     51,   -641},
388    {  861,    -59,    350,   -458}, { 1261,    567,    586,   -346},
389    { 1532,    885,    210,   -517}, { 2027,    937,    113,   -792},
390    { 1383,   1064,    334,     38}, { 1964,   1468,    459,    133},
391    { 2062,   1186,    -98,   -121}, { 2577,   1445,    506,   -373},
392    { 2310,   1682,     -2,   -960}, { 2876,   1939,    765,    138},
393    { 3581,   2360,    649,   -414}, {  219,    176,   -398,   -309},
394    {  434,    -78,   -435,   -880}, { -344,    301,    265,   -552},
395    { -915,    470,    657,   -380}, {  419,   -432,   -163,   -453},
396    {  351,   -953,      8,   -562}, {  789,    -43,     20,   -958},
397    {  302,   -594,   -352,  -1159}, { 1040,    108,   -668,   -924},
398    { 1333,    210,  -1217,  -1663}, {  483,    589,   -350,  -1140},
399    { 1003,    824,   -802,  -1184}, {  745,     58,   -589,  -1443},
400    {  346,    247,   -915,  -1683}, {  270,    796,   -720,  -2043},
401    { 1208,    722,   -222,   -193}, { 1486,   1180,   -412,   -672},
402    { 1722,    179,    -69,   -521}, { 2047,    860,   -666,  -1410},
403    { -146,    222,   -281,   -805}, { -189,     90,   -114,  -1307},
404    { -152,   1086,   -241,   -764}, { -439,    733,   -601,  -1302},
405    { -833,   -167,   -351,   -601}, { -856,   -422,   -411,  -1059},
406    { -747,   -355,   -582,  -1644}, { -837,    210,   -916,  -1144},
407    {-1800,     32,   -878,  -1687}, {  -48,    -23,  -1146,     52},
408    { -350,   -409,  -1656,   -364}, {  265,   -728,   -858,   -577},
409    {  458,   -247,  -1141,   -997}, {  691,   -407,  -1988,  -1161},
410    {  -66,   -104,   -705,  -1249}, { -431,    -93,  -1191,  -1844},
411    {  203,   -732,  -1000,  -1693}, {   10,   -832,  -1846,  -1819},
412    {  493,   -128,  -1436,  -1768}, {  488,   -311,  -1730,  -2540},
413    { -653,   -532,  -1150,  -1172}, {-1086,   -289,  -1706,  -1533},
414    { -699,  -1205,  -1216,  -1766}, {-1032,  -1481,  -2074,  -1523},
415    { -721,  -1220,  -2277,  -2600}, {   12,   -539,  -1484,  -1131},
416    {  -40,   -911,  -2106,   -441}, { -471,   -484,  -2267,  -1549},
417    { -141,   -988,  -3006,  -1721}, {-1545,  -2102,   -583,    342},
418    {-1383,  -2772,   -386,    -13}, {-2118,  -2589,  -1205,     72},
419    {-2147,  -3231,   -965,    390}, {-2949,  -3300,   -621,    637},
420    {-3907,  -4138,   -865,    803}, {-1287,   -845,   -375,   -548},
421    {-1416,  -1169,   -487,  -1277}, {-1400,  -1690,  -1027,   -418},
422    {-2018,  -1909,  -1188,  -1260}, {-1418,  -2222,  -2029,   -128},
423    {-2067,  -2998,  -2693,   -310}, { -950,  -1028,  -1538,    185},
424    {-1616,   -915,  -2205,   -549}, {   19,   -821,  -1145,    352},
425    {  184,  -1175,  -1356,   -627}, { -547,  -1088,  -1661,   -911},
426    { -216,  -1502,  -2197,   -948}, { -795,  -1306,  -2374,   -451},
427    { -924,  -1889,  -2796,   -680}, { -600,  -1614,  -3609,   -885},
428    {-2392,  -2528,    319,    303}, {-2908,  -2095,   -310,    573},
429    {-3460,  -2141,     49,   -113}, {-2231,   -448,    675,   -146},
430    {-2805,   -532,   1231,    479}, {-2684,   -486,   -200,    611},
431    {-3525,   -971,   -198,    704}, {-3707,    173,    349,    254},
432    {-4734,  -1447,    -34,    880}, {  777,   -512,    114,    -10},
433    { 1250,    -66,    442,     -5}, {  604,    613,    452,   -352},
434    { 1224,    777,    675,  -1014}, {-1372,    -79,  -1208,   -238},
435    {-2389,    -17,  -1157,   -818}, {-1504,   -673,  -1133,  -1060},
436    {-1984,   -799,  -2005,  -1973}, {-2037,   -798,  -1068,   -105},
437    {-3190,   -899,  -1817,   -194}, { -156,   -886,    394,   -318},
438    { -258,  -1283,    551,    202}, { -536,  -1729,    910,    331},
439    { -847,  -1109,    795,   -163}, {-1171,  -1128,    715,    519},
440    {-1080,  -1319,   1685,    668}, {-1000,  -1921,     96,    211},
441    {-1487,  -2148,    831,    174}, {-1139,   -374,    414,     -4},
442    {-1517,  -1383,    396,   -352}, {-1012,    439,    -59,   -967},
443    {-1812,    706,   -440,  -1030}, {-1971,   -329,    -34,   -827},
444    {-2472,  -1588,   -151,   -606}, {-2161,    374,   -281,     76},
445    {-3012,    231,    -15,   -690}, { 1104,    566,    721,    209},
446    { 1685,    564,    383,     98}, { 1898,    750,    792,    -97},
447    {  556,    -64,    561,    -93}, {  876,    162,    913,    -22},
448    {  961,    675,   1296,    140}, {  756,   -396,    851,    544},
449    {  360,   -303,   1341,    396}, {  878,    -22,   1464,    863},
450    { -309,   -273,    642,   -129}, { -686,    -82,    842,    454},
451    {   -5,    -47,   1069,    998}, {  -94,    967,   1277,    298},
452    { -489,    385,   1473,    746}, { -369,   -717,   1333,    242},
453    {  281,   -993,   1726,    924}, {  464,    601,   1575,   1376},
454    { -250,    206,   2339,   1175}, { -438,    377,   -597,   -285},
455    {-1020,    787,   -790,   -287}, { -458,   -410,    215,    295},
456    { -589,   -860,   -121,    797}, {-1175,    122,   -437,    466},
457    {-1480,   -121,    367,    924}, {  234,    323,    770,   -555},
458    {  145,     30,    996,     26}, {   66,    849,     93,   -145},
459    { -117,   1261,    474,   -399}, {-1495,   1051,    218,   -506},
460    {-1390,    694,    994,     88}, {  616,      7,     78,    304},
461    { 1060,     52,    -62,    835}, {  833,    454,    649,   1359},
462    { -770,    464,     47,     93}, { -574,   1199,    -39,    379},
463    {  114,    -98,    488,    485}, {  727,    244,    606,    696},
464    {  -76,    455,    671,    546}, { -565,    -13,    145,    819},
465    { -376,    569,    448,   1128}, {  218,    122,    265,   1167},
466    {  230,    738,    932,   1003}, {  138,    477,     36,    450},
467    {  404,    787,    -73,   1000}, {  497,   1259,    387,   1231},
468    {   17,    207,    195,    -79}, {  562,    358,     53,   -158},
469    {  493,    387,    478,    189}, {  678,    831,    640,    558},
470    { -197,    523,    613,     57}, {  429,    894,    769,    111},
471    {   67,   1174,    568,    511}, { 1242,    824,    251,    840},
472    { 1419,   1074,    864,    481}, {  924,   1474,    669,    724},
473    { 1539,   1879,    654,   1590}, {  445,    337,   1111,    541},
474    {  472,   1421,   1264,   1094}, {  794,    735,   1103,    668},
475    { 1055,    863,   1192,   1020}, {  778,   1105,    806,   1798},
476    { 1052,   1527,   1587,   2151}, {  881,   1552,   1265,    391},
477    {  726,    872,   1812,    601}, { 1469,    280,   1008,    616},
478    { 1403,    577,   1803,   1244}, { 1650,   1314,   1148,   1072},
479    { 1297,   1669,   1911,   1026}, { 2093,   1044,   2115,   1189},
480    { 1644,   1961,   2587,   1512}, {   25,   -315,     -9,   -106},
481    {  290,   -339,    428,   -444}, {  -68,   -783,    735,    772},
482    {  245,   -555,    468,     47}, {  334,   -895,    814,    146},
483    {  235,    368,   -964,   -959}, { -203,    315,  -1566,  -1217},
484    {  801,     17,   -276,   -354}, {  894,   -495,   -789,   -635},
485    {  716,    291,  -1189,   -357}, {  560,   -260,   -733,     -2},
486    {  679,   -508,  -1429,    211}, {  -51,    -62,   -428,    557},
487    {  322,   -638,   -211,    614}, { -878,  -1057,    -84,    -71},
488    { -388,  -1415,   -167,   -318}, { -754,  -1574,    214,   -539},
489    {-1419,  -2004,    -92,   -787}, {  -47,   -856,   -347,   -255},
490    {   23,  -1211,   -173,    320}, { -658,   -487,   -893,    353},
491    { -783,  -1587,   -584,    507}, {-1420,   -859,   -378,    441},
492    {-2095,  -1491,   -137,    439}, { -321,  -1450,  -1288,    -12},
493    { -359,  -2113,   -553,     -8}, { -831,  -1918,  -1561,     32},
494    {-1014,  -2487,  -1359,   -939}, { -475,   -311,   -169,   -236},
495    { -907,   -426,    276,   -611}, {  -96,   -400,     50,   -710},
496    { -426,  -1022,    -10,   -985}, { -197,   -258,   -744,   -575},
497    { -611,   -930,   -771,   -394}, { -267,   -776,   -612,   -939},
498    { -256,  -1346,   -802,  -1122}, { -796,  -1570,   -825,   -754},
499    {  712,    876,    141,    227}, {  981,   1509,     85,    124},
500    { 1462,   1228,    979,    -39}, { 1734,    999,   1481,    440},
501    { 2293,   1116,    769,    440}, { 2504,   1480,   1241,    356},
502    { 2474,   1909,   1558,    810}, {  917,   1134,    607,   -134},
503    {  509,   1809,    781,   -123}, { 1712,   1506,    559,   -423},
504    { 2037,   2317,    726,   -155}, { 3031,   2676,   1203,    331},
505    { 3664,   3274,   1768,    531}, { 1610,   1839,    867,    183},
506    { 1774,   1972,   1538,     97}, { 1822,   2158,   1282,    659},
507    { 2222,   2758,   1818,    900}, { 3251,   2124,   1723,    996},
508    { 3633,   2336,   2408,   1453}, { 2923,   3517,   2567,   1318},
509};
510
511/**
512 * Used for the coding/decoding of the pulses positions
513 * for the MP-MLQ codebook
514 */
515static const int32_t combinatorial_table[PULSE_MAX][SUBFRAME_LEN/GRID_SIZE] = {
516    {118755, 98280, 80730,  65780, 53130,
517      42504, 33649, 26334,  20349, 15504,
518      11628,  8568,  6188,   4368,  3003,
519       2002,  1287,   792,    462,   252,
520        126,    56,    21,      6,     1,
521          0,     0,     0,      0,     0},
522
523    { 23751, 20475, 17550,  14950, 12650,
524      10626,  8855,  7315,   5985,  4845,
525       3876,  3060,  2380,   1820,  1365,
526       1001,   715,   495,    330,   210,
527        126,    70,    35,     15,     5,
528          1,     0,     0,      0,     0},
529
530    {  3654,  3276,  2925,   2600,  2300,
531       2024,  1771,  1540,   1330,  1140,
532        969,   816,   680,    560,   455,
533        364,   286,   220,    165,   120,
534         84,    56,    35,     20,    10,
535          4,     1,     0,      0,     0},
536
537    {   406,   378,   351,    325,   300,
538        276,   253,   231,    210,   190,
539        171,   153,   136,    120,   105,
540         91,    78,    66,     55,    45,
541         36,    28,    21,     15,    10,
542          6,     3,     1,      0,     0},
543
544    {    29,    28,    27,     26,    25,
545         24,    23,    22,     21,    20,
546         19,    18,    17,     16,    15,
547         14,    13,    12,     11,    10,
548          9,     8,     7,      6,     5,
549          4,     3,     2,      1,     0},
550
551    {     1,     1,     1,      1,     1,
552          1,     1,     1,      1,     1,
553          1,     1,     1,      1,     1,
554          1,     1,     1,      1,     1,
555          1,     1,     1,      1,     1,
556          1,     1,     1,      1,     1},
557};
558
559static const int16_t pitch_contrib[340] = {
560    60,     0,  0,  2489, 60,     0,  0,  5217,
561     1,  6171,  0,  3953,  0, 10364,  1,  9357,
562    -1,  8843,  1,  9396,  0,  5794, -1, 10816,
563     2, 11606, -2, 12072,  0,  8616,  1, 12170,
564     0, 14440,  0,  7787, -1, 13721,  0, 18205,
565     0, 14471,  0, 15807,  1, 15275,  0, 13480,
566    -1, 18375, -1,     0,  1, 11194, -1, 13010,
567     1, 18836, -2, 20354,  1, 16233, -1,     0,
568    60,     0,  0, 12130,  0, 13385,  1, 17834,
569     1, 20875,  0, 21996,  1,     0,  1, 18277,
570    -1, 21321,  1, 13738, -1, 19094, -1, 20387,
571    -1,     0,  0, 21008, 60,     0, -2, 22807,
572     0, 15900,  1,     0,  0, 17989, -1, 22259,
573     1, 24395,  1, 23138,  0, 23948,  1, 22997,
574     2, 22604, -1, 25942,  0, 26246,  1, 25321,
575     0, 26423,  0, 24061,  0, 27247, 60,     0,
576    -1, 25572,  1, 23918,  1, 25930,  2, 26408,
577    -1, 19049,  1, 27357, -1, 24538, 60,     0,
578    -1, 25093,  0, 28549,  1,     0,  0, 22793,
579    -1, 25659,  0, 29377,  0, 30276,  0, 26198,
580     1, 22521, -1, 28919,  0, 27384,  1, 30162,
581    -1,     0,  0, 24237, -1, 30062,  0, 21763,
582     1, 30917, 60,     0,  0, 31284,  0, 29433,
583     1, 26821,  1, 28655,  0, 31327,  2, 30799,
584     1, 31389,  0, 32322,  1, 31760, -2, 31830,
585     0, 26936, -1, 31180,  1, 30875,  0, 27873,
586    -1, 30429,  1, 31050,  0,     0,  0, 31912,
587     1, 31611,  0, 31565,  0, 25557,  0, 31357,
588    60,     0,  1, 29536,  1, 28985, -1, 26984,
589    -1, 31587,  2, 30836, -2, 31133,  0, 30243,
590    -1, 30742, -1, 32090, 60,     0,  2, 30902,
591    60,     0,  0, 30027,  0, 29042, 60,     0,
592     0, 31756,  0, 24553,  0, 25636, -2, 30501,
593    60,     0, -1, 29617,  0, 30649, 60,     0,
594     0, 29274,  2, 30415,  0, 27480,  0, 31213,
595    -1, 28147,  0, 30600,  1, 31652,  2, 29068,
596    60,     0,  1, 28571,  1, 28730,  1, 31422,
597     0, 28257,  0, 24797, 60,     0,  0,     0,
598    60,     0,  0, 22105,  0, 27852, 60,     0,
599    60,     0, -1, 24214,  0, 24642,  0, 23305,
600    60,     0, 60,     0,  1, 22883,  0, 21601,
601    60,     0,  2, 25650, 60,     0, -2, 31253,
602    -2, 25144,  0, 17998
603};
604
605/**
606 * Number of non-zero pulses in the MP-MLQ excitation
607 */
608static const int8_t pulses[4] = {6, 5, 6, 5};
609
610/**
611 * Size of the MP-MLQ fixed excitation codebooks
612 */
613static const int32_t max_pos[4] = {593775, 142506, 593775, 142506};
614
615static const int16_t fixed_cb_gain[GAIN_LEVELS] = {
616      1,    2,    3,    4,    6,    9,   13,   18,
617     26,   38,   55,   80,  115,  166,  240,  348,
618    502,  726, 1050, 1517, 2193, 3170, 4582, 6623,
619};
620
621static const int16_t adaptive_cb_gain85[85 * 20] = {
622        0,      0,      0,      0,      0,      0,      0,      0,
623        0,      0,      0,      0,      0,      0,      0,      0,
624        0,      0,      0,      0,    800,   1496,    167,   -256,
625     -338,    -39,   -136,     -1,     -4,     -6,    -73,     -8,
626      -15,     12,     23,      2,     16,     30,      3,     -5,
627     -462,   -686,    493,   2575,    311,    -13,    -28,    -14,
628     -404,     -5,    -19,     13,     20,     72,    107,    -77,
629        8,     13,     -9,    -48,   1483,    144,    784,    928,
630     1243,   -134,     -1,    -37,    -52,    -94,    -13,    -71,
631       -6,    -84,     -8,    -44,   -112,    -10,    -59,    -70,
632      -77,    275,   3522,   1056,  -1254,      0,     -4,   -757,
633      -68,    -95,      1,     16,    -59,      4,    -17,   -227,
634       -5,     21,    269,     80,   -125,    -40,   -264,    381,
635     5027,      0,      0,     -4,     -8,  -1542,      0,     -2,
636        0,      2,      0,      6,     38,     12,     81,   -117,
637      138,    332,   2215,   2574,   1339,     -1,     -6,   -299,
638     -404,   -109,     -2,    -18,    -44,    -21,    -52,   -348,
639      -11,    -27,   -181,   -210,   3685,   2883,   -887,    866,
640    -1639,   -828,   -507,    -48,    -45,   -164,   -648,    199,
641      156,   -194,   -152,     46,    368,    288,    -88,     86,
642     1396,   2146,   2235,    345,    942,   -118,   -281,   -305,
643       -7,    -54,   -182,   -190,   -292,    -29,    -45,    -47,
644      -80,   -123,   -128,    -19,     13,   4475,   3549,   -804,
645     -655,      0,  -1222,   -768,    -39,    -26,     -3,     -2,
646     -969,      0,    219,    174,      0,    179,    141,    -32,
647     -724,    254,    242,   6049,   2462,    -32,     -3,     -3,
648    -2233,   -370,     11,     10,     -3,    267,    -94,    -89,
649      108,    -38,    -36,   -909,    626,  -1713,   6121,   4561,
650    -1061,    -23,   -179,  -2287,  -1270,    -68,     65,   -233,
651      640,   -174,    477,  -1704,     40,   -111,    396,    295,
652     -350,   1391,   7985,    511,   -405,     -7,   -118,  -3892,
653      -15,    -10,     29,    170,   -678,     10,    -43,   -249,
654       -8,     34,    197,     12,   3144,   -529,    608,   2530,
655     3878,   -603,    -17,    -22,   -390,   -918,    101,   -116,
656       19,   -485,     81,    -93,   -744,    125,   -144,   -599,
657     2589,   -689,   3045,   5603,   -404,   -409,    -29,   -566,
658    -1916,    -10,    108,   -481,    128,   -885,    235,  -1041,
659       63,    -17,     75,    138,   3107,    513,   1374,  -3594,
660    -4922,   -589,    -16,   -115,   -788,  -1478,    -97,   -260,
661      -43,    681,    112,    301,    933,    154,    413,  -1079,
662     2468,   6010,   1107,   -390,   1961,   -372,  -2204,    -74,
663       -9,   -234,   -905,   -166,   -406,     58,    143,     26,
664     -295,   -719,   -132,     46,   4773,   2766,   2368,   4862,
665    -4044,  -1390,   -467,   -342,  -1443,   -998,   -806,   -690,
666     -399,  -1416,   -821,   -702,   1178,    682,    584,   1200,
667     1665,  -1879,   1443,   1701,   8562,   -169,   -215,   -127,
668     -176,  -4475,    190,   -146,    165,   -172,    195,   -149,
669     -870,    982,   -754,   -889,   2716,   9011,  -1007,    755,
670    -1785,   -450,  -4956,    -61,    -34,   -194,  -1493,    167,
671      554,   -125,   -415,     46,    296,    982,   -109,     82,
672    -2727,   7548,   1285,    938,   3420,   -453,  -3478,   -100,
673      -53,   -714,   1256,    213,   -592,    156,   -432,    -73,
674      569,  -1576,   -268,   -196,   3677,    882,   4050,   1202,
675     2323,   -825,    -47,  -1001,    -88,   -329,   -198,   -909,
676     -218,   -269,    -64,   -297,   -521,   -125,   -574,   -170,
677     2046,   -753,    122,  10102,    603,   -255,    -34,      0,
678    -6229,    -22,     94,    -15,      5,  -1261,    464,    -75,
679      -75,     27,     -4,   -372,    449,  -1815,  10690,   3870,
680     -527,    -12,   -201,  -6976,   -914,    -16,     49,   -293,
681     1184,   -106,    428,  -2525,     14,    -58,    344,    124,
682     -941,   2352,   5049,   3650,   2637,    -54,   -337,  -1556,
683     -813,   -424,    135,    290,   -725,    209,   -524,  -1125,
684      151,   -378,   -812,   -587,  -1879,    796,   3117,   9569,
685     -404,   -215,    -38,   -593,  -5589,     -9,     91,    357,
686     -151,   1097,   -464,  -1821,    -46,     19,     76,    236,
687    -1715,   2043,  -2096,   9946,   4001,   -179,   -254,   -268,
688    -6038,   -977,    213,   -219,    261,   1041,  -1240,   1272,
689      418,   -498,    511,  -2429,  -5772,   -618,  -3921,    284,
690    -3155,  -2033,    -23,   -938,     -4,   -607,   -218,  -1381,
691     -148,    100,     10,     68,  -1111,   -119,   -755,     54,
692      382,   4748,   8003,  -2064,   2198,     -8,  -1376,  -3909,
693     -260,   -294,   -110,   -186,  -2319,     48,    598,   1008,
694      -51,   -637,  -1073,    277,   -867,   3015,  11926,  -1675,
695      947,    -45,   -555,  -8681,   -171,    -54,    159,    631,
696    -2195,    -88,    308,   1219,     50,   -174,   -690,     96,
697    -4933,   -432,   6757,   3771,   1352,  -1485,    -11,  -2786,
698     -867,   -111,   -130,   2034,    178,   1135,     99,  -1555,
699      407,     35,   -557,   -311,    152,   9726,   4231,  -1928,
700     1490,     -1,  -5774,  -1092,   -226,   -135,    -90,    -39,
701    -2511,     17,   1144,    498,    -13,   -884,   -384,    175,
702     2512,    193,   9033,   5361,  -3148,   -385,     -2,  -4980,
703    -1754,   -605,    -29,  -1385,   -106,   -822,    -63,  -2956,
704      482,     37,   1735,   1030,   8464,   2844,     12,    549,
705     2132,  -4373,   -493,      0,    -18,   -277,  -1469,     -6,
706       -2,   -284,    -95,      0,  -1101,   -370,     -1,    -71,
707     2141,  -2602,   7166,   9046,  -1350,   -279,   -413,  -3134,
708    -4994,   -111,    340,   -936,   1138,  -1182,   1436,  -3957,
709      176,   -214,    590,    745,   -244,    278,  13307,   1227,
710     -161,     -3,     -4, -10808,    -91,     -1,      4,    198,
711     -226,     18,    -20,   -997,     -2,      2,    131,     12,
712    -1947,   8217,   6269,    917,  -2559,   -231,  -4121,  -2399,
713      -51,   -399,    976,    745,  -3144,    108,   -460,   -350,
714     -304,   1283,    979,    143,  -1810,   2061,  -2781,   6056,
715    10058,   -200,   -259,   -472,  -2238,  -6174,    227,   -307,
716      349,    669,   -761,   1028,   1111,  -1265,   1707,  -3717,
717     7827,   9161,  -3409,   2473,  -1510,  -3739,  -5122,   -709,
718     -373,   -139,  -4376,   1628,   1906,  -1181,  -1382,    514,
719      721,    844,   -314,    228,  -1430,   8313,   9541,  -2955,
720     1626,   -124,  -4218,  -5556,   -533,   -161,    725,    832,
721    -4841,   -257,   1499,   1721,    142,   -825,   -947,    293,
722     2819,  -4247,   5391,   8673,   2756,   -485,  -1101,  -1774,
723    -4591,   -463,    730,   -927,   1397,  -1492,   2248,  -2854,
724     -474,    714,   -907,  -1459,    141,  14552,    690,    257,
725     -112,     -1, -12926,    -29,     -4,      0,   -125,     -5,
726     -613,     -2,   -228,    -10,      0,     99,      4,      1,
727    11938,  -1859,   1806,   -962,   -884,  -8699,   -211,   -199,
728      -56,    -47,   1355,  -1316,    205,    701,   -109,    106,
729      644,   -100,     97,    -51,   3728,   1982,   2264,   4584,
730     3131,   -848,   -239,   -312,  -1282,   -598,   -451,   -515,
731     -273,  -1043,   -554,   -633,   -712,   -378,   -432,   -876,
732    -1181,    766,    720,  14303,   -216,    -85,    -35,    -31,
733   -12486,     -2,     55,     51,    -33,   1031,   -668,   -628,
734      -15,     10,      9,    189,  -4385,   4826,  10112,   1569,
735     3388,  -1173,  -1421,  -6242,   -150,   -700,   1291,   2706,
736    -2979,    420,   -462,   -969,    906,   -998,  -2091,   -324,
737     -448,   1932,  15591,  -1842,    657,    -12,   -227, -14837,
738     -207,    -26,     52,    427,  -1838,    -50,    217,   1753,
739       18,    -77,   -626,     74,  -4141,   1844,   3962,   5517,
740     6220,  -1046,   -207,   -958,  -1858,  -2361,    466,   1001,
741     -446,   1394,   -621,  -1334,   1572,   -700,  -1504,  -2094,
742      729,  -2299,  14755,   3657,   -952,    -32,   -322, -13288,
743     -816,    -55,    102,   -656,   2071,   -162,    513,  -3294,
744       42,   -133,    857,    212,  -1385,   5801,  13339,  -3137,
745     1344,   -117,  -2054, -10861,   -600,   -110,    490,   1127,
746    -4723,   -265,   1111,   2554,    113,   -476,  -1094,    257,
747     4710,   9661,   1073,  -2467,   3274,  -1354,  -5697,    -70,
748     -371,   -654,  -2777,   -308,   -633,    709,   1455,    161,
749     -941,  -1930,   -214,    493,   1843,  -3624,  12422,   6898,
750    -1559,   -207,   -802,  -9419,  -2904,   -148,    407,  -1397,
751     2748,   -775,   1526,  -5230,    175,   -344,   1182,    656,
752     1433,   2394,   2507,   1380,   8780,   -125,   -349,   -383,
753     -116,  -4705,   -209,   -219,   -366,   -120,   -201,   -211,
754     -768,  -1283,  -1343,   -740,  -1712,  12915,   5883,  -2197,
755      991,   -179, -10181,  -2112,   -294,    -60,   1350,    615,
756    -4638,   -229,   1732,    789,    103,   -781,   -356,    133,
757    15072,   2158,  -1245,    910,   -496, -13865,   -284,    -94,
758      -50,    -15,  -1986,   1145,    164,   -837,   -119,     69,
759      456,     65,    -37,     27,   4655,   7319,   4916,    586,
760    -3381,  -1322,  -3270,  -1475,    -20,   -697,  -2079,  -1396,
761    -2196,   -166,   -261,   -175,    960,   1510,   1014,    120,
762     1191,  -2140,   5120,  13498,  -1418,    -86,   -279,  -1600,
763   -11121,   -122,    155,   -372,    669,   -981,   1763,  -4218,
764      103,   -185,    443,   1168,  -1530,   -817,   8191,   9632,
765    -1452,   -143,    -40,  -4095,  -5663,   -128,    -76,    765,
766      408,    900,    480,  -4815,   -135,    -72,    726,    854,
767    -3236,    607,   1696,  -2106,  11485,   -639,    -22,   -175,
768     -270,  -8051,    119,    335,    -62,   -416,     78,    218,
769     2268,   -425,  -1189,   1476,   3203,  -1903,   -837,   9679,
770     7057,   -626,   -221,    -42,  -5718,  -3039,    372,    163,
771      -97,  -1892,   1124,    494,  -1380,    819,    360,  -4169,
772      213,   -655,  17015,    620,   -384,     -2,    -26, -17671,
773      -23,     -9,      8,   -221,    681,     -8,     24,   -644,
774        5,    -15,    399,     14,   5088,     35,  -3339,   3726,
775     8488,  -1580,      0,   -680,   -847,  -4397,    -10,   1037,
776        7,  -1157,     -8,    759,  -2636,    -18,   1730,  -1930,
777     -988,   1454,  -2688,  15039,   2682,    -59,   -129,   -441,
778   -13805,   -439,     87,   -162,    238,    907,  -1335,   2467,
779      161,   -238,    440,  -2462,  -4865,  -2842,    -53,   5495,
780     6523,  -1445,   -493,      0,  -1843,  -2597,   -844,    -16,
781       -9,   1632,    953,     18,   1937,   1131,     21,  -2188,
782     3076,  15069,  -2914,   1810,   -971,   -577, -13860,   -518,
783     -200,    -57,  -2829,    547,   2680,   -339,  -1665,    322,
784      182,    893,   -172,    107,   1311,   5355,  11054,   2299,
785    -3654,   -105,  -1750,  -7458,   -322,   -814,   -428,   -885,
786    -3613,   -184,   -751,  -1551,    292,   1194,   2465,    512,
787     4035,   5619,   4618,   1815,   1912,   -994,  -1927,  -1301,
788     -201,   -223,  -1384,  -1137,  -1583,   -447,   -622,   -511,
789     -471,   -656,   -539,   -211,  -2131,   2754,  -4501,  12879,
790     7432,   -277,   -463,  -1236, -10124,  -3371,    358,   -585,
791      756,   1675,  -2165,   3538,    967,  -1249,   2042,  -5842,
792     5618,   -515,   3219,  -4149,   4857,  -1926,    -16,   -632,
793    -1050,  -1440,    176,  -1104,    101,   1422,   -130,    815,
794    -1666,    152,   -954,   1230,   1838,  -1709,   1139,  16867,
795      716,   -206,   -178,    -79, -17366,    -31,    191,   -127,
796      118,  -1892,   1759,  -1173,    -80,     74,    -49,   -737,
797     1978,  -3845,  10050,  11854,  -2492,   -238,   -902,  -6164,
798    -8576,   -379,    464,  -1213,   2358,  -1431,   2782,  -7271,
799      301,   -585,   1529,   1803,  -2600,  11246,  11289,  -3647,
800     1463,   -412,  -7720,  -7778,   -812,   -130,   1784,   1791,
801    -7749,   -578,   2504,   2513,    232,  -1004,  -1008,    325,
802     3442,    907,   2725,   8970,   3638,   -723,    -50,   -453,
803    -4911,   -808,   -190,   -572,   -150,  -1884,   -496,  -1492,
804     -764,   -201,   -605,  -1992,   -126,  17498,   3481,  -2003,
805     1090,      0, -18689,   -739,   -244,    -72,    135,     26,
806    -3717,    -15,   2139,    425,      8,  -1165,   -231,    133,
807    -1814,   1048,  -2164,   4070,  16272,   -200,    -67,   -285,
808    -1011, -16160,    116,   -239,    138,    450,   -260,    537,
809     1801,  -1041,   2149,  -4042,   9354,  12580,  -1883,    962,
810     -617,  -5341,  -9660,   -216,    -56,    -23,  -7183,   1075,
811     1446,   -549,   -738,    110,    352,    474,    -71,     36,
812     1708,   4199,   7387,   6335,   1003,   -178,  -1076,  -3330,
813    -2449,    -61,   -437,   -770,  -1893,   -660,  -1623,  -2856,
814     -104,   -257,   -452,   -388,  -2624,   5623,  17310,  -2353,
815      592,   -420,  -1930, -18288,   -338,    -21,    900,   2772,
816    -5941,   -376,    807,   2486,     94,   -203,   -625,     85,
817     1211,   -850,   1193,  -1926,  15992,    -89,    -44,    -86,
818     -226, -15609,     62,    -88,     61,    142,   -100,    140,
819    -1182,    830,  -1165,   1880,   3983,  -2054,  11506,    -19,
820     3622,   -968,   -257,  -8080,      0,   -801,    499,  -2797,
821     1442,      4,     -2,     13,   -880,    454,  -2544,      4,
822     -786,  -1354,  16092,   7246,  -1665,    -37,   -111, -15805,
823    -3205,   -169,    -65,    772,   1330,    348,    599,  -7117,
824      -80,   -137,   1636,    736,  -4316,   -511,   6674,  11665,
825     4633,  -1137,    -15,  -2719,  -8305,  -1310,   -134,   1758,
826      208,   3073,    364,  -4752,   1220,    144,  -1887,  -3299,
827     7912,   4557,   1937,   1885,   7037,  -3821,  -1267,   -229,
828     -216,  -3022,  -2200,   -935,   -538,   -910,   -524,   -222,
829    -3398,  -1957,   -832,   -809,   3434,   2967,   5867,   8196,
830     8766,   -720,   -537,  -2101,  -4100,  -4690,   -622,  -1230,
831    -1062,  -1718,  -1484,  -2935,  -1837,  -1588,  -3139,  -4385,
832     5881,   9176,   8119,   3934,   3355,  -2111,  -5139,  -4023,
833     -944,   -687,  -3294,  -2914,  -4547,  -1412,  -2203,  -1949,
834    -1204,  -1879,  -1662,   -805
835};
836
837static const int16_t adaptive_cb_gain170[170 * 20] = {
838        0,      0,      0,      0,      0,      0,      0,      0,
839        0,      0,      0,      0,      0,      0,      0,      0,
840        0,      0,      0,      0,    776,    212,    715,    670,
841      809,    -36,     -2,    -31,    -27,    -39,    -10,    -33,
842       -9,    -31,     -8,    -29,    -38,    -10,    -35,    -33,
843     1296,   1316,   -168,   -320,   -815,   -102,   -105,     -1,
844       -6,    -40,   -104,     13,     13,     25,     25,     -3,
845       64,     65,     -8,    -15,   -589,    680,   2478,    308,
846     -596,    -21,    -28,   -375,     -5,    -21,     24,     89,
847     -102,     11,    -12,    -46,    -21,     24,     90,     11,
848     -735,   -487,     -5,   2948,    468,    -33,    -14,      0,
849     -530,    -13,    -21,      0,      0,    132,     87,      0,
850       21,     13,      0,    -84,   1042,   1730,   1068,    333,
851      626,    -66,   -182,    -69,     -6,    -23,   -110,    -67,
852     -112,    -21,    -35,    -21,    -39,    -66,    -40,    -12,
853      486,   -769,   4074,   2825,  -1107,    -14,    -36,  -1013,
854     -487,    -74,     22,   -120,    191,    -83,    132,   -702,
855       32,    -52,    275,    191,   1521,   -767,   -124,   4320,
856     1026,   -141,    -35,      0,  -1139,    -64,     71,     11,
857       -5,   -401,    202,     32,    -95,     48,      7,   -270,
858     2425,   1267,   3439,    -91,  -1166,   -359,    -98,   -722,
859        0,    -83,   -187,   -509,   -266,     13,      7,     19,
860      172,     90,    244,     -6,  -1251,    975,    173,   4039,
861     2005,    -95,    -58,     -1,   -996,   -245,     74,     13,
862      -10,    308,   -240,    -42,    153,   -119,    -21,   -494,
863     1820,    632,   1322,   2062,   1031,   -202,    -24,   -106,
864     -259,    -64,    -70,   -146,    -51,   -229,    -79,   -166,
865     -114,    -39,    -83,   -129,   -447,   4904,    244,   -315,
866    -2038,    -12,  -1467,     -3,     -6,   -253,    134,      6,
867      -73,     -8,     94,      4,    -55,    610,     30,    -39,
868     -208,  -1102,    463,   -448,   5653,     -2,    -74,    -13,
869      -12,  -1950,    -14,      5,     31,     -5,    -30,     12,
870       71,    380,   -159,    154,   4739,   2600,  -1864,    856,
871    -1554,  -1371,   -412,   -212,    -44,   -147,   -752,    539,
872      295,   -247,   -135,     97,    449,    246,   -176,     81,
873     1894,   3533,     35,    -26,   2145,   -219,   -762,      0,
874        0,   -280,   -408,     -4,     -7,      3,      5,      0,
875     -248,   -462,     -4,      3,  -2699,   1841,   4072,   2443,
876     1582,   -444,   -207,  -1012,   -364,   -152,    303,    670,
877     -457,    402,   -274,   -607,    260,   -177,   -393,   -236,
878     -844,   3358,   6106,  -1059,   -537,    -43,   -688,  -2275,
879      -68,    -17,    173,    314,  -1251,    -54,    217,    395,
880      -27,    110,    200,    -34,   1251,   1016,   3020,   2210,
881     1445,    -95,    -63,   -556,   -298,   -127,    -77,   -230,
882     -187,   -168,   -137,   -407,   -110,    -89,   -266,   -194,
883     2099,   2277,   4038,   3533,  -2870,   -269,   -316,   -995,
884     -762,   -503,   -291,   -517,   -561,   -452,   -491,   -871,
885      367,    399,    707,    619,    400,  -1114,   8516,   2422,
886    -1117,     -9,    -75,  -4426,   -358,    -76,     27,   -208,
887      579,    -59,    164,  -1259,     27,    -75,    580,    165,
888    -4398,  -2011,   3912,  -2407,   2258,  -1180,   -247,   -934,
889     -353,   -311,   -540,   1050,    480,   -646,   -295,    575,
890      606,    277,   -539,    331,   1767,  -1447,   4240,   6160,
891     -757,   -190,   -127,  -1097,  -2316,    -35,    156,   -457,
892      374,   -664,    544,  -1594,     81,    -66,    195,    284,
893     1594,  -1463,   1035,   6938,   1920,   -155,   -130,    -65,
894    -2938,   -225,    142,   -100,     92,   -675,    619,   -438,
895     -186,    171,   -121,   -813,   -562,   4716,   4085,   -591,
896     2421,    -19,  -1357,  -1018,    -21,   -357,    162,    140,
897    -1175,    -20,    170,    147,     83,   -696,   -603,     87,
898     1552,   8778,   -935,    354,  -1424,   -147,  -4703,    -53,
899       -7,   -123,   -831,     88,    501,    -33,   -189,     20,
900      134,    763,    -81,     30,   4831,  -4431,     41,  -1479,
901    -2976,  -1424,  -1198,      0,   -133,   -540,   1306,    -12,
902       11,    436,   -400,      3,    877,   -804,      7,   -268,
903     2090,   1192,   1006,   1645,   4853,   -266,    -86,    -61,
904     -165,  -1437,   -152,   -128,    -73,   -210,   -119,   -101,
905     -619,   -353,   -298,   -487,   2386,   5712,   1426,    -94,
906     1350,   -347,  -1991,   -124,      0,   -111,   -832,   -207,
907     -497,     13,     32,      8,   -196,   -470,   -117,      7,
908    -1349,   1091,   1659,   8891,    313,   -111,    -72,   -168,
909    -4825,     -5,     89,    136,   -110,    732,   -592,   -900,
910       25,    -20,    -31,   -170,   9980,    916,   -381,   -808,
911       88,  -6080,    -51,     -8,    -39,      0,   -558,    232,
912       21,    492,     45,    -18,    -53,     -4,      2,      4,
913     2338,  -1031,   -248,   3928,   6484,   -333,    -64,     -3,
914     -942,  -2566,    147,     35,    -15,   -560,    247,     59,
915     -925,    408,     98,  -1555,   6166,  -1240,   -337,   3672,
916    -1277,  -2320,    -93,     -6,   -823,    -99,    466,    126,
917      -25,  -1382,    278,     75,    480,    -96,    -26,    286,
918     4377,   -132,  -2588,   1701,   4865,  -1169,     -1,   -409,
919     -176,  -1444,     35,    691,    -20,   -454,     13,    268,
920    -1299,     39,    768,   -505,   2594,   3295,   3944,   1481,
921      682,   -410,   -662,   -949,   -133,    -28,   -521,   -624,
922     -793,   -234,   -297,   -356,   -108,   -137,   -164,    -61,
923     4151,    624,    815,   4485,   2229,  -1052,    -23,    -40,
924    -1228,   -303,   -158,   -206,    -31,  -1136,   -170,   -223,
925     -565,    -84,   -111,   -610,  -3575,   -361,   4924,   2791,
926     4698,   -780,     -7,  -1480,   -475,  -1347,    -78,   1074,
927      108,    609,     61,   -839,   1025,    103,  -1412,   -800,
928    -2518,   3791,   8623,    315,   2465,   -387,   -877,  -4538,
929       -6,   -370,    582,   1325,  -1995,     48,    -73,   -166,
930      378,   -570,  -1297,    -47,   -691,   2989,   9957,   -421,
931    -1142,    -29,   -545,  -6051,    -10,    -79,    126,    420,
932    -1817,    -17,     76,    256,    -48,    208,    694,    -29,
933    -1918,    104,  -3190,  -3410,  -4440,   -224,      0,   -621,
934     -709,  -1203,     12,   -373,     20,   -399,     21,   -664,
935     -519,     28,   -864,   -924,  -3359,  -1668,   1854,   6939,
936     1430,   -688,   -169,   -209,  -2939,   -124,   -341,    380,
937      188,   1422,    706,   -785,    293,    145,   -161,   -606,
938       42,   9706,   3164,   -952,    907,      0,  -5750,   -611,
939      -55,    -50,    -25,     -8,  -1874,      2,    564,    183,
940       -2,   -537,   -175,     52,   1607,    785,   2862,   4327,
941     3307,   -157,    -37,   -500,  -1143,   -667,    -77,   -280,
942     -137,   -424,   -207,   -756,   -324,   -158,   -577,   -873,
943     6801,   3416,   2227,   1682,  -3217,  -2823,   -712,   -302,
944     -172,   -631,  -1418,   -924,   -464,   -698,   -350,   -228,
945     1335,    670,    437,    330,   3459,   3898,    364,   7841,
946    -2640,   -730,   -927,     -8,  -3753,   -425,   -823,    -76,
947      -86,  -1655,  -1865,   -174,    557,    628,     58,   1263,
948    -5902,  -3458,  -2465,  -1886,   4334,  -2126,   -730,   -371,
949     -217,  -1146,  -1245,   -888,   -520,   -679,   -398,   -283,
950     1561,    915,    652,    499,  -3710,   1133,   7849,   3443,
951     -215,   -840,    -78,  -3760,   -723,     -2,    256,   1777,
952     -543,    779,   -238,  -1649,    -48,     14,    103,     45,
953     4132,   2828,      2,  -4212,  -4116,  -1042,   -488,      0,
954    -1083,  -1034,   -713,      0,      0,   1062,    727,      0,
955     1038,    710,      0,  -1058,   5875,   8496,  -1796,   1376,
956    -1786,  -2107,  -4406,   -197,   -115,   -194,  -3047,    644,
957      931,   -493,   -713,    150,    640,    926,   -195,    150,
958     3143,   3483,   3546,   -793,   4489,   -603,   -740,   -767,
959      -38,  -1230,   -668,   -680,   -754,    152,    168,    171,
960     -861,   -954,   -971,    217,   2845,   7965,   3695,  -5432,
961     3978,   -494,  -3873,   -833,  -1801,   -966,  -1383,   -641,
962    -1796,    943,   2641,   1225,   -691,  -1934,   -897,   1319,
963     1538,    150,   7139,   2049,   3097,   -144,     -1,  -3110,
964     -256,   -585,    -14,   -670,    -65,   -192,    -18,   -892,
965     -290,    -28,  -1349,   -387,    618,   7520,   4729,   -238,
966    -3373,    -23,  -3452,  -1365,     -3,   -694,   -283,   -178,
967    -2170,      8,    109,     68,    127,   1548,    973,    -49,
968     2965,  -3013,   7912,   7076,  -1997,   -536,   -554,  -3821,
969    -3056,   -243,    545,  -1431,   1455,  -1280,   1301,  -3417,
970      361,   -367,    964,    862,   2443,   -929,  -1113,   9677,
971     4138,   -364,    -52,    -75,  -5716,  -1045,    138,    166,
972      -63,  -1443,    549,    657,   -617,    234,    281,  -2444,
973     1966,   3309,  10085,  -3399,   2105,   -236,   -668,  -6207,
974     -705,   -270,   -397,  -1210,  -2037,    408,    686,   2092,
975     -252,   -425,  -1295,    436,   -112,  -1368,   8868,   4822,
976     2048,      0,   -114,  -4800,  -1419,   -256,     -9,     61,
977      740,     33,    402,  -2610,     14,    171,  -1108,   -602,
978    -2597,    438,  -1839,   6229,   7266,   -411,    -11,   -206,
979    -2368,  -3223,     69,   -291,     49,    987,   -166,    699,
980     1152,   -194,    816,  -2763,   3454,    553,   9127,   4946,
981    -5596,   -728,    -18,  -5084,  -1493,  -1911,   -116,  -1924,
982     -308,  -1042,   -166,  -2755,   1179,    188,   3117,   1689,
983     -532,   -663,  12262,   2495,  -1004,    -17,    -26,  -9177,
984     -380,    -61,    -21,    398,    496,     81,    101,  -1867,
985      -32,    -40,    751,    152,  -2100,   1317,  -1509,  11425,
986     2997,   -269,   -105,   -139,  -7967,   -548,    168,   -193,
987      121,   1464,   -918,   1052,    384,   -240,    276,  -2090,
988     1193,  -2697,  11259,   5373,   -763,    -86,   -444,  -7737,
989    -1762,    -35,    196,   -819,   1853,   -391,    884,  -3692,
990       55,   -125,    525,    250,   2405,   -471,  11079,    203,
991      782,   -353,    -13,  -7491,     -2,    -37,     69,  -1626,
992      318,    -29,      5,   -137,   -114,     22,   -529,     -9,
993    -1871,   5685,  11290,  -2662,   1353,   -213,  -1972,  -7780,
994     -432,   -111,    649,   1289,  -3917,   -304,    923,   1834,
995      154,   -469,   -932,    220,  -3768,   5927,  -3093,   5041,
996     5212,   -866,  -2144,   -584,  -1551,  -1658,   1363,   -711,
997     1119,   1159,  -1824,    951,   1198,  -1885,    984,  -1603,
998    -2546,   9502,   5969,  -2440,   1928,   -395,  -5511,  -2175,
999     -363,   -226,   1477,    927,  -3462,   -379,   1415,    889,
1000      299,  -1118,   -702,    287,  -4963,   3568,   4592,   5508,
1001     3451,  -1503,   -777,  -1287,  -1851,   -727,   1080,   1391,
1002    -1000,   1668,  -1199,  -1543,   1045,   -751,   -967,  -1160,
1003     1745,  -2586,   3983,  10899,  -1551,   -186,   -408,   -968,
1004    -7250,   -146,    275,   -424,    628,  -1161,   1720,  -2649,
1005      165,   -244,    377,   1032,    867,   -456,   -727,   3369,
1006    11822,    -45,    -12,    -32,   -692,  -8531,     24,     38,
1007      -20,   -178,     93,    149,   -625,    329,    525,  -2431,
1008     7535,   2422,   1926,   1405,   1599,  -3466,   -358,   -226,
1009     -120,   -156,  -1114,   -886,   -284,   -646,   -207,   -165,
1010     -735,   -236,   -188,   -137,   1041,   -735,   -142,  13209,
1011     1515,    -66,    -33,     -1, -10649,   -140,     46,      9,
1012       -6,   -839,    593,    114,    -96,     68,     13,  -1222,
1013     7950,   6745,  -1444,  -1008,   2721,  -3857,  -2777,   -127,
1014      -62,   -452,  -3273,    700,    594,    489,    415,    -88,
1015    -1320,  -1120,    239,    167,  -4754,  -1379,   4522,   -578,
1016    -5733,  -1379,   -116,  -1248,    -20,  -2006,   -400,   1312,
1017      380,   -167,    -48,    159,  -1663,   -482,   1582,   -202,
1018     3220,   5978,   5923,   2430,  -2689,   -633,  -2181,  -2141,
1019     -360,   -441,  -1175,  -1164,  -2161,   -477,   -886,   -878,
1020      528,    981,    972,    398,    377,   1312,  13978,  -1470,
1021      677,     -8,   -105, -11925,   -132,    -28,    -30,   -321,
1022    -1119,     33,    117,   1254,    -15,    -54,   -577,     60,
1023    -3435,   6770,    314,   -885,   5686,   -720,  -2797,     -6,
1024      -47,  -1973,   1419,     65,   -129,   -185,    366,     16,
1025     1192,  -2349,   -109,    307,   3171,   8774,  -2260,   2679,
1026     3069,   -613,  -4699,   -312,   -438,   -575,  -1698,    437,
1027     1210,   -518,  -1435,    369,   -594,  -1643,    423,   -501,
1028     5557,   1509,   5407,   -125,  -7386,  -1884,   -139,  -1784,
1029        0,  -3330,   -511,  -1834,   -498,     42,     11,     41,
1030     2505,    680,   2438,    -56,  -2838,   2595,  13228,    271,
1031     1793,   -491,   -411, -10680,     -4,   -196,    449,   2291,
1032    -2095,     47,    -42,   -219,    310,   -284,  -1447,    -29,
1033      664,   -278,  14966,    951,   -711,    -26,     -4, -13672,
1034      -55,    -30,     11,   -606,    253,    -38,     16,   -869,
1035       28,    -12,    650,     41,    808,   1770,   8658,   5863,
1036    -1486,    -39,   -191,  -4576,  -2098,   -134,    -87,   -427,
1037     -935,   -289,   -633,  -3098,     73,    160,    785,    531,
1038     3063,   1539,   2000,   -542,   9576,   -572,   -144,   -244,
1039      -17,  -5597,   -287,   -374,   -188,    101,     51,     66,
1040    -1790,   -900,  -1169,    317,    514,  14083,   -323,    896,
1041     -891,    -16, -12106,     -6,    -49,    -48,   -442,     10,
1042      277,    -28,   -770,     17,     27,    766,    -17,     48,
1043      892,    158,   5237,  11057,  -1603,    -48,     -1,  -1674,
1044    -7462,   -156,     -8,   -285,    -50,   -602,   -106,  -3534,
1045       87,     15,    512,   1082,  -1612,   2564,  -4296,  12526,
1046     5710,   -158,   -401,  -1126,  -9576,  -1990,    252,   -422,
1047      672,   1232,  -1960,   3284,    561,   -893,   1497,  -4365,
1048     4889,  -6878,    612,   6109,   4753,  -1459,  -2887,    -22,
1049    -2277,  -1379,   2052,   -182,    257,  -1823,   2564,   -228,
1050    -1418,   1995,   -177,  -1772,   3053,   -506,   2403,   9625,
1051     1322,   -569,    -15,   -352,  -5655,   -106,     94,   -448,
1052       74,  -1794,    297,  -1412,   -246,     40,   -194,   -777,
1053     -754,  12904,   4480,  -2113,   1471,    -34, -10163,  -1225,
1054     -272,   -132,    594,    206,  -3529,    -97,   1664,    577,
1055       67,  -1159,   -402,    189,   4255,   1476,   5055,   2393,
1056     2912,  -1105,   -132,  -1559,   -349,   -517,   -383,  -1313,
1057     -455,   -621,   -215,   -738,   -756,   -262,   -898,   -425,
1058    -1371,    535,   1417,  14604,   -997,   -114,    -17,   -122,
1059   -13017,    -60,     44,    118,    -46,   1222,   -477,  -1263,
1060      -83,     32,     86,    888,   5368,  -1744,   4083,  -1236,
1061     3753,  -1758,   -185,  -1017,    -93,   -860,    571,  -1338,
1062      434,    405,   -131,    308,  -1229,    399,   -935,    283,
1063     1588,  -3097,  14415,   3699,  -1171,   -154,   -585, -12683,
1064     -835,    -83,    300,  -1397,   2725,   -358,    699,  -3255,
1065      113,   -221,   1030,    264,    212,   7989,   9471,  -3344,
1066     2009,     -2,  -3895,  -5475,   -682,   -246,   -103,   -123,
1067    -4618,     43,   1630,   1933,    -26,   -979,  -1161,    410,
1068      856,   2294,   -627,   6930,   6929,    -44,   -321,    -24,
1069    -2931,  -2930,   -119,     32,     87,   -362,   -970,    265,
1070     -362,   -970,    265,  -2931,   2357,  -4187,   7162,   7683,
1071     3371,   -339,  -1070,  -3131,  -3603,   -693,    602,  -1030,
1072     1830,  -1105,   1963,  -3359,   -485,    861,  -1474,  -1581,
1073      350,   4585,  14053,  -3819,   1218,     -7,  -1283, -12054,
1074     -890,    -90,    -97,   -300,  -3933,     81,   1068,   3275,
1075      -26,   -341,  -1045,    284,  -3248,   3531,    475,   2137,
1076    11711,   -644,   -761,    -13,   -278,  -8372,    700,     94,
1077     -102,    423,   -460,    -62,   2322,  -2524,   -340,  -1528,
1078    -3017,   3852,   1725,   8440,   5257,   -555,   -905,   -181,
1079    -4348,  -1686,    709,    317,   -405,   1554,  -1984,   -889,
1080      968,  -1236,   -553,  -2708,   -909,   3196,  15512,  -2528,
1081     1066,    -50,   -623, -14686,   -390,    -69,    177,    861,
1082    -3026,   -140,    493,   2393,     59,   -208,  -1009,    164,
1083      959,  -3370,   9617,   9545,  -1761,    -56,   -693,  -5645,
1084    -5561,   -189,    197,   -563,   1978,   -558,   1963,  -5603,
1085      103,   -362,   1034,   1026,   7575,  11796,  -4845,   3252,
1086    -1703,  -3502,  -8493,  -1433,   -645,   -177,  -5454,   2240,
1087     3488,  -1503,  -2341,    961,    787,   1226,   -503,    338,
1088     6409,   1722,   1764,  -4191,   6015,  -2507,   -181,   -189,
1089    -1072,  -2208,   -673,   -690,   -185,   1639,    440,    451,
1090    -2353,   -632,   -647,   1538,  -2420,  12161,   5038,   1286,
1091    -2098,   -357,  -9027,  -1549,   -100,   -268,   1796,    744,
1092    -3740,    190,   -954,   -395,   -310,   1557,    645,    164,
1093    -2232,  -1341,   7246,   9470,  -1977,   -304,   -109,  -3204,
1094    -5474,   -238,   -182,    987,    593,   1290,    775,  -4188,
1095     -269,   -161,    874,   1143,   1030,   7034,   4231,   1551,
1096     3077,    -64,  -3019,  -1093,   -146,   -577,   -442,   -266,
1097    -1816,    -97,   -666,   -400,   -193,  -1321,   -794,   -291,
1098     5121,  11835,   -477,  -1749,   2298,  -1601,  -8549,    -13,
1099     -186,   -322,  -3699,    149,    344,    546,   1264,    -50,
1100     -718,  -1660,     66,    245,  -3328,   3827,   5921,   9976,
1101    -1045,   -676,   -894,  -2140,  -6075,    -66,    777,   1203,
1102    -1383,   2027,  -2330,  -3605,   -212,    244,    377,    636,
1103     3813,   5718,  -4666,  -3412,   5674,   -887,  -1995,  -1329,
1104     -710,  -1965,  -1331,   1086,   1628,    794,   1191,   -972,
1105    -1320,  -1980,   1616,   1181,   1348,  -3672,  13154,   6938,
1106    -1690,   -110,   -823, -10561,  -2938,   -174,    302,  -1082,
1107     2948,   -570,   1555,  -5570,    139,   -379,   1357,    716,
1108     2151,  -3586,   6949,  12131,  -1224,   -282,   -785,  -2947,
1109    -8982,    -91,    470,   -912,   1521,  -1592,   2655,  -5145,
1110      160,   -268,    519,    906,  -2889,   9647,  10276,  -2728,
1111      995,   -509,  -5680,  -6445,   -454,    -60,   1701,   1812,
1112    -6051,   -481,   1606,   1711,    175,   -586,   -624,    165,
1113     6177,   2184,    555,   1985,   6589,  -2329,   -291,    -18,
1114     -240,  -2650,   -823,   -209,    -74,   -748,   -264,    -67,
1115    -2484,   -878,   -223,   -798,   -492,    391,  17166,   -681,
1116      240,    -14,     -9, -17987,    -28,     -3,     11,    515,
1117     -410,    -20,     16,    713,      7,     -5,   -252,     10,
1118    12628,   5448,  -2630,   3011,  -2695,  -9733,  -1811,   -422,
1119     -553,   -443,  -4199,   2027,    874,  -2321,  -1001,    483,
1120     2077,    896,   -432,    495,  -3628,   -534,   3447,   7002,
1121     6751,   -803,    -17,   -725,  -2992,  -2782,   -118,    763,
1122      112,   1550,    228,  -1473,   1495,    220,  -1420,  -2885,
1123    -5239,   5901,   8107,   3650,   4846,  -1675,  -2125,  -4012,
1124     -813,  -1433,   1887,   2592,  -2920,   1167,  -1315,  -1806,
1125     1550,  -1745,  -2398,  -1080,   6157,   6678,   4099,  -1074,
1126     2348,  -2314,  -2722,  -1025,    -70,   -336,  -2509,  -1540,
1127    -1670,    403,    437,    268,   -882,   -957,   -587,    153,
1128     1079,  16099,    242,   -881,   1690,    -71, -15820,     -3,
1129      -47,   -174,  -1060,    -16,   -238,     58,    865,     13,
1130     -111,  -1661,    -25,     90,   -278,    227,  -1039,   1636,
1131    16945,     -4,     -3,    -65,   -163, -17526,      3,    -17,
1132       14,     27,    -22,    103,    287,   -234,   1074,  -1693,
1133    15778,  -1454,    574,   -603,   -107, -15195,   -129,    -20,
1134      -22,      0,   1400,   -553,     51,    581,    -53,     21,
1135      103,     -9,      3,     -3,   2406,   -836,  13224,   7993,
1136    -4266,   -353,    -42, -10673,  -3899,  -1111,    122,  -1942,
1137      674,  -1174,    407,  -6451,    626,   -217,   3443,   2081,
1138     3184,  14368,  -3336,   2255,  -1801,   -619, -12600,   -679,
1139     -310,   -198,  -2793,    648,   2926,   -438,  -1977,    459,
1140      350,   1580,   -366,    247,  -1698,  17076,   2504,   -539,
1141     -646,   -176, -17798,   -382,    -17,    -25,   1770,    259,
1142    -2610,    -55,    561,     82,    -67,    673,     98,    -21,
1143     2375,   -797,  -2696,  14483,   5383,   -344,    -38,   -443,
1144   -12803,  -1769,    115,    391,   -131,  -2100,    705,   2384,
1145     -780,    262,    886,  -4759,  -2691,   2554,  -4520,   9573,
1146    10655,   -442,   -398,  -1247,  -5594,  -6930,    419,   -742,
1147      704,   1572,  -1492,   2641,   1750,  -1661,   2939,  -6226,
1148    -4332,  -4399,  -1657,   4880,   7375,  -1145,  -1181,   -167,
1149    -1453,  -3319,  -1163,   -438,   -444,   1290,   1310,    493,
1150     1950,   1980,    745,  -2196,  -3498,   7405,   9955,   2693,
1151    -2971,   -746,  -3347,  -6049,   -442,   -538,   1581,   2125,
1152    -4499,    575,  -1217,  -1636,   -634,   1342,   1805,    488,
1153     6717,  -3792,   7739,   2798,   3489,  -2754,   -877,  -3655,
1154     -477,   -743,   1554,  -3173,   1791,  -1147,    647,  -1321,
1155    -1430,    807,  -1648,   -595,   5263,   9770,   3463,   1069,
1156    -3971,  -1690,  -5826,   -732,    -69,   -962,  -3138,  -1112,
1157    -2065,   -343,   -637,   -226,   1275,   2368,    839,    259,
1158     1243,  -2634,  16772,   1871,    332,    -94,   -423, -17169,
1159     -213,     -6,    199,  -1273,   2696,   -142,    300,  -1915,
1160      -25,     53,   -339,    -37,   2691,   2836,   3105,   5711,
1161     4817,   -442,   -491,   -588,  -1991,  -1416,   -465,   -510,
1162     -537,   -938,   -988,  -1082,   -791,   -834,   -913,  -1679,
1163     4366,   2944,   7210,   3627,   1161,  -1163,   -529,  -3172,
1164     -803,    -82,   -784,  -1921,  -1295,   -966,   -651,  -1596,
1165     -309,   -208,   -511,   -257,  13888,   3951,   -671,  -2305,
1166     3354, -11773,   -953,    -27,   -324,   -686,  -3349,    569,
1167      161,   1954,    556,    -94,  -2843,   -809,    137,    472,
1168     7053,   5847,   2929,   8378,  -4794,  -3036,  -2086,   -523,
1169    -4284,  -1403,  -2517,  -1261,  -1045,  -3607,  -2990,  -1498,
1170     2064,   1711,    857,   2451,  -2191,  12838,   9182,  -3915,
1171     1617,   -293, -10059,  -5146,   -935,   -159,   1717,   1228,
1172    -7195,   -523,   3068,   2194,    216,  -1267,   -906,    386,
1173    -4881,  13114,   5767,   -435,   4155,  -1454, -10498,  -2030,
1174      -11,  -1054,   3907,   1718,  -4616,   -129,    348,    153,
1175     1238,  -3326,  -1462,    110,   7843,  -1250,    210,   7106,
1176    -5203,  -3754,    -95,     -2,  -3082,  -1652,    598,   -100,
1177       16,  -3402,    542,    -91,   2491,   -397,     66,   2257,
1178    -2463,   8168,  14551,  -3908,   1828,   -370,  -4072, -12923,
1179     -932,   -204,   1228,   2188,  -7254,   -587,   1948,   3471,
1180      274,   -911,  -1623,    436,  -1579,    347,   -272,  -2735,
1181    16031,   -152,     -7,     -4,   -456, -15686,     33,    -26,
1182        5,   -263,     58,    -45,   1545,   -340,    266,   2676,
1183    -6327,   1328,   5093,  -5079,   7617,  -2443,   -107,  -1583,
1184    -1574,  -3541,    513,   1967,   -413,  -1961,    411,   1578,
1185     2941,   -617,  -2367,   2361,   3286,  -4509,  11306,  11025,
1186    -2623,   -659,  -1241,  -7802,  -7419,   -420,    904,  -2267,
1187     3112,  -2211,   3034,  -7608,    526,   -722,   1810,   1765,
1188     5567,  17853,  -3754,   1166,   -519,  -1892, -19455,   -860,
1189      -83,    -16,  -6067,   1275,   4090,   -396,  -1271,    267,
1190      176,    566,   -119,     37,  -2136,   -424,  15292,   5108,
1191    -1648,   -278,    -10, -14273,  -1593,   -165,    -55,   1993,
1192      396,    666,    132,  -4768,   -214,    -42,   1538,    514,
1193     2267,  -3297,   2549,  16563,   -791,   -313,   -663,   -396,
1194   -16745,    -38,    456,   -352,    513,  -2291,   3333,  -2576,
1195      109,   -159,    123,    799,   3655,   1899,  -3364,   6279,
1196    12510,   -815,   -220,   -690,  -2406,  -9552,   -423,    750,
1197      390,  -1400,   -728,   1289,  -2791,  -1450,   2568,  -4794,
1198     8052,   2285,  -6193,   5138,   6003,  -3957,   -318,  -2341,
1199    -1611,  -2199,  -1123,   3044,    864,  -2525,   -716,   1942,
1200    -2950,   -837,   2269,  -1882,   -386,  -2291,   7679,  15387,
1201    -2723,     -9,   -320,  -3599, -14452,   -452,    -54,    181,
1202     1074,    362,   2152,  -7212,    -64,   -380,   1276,   2557,
1203     2777,  -1173,   3984,  13079,   2508,   -470,    -84,   -969,
1204   -10440,   -384,    198,   -675,    285,  -2217,    936,  -3180,
1205     -425,    179,   -610,  -2002,  -1879,   1771,  -2684,  16705,
1206     1833,   -215,   -191,   -439, -17032,   -205,    203,   -308,
1207      290,   1916,  -1805,   2736,    210,   -198,    300,  -1869,
1208     1052,   4495,  15519,   1467,  -4032,    -67,  -1233, -14700,
1209     -131,   -992,   -288,   -997,  -4257,    -94,   -402,  -1389,
1210      259,   1106,   3819,    361,   3010,   2544,   6969,   7559,
1211     1996,   -553,   -395,  -2964,  -3487,   -243,   -467,  -1280,
1212    -1082,  -1388,  -1174,  -3215,   -366,   -310,   -849,   -921,
1213    -5209,  -1867,   8713,  10351,   1549,  -1656,   -212,  -4634,
1214    -6540,   -146,   -593,   2770,    993,   3291,   1180,  -5505,
1215      492,    176,   -824,   -979,  -4314,   8513,    913,   7547,
1216    -2723,  -1135,  -4423,    -50,  -3476,   -452,   2241,    240,
1217     -474,   1987,  -3921,   -420,   -717,   1415,    151,   1254,
1218    12929,  -1219,   2448,   1757,   6303, -10204,    -90,   -365,
1219     -188,  -2425,    962,  -1932,    182,  -1386,    130,   -262,
1220    -4974,    469,   -941,   -676,   6465,   4132,   3167,   3160,
1221     5697,  -2551,  -1042,   -612,   -609,  -1981,  -1630,  -1249,
1222     -798,  -1247,   -797,   -611,  -2248,  -1437,  -1101,  -1099,
1223    -3636,   4859,  18914,  -1335,    810,   -807,  -1441, -21836,
1224     -108,    -40,   1078,   4198,  -5609,   -296,    396,   1541,
1225      179,   -240,   -936,     66,   8844,   7864,    654,  -4063,
1226    -5680,  -4774,  -3774,    -26,  -1007,  -1969,  -4245,   -353,
1227     -314,   2193,   1950,    162,   3066,   2726,    226,  -1408,
1228     1859,   2634,   9228,    996,   9464,   -211,   -423,  -5197,
1229      -60,  -5467,   -299,  -1047,  -1483,   -113,   -160,   -561,
1230    -1074,  -1521,  -5330,   -575,   2949,  12260,  10290,   -497,
1231    -3943,   -530,  -9174,  -6463,    -15,   -949,  -2206,  -1852,
1232    -7700,     89,    372,    312,    709,   2950,   2476,   -119,
1233    -2903,   1552,  14867,   9970,   -496,   -514,   -147, -13491,
1234    -6068,    -15,    275,   2634,  -1408,   1766,   -944,  -9047,
1235      -87,     47,    450,    302,   3243,   8234,   7586,   3373,
1236     2151,   -642,  -4138,  -3512,   -694,   -282,  -1630,  -1501,
1237    -3812,   -667,  -1695,  -1561,   -425,  -1081,   -996,   -442,
1238    -9631,     60,   3501,   5359,  10150,  -5662,      0,   -748,
1239    -1752,  -6288,     35,   2058,    -12,   3150,    -19,  -1145,
1240     5967,    -37,  -2169,  -3320,  -6874,  -2553,  -5446,  -2195,
1241    -7841,  -2884,   -397,  -1810,   -294,  -3753,  -1071,  -2285,
1242     -848,   -921,   -342,   -729,  -3290,  -1221,  -2606,  -1050,
1243    -3413,  -1141,   4630,  13612,   7897,   -711,    -79,  -1308,
1244   -11310,  -3806,   -237,    964,    322,   2836,    948,  -3847,
1245     1645,    550,  -2231,  -6561,   4410,  -5678,   8006,  -3992,
1246     3811,  -1187,  -1968,  -3912,   -973,   -886,   1528,  -2155,
1247     2775,   1074,  -1383,   1951,  -1025,   1321,  -1862,    928,
1248     5659,  11535,   2203,   -452,   7169,  -1954,  -8121,   -296,
1249      -12,  -3137,  -3984,   -761,  -1551,    156,    318,     60,
1250    -2476,  -5048,   -964,    197,   2914,  -2914,   3485,  -3965,
1251    13675,   -518,   -518,   -741,   -959, -11414,    518,   -620,
1252      620,    705,   -705,    843,  -2433,   2432,  -2909,   3310,
1253     7843,   1907,   1022,   8882,   7972,  -3755,   -222,    -63,
1254    -4815,  -3879,   -913,   -489,   -119,  -4252,  -1034,   -554,
1255    -3816,   -928,   -497,  -4322,  13807,   9531,   1436,   1612,
1256     1779, -11636,  -5544,   -125,   -158,   -193,  -8032,  -1210,
1257     -835,  -1358,   -938,   -141,  -1499,  -1035,   -156,   -175,
1258    13620,  -5337,   5450,  -2263,   1723, -11322,  -1738,  -1813,
1259     -312,   -181,   4436,  -4531,   1775,   1881,   -737,    752,
1260    -1432,    561,   -573,    238,   5297,   8374,   8872,   7694,
1261     6538,  -1712,  -4280,  -4804,  -3613,  -2609,  -2707,  -2868,
1262    -4534,  -2487,  -3932,  -4166,  -2113,  -3341,  -3540,  -3070
1263};
1264
1265/**
1266 * 0.65^i (Zero part) and 0.75^i (Pole part) scaled by 2^15
1267 */
1268static const int16_t postfilter_tbl[2][LPC_ORDER] = {
1269    /* Zero */
1270    {21299, 13844,  8999,  5849, 3802, 2471, 1606, 1044,  679,  441},
1271    /* Pole */
1272    {24576, 18432, 13824, 10368, 7776, 5832, 4374, 3281, 2460, 1845}
1273};
1274
1275/**
1276 * Hamming window coefficients scaled by 2^15
1277 */
1278static const int16_t hamming_window[LPC_FRAME] = {
1279     2621,  2631,  2659,  2705,  2770,  2853,  2955,  3074,  3212,  3367,
1280     3541,  3731,  3939,  4164,  4405,  4663,  4937,  5226,  5531,  5851,
1281     6186,  6534,  6897,  7273,  7661,  8062,  8475,  8899,  9334,  9780,
1282    10235, 10699, 11172, 11653, 12141, 12636, 13138, 13645, 14157, 14673,
1283    15193, 15716, 16242, 16769, 17298, 17827, 18356, 18884, 19411, 19935,
1284    20457, 20975, 21489, 21999, 22503, 23002, 23494, 23978, 24455, 24924,
1285    25384, 25834, 26274, 26704, 27122, 27529, 27924, 28306, 28675, 29031,
1286    29373, 29700, 30012, 30310, 30592, 30857, 31107, 31340, 31557, 31756,
1287    31938, 32102, 32249, 32377, 32488, 32580, 32654, 32710, 32747, 32766,
1288    32766, 32747, 32710, 32654, 32580, 32488, 32377, 32249, 32102, 31938,
1289    31756, 31557, 31340, 31107, 30857, 30592, 30310, 30012, 29700, 29373,
1290    29031, 28675, 28306, 27924, 27529, 27122, 26704, 26274, 25834, 25384,
1291    24924, 24455, 23978, 23494, 23002, 22503, 21999, 21489, 20975, 20457,
1292    19935, 19411, 18884, 18356, 17827, 17298, 16769, 16242, 15716, 15193,
1293    14673, 14157, 13645, 13138, 12636, 12141, 11653, 11172, 10699, 10235,
1294     9780, 9334,   8899,  8475,  8062,  7661,  7273,  6897,  6534,  6186,
1295     5851, 5531,   5226,  4937,  4663,  4405,  4164,  3939,  3731,  3541,
1296     3367, 3212,   3074,  2955,  2853,  2770,  2705,  2659,  2631,  2621
1297};
1298
1299/**
1300 * Binomial window coefficients scaled by 2^15
1301 */
1302static const int16_t binomial_window[LPC_ORDER] = {
1303    32749, 32695, 32604, 32477, 32315, 32118, 31887, 31622, 31324, 30995
1304};
1305
1306/**
1307 * 0.994^i scaled by 2^15
1308 */
1309static const int16_t bandwidth_expand[LPC_ORDER] = {
1310    32571, 32376, 32182, 31989, 31797, 31606, 31416, 31228, 31040, 30854
1311};
1312
1313/**
1314 * 0.5^i scaled by 2^15
1315 */
1316static const int16_t percept_flt_tbl[2][LPC_ORDER] = {
1317    /* Zero part */
1318    {29491, 26542, 23888, 21499, 19349, 17414, 15673, 14106, 12695, 11425},
1319    /* Pole part */
1320    {16384,  8192,  4096,  2048,  1024,   512,   256,   128,    64,    32}
1321};
1322
1323static const int cng_adaptive_cb_lag[4] = { 1, 0, 1, 3 };
1324
1325static const int cng_filt[4] = { 273, 998, 499, 333 };
1326
1327static const int cng_bseg[3] = { 2048, 18432, 231233 };
1328
1329#endif /* AVCODEC_G723_1_DATA_H */
1330