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  * pitch_lag_tables.c
13  *
14  * This file contains tables for the pitch filter side-info in the entropy coder.
15  *
16  */
17 
18 #include "settings.h"
19 #include "pitch_lag_tables.h"
20 
21 
22 /********************* Pitch Filter Gain Coefficient Tables ************************/
23 
24 /* tables for use with small pitch gain */
25 
26 /* cdf for quantized pitch filter lags */
27 const uint16_t WebRtcIsacfix_kPitchLagCdf1Lo[127] = {
28   0,  134,  336,  549,  778,  998,  1264,  1512,  1777,  2070,
29   2423,  2794,  3051,  3361,  3708,  3979,  4315,  4610,  4933,  5269,
30   5575,  5896,  6155,  6480,  6816,  7129,  7477,  7764,  8061,  8358,
31   8718,  9020,  9390,  9783,  10177,  10543,  10885,  11342,  11795,  12213,
32   12680,  13096,  13524,  13919,  14436,  14903,  15349,  15795,  16267,  16734,
33   17266,  17697,  18130,  18632,  19080,  19447,  19884,  20315,  20735,  21288,
34   21764,  22264,  22723,  23193,  23680,  24111,  24557,  25022,  25537,  26082,
35   26543,  27090,  27620,  28139,  28652,  29149,  29634,  30175,  30692,  31273,
36   31866,  32506,  33059,  33650,  34296,  34955,  35629,  36295,  36967,  37726,
37   38559,  39458,  40364,  41293,  42256,  43215,  44231,  45253,  46274,  47359,
38   48482,  49678,  50810,  51853,  53016,  54148,  55235,  56263,  57282,  58363,
39   59288,  60179,  61076,  61806,  62474,  63129,  63656,  64160,  64533,  64856,
40   65152,  65535,  65535,  65535,  65535,  65535,  65535
41 };
42 
43 const uint16_t WebRtcIsacfix_kPitchLagCdf2Lo[20] = {
44   0,  429,  3558,  5861,  8558,  11639,  15210,  19502,  24773,  31983,
45   42602,  48567,  52601,  55676,  58160,  60172,  61889,  63235,  65383,  65535
46 };
47 
48 const uint16_t WebRtcIsacfix_kPitchLagCdf3Lo[2] = {
49   0,  65535
50 };
51 
52 const uint16_t WebRtcIsacfix_kPitchLagCdf4Lo[10] = {
53   0,  2966,  6368,  11182,  19431,  37793,  48532,  55353,  60626,  65535
54 };
55 
56 const uint16_t *WebRtcIsacfix_kPitchLagPtrLo[4] = {
57   WebRtcIsacfix_kPitchLagCdf1Lo,
58   WebRtcIsacfix_kPitchLagCdf2Lo,
59   WebRtcIsacfix_kPitchLagCdf3Lo,
60   WebRtcIsacfix_kPitchLagCdf4Lo
61 };
62 
63 /* size of first cdf table */
64 const uint16_t WebRtcIsacfix_kPitchLagSizeLo[1] = {
65   128
66 };
67 
68 /* index limits and ranges */
69 const int16_t WebRtcIsacfix_kLowerLimitLo[4] = {
70   -140, -9,  0, -4
71 };
72 
73 const int16_t WebRtcIsacfix_kUpperLimitLo[4] = {
74   -20,  9,  0,  4
75 };
76 
77 /* initial index for arithmetic decoder */
78 const uint16_t WebRtcIsacfix_kInitIndLo[3] = {
79   10,  1,  5
80 };
81 
82 /* mean values of pitch filter lags in Q10 */
83 
84 const int16_t WebRtcIsacfix_kMeanLag2Lo[19] = {
85   -17627, -16207, -14409, -12319, -10253, -8200, -6054, -3986, -1948, -19,
86   1937, 3974, 6064, 8155, 10229, 12270, 14296, 16127, 17520
87 };
88 
89 const int16_t WebRtcIsacfix_kMeanLag4Lo[9] = {
90   -7949, -6063, -4036, -1941, 38, 1977, 4060, 6059
91 };
92 
93 
94 
95 /* tables for use with medium pitch gain */
96 
97 /* cdf for quantized pitch filter lags */
98 const uint16_t WebRtcIsacfix_kPitchLagCdf1Mid[255] = {
99   0,  28,  61,  88,  121,  149,  233,  331,  475,  559,
100   624,  661,  689,  712,  745,  791,  815,  843,  866,  922,
101   959,  1024,  1061,  1117,  1178,  1238,  1280,  1350,  1453,  1513,
102   1564,  1625,  1671,  1741,  1788,  1904,  2072,  2421,  2626,  2770,
103   2840,  2900,  2942,  3012,  3068,  3115,  3147,  3194,  3254,  3319,
104   3366,  3520,  3678,  3780,  3850,  3911,  3957,  4032,  4106,  4185,
105   4292,  4474,  4683,  4842,  5019,  5191,  5321,  5428,  5540,  5675,
106   5763,  5847,  5959,  6127,  6304,  6564,  6839,  7090,  7263,  7421,
107   7556,  7728,  7872,  7984,  8142,  8361,  8580,  8743,  8938,  9227,
108   9409,  9539,  9674,  9795,  9930,  10060,  10177,  10382,  10614,  10861,
109   11038,  11271,  11415,  11629,  11792,  12044,  12193,  12416,  12574,  12821,
110   13007,  13235,  13445,  13654,  13901,  14134,  14488,  15000,  15703,  16285,
111   16504,  16797,  17086,  17328,  17579,  17807,  17998,  18268,  18538,  18836,
112   19087,  19274,  19474,  19716,  19935,  20270,  20833,  21303,  21532,  21741,
113   21978,  22207,  22523,  22770,  23054,  23613,  23943,  24204,  24399,  24651,
114   24832,  25074,  25270,  25549,  25759,  26015,  26150,  26424,  26713,  27048,
115   27342,  27504,  27681,  27854,  28021,  28207,  28412,  28664,  28859,  29064,
116   29278,  29548,  29748,  30107,  30377,  30656,  30856,  31164,  31452,  31755,
117   32011,  32328,  32626,  32919,  33319,  33789,  34329,  34925,  35396,  35973,
118   36443,  36964,  37551,  38156,  38724,  39357,  40023,  40908,  41587,  42602,
119   43924,  45037,  45810,  46597,  47421,  48291,  49092,  50051,  51448,  52719,
120   53440,  54241,  54944,  55977,  56676,  57299,  57872,  58389,  59059,  59688,
121   60237,  60782,  61094,  61573,  61890,  62290,  62658,  63030,  63217,  63454,
122   63622,  63882,  64003,  64273,  64427,  64529,  64581,  64697,  64758,  64902,
123   65414,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,
124   65535,  65535,  65535,  65535,  65535
125 };
126 
127 const uint16_t WebRtcIsacfix_kPitchLagCdf2Mid[36] = {
128   0,  71,  335,  581,  836,  1039,  1323,  1795,  2258,  2608,
129   3005,  3591,  4243,  5344,  7163,  10583,  16848,  28078,  49448,  57007,
130   60357,  61850,  62837,  63437,  63872,  64188,  64377,  64614,  64774,  64949,
131   65039,  65115,  65223,  65360,  65474,  65535
132 };
133 
134 const uint16_t WebRtcIsacfix_kPitchLagCdf3Mid[2] = {
135   0,  65535
136 };
137 
138 const uint16_t WebRtcIsacfix_kPitchLagCdf4Mid[20] = {
139   0,  28,  246,  459,  667,  1045,  1523,  2337,  4337,  11347,
140   44231,  56709,  60781,  62243,  63161,  63969,  64608,  65062,  65502,  65535
141 };
142 
143 const uint16_t *WebRtcIsacfix_kPitchLagPtrMid[4] = {
144   WebRtcIsacfix_kPitchLagCdf1Mid,
145   WebRtcIsacfix_kPitchLagCdf2Mid,
146   WebRtcIsacfix_kPitchLagCdf3Mid,
147   WebRtcIsacfix_kPitchLagCdf4Mid
148 };
149 
150 /* size of first cdf table */
151 const uint16_t WebRtcIsacfix_kPitchLagSizeMid[1] = {
152   256
153 };
154 
155 /* index limits and ranges */
156 const int16_t WebRtcIsacfix_kLowerLimitMid[4] = {
157   -280, -17,  0, -9
158 };
159 
160 const int16_t WebRtcIsacfix_kUpperLimitMid[4] = {
161   -40,  17,  0,  9
162 };
163 
164 /* initial index for arithmetic decoder */
165 const uint16_t WebRtcIsacfix_kInitIndMid[3] = {
166   18,  1,  10
167 };
168 
169 /* mean values of pitch filter lags in Q10 */
170 
171 const int16_t WebRtcIsacfix_kMeanLag2Mid[35] = {
172   -17297, -16250, -15416, -14343, -13341, -12363, -11270,
173   -10355, -9122, -8217, -7172, -6083, -5102, -4004, -3060,
174   -1982, -952, -18, 935, 1976, 3040, 4032,
175   5082, 6065, 7257, 8202, 9264, 10225, 11242,
176   12234, 13337, 14336, 15374, 16187, 17347
177 };
178 
179 
180 const int16_t WebRtcIsacfix_kMeanLag4Mid[19] = {
181   -8811, -8081, -7203, -6003, -5057, -4025, -2983, -1964,
182   -891, 29, 921, 1920, 2988, 4064, 5187, 6079, 7173, 8074, 8849
183 };
184 
185 
186 /* tables for use with large pitch gain */
187 
188 /* cdf for quantized pitch filter lags */
189 const uint16_t WebRtcIsacfix_kPitchLagCdf1Hi[511] = {
190   0,  7,  18,  33,  69,  105,  156,  228,  315,  612,
191   680,  691,  709,  724,  735,  738,  742,  746,  749,  753,
192   756,  760,  764,  774,  782,  785,  789,  796,  800,  803,
193   807,  814,  818,  822,  829,  832,  847,  854,  858,  869,
194   876,  883,  898,  908,  934,  977,  1010,  1050,  1060,  1064,
195   1075,  1078,  1086,  1089,  1093,  1104,  1111,  1122,  1133,  1136,
196   1151,  1162,  1183,  1209,  1252,  1281,  1339,  1364,  1386,  1401,
197   1411,  1415,  1426,  1430,  1433,  1440,  1448,  1455,  1462,  1477,
198   1487,  1495,  1502,  1506,  1509,  1516,  1524,  1531,  1535,  1542,
199   1553,  1556,  1578,  1589,  1611,  1625,  1639,  1643,  1654,  1665,
200   1672,  1687,  1694,  1705,  1708,  1719,  1730,  1744,  1752,  1759,
201   1791,  1795,  1820,  1867,  1886,  1915,  1936,  1943,  1965,  1987,
202   2041,  2099,  2161,  2175,  2200,  2211,  2226,  2233,  2244,  2251,
203   2266,  2280,  2287,  2298,  2309,  2316,  2331,  2342,  2356,  2378,
204   2403,  2418,  2447,  2497,  2544,  2602,  2863,  2895,  2903,  2935,
205   2950,  2971,  3004,  3011,  3018,  3029,  3040,  3062,  3087,  3127,
206   3152,  3170,  3199,  3243,  3293,  3322,  3340,  3377,  3402,  3427,
207   3474,  3518,  3543,  3579,  3601,  3637,  3659,  3706,  3731,  3760,
208   3818,  3847,  3869,  3901,  3920,  3952,  4068,  4169,  4220,  4271,
209   4524,  4571,  4604,  4632,  4672,  4730,  4777,  4806,  4857,  4904,
210   4951,  5002,  5031,  5060,  5107,  5150,  5212,  5266,  5331,  5382,
211   5432,  5490,  5544,  5610,  5700,  5762,  5812,  5874,  5972,  6022,
212   6091,  6163,  6232,  6305,  6402,  6540,  6685,  6880,  7090,  7271,
213   7379,  7452,  7542,  7625,  7687,  7770,  7843,  7911,  7966,  8024,
214   8096,  8190,  8252,  8320,  8411,  8501,  8585,  8639,  8751,  8842,
215   8918,  8986,  9066,  9127,  9203,  9269,  9345,  9406,  9464,  9536,
216   9612,  9667,  9735,  9844,  9931,  10036,  10119,  10199,  10260,  10358,
217   10441,  10514,  10666,  10734,  10872,  10951,  11053,  11125,  11223,  11324,
218   11516,  11664,  11737,  11816,  11892,  12008,  12120,  12200,  12280,  12392,
219   12490,  12576,  12685,  12812,  12917,  13003,  13108,  13210,  13300,  13384,
220   13470,  13579,  13673,  13771,  13879,  13999,  14136,  14201,  14368,  14614,
221   14759,  14867,  14958,  15030,  15121,  15189,  15280,  15385,  15461,  15555,
222   15653,  15768,  15884,  15971,  16069,  16145,  16210,  16279,  16380,  16463,
223   16539,  16615,  16688,  16818,  16919,  17017,  18041,  18338,  18523,  18649,
224   18790,  18917,  19047,  19167,  19315,  19460,  19601,  19731,  19858,  20068,
225   20173,  20318,  20466,  20625,  20741,  20911,  21045,  21201,  21396,  21588,
226   21816,  22022,  22305,  22547,  22786,  23072,  23322,  23600,  23879,  24168,
227   24433,  24769,  25120,  25511,  25895,  26289,  26792,  27219,  27683,  28077,
228   28566,  29094,  29546,  29977,  30491,  30991,  31573,  32105,  32594,  33173,
229   33788,  34497,  35181,  35833,  36488,  37255,  37921,  38645,  39275,  39894,
230   40505,  41167,  41790,  42431,  43096,  43723,  44385,  45134,  45858,  46607,
231   47349,  48091,  48768,  49405,  49955,  50555,  51167,  51985,  52611,  53078,
232   53494,  53965,  54435,  54996,  55601,  56125,  56563,  56838,  57244,  57566,
233   57967,  58297,  58771,  59093,  59419,  59647,  59886,  60143,  60461,  60693,
234   60917,  61170,  61416,  61634,  61891,  62122,  62310,  62455,  62632,  62839,
235   63103,  63436,  63639,  63805,  63906,  64015,  64192,  64355,  64475,  64558,
236   64663,  64742,  64811,  64865,  64916,  64956,  64981,  65025,  65068,  65115,
237   65195,  65314,  65419,  65535,  65535,  65535,  65535,  65535,  65535,  65535,
238   65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,
239   65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,
240   65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,  65535,
241   65535
242 };
243 
244 const uint16_t WebRtcIsacfix_kPitchLagCdf2Hi[68] = {
245   0,  7,  11,  22,  37,  52,  56,  59,  81,  85,
246   89,  96,  115,  130,  137,  152,  170,  181,  193,  200,
247   207,  233,  237,  259,  289,  318,  363,  433,  592,  992,
248   1607,  3062,  6149,  12206,  25522,  48368,  58223,  61918,  63640,  64584,
249   64943,  65098,  65206,  65268,  65294,  65335,  65350,  65372,  65387,  65402,
250   65413,  65420,  65428,  65435,  65439,  65450,  65454,  65468,  65472,  65476,
251   65483,  65491,  65498,  65505,  65516,  65520,  65528,  65535
252 };
253 
254 const uint16_t WebRtcIsacfix_kPitchLagCdf3Hi[2] = {
255   0,  65535
256 };
257 
258 const uint16_t WebRtcIsacfix_kPitchLagCdf4Hi[35] = {
259   0,  7,  19,  30,  41,  48,  63,  74,  82,  96,
260   122,  152,  215,  330,  701,  2611,  10931,  48106,  61177,  64341,
261   65112,  65238,  65309,  65338,  65364,  65379,  65401,  65427,  65453,
262   65465,  65476,  65490,  65509,  65528,  65535
263 };
264 
265 const uint16_t *WebRtcIsacfix_kPitchLagPtrHi[4] = {
266   WebRtcIsacfix_kPitchLagCdf1Hi,
267   WebRtcIsacfix_kPitchLagCdf2Hi,
268   WebRtcIsacfix_kPitchLagCdf3Hi,
269   WebRtcIsacfix_kPitchLagCdf4Hi
270 };
271 
272 /* size of first cdf table */
273 const uint16_t WebRtcIsacfix_kPitchLagSizeHi[1] = {
274   512
275 };
276 
277 /* index limits and ranges */
278 const int16_t WebRtcIsacfix_kLowerLimitHi[4] = {
279   -552, -34,  0, -16
280 };
281 
282 const int16_t WebRtcIsacfix_kUpperLimitHi[4] = {
283   -80,  32,  0,  17
284 };
285 
286 /* initial index for arithmetic decoder */
287 const uint16_t WebRtcIsacfix_kInitIndHi[3] = {
288   34,  1,  18
289 };
290 
291 /* mean values of pitch filter lags */
292 
293 const int16_t WebRtcIsacfix_kMeanLag2Hi[67] = {
294   -17482, -16896, -16220, -15929, -15329, -14848, -14336, -13807, -13312, -12800, -12218, -11720,
295   -11307, -10649, -10396, -9742, -9148, -8668, -8297, -7718, -7155, -6656, -6231, -5600, -5129,
296   -4610, -4110, -3521, -3040, -2525, -2016, -1506, -995, -477, -5, 469, 991, 1510, 2025, 2526, 3079,
297   3555, 4124, 4601, 5131, 5613, 6194, 6671, 7140, 7645, 8207, 8601, 9132, 9728, 10359, 10752, 11302,
298   11776, 12288, 12687, 13204, 13759, 14295, 14810, 15360, 15764, 16350
299 };
300 
301 
302 const int16_t WebRtcIsacfix_kMeanLag4Hi[34] = {
303   -8175, -7659, -7205, -6684, -6215, -5651, -5180, -4566, -4087, -3536, -3096,
304   -2532, -1990, -1482, -959, -440, 11, 451, 954, 1492, 2020, 2562, 3059,
305   3577, 4113, 4618, 5134, 5724, 6060, 6758, 7015, 7716, 8066, 8741
306 };
307