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 "modules/audio_coding/codecs/ilbc/defines.h" 20 #include "modules/audio_coding/codecs/ilbc/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