1/*
2 *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10
11/******************************************************************
12
13 iLBC Speech Coder ANSI-C Source Code
14
15 constants.c
16
17******************************************************************/
18
19#include "defines.h"
20#include "constants.h"
21
22/* HP Filters {b[0] b[1] b[2] -a[1] -a[2]} */
23
24const int16_t WebRtcIlbcfix_kHpInCoefs[5] = {3798, -7596, 3798, 7807, -3733};
25const int16_t WebRtcIlbcfix_kHpOutCoefs[5] = {3849, -7699, 3849, 7918, -3833};
26
27/* Window in Q11 to window the energies of the 5 choises (3 for 20ms) in the choise for
28   the 80 sample start state
29*/
30const int16_t WebRtcIlbcfix_kStartSequenceEnrgWin[NSUB_MAX-1]= {
31  1638, 1843, 2048, 1843, 1638
32};
33
34/* LP Filter coeffs used for downsampling */
35const int16_t WebRtcIlbcfix_kLpFiltCoefs[FILTERORDER_DS_PLUS1]= {
36  -273, 512, 1297, 1696, 1297, 512, -273
37};
38
39/* Constants used in the LPC calculations */
40
41/* Hanning LPC window (in Q15) */
42const int16_t WebRtcIlbcfix_kLpcWin[BLOCKL_MAX] = {
43  6, 22, 50, 89, 139, 200, 272, 355, 449, 554, 669, 795,
44  932, 1079, 1237, 1405, 1583, 1771, 1969, 2177, 2395, 2622, 2858, 3104,
45  3359, 3622, 3894, 4175, 4464, 4761, 5066, 5379, 5699, 6026, 6361, 6702,
46  7050, 7404, 7764, 8130, 8502, 8879, 9262, 9649, 10040, 10436, 10836, 11240,
47  11647, 12058, 12471, 12887, 13306, 13726, 14148, 14572, 14997, 15423, 15850, 16277,
48  16704, 17131, 17558, 17983, 18408, 18831, 19252, 19672, 20089, 20504, 20916, 21325,
49  21730, 22132, 22530, 22924, 23314, 23698, 24078, 24452, 24821, 25185, 25542, 25893,
50  26238, 26575, 26906, 27230, 27547, 27855, 28156, 28450, 28734, 29011, 29279, 29538,
51  29788, 30029, 30261, 30483, 30696, 30899, 31092, 31275, 31448, 31611, 31764, 31906,
52  32037, 32158, 32268, 32367, 32456, 32533, 32600, 32655, 32700, 32733, 32755, 32767,
53  32767, 32755, 32733, 32700, 32655, 32600, 32533, 32456, 32367, 32268, 32158, 32037,
54  31906, 31764, 31611, 31448, 31275, 31092, 30899, 30696, 30483, 30261, 30029, 29788,
55  29538, 29279, 29011, 28734, 28450, 28156, 27855, 27547, 27230, 26906, 26575, 26238,
56  25893, 25542, 25185, 24821, 24452, 24078, 23698, 23314, 22924, 22530, 22132, 21730,
57  21325, 20916, 20504, 20089, 19672, 19252, 18831, 18408, 17983, 17558, 17131, 16704,
58  16277, 15850, 15423, 14997, 14572, 14148, 13726, 13306, 12887, 12471, 12058, 11647,
59  11240, 10836, 10436, 10040, 9649, 9262, 8879, 8502, 8130, 7764, 7404, 7050,
60  6702, 6361, 6026, 5699, 5379, 5066, 4761, 4464, 4175, 3894, 3622, 3359,
61  3104, 2858, 2622, 2395, 2177, 1969, 1771, 1583, 1405, 1237, 1079, 932,
62  795, 669, 554, 449, 355, 272, 200, 139, 89, 50, 22, 6
63};
64
65/* Asymmetric LPC window (in Q15)*/
66const int16_t WebRtcIlbcfix_kLpcAsymWin[BLOCKL_MAX] = {
67  2, 7, 15, 27, 42, 60, 81, 106, 135, 166, 201, 239,
68  280, 325, 373, 424, 478, 536, 597, 661, 728, 798, 872, 949,
69  1028, 1111, 1197, 1287, 1379, 1474, 1572, 1674, 1778, 1885, 1995, 2108,
70  2224, 2343, 2465, 2589, 2717, 2847, 2980, 3115, 3254, 3395, 3538, 3684,
71  3833, 3984, 4138, 4295, 4453, 4615, 4778, 4944, 5112, 5283, 5456, 5631,
72  5808, 5987, 6169, 6352, 6538, 6725, 6915, 7106, 7300, 7495, 7692, 7891,
73  8091, 8293, 8497, 8702, 8909, 9118, 9328, 9539, 9752, 9966, 10182, 10398,
74  10616, 10835, 11055, 11277, 11499, 11722, 11947, 12172, 12398, 12625, 12852, 13080,
75  13309, 13539, 13769, 14000, 14231, 14463, 14695, 14927, 15160, 15393, 15626, 15859,
76  16092, 16326, 16559, 16792, 17026, 17259, 17492, 17725, 17957, 18189, 18421, 18653,
77  18884, 19114, 19344, 19573, 19802, 20030, 20257, 20483, 20709, 20934, 21157, 21380,
78  21602, 21823, 22042, 22261, 22478, 22694, 22909, 23123, 23335, 23545, 23755, 23962,
79  24168, 24373, 24576, 24777, 24977, 25175, 25371, 25565, 25758, 25948, 26137, 26323,
80  26508, 26690, 26871, 27049, 27225, 27399, 27571, 27740, 27907, 28072, 28234, 28394,
81  28552, 28707, 28860, 29010, 29157, 29302, 29444, 29584, 29721, 29855, 29987, 30115,
82  30241, 30364, 30485, 30602, 30717, 30828, 30937, 31043, 31145, 31245, 31342, 31436,
83  31526, 31614, 31699, 31780, 31858, 31933, 32005, 32074, 32140, 32202, 32261, 32317,
84  32370, 32420, 32466, 32509, 32549, 32585, 32618, 32648, 32675, 32698, 32718, 32734,
85  32748, 32758, 32764, 32767, 32767, 32667, 32365, 31863, 31164, 30274, 29197, 27939,
86  26510, 24917, 23170, 21281, 19261, 17121, 14876, 12540, 10126, 7650, 5126, 2571
87};
88
89/* Lag window for LPC (Q31) */
90const int32_t WebRtcIlbcfix_kLpcLagWin[LPC_FILTERORDER + 1]={
91  2147483647,   2144885453,   2137754373,   2125918626,   2109459810,
92  2088483140,   2063130336,   2033564590,   1999977009,   1962580174,
93  1921610283};
94
95/* WebRtcIlbcfix_kLpcChirpSyntDenum vector in Q15 corresponding
96 * floating point vector {1 0.9025 0.9025^2 0.9025^3 ...}
97 */
98const int16_t WebRtcIlbcfix_kLpcChirpSyntDenum[LPC_FILTERORDER + 1] = {
99  32767, 29573, 26690, 24087,
100  21739, 19619, 17707, 15980,
101  14422, 13016, 11747};
102
103/* WebRtcIlbcfix_kLpcChirpWeightDenum in Q15 corresponding to
104 * floating point vector {1 0.4222 0.4222^2... }
105 */
106const int16_t WebRtcIlbcfix_kLpcChirpWeightDenum[LPC_FILTERORDER + 1] = {
107  32767, 13835, 5841, 2466, 1041, 440,
108  186, 78,  33,  14,  6};
109
110/* LSF quantization Q13 domain */
111const int16_t WebRtcIlbcfix_kLsfCb[64 * 3 + 128 * 3 + 128 * 4] = {
112  1273,       2238,       3696,
113  3199,       5309,       8209,
114  3606,       5671,       7829,
115  2815,       5262,       8778,
116  2608,       4027,       5493,
117  1582,       3076,       5945,
118  2983,       4181,       5396,
119  2437,       4322,       6902,
120  1861,       2998,       4613,
121  2007,       3250,       5214,
122  1388,       2459,       4262,
123  2563,       3805,       5269,
124  2036,       3522,       5129,
125  1935,       4025,       6694,
126  2744,       5121,       7338,
127  2810,       4248,       5723,
128  3054,       5405,       7745,
129  1449,       2593,       4763,
130  3411,       5128,       6596,
131  2484,       4659,       7496,
132  1668,       2879,       4818,
133  1812,       3072,       5036,
134  1638,       2649,       3900,
135  2464,       3550,       4644,
136  1853,       2900,       4158,
137  2458,       4163,       5830,
138  2556,       4036,       6254,
139  2703,       4432,       6519,
140  3062,       4953,       7609,
141  1725,       3703,       6187,
142  2221,       3877,       5427,
143  2339,       3579,       5197,
144  2021,       4633,       7037,
145  2216,       3328,       4535,
146  2961,       4739,       6667,
147  2807,       3955,       5099,
148  2788,       4501,       6088,
149  1642,       2755,       4431,
150  3341,       5282,       7333,
151  2414,       3726,       5727,
152  1582,       2822,       5269,
153  2259,       3447,       4905,
154  3117,       4986,       7054,
155  1825,       3491,       5542,
156  3338,       5736,       8627,
157  1789,       3090,       5488,
158  2566,       3720,       4923,
159  2846,       4682,       7161,
160  1950,       3321,       5976,
161  1834,       3383,       6734,
162  3238,       4769,       6094,
163  2031,       3978,       5903,
164  1877,       4068,       7436,
165  2131,       4644,       8296,
166  2764,       5010,       8013,
167  2194,       3667,       6302,
168  2053,       3127,       4342,
169  3523,       6595,      10010,
170  3134,       4457,       5748,
171  3142,       5819,       9414,
172  2223,       4334,       6353,
173  2022,       3224,       4822,
174  2186,       3458,       5544,
175  2552,       4757,       6870,
176  10905,      12917,      14578,
177  9503,      11485,      14485,
178  9518,      12494,      14052,
179  6222,       7487,       9174,
180  7759,       9186,      10506,
181  8315,      12755,      14786,
182  9609,      11486,      13866,
183  8909,      12077,      13643,
184  7369,       9054,      11520,
185  9408,      12163,      14715,
186  6436,       9911,      12843,
187  7109,       9556,      11884,
188  7557,      10075,      11640,
189  6482,       9202,      11547,
190  6463,       7914,      10980,
191  8611,      10427,      12752,
192  7101,       9676,      12606,
193  7428,      11252,      13172,
194  10197,      12955,      15842,
195  7487,      10955,      12613,
196  5575,       7858,      13621,
197  7268,      11719,      14752,
198  7476,      11744,      13795,
199  7049,       8686,      11922,
200  8234,      11314,      13983,
201  6560,      11173,      14984,
202  6405,       9211,      12337,
203  8222,      12054,      13801,
204  8039,      10728,      13255,
205  10066,      12733,      14389,
206  6016,       7338,      10040,
207  6896,       8648,      10234,
208  7538,       9170,      12175,
209  7327,      12608,      14983,
210  10516,      12643,      15223,
211  5538,       7644,      12213,
212  6728,      12221,      14253,
213  7563,       9377,      12948,
214  8661,      11023,      13401,
215  7280,       8806,      11085,
216  7723,       9793,      12333,
217  12225,      14648,      16709,
218  8768,      13389,      15245,
219  10267,      12197,      13812,
220  5301,       7078,      11484,
221  7100,      10280,      11906,
222  8716,      12555,      14183,
223  9567,      12464,      15434,
224  7832,      12305,      14300,
225  7608,      10556,      12121,
226  8913,      11311,      12868,
227  7414,       9722,      11239,
228  8666,      11641,      13250,
229  9079,      10752,      12300,
230  8024,      11608,      13306,
231  10453,      13607,      16449,
232  8135,       9573,      10909,
233  6375,       7741,      10125,
234  10025,      12217,      14874,
235  6985,      11063,      14109,
236  9296,      13051,      14642,
237  8613,      10975,      12542,
238  6583,      10414,      13534,
239  6191,       9368,      13430,
240  5742,       6859,       9260,
241  7723,       9813,      13679,
242  8137,      11291,      12833,
243  6562,       8973,      10641,
244  6062,       8462,      11335,
245  6928,       8784,      12647,
246  7501,       8784,      10031,
247  8372,      10045,      12135,
248  8191,       9864,      12746,
249  5917,       7487,      10979,
250  5516,       6848,      10318,
251  6819,       9899,      11421,
252  7882,      12912,      15670,
253  9558,      11230,      12753,
254  7752,       9327,      11472,
255  8479,       9980,      11358,
256  11418,      14072,      16386,
257  7968,      10330,      14423,
258  8423,      10555,      12162,
259  6337,      10306,      14391,
260  8850,      10879,      14276,
261  6750,      11885,      15710,
262  7037,       8328,       9764,
263  6914,       9266,      13476,
264  9746,      13949,      15519,
265  11032,      14444,      16925,
266  8032,      10271,      11810,
267  10962,      13451,      15833,
268  10021,      11667,      13324,
269  6273,       8226,      12936,
270  8543,      10397,      13496,
271  7936,      10302,      12745,
272  6769,       8138,      10446,
273  6081,       7786,      11719,
274  8637,      11795,      14975,
275  8790,      10336,      11812,
276  7040,       8490,      10771,
277  7338,      10381,      13153,
278  6598,       7888,       9358,
279  6518,       8237,      12030,
280  9055,      10763,      12983,
281  6490,      10009,      12007,
282  9589,      12023,      13632,
283  6867,       9447,      10995,
284  7930,       9816,      11397,
285  10241,      13300,      14939,
286  5830,       8670,      12387,
287  9870,      11915,      14247,
288  9318,      11647,      13272,
289  6721,      10836,      12929,
290  6543,       8233,       9944,
291  8034,      10854,      12394,
292  9112,      11787,      14218,
293  9302,      11114,      13400,
294  9022,      11366,      13816,
295  6962,      10461,      12480,
296  11288,      13333,      15222,
297  7249,       8974,      10547,
298  10566,      12336,      14390,
299  6697,      11339,      13521,
300  11851,      13944,      15826,
301  6847,       8381,      11349,
302  7509,       9331,      10939,
303  8029,       9618,      11909,
304  13973,      17644,      19647,      22474,
305  14722,      16522,      20035,      22134,
306  16305,      18179,      21106,      23048,
307  15150,      17948,      21394,      23225,
308  13582,      15191,      17687,      22333,
309  11778,      15546,      18458,      21753,
310  16619,      18410,      20827,      23559,
311  14229,      15746,      17907,      22474,
312  12465,      15327,      20700,      22831,
313  15085,      16799,      20182,      23410,
314  13026,      16935,      19890,      22892,
315  14310,      16854,      19007,      22944,
316  14210,      15897,      18891,      23154,
317  14633,      18059,      20132,      22899,
318  15246,      17781,      19780,      22640,
319  16396,      18904,      20912,      23035,
320  14618,      17401,      19510,      21672,
321  15473,      17497,      19813,      23439,
322  18851,      20736,      22323,      23864,
323  15055,      16804,      18530,      20916,
324  16490,      18196,      19990,      21939,
325  11711,      15223,      21154,      23312,
326  13294,      15546,      19393,      21472,
327  12956,      16060,      20610,      22417,
328  11628,      15843,      19617,      22501,
329  14106,      16872,      19839,      22689,
330  15655,      18192,      20161,      22452,
331  12953,      15244,      20619,      23549,
332  15322,      17193,      19926,      21762,
333  16873,      18676,      20444,      22359,
334  14874,      17871,      20083,      21959,
335  11534,      14486,      19194,      21857,
336  17766,      19617,      21338,      23178,
337  13404,      15284,      19080,      23136,
338  15392,      17527,      19470,      21953,
339  14462,      16153,      17985,      21192,
340  17734,      19750,      21903,      23783,
341  16973,      19096,      21675,      23815,
342  16597,      18936,      21257,      23461,
343  15966,      17865,      20602,      22920,
344  15416,      17456,      20301,      22972,
345  18335,      20093,      21732,      23497,
346  15548,      17217,      20679,      23594,
347  15208,      16995,      20816,      22870,
348  13890,      18015,      20531,      22468,
349  13211,      15377,      19951,      22388,
350  12852,      14635,      17978,      22680,
351  16002,      17732,      20373,      23544,
352  11373,      14134,      19534,      22707,
353  17329,      19151,      21241,      23462,
354  15612,      17296,      19362,      22850,
355  15422,      19104,      21285,      23164,
356  13792,      17111,      19349,      21370,
357  15352,      17876,      20776,      22667,
358  15253,      16961,      18921,      22123,
359  14108,      17264,      20294,      23246,
360  15785,      17897,      20010,      21822,
361  17399,      19147,      20915,      22753,
362  13010,      15659,      18127,      20840,
363  16826,      19422,      22218,      24084,
364  18108,      20641,      22695,      24237,
365  18018,      20273,      22268,      23920,
366  16057,      17821,      21365,      23665,
367  16005,      17901,      19892,      23016,
368  13232,      16683,      21107,      23221,
369  13280,      16615,      19915,      21829,
370  14950,      18575,      20599,      22511,
371  16337,      18261,      20277,      23216,
372  14306,      16477,      21203,      23158,
373  12803,      17498,      20248,      22014,
374  14327,      17068,      20160,      22006,
375  14402,      17461,      21599,      23688,
376  16968,      18834,      20896,      23055,
377  15070,      17157,      20451,      22315,
378  15419,      17107,      21601,      23946,
379  16039,      17639,      19533,      21424,
380  16326,      19261,      21745,      23673,
381  16489,      18534,      21658,      23782,
382  16594,      18471,      20549,      22807,
383  18973,      21212,      22890,      24278,
384  14264,      18674,      21123,      23071,
385  15117,      16841,      19239,      23118,
386  13762,      15782,      20478,      23230,
387  14111,      15949,      20058,      22354,
388  14990,      16738,      21139,      23492,
389  13735,      16971,      19026,      22158,
390  14676,      17314,      20232,      22807,
391  16196,      18146,      20459,      22339,
392  14747,      17258,      19315,      22437,
393  14973,      17778,      20692,      23367,
394  15715,      17472,      20385,      22349,
395  15702,      18228,      20829,      23410,
396  14428,      16188,      20541,      23630,
397  16824,      19394,      21365,      23246,
398  13069,      16392,      18900,      21121,
399  12047,      16640,      19463,      21689,
400  14757,      17433,      19659,      23125,
401  15185,      16930,      19900,      22540,
402  16026,      17725,      19618,      22399,
403  16086,      18643,      21179,      23472,
404  15462,      17248,      19102,      21196,
405  17368,      20016,      22396,      24096,
406  12340,      14475,      19665,      23362,
407  13636,      16229,      19462,      22728,
408  14096,      16211,      19591,      21635,
409  12152,      14867,      19943,      22301,
410  14492,      17503,      21002,      22728,
411  14834,      16788,      19447,      21411,
412  14650,      16433,      19326,      22308,
413  14624,      16328,      19659,      23204,
414  13888,      16572,      20665,      22488,
415  12977,      16102,      18841,      22246,
416  15523,      18431,      21757,      23738,
417  14095,      16349,      18837,      20947,
418  13266,      17809,      21088,      22839,
419  15427,      18190,      20270,      23143,
420  11859,      16753,      20935,      22486,
421  12310,      17667,      21736,      23319,
422  14021,      15926,      18702,      22002,
423  12286,      15299,      19178,      21126,
424  15703,      17491,      21039,      23151,
425  12272,      14018,      18213,      22570,
426  14817,      16364,      18485,      22598,
427  17109,      19683,      21851,      23677,
428  12657,      14903,      19039,      22061,
429  14713,      16487,      20527,      22814,
430  14635,      16726,      18763,      21715,
431  15878,      18550,      20718,      22906
432};
433
434const int16_t WebRtcIlbcfix_kLsfDimCb[LSF_NSPLIT] = {3, 3, 4};
435const int16_t WebRtcIlbcfix_kLsfSizeCb[LSF_NSPLIT] = {64,128,128};
436
437const int16_t WebRtcIlbcfix_kLsfMean[LPC_FILTERORDER] = {
438  2308,       3652,       5434,       7885,
439  10255,      12559,      15160,      17513,
440  20328,      22752};
441
442const int16_t WebRtcIlbcfix_kLspMean[LPC_FILTERORDER] = {
443  31476, 29565, 25819, 18725, 10276,
444  1236, -9049, -17600, -25884, -30618
445};
446
447/* Q14 */
448const int16_t WebRtcIlbcfix_kLsfWeight20ms[4] = {12288, 8192, 4096, 0};
449const int16_t WebRtcIlbcfix_kLsfWeight30ms[6] = {8192, 16384, 10923, 5461, 0, 0};
450
451/*
452   cos(x) in Q15
453   WebRtcIlbcfix_kCos[i] = cos(pi*i/64.0)
454   used in WebRtcIlbcfix_Lsp2Lsf()
455*/
456
457const int16_t WebRtcIlbcfix_kCos[64] = {
458  32767,  32729,  32610,  32413,  32138,  31786,  31357,  30853,
459  30274,  29622,  28899,  28106,  27246,  26320,  25330,  24279,
460  23170,  22006,  20788,  19520,  18205,  16846,  15447,  14010,
461  12540,  11039,   9512,   7962,   6393,   4808,   3212,   1608,
462  0,  -1608,  -3212,  -4808,  -6393,  -7962,  -9512, -11039,
463  -12540, -14010, -15447, -16846, -18205, -19520, -20788, -22006,
464  -23170, -24279, -25330, -26320, -27246, -28106, -28899, -29622,
465  -30274, -30853, -31357, -31786, -32138, -32413, -32610, -32729
466};
467
468/*
469   Derivative in Q19, used to interpolate between the
470   WebRtcIlbcfix_kCos[] values to get a more exact y = cos(x)
471*/
472const int16_t WebRtcIlbcfix_kCosDerivative[64] = {
473  -632,  -1893,  -3150,  -4399,  -5638,  -6863,  -8072,  -9261,
474  -10428, -11570, -12684, -13767, -14817, -15832, -16808, -17744,
475  -18637, -19486, -20287, -21039, -21741, -22390, -22986, -23526,
476  -24009, -24435, -24801, -25108, -25354, -25540, -25664, -25726,
477  -25726, -25664, -25540, -25354, -25108, -24801, -24435, -24009,
478  -23526, -22986, -22390, -21741, -21039, -20287, -19486, -18637,
479  -17744, -16808, -15832, -14817, -13767, -12684, -11570, -10428,
480  -9261,  -8072,  -6863,  -5638,  -4399,  -3150,  -1893,   -632};
481
482/*
483  Table in Q15, used for a2lsf conversion
484  WebRtcIlbcfix_kCosGrid[i] = cos((2*pi*i)/(float)(2*COS_GRID_POINTS));
485*/
486
487const int16_t WebRtcIlbcfix_kCosGrid[COS_GRID_POINTS + 1] = {
488  32760, 32723, 32588, 32364, 32051, 31651, 31164, 30591,
489  29935, 29196, 28377, 27481, 26509, 25465, 24351, 23170,
490  21926, 20621, 19260, 17846, 16384, 14876, 13327, 11743,
491  10125, 8480, 6812, 5126, 3425, 1714, 0, -1714, -3425,
492  -5126, -6812, -8480, -10125, -11743, -13327, -14876,
493  -16384, -17846, -19260, -20621, -21926, -23170, -24351,
494  -25465, -26509, -27481, -28377, -29196, -29935, -30591,
495  -31164, -31651, -32051, -32364, -32588, -32723, -32760
496};
497
498/*
499   Derivative of y = acos(x) in Q12
500   used in WebRtcIlbcfix_Lsp2Lsf()
501*/
502
503const int16_t WebRtcIlbcfix_kAcosDerivative[64] = {
504  -26887, -8812, -5323, -3813, -2979, -2444, -2081, -1811,
505  -1608, -1450, -1322, -1219, -1132, -1059, -998, -946,
506  -901, -861, -827, -797, -772, -750, -730, -713,
507  -699, -687, -677, -668, -662, -657, -654, -652,
508  -652, -654, -657, -662, -668, -677, -687, -699,
509  -713, -730, -750, -772, -797, -827, -861, -901,
510  -946, -998, -1059, -1132, -1219, -1322, -1450, -1608,
511  -1811, -2081, -2444, -2979, -3813, -5323, -8812, -26887
512};
513
514
515/* Tables for quantization of start state */
516
517/* State quantization tables */
518const int16_t WebRtcIlbcfix_kStateSq3[8] = { /* Values in Q13 */
519  -30473, -17838, -9257, -2537,
520  3639, 10893, 19958, 32636
521};
522
523/* This table defines the limits for the selection of the freqg
524   less or equal than value 0 => index = 0
525   less or equal than value k => index = k
526*/
527const int32_t WebRtcIlbcfix_kChooseFrgQuant[64] = {
528  118, 163, 222, 305, 425, 604,
529  851, 1174, 1617, 2222, 3080, 4191,
530  5525, 7215, 9193, 11540, 14397, 17604,
531  21204, 25209, 29863, 35720, 42531, 50375,
532  59162, 68845, 80108, 93754, 110326, 129488,
533  150654, 174328, 201962, 233195, 267843, 308239,
534  354503, 405988, 464251, 531550, 608652, 697516,
535  802526, 928793, 1080145, 1258120, 1481106, 1760881,
536  2111111, 2546619, 3078825, 3748642, 4563142, 5573115,
537  6887601, 8582108, 10797296, 14014513, 18625760, 25529599,
538  37302935, 58819185, 109782723, WEBRTC_SPL_WORD32_MAX
539};
540
541const int16_t WebRtcIlbcfix_kScale[64] = {
542  /* Values in Q16 */
543  29485, 25003, 21345, 18316, 15578, 13128, 10973, 9310, 7955,
544  6762, 5789, 4877, 4255, 3699, 3258, 2904, 2595, 2328,
545  2123, 1932, 1785, 1631, 1493, 1370, 1260, 1167, 1083,
546  /* Values in Q21 */
547  32081, 29611, 27262, 25229, 23432, 21803, 20226, 18883, 17609,
548  16408, 15311, 14327, 13390, 12513, 11693, 10919, 10163, 9435,
549  8739, 8100, 7424, 6813, 6192, 5648, 5122, 4639, 4207, 3798,
550  3404, 3048, 2706, 2348, 2036, 1713, 1393, 1087, 747
551};
552
553/*frgq in fixpoint, but already computed like this:
554  for(i=0; i<64; i++){
555  a = (pow(10,frgq[i])/4.5);
556  WebRtcIlbcfix_kFrgQuantMod[i] = round(a);
557  }
558
559  Value 0 :36 in Q8
560  37:58 in Q5
561  59:63 in Q3
562*/
563const int16_t WebRtcIlbcfix_kFrgQuantMod[64] = {
564  /* First 37 values in Q8 */
565  569, 671, 786, 916, 1077, 1278,
566  1529, 1802, 2109, 2481, 2898, 3440,
567  3943, 4535, 5149, 5778, 6464, 7208,
568  7904, 8682, 9397, 10285, 11240, 12246,
569  13313, 14382, 15492, 16735, 18131, 19693,
570  21280, 22912, 24624, 26544, 28432, 30488,
571  32720,
572  /* 22 values in Q5 */
573  4383, 4684, 5012, 5363, 5739, 6146,
574  6603, 7113, 7679, 8285, 9040, 9850,
575  10838, 11882, 13103, 14467, 15950, 17669,
576  19712, 22016, 24800, 28576,
577  /* 5 values in Q3 */
578  8240, 9792, 12040, 15440, 22472
579};
580
581/* Constants for codebook search and creation */
582
583/* Expansion filter to get additional cb section.
584 * Q12 and reversed compared to flp
585 */
586const int16_t WebRtcIlbcfix_kCbFiltersRev[CB_FILTERLEN]={
587  -140, 446, -755, 3302, 2922, -590, 343, -138};
588
589/* Weighting coefficients for short lags.
590 * [0.2 0.4 0.6 0.8] in Q15 */
591const int16_t WebRtcIlbcfix_kAlpha[4]={
592  6554, 13107, 19661, 26214};
593
594/* Ranges for search and filters at different subframes */
595
596const int16_t WebRtcIlbcfix_kSearchRange[5][CB_NSTAGES]={
597  {58,58,58}, {108,44,44}, {108,108,108}, {108,108,108}, {108,108,108}};
598
599const int16_t WebRtcIlbcfix_kFilterRange[5]={63, 85, 125, 147, 147};
600
601/* Gain Quantization for the codebook gains of the 3 stages */
602
603/* Q14 (one extra value (max int16_t) to simplify for the search) */
604const int16_t WebRtcIlbcfix_kGainSq3[9]={
605  -16384, -10813, -5407, 0, 4096, 8192,
606  12288, 16384, 32767};
607
608/* Q14 (one extra value (max int16_t) to simplify for the search) */
609const int16_t WebRtcIlbcfix_kGainSq4[17]={
610  -17203, -14746, -12288, -9830, -7373, -4915,
611  -2458, 0, 2458, 4915, 7373, 9830,
612  12288, 14746, 17203, 19661, 32767};
613
614/* Q14 (one extra value (max int16_t) to simplify for the search) */
615const int16_t WebRtcIlbcfix_kGainSq5[33]={
616  614,        1229,        1843,        2458,        3072,       3686,
617  4301,        4915,        5530,        6144,        6758,        7373,
618  7987,        8602,        9216,        9830,       10445,       11059,
619  11674,       12288,       12902,       13517,       14131,       14746,
620  15360,       15974,       16589,       17203,       17818,       18432,
621  19046,       19661,    32767};
622
623/* Q14 gain_sq5Tbl squared in Q14 */
624const int16_t WebRtcIlbcfix_kGainSq5Sq[32] = {
625  23,   92,    207,  368,  576,  829,
626  1129,  1474,   1866,  2304,  2787,  3317,
627  3893,  4516,   5184,  5897,  6658,  7464,
628  8318,  9216,   10160,  11151,  12187,  13271,
629  14400,  15574,   16796,  18062,  19377,  20736,
630  22140,  23593
631};
632
633const int16_t* const WebRtcIlbcfix_kGain[3] =
634{WebRtcIlbcfix_kGainSq5, WebRtcIlbcfix_kGainSq4, WebRtcIlbcfix_kGainSq3};
635
636
637/* Tables for the Enhancer, using upsamling factor 4 (ENH_UPS0 = 4) */
638
639const int16_t WebRtcIlbcfix_kEnhPolyPhaser[ENH_UPS0][ENH_FLO_MULT2_PLUS1]={
640  {0,    0,    0, 4096,    0,  0,   0},
641  {64, -315, 1181, 3531, -436, 77, -64},
642  {97, -509, 2464, 2464, -509, 97, -97},
643  {77, -436, 3531, 1181, -315, 64, -77}
644};
645
646const int16_t WebRtcIlbcfix_kEnhWt[3] = {
647  4800, 16384, 27968 /* Q16 */
648};
649
650const int16_t WebRtcIlbcfix_kEnhPlocs[ENH_NBLOCKS_TOT] = {
651  160, 480, 800, 1120, 1440, 1760, 2080, 2400  /* Q(-2) */
652};
653
654/* PLC table */
655
656const int16_t WebRtcIlbcfix_kPlcPerSqr[6] = { /* Grid points for square of periodiciy in Q15 */
657  839, 1343, 2048, 2998, 4247, 5849
658};
659
660const int16_t WebRtcIlbcfix_kPlcPitchFact[6] = { /* Value of y=(x^4-0.4)/(0.7-0.4) in grid points in Q15 */
661  0, 5462, 10922, 16384, 21846, 27306
662};
663
664const int16_t WebRtcIlbcfix_kPlcPfSlope[6] = { /* Slope of y=(x^4-0.4)/(0.7-0.4) in Q11 */
665  26667, 18729, 13653, 10258, 7901, 6214
666};
667