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 
24 const int16_t WebRtcIlbcfix_kHpInCoefs[5] = {3798, -7596, 3798, 7807, -3733};
25 const 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 */
30 const int16_t WebRtcIlbcfix_kStartSequenceEnrgWin[NSUB_MAX-1]= {
31   1638, 1843, 2048, 1843, 1638
32 };
33 
34 /* LP Filter coeffs used for downsampling */
35 const 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) */
42 const 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)*/
66 const 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) */
90 const 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  */
98 const 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  */
106 const 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 */
111 const 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 
434 const int16_t WebRtcIlbcfix_kLsfDimCb[LSF_NSPLIT] = {3, 3, 4};
435 const int16_t WebRtcIlbcfix_kLsfSizeCb[LSF_NSPLIT] = {64,128,128};
436 
437 const int16_t WebRtcIlbcfix_kLsfMean[LPC_FILTERORDER] = {
438   2308,       3652,       5434,       7885,
439   10255,      12559,      15160,      17513,
440   20328,      22752};
441 
442 const int16_t WebRtcIlbcfix_kLspMean[LPC_FILTERORDER] = {
443   31476, 29565, 25819, 18725, 10276,
444   1236, -9049, -17600, -25884, -30618
445 };
446 
447 /* Q14 */
448 const int16_t WebRtcIlbcfix_kLsfWeight20ms[4] = {12288, 8192, 4096, 0};
449 const 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 
457 const 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 */
472 const 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 
487 const 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 
503 const 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 */
518 const 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 */
527 const 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 
541 const 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 */
563 const 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  */
586 const 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 */
591 const int16_t WebRtcIlbcfix_kAlpha[4]={
592   6554, 13107, 19661, 26214};
593 
594 /* Ranges for search and filters at different subframes */
595 
596 const size_t WebRtcIlbcfix_kSearchRange[5][CB_NSTAGES]={
597   {58,58,58}, {108,44,44}, {108,108,108}, {108,108,108}, {108,108,108}};
598 
599 const size_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) */
604 const 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) */
609 const 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) */
615 const 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 */
624 const 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 
633 const 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 
639 const 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 
646 const int16_t WebRtcIlbcfix_kEnhWt[3] = {
647   4800, 16384, 27968 /* Q16 */
648 };
649 
650 const size_t WebRtcIlbcfix_kEnhPlocs[ENH_NBLOCKS_TOT] = {
651   160, 480, 800, 1120, 1440, 1760, 2080, 2400  /* Q(-2) */
652 };
653 
654 /* PLC table */
655 
656 const int16_t WebRtcIlbcfix_kPlcPerSqr[6] = { /* Grid points for square of periodiciy in Q15 */
657   839, 1343, 2048, 2998, 4247, 5849
658 };
659 
660 const 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 
664 const 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