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