niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 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 | |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 24 | const int16_t WebRtcIlbcfix_kHpInCoefs[5] = {3798, -7596, 3798, 7807, -3733}; |
| 25 | const int16_t WebRtcIlbcfix_kHpOutCoefs[5] = {3849, -7699, 3849, 7918, -3833}; |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 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 | */ |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 30 | const int16_t WebRtcIlbcfix_kStartSequenceEnrgWin[NSUB_MAX-1]= { |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 31 | 1638, 1843, 2048, 1843, 1638 |
| 32 | }; |
| 33 | |
| 34 | /* LP Filter coeffs used for downsampling */ |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 35 | const int16_t WebRtcIlbcfix_kLpFiltCoefs[FILTERORDER_DS_PLUS1]= { |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 36 | -273, 512, 1297, 1696, 1297, 512, -273 |
| 37 | }; |
| 38 | |
| 39 | /* Constants used in the LPC calculations */ |
| 40 | |
| 41 | /* Hanning LPC window (in Q15) */ |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 42 | const int16_t WebRtcIlbcfix_kLpcWin[BLOCKL_MAX] = { |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 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)*/ |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 66 | const int16_t WebRtcIlbcfix_kLpcAsymWin[BLOCKL_MAX] = { |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 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) */ |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 90 | const int32_t WebRtcIlbcfix_kLpcLagWin[LPC_FILTERORDER + 1]={ |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 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 | */ |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 98 | const int16_t WebRtcIlbcfix_kLpcChirpSyntDenum[LPC_FILTERORDER + 1] = { |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 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 | */ |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 106 | const int16_t WebRtcIlbcfix_kLpcChirpWeightDenum[LPC_FILTERORDER + 1] = { |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 107 | 32767, 13835, 5841, 2466, 1041, 440, |
| 108 | 186, 78, 33, 14, 6}; |
| 109 | |
| 110 | /* LSF quantization Q13 domain */ |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 111 | const int16_t WebRtcIlbcfix_kLsfCb[64 * 3 + 128 * 3 + 128 * 4] = { |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 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 | |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 434 | const int16_t WebRtcIlbcfix_kLsfDimCb[LSF_NSPLIT] = {3, 3, 4}; |
| 435 | const int16_t WebRtcIlbcfix_kLsfSizeCb[LSF_NSPLIT] = {64,128,128}; |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 436 | |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 437 | const int16_t WebRtcIlbcfix_kLsfMean[LPC_FILTERORDER] = { |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 438 | 2308, 3652, 5434, 7885, |
| 439 | 10255, 12559, 15160, 17513, |
| 440 | 20328, 22752}; |
| 441 | |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 442 | const int16_t WebRtcIlbcfix_kLspMean[LPC_FILTERORDER] = { |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 443 | 31476, 29565, 25819, 18725, 10276, |
| 444 | 1236, -9049, -17600, -25884, -30618 |
| 445 | }; |
| 446 | |
| 447 | /* Q14 */ |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 448 | const int16_t WebRtcIlbcfix_kLsfWeight20ms[4] = {12288, 8192, 4096, 0}; |
| 449 | const int16_t WebRtcIlbcfix_kLsfWeight30ms[6] = {8192, 16384, 10923, 5461, 0, 0}; |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 450 | |
| 451 | /* |
| 452 | cos(x) in Q15 |
| 453 | WebRtcIlbcfix_kCos[i] = cos(pi*i/64.0) |
| 454 | used in WebRtcIlbcfix_Lsp2Lsf() |
| 455 | */ |
| 456 | |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 457 | const int16_t WebRtcIlbcfix_kCos[64] = { |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 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 | */ |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 472 | const int16_t WebRtcIlbcfix_kCosDerivative[64] = { |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 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 | |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 487 | const int16_t WebRtcIlbcfix_kCosGrid[COS_GRID_POINTS + 1] = { |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 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 | |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 503 | const int16_t WebRtcIlbcfix_kAcosDerivative[64] = { |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 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 */ |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 518 | const int16_t WebRtcIlbcfix_kStateSq3[8] = { /* Values in Q13 */ |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 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 | */ |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 527 | const int32_t WebRtcIlbcfix_kChooseFrgQuant[64] = { |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 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 | |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 541 | const int16_t WebRtcIlbcfix_kScale[64] = { |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 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 | */ |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 563 | const int16_t WebRtcIlbcfix_kFrgQuantMod[64] = { |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 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 | */ |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 586 | const int16_t WebRtcIlbcfix_kCbFiltersRev[CB_FILTERLEN]={ |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 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 */ |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 591 | const int16_t WebRtcIlbcfix_kAlpha[4]={ |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 592 | 6554, 13107, 19661, 26214}; |
| 593 | |
| 594 | /* Ranges for search and filters at different subframes */ |
| 595 | |
Peter Kasting | dce40cf | 2015-08-24 14:52:23 -0700 | [diff] [blame] | 596 | const size_t WebRtcIlbcfix_kSearchRange[5][CB_NSTAGES]={ |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 597 | {58,58,58}, {108,44,44}, {108,108,108}, {108,108,108}, {108,108,108}}; |
| 598 | |
Peter Kasting | dce40cf | 2015-08-24 14:52:23 -0700 | [diff] [blame] | 599 | const size_t WebRtcIlbcfix_kFilterRange[5]={63, 85, 125, 147, 147}; |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 600 | |
| 601 | /* Gain Quantization for the codebook gains of the 3 stages */ |
| 602 | |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 603 | /* Q14 (one extra value (max int16_t) to simplify for the search) */ |
| 604 | const int16_t WebRtcIlbcfix_kGainSq3[9]={ |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 605 | -16384, -10813, -5407, 0, 4096, 8192, |
| 606 | 12288, 16384, 32767}; |
| 607 | |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 608 | /* Q14 (one extra value (max int16_t) to simplify for the search) */ |
| 609 | const int16_t WebRtcIlbcfix_kGainSq4[17]={ |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 610 | -17203, -14746, -12288, -9830, -7373, -4915, |
| 611 | -2458, 0, 2458, 4915, 7373, 9830, |
| 612 | 12288, 14746, 17203, 19661, 32767}; |
| 613 | |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 614 | /* Q14 (one extra value (max int16_t) to simplify for the search) */ |
| 615 | const int16_t WebRtcIlbcfix_kGainSq5[33]={ |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 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 */ |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 624 | const int16_t WebRtcIlbcfix_kGainSq5Sq[32] = { |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 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 | |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 633 | const int16_t* const WebRtcIlbcfix_kGain[3] = |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 634 | {WebRtcIlbcfix_kGainSq5, WebRtcIlbcfix_kGainSq4, WebRtcIlbcfix_kGainSq3}; |
| 635 | |
| 636 | |
| 637 | /* Tables for the Enhancer, using upsamling factor 4 (ENH_UPS0 = 4) */ |
| 638 | |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 639 | const int16_t WebRtcIlbcfix_kEnhPolyPhaser[ENH_UPS0][ENH_FLO_MULT2_PLUS1]={ |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 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 | |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 646 | const int16_t WebRtcIlbcfix_kEnhWt[3] = { |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 647 | 4800, 16384, 27968 /* Q16 */ |
| 648 | }; |
| 649 | |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 650 | const int16_t WebRtcIlbcfix_kEnhPlocs[ENH_NBLOCKS_TOT] = { |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 651 | 160, 480, 800, 1120, 1440, 1760, 2080, 2400 /* Q(-2) */ |
| 652 | }; |
| 653 | |
| 654 | /* PLC table */ |
| 655 | |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 656 | const int16_t WebRtcIlbcfix_kPlcPerSqr[6] = { /* Grid points for square of periodiciy in Q15 */ |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 657 | 839, 1343, 2048, 2998, 4247, 5849 |
| 658 | }; |
| 659 | |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 660 | const int16_t WebRtcIlbcfix_kPlcPitchFact[6] = { /* Value of y=(x^4-0.4)/(0.7-0.4) in grid points in Q15 */ |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 661 | 0, 5462, 10922, 16384, 21846, 27306 |
| 662 | }; |
| 663 | |
pbos@webrtc.org | 0946a56 | 2013-04-09 00:28:06 +0000 | [diff] [blame] | 664 | const int16_t WebRtcIlbcfix_kPlcPfSlope[6] = { /* Slope of y=(x^4-0.4)/(0.7-0.4) in Q11 */ |
niklase@google.com | 470e71d | 2011-07-07 08:21:25 +0000 | [diff] [blame] | 665 | 26667, 18729, 13653, 10258, 7901, 6214 |
| 666 | }; |