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