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 #include "pitch_lag_tables.h" 12 #include "settings.h" 13 14 /* header file for coding tables for the pitch filter side-info in the entropy coder */ 15 /********************* Pitch Filter Gain Coefficient Tables ************************/ 16 17 /* tables for use with small pitch gain */ 18 19 /* cdf for quantized pitch filter lags */ 20 const uint16_t WebRtcIsac_kQPitchLagCdf1Lo[127] = { 21 0, 134, 336, 549, 778, 998, 1264, 1512, 1777, 2070, 22 2423, 2794, 3051, 3361, 3708, 3979, 4315, 4610, 4933, 5269, 23 5575, 5896, 6155, 6480, 6816, 7129, 7477, 7764, 8061, 8358, 24 8718, 9020, 9390, 9783, 10177, 10543, 10885, 11342, 11795, 12213, 25 12680, 13096, 13524, 13919, 14436, 14903, 15349, 15795, 16267, 16734, 26 17266, 17697, 18130, 18632, 19080, 19447, 19884, 20315, 20735, 21288, 27 21764, 22264, 22723, 23193, 23680, 24111, 24557, 25022, 25537, 26082, 28 26543, 27090, 27620, 28139, 28652, 29149, 29634, 30175, 30692, 31273, 29 31866, 32506, 33059, 33650, 34296, 34955, 35629, 36295, 36967, 37726, 30 38559, 39458, 40364, 41293, 42256, 43215, 44231, 45253, 46274, 47359, 31 48482, 49678, 50810, 51853, 53016, 54148, 55235, 56263, 57282, 58363, 32 59288, 60179, 61076, 61806, 62474, 63129, 63656, 64160, 64533, 64856, 33 65152, 65535, 65535, 65535, 65535, 65535, 65535}; 34 35 const uint16_t WebRtcIsac_kQPitchLagCdf2Lo[20] = { 36 0, 429, 3558, 5861, 8558, 11639, 15210, 19502, 24773, 31983, 37 42602, 48567, 52601, 55676, 58160, 60172, 61889, 63235, 65383, 65535}; 38 39 const uint16_t WebRtcIsac_kQPitchLagCdf3Lo[2] = { 40 0, 65535}; 41 42 const uint16_t WebRtcIsac_kQPitchLagCdf4Lo[10] = { 43 0, 2966, 6368, 11182, 19431, 37793, 48532, 55353, 60626, 65535}; 44 45 const uint16_t *WebRtcIsac_kQPitchLagCdfPtrLo[4] = {WebRtcIsac_kQPitchLagCdf1Lo, WebRtcIsac_kQPitchLagCdf2Lo, WebRtcIsac_kQPitchLagCdf3Lo, WebRtcIsac_kQPitchLagCdf4Lo}; 46 47 /* size of first cdf table */ 48 const uint16_t WebRtcIsac_kQPitchLagCdfSizeLo[1] = {128}; 49 50 /* index limits and ranges */ 51 const int16_t WebRtcIsac_kQIndexLowerLimitLagLo[4] = { 52 -140, -9, 0, -4}; 53 54 const int16_t WebRtcIsac_kQIndexUpperLimitLagLo[4] = { 55 -20, 9, 0, 4}; 56 57 /* initial index for arithmetic decoder */ 58 const uint16_t WebRtcIsac_kQInitIndexLagLo[3] = { 59 10, 1, 5}; 60 61 /* mean values of pitch filter lags */ 62 const double WebRtcIsac_kQMeanLag2Lo[19] = { 63 -17.21385070, -15.82678944, -14.07123081, -12.03003877, -10.01311864, -8.00794627, -5.91162987, -3.89231876, -1.90220980, -0.01879275, 64 1.89144232, 3.88123171, 5.92146992, 7.96435361, 9.98923648, 11.98266347, 13.96101002, 15.74855713, 17.10976611}; 65 66 const double WebRtcIsac_kQMeanLag3Lo[1] = { 67 0.00000000}; 68 69 const double WebRtcIsac_kQMeanLag4Lo[9] = { 70 -7.76246496, -5.92083980, -3.94095226, -1.89502305, 0.03724681, 1.93054221, 3.96443467, 5.91726366, 7.78434291}; 71 72 const double WebRtcIsac_kQPitchLagStepsizeLo = 2.000000; 73 74 75 /* tables for use with medium pitch gain */ 76 77 /* cdf for quantized pitch filter lags */ 78 const uint16_t WebRtcIsac_kQPitchLagCdf1Mid[255] = { 79 0, 28, 61, 88, 121, 149, 233, 331, 475, 559, 80 624, 661, 689, 712, 745, 791, 815, 843, 866, 922, 81 959, 1024, 1061, 1117, 1178, 1238, 1280, 1350, 1453, 1513, 82 1564, 1625, 1671, 1741, 1788, 1904, 2072, 2421, 2626, 2770, 83 2840, 2900, 2942, 3012, 3068, 3115, 3147, 3194, 3254, 3319, 84 3366, 3520, 3678, 3780, 3850, 3911, 3957, 4032, 4106, 4185, 85 4292, 4474, 4683, 4842, 5019, 5191, 5321, 5428, 5540, 5675, 86 5763, 5847, 5959, 6127, 6304, 6564, 6839, 7090, 7263, 7421, 87 7556, 7728, 7872, 7984, 8142, 8361, 8580, 8743, 8938, 9227, 88 9409, 9539, 9674, 9795, 9930, 10060, 10177, 10382, 10614, 10861, 89 11038, 11271, 11415, 11629, 11792, 12044, 12193, 12416, 12574, 12821, 90 13007, 13235, 13445, 13654, 13901, 14134, 14488, 15000, 15703, 16285, 91 16504, 16797, 17086, 17328, 17579, 17807, 17998, 18268, 18538, 18836, 92 19087, 19274, 19474, 19716, 19935, 20270, 20833, 21303, 21532, 21741, 93 21978, 22207, 22523, 22770, 23054, 23613, 23943, 24204, 24399, 24651, 94 24832, 25074, 25270, 25549, 25759, 26015, 26150, 26424, 26713, 27048, 95 27342, 27504, 27681, 27854, 28021, 28207, 28412, 28664, 28859, 29064, 96 29278, 29548, 29748, 30107, 30377, 30656, 30856, 31164, 31452, 31755, 97 32011, 32328, 32626, 32919, 33319, 33789, 34329, 34925, 35396, 35973, 98 36443, 36964, 37551, 38156, 38724, 39357, 40023, 40908, 41587, 42602, 99 43924, 45037, 45810, 46597, 47421, 48291, 49092, 50051, 51448, 52719, 100 53440, 54241, 54944, 55977, 56676, 57299, 57872, 58389, 59059, 59688, 101 60237, 60782, 61094, 61573, 61890, 62290, 62658, 63030, 63217, 63454, 102 63622, 63882, 64003, 64273, 64427, 64529, 64581, 64697, 64758, 64902, 103 65414, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 104 65535, 65535, 65535, 65535, 65535}; 105 106 const uint16_t WebRtcIsac_kQPitchLagCdf2Mid[36] = { 107 0, 71, 335, 581, 836, 1039, 1323, 1795, 2258, 2608, 108 3005, 3591, 4243, 5344, 7163, 10583, 16848, 28078, 49448, 57007, 109 60357, 61850, 62837, 63437, 63872, 64188, 64377, 64614, 64774, 64949, 110 65039, 65115, 65223, 65360, 65474, 65535}; 111 112 const uint16_t WebRtcIsac_kQPitchLagCdf3Mid[2] = { 113 0, 65535}; 114 115 const uint16_t WebRtcIsac_kQPitchLagCdf4Mid[20] = { 116 0, 28, 246, 459, 667, 1045, 1523, 2337, 4337, 11347, 117 44231, 56709, 60781, 62243, 63161, 63969, 64608, 65062, 65502, 65535}; 118 119 const uint16_t *WebRtcIsac_kQPitchLagCdfPtrMid[4] = {WebRtcIsac_kQPitchLagCdf1Mid, WebRtcIsac_kQPitchLagCdf2Mid, WebRtcIsac_kQPitchLagCdf3Mid, WebRtcIsac_kQPitchLagCdf4Mid}; 120 121 /* size of first cdf table */ 122 const uint16_t WebRtcIsac_kQPitchLagCdfSizeMid[1] = {256}; 123 124 /* index limits and ranges */ 125 const int16_t WebRtcIsac_kQIndexLowerLimitLagMid[4] = { 126 -280, -17, 0, -9}; 127 128 const int16_t WebRtcIsac_kQIndexUpperLimitLagMid[4] = { 129 -40, 17, 0, 9}; 130 131 /* initial index for arithmetic decoder */ 132 const uint16_t WebRtcIsac_kQInitIndexLagMid[3] = { 133 18, 1, 10}; 134 135 /* mean values of pitch filter lags */ 136 const double WebRtcIsac_kQMeanLag2Mid[35] = { 137 -16.89183900, -15.86949778, -15.05476653, -14.00664348, -13.02793036, -12.07324237, -11.00542532, -10.11250602, -8.90792971, -8.02474753, 138 -7.00426767, -5.94055287, -4.98251338, -3.91053158, -2.98820425, -1.93524245, -0.92978085, -0.01722509, 0.91317387, 1.92973955, 139 2.96908851, 3.93728974, 4.96308471, 5.92244151, 7.08673497, 8.00993708, 9.04656316, 9.98538742, 10.97851694, 11.94772884, 140 13.02426166, 14.00039951, 15.01347042, 15.80758023, 16.94086895}; 141 142 const double WebRtcIsac_kQMeanLag3Mid[1] = { 143 0.00000000}; 144 145 const double WebRtcIsac_kQMeanLag4Mid[19] = { 146 -8.60409403, -7.89198395, -7.03450280, -5.86260421, -4.93822322, -3.93078706, -2.91302322, -1.91824007, -0.87003282, 0.02822649, 147 0.89951758, 1.87495484, 2.91802604, 3.96874074, 5.06571703, 5.93618227, 7.00520185, 7.88497726, 8.64160364}; 148 149 const double WebRtcIsac_kQPitchLagStepsizeMid = 1.000000; 150 151 152 /* tables for use with large pitch gain */ 153 154 /* cdf for quantized pitch filter lags */ 155 const uint16_t WebRtcIsac_kQPitchLagCdf1Hi[511] = { 156 0, 7, 18, 33, 69, 105, 156, 228, 315, 612, 157 680, 691, 709, 724, 735, 738, 742, 746, 749, 753, 158 756, 760, 764, 774, 782, 785, 789, 796, 800, 803, 159 807, 814, 818, 822, 829, 832, 847, 854, 858, 869, 160 876, 883, 898, 908, 934, 977, 1010, 1050, 1060, 1064, 161 1075, 1078, 1086, 1089, 1093, 1104, 1111, 1122, 1133, 1136, 162 1151, 1162, 1183, 1209, 1252, 1281, 1339, 1364, 1386, 1401, 163 1411, 1415, 1426, 1430, 1433, 1440, 1448, 1455, 1462, 1477, 164 1487, 1495, 1502, 1506, 1509, 1516, 1524, 1531, 1535, 1542, 165 1553, 1556, 1578, 1589, 1611, 1625, 1639, 1643, 1654, 1665, 166 1672, 1687, 1694, 1705, 1708, 1719, 1730, 1744, 1752, 1759, 167 1791, 1795, 1820, 1867, 1886, 1915, 1936, 1943, 1965, 1987, 168 2041, 2099, 2161, 2175, 2200, 2211, 2226, 2233, 2244, 2251, 169 2266, 2280, 2287, 2298, 2309, 2316, 2331, 2342, 2356, 2378, 170 2403, 2418, 2447, 2497, 2544, 2602, 2863, 2895, 2903, 2935, 171 2950, 2971, 3004, 3011, 3018, 3029, 3040, 3062, 3087, 3127, 172 3152, 3170, 3199, 3243, 3293, 3322, 3340, 3377, 3402, 3427, 173 3474, 3518, 3543, 3579, 3601, 3637, 3659, 3706, 3731, 3760, 174 3818, 3847, 3869, 3901, 3920, 3952, 4068, 4169, 4220, 4271, 175 4524, 4571, 4604, 4632, 4672, 4730, 4777, 4806, 4857, 4904, 176 4951, 5002, 5031, 5060, 5107, 5150, 5212, 5266, 5331, 5382, 177 5432, 5490, 5544, 5610, 5700, 5762, 5812, 5874, 5972, 6022, 178 6091, 6163, 6232, 6305, 6402, 6540, 6685, 6880, 7090, 7271, 179 7379, 7452, 7542, 7625, 7687, 7770, 7843, 7911, 7966, 8024, 180 8096, 8190, 8252, 8320, 8411, 8501, 8585, 8639, 8751, 8842, 181 8918, 8986, 9066, 9127, 9203, 9269, 9345, 9406, 9464, 9536, 182 9612, 9667, 9735, 9844, 9931, 10036, 10119, 10199, 10260, 10358, 183 10441, 10514, 10666, 10734, 10872, 10951, 11053, 11125, 11223, 11324, 184 11516, 11664, 11737, 11816, 11892, 12008, 12120, 12200, 12280, 12392, 185 12490, 12576, 12685, 12812, 12917, 13003, 13108, 13210, 13300, 13384, 186 13470, 13579, 13673, 13771, 13879, 13999, 14136, 14201, 14368, 14614, 187 14759, 14867, 14958, 15030, 15121, 15189, 15280, 15385, 15461, 15555, 188 15653, 15768, 15884, 15971, 16069, 16145, 16210, 16279, 16380, 16463, 189 16539, 16615, 16688, 16818, 16919, 17017, 18041, 18338, 18523, 18649, 190 18790, 18917, 19047, 19167, 19315, 19460, 19601, 19731, 19858, 20068, 191 20173, 20318, 20466, 20625, 20741, 20911, 21045, 21201, 21396, 21588, 192 21816, 22022, 22305, 22547, 22786, 23072, 23322, 23600, 23879, 24168, 193 24433, 24769, 25120, 25511, 25895, 26289, 26792, 27219, 27683, 28077, 194 28566, 29094, 29546, 29977, 30491, 30991, 31573, 32105, 32594, 33173, 195 33788, 34497, 35181, 35833, 36488, 37255, 37921, 38645, 39275, 39894, 196 40505, 41167, 41790, 42431, 43096, 43723, 44385, 45134, 45858, 46607, 197 47349, 48091, 48768, 49405, 49955, 50555, 51167, 51985, 52611, 53078, 198 53494, 53965, 54435, 54996, 55601, 56125, 56563, 56838, 57244, 57566, 199 57967, 58297, 58771, 59093, 59419, 59647, 59886, 60143, 60461, 60693, 200 60917, 61170, 61416, 61634, 61891, 62122, 62310, 62455, 62632, 62839, 201 63103, 63436, 63639, 63805, 63906, 64015, 64192, 64355, 64475, 64558, 202 64663, 64742, 64811, 64865, 64916, 64956, 64981, 65025, 65068, 65115, 203 65195, 65314, 65419, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 204 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 205 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 206 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 207 65535}; 208 209 const uint16_t WebRtcIsac_kQPitchLagCdf2Hi[68] = { 210 0, 7, 11, 22, 37, 52, 56, 59, 81, 85, 211 89, 96, 115, 130, 137, 152, 170, 181, 193, 200, 212 207, 233, 237, 259, 289, 318, 363, 433, 592, 992, 213 1607, 3062, 6149, 12206, 25522, 48368, 58223, 61918, 63640, 64584, 214 64943, 65098, 65206, 65268, 65294, 65335, 65350, 65372, 65387, 65402, 215 65413, 65420, 65428, 65435, 65439, 65450, 65454, 65468, 65472, 65476, 216 65483, 65491, 65498, 65505, 65516, 65520, 65528, 65535}; 217 218 const uint16_t WebRtcIsac_kQPitchLagCdf3Hi[2] = { 219 0, 65535}; 220 221 const uint16_t WebRtcIsac_kQPitchLagCdf4Hi[35] = { 222 0, 7, 19, 30, 41, 48, 63, 74, 82, 96, 223 122, 152, 215, 330, 701, 2611, 10931, 48106, 61177, 64341, 224 65112, 65238, 65309, 65338, 65364, 65379, 65401, 65427, 65453, 65465, 225 65476, 65490, 65509, 65528, 65535}; 226 227 const uint16_t *WebRtcIsac_kQPitchLagCdfPtrHi[4] = {WebRtcIsac_kQPitchLagCdf1Hi, WebRtcIsac_kQPitchLagCdf2Hi, WebRtcIsac_kQPitchLagCdf3Hi, WebRtcIsac_kQPitchLagCdf4Hi}; 228 229 /* size of first cdf table */ 230 const uint16_t WebRtcIsac_kQPitchLagCdfSizeHi[1] = {512}; 231 232 /* index limits and ranges */ 233 const int16_t WebRtcIsac_kQindexLowerLimitLagHi[4] = { 234 -552, -34, 0, -16}; 235 236 const int16_t WebRtcIsac_kQindexUpperLimitLagHi[4] = { 237 -80, 32, 0, 17}; 238 239 /* initial index for arithmetic decoder */ 240 const uint16_t WebRtcIsac_kQInitIndexLagHi[3] = { 241 34, 1, 18}; 242 243 /* mean values of pitch filter lags */ 244 const double WebRtcIsac_kQMeanLag2Hi[67] = { 245 -17.07263295, -16.50000000, -15.83966081, -15.55613708, -14.96948007, -14.50000000, -14.00000000, -13.48377986, -13.00000000, -12.50000000, 246 -11.93199636, -11.44530414, -11.04197641, -10.39910301, -10.15202337, -9.51322461, -8.93357741, -8.46456632, -8.10270672, -7.53751847, 247 -6.98686404, -6.50000000, -6.08463150, -5.46872991, -5.00864717, -4.50163760, -4.01382410, -3.43856708, -2.96898001, -2.46554810, 248 -1.96861004, -1.47106701, -0.97197237, -0.46561654, -0.00531409, 0.45767857, 0.96777907, 1.47507903, 1.97740425, 2.46695420, 249 3.00695774, 3.47167185, 4.02712538, 4.49280007, 5.01087640, 5.48191963, 6.04916550, 6.51511058, 6.97297819, 7.46565499, 250 8.01489405, 8.39912001, 8.91819757, 9.50000000, 10.11654065, 10.50000000, 11.03712583, 11.50000000, 12.00000000, 12.38964346, 251 12.89466127, 13.43657881, 13.96013840, 14.46279912, 15.00000000, 15.39412269, 15.96662441}; 252 253 const double WebRtcIsac_kQMeanLag3Hi[1] = { 254 0.00000000}; 255 256 const double WebRtcIsac_kQMeanLag4Hi[34] = { 257 -7.98331221, -7.47988769, -7.03626557, -6.52708003, -6.06982173, -5.51856292, -5.05827033, -4.45909878, -3.99125864, -3.45308135, 258 -3.02328139, -2.47297273, -1.94341995, -1.44699056, -0.93612243, -0.43012406, 0.01120357, 0.44054812, 0.93199883, 1.45669587, 259 1.97218322, 2.50187419, 2.98748690, 3.49343202, 4.01660147, 4.50984306, 5.01402683, 5.58936797, 5.91787793, 6.59998900, 260 6.85034315, 7.53503316, 7.87711194, 8.53631648}; 261 262 const double WebRtcIsac_kQPitchLagStepsizeHi = 0.500000; 263 264 /* transform matrix */ 265 const double WebRtcIsac_kTransform[4][4] = { 266 {-0.50000000, -0.50000000, -0.50000000, -0.50000000}, 267 { 0.67082039, 0.22360680, -0.22360680, -0.67082039}, 268 { 0.50000000, -0.50000000, -0.50000000, 0.50000000}, 269 { 0.22360680, -0.67082039, 0.67082039, -0.22360680}}; 270 271 /* transpose transform matrix */ 272 const double WebRtcIsac_kTransformTranspose[4][4] = { 273 {-0.50000000, 0.67082039, 0.50000000, 0.22360680}, 274 {-0.50000000, 0.22360680, -0.50000000, -0.67082039}, 275 {-0.50000000, -0.22360680, -0.50000000, 0.67082039}, 276 {-0.50000000, -0.67082039, 0.50000000, -0.22360680}}; 277 278