mcelp 1.0.1

Mitsubishi CELP speech codec: a 3.6 kbit/s speech encoder and decoder
Documentation
//! Line spectrum quantiser tables and the trigonometric conversions.

/// The LSP vector corresponding to [`LSF_MEAN`].
pub static LSP_MEAN: [i16; 10] = [
    31441, 27568, 21460, 13612, 4663, -4663, -13612, -21460, -27568, -31441,
];

/// Flat mean LSF vector used to seed the predictor memory after a reset.
pub static LSF_MEAN: [i16; 10] = [
    2340, 4679, 7019, 9359, 11698, 14038, 16377, 18717, 21057, 23396,
];

/// Bias vector the LSFs are pulled towards when deriving the postfilter's
/// weighted LPC sets.
pub static PF_LSF_BIAS: [i16; 10] = [
    2340, 4679, 7019, 9359, 11698, 14038, 16377, 18717, 21057, 23396,
];

/// Weight for the first (numerator) postfilter LSF set.
pub static PF_LSF_WEIGHT1: [i16; 10] = [
    12780, 12780, 12780, 12780, 12780, 12780, 12780, 12780, 12780, 12780,
];

/// Weight for the second (denominator) postfilter LSF set.
pub static PF_LSF_WEIGHT2: [i16; 10] = [
    19988, 19988, 19988, 19988, 19988, 19988, 19988, 19988, 19988, 19988,
];

/// cos() table for LSF -> LSP, 64 values.
pub static COS: [i16; 64] = [
    32767, 32729, 32610, 32413, 32138, 31786, 31357, 30853, 30274, 29622, 28899, 28106, 27246,
    26320, 25330, 24279, 23170, 22006, 20788, 19520, 18205, 16846, 15447, 14010, 12540, 11039,
    9512, 7962, 6393, 4808, 3212, 1608, 0, -1608, -3212, -4808, -6393, -7962, -9512, -11039,
    -12540, -14010, -15447, -16846, -18205, -19520, -20788, -22006, -23170, -24279, -25330, -26320,
    -27246, -28106, -28899, -29622, -30274, -30853, -31357, -31786, -32138, -32413, -32610, -32729,
];

/// Slope of [`COS`], for linear interpolation between entries.
pub static COS_SLOPE: [i16; 64] = [
    -632, -1893, -3150, -4399, -5638, -6863, -8072, -9261, -10428, -11570, -12684, -13767, -14817,
    -15832, -16808, -17744, -18637, -19486, -20287, -21039, -21741, -22390, -22986, -23526, -24009,
    -24435, -24801, -25108, -25354, -25540, -25664, -25726, -25726, -25664, -25540, -25354, -25108,
    -24801, -24435, -24009, -23526, -22986, -22390, -21741, -21039, -20287, -19486, -18637, -17744,
    -16808, -15832, -14817, -13767, -12684, -11570, -10428, -9261, -8072, -6863, -5638, -4399,
    -3150, -1893, -632,
];

/// acos() table for LSP -> LSF: descending cosine values.
pub static ACOS: [i16; 64] = [
    -26887, -8812, -5323, -3813, -2979, -2444, -2081, -1811, -1608, -1450, -1322, -1219, -1132,
    -1059, -998, -946, -901, -861, -827, -797, -772, -750, -730, -713, -699, -687, -677, -668,
    -662, -657, -654, -652, -652, -654, -657, -662, -668, -677, -687, -699, -713, -730, -750, -772,
    -797, -827, -861, -901, -946, -998, -1059, -1132, -1219, -1322, -1450, -1608, -1811, -2081,
    -2444, -2979, -3813, -5323, -8812, -26887,
];

/// First-stage LSF codebook, 128 entries x 10 coefficients (Q13).
pub static LSF_CB1: [i16; 1280] = [
    1409, 2036, 3244, 5538, 8946, 11656, 14577, 16708, 19393, 22340, 1597, 2259, 3992, 6581, 9632,
    12395, 14010, 15330, 18068, 21430, 2206, 3159, 4961, 6399, 7817, 9545, 12742, 15868, 20012,
    21563, 1759, 2507, 4603, 8247, 10702, 12312, 13968, 15688, 19592, 20819, 1878, 2608, 3829,
    5338, 6678, 10063, 14986, 17370, 19727, 21910, 1713, 2441, 3774, 6407, 9352, 12794, 15881,
    17310, 18861, 20169, 1806, 2672, 4495, 6929, 9183, 11075, 13082, 15141, 19514, 21336, 1711,
    2588, 6234, 8959, 11289, 13497, 15792, 17504, 19864, 21087, 1942, 2792, 4559, 6397, 8097,
    11849, 14787, 16458, 18051, 20274, 1716, 2491, 3769, 6991, 10963, 12263, 14633, 16999, 18819,
    20162, 2260, 3115, 5315, 7473, 9152, 10849, 13016, 15448, 17725, 20175, 2573, 3428, 7019, 9504,
    10961, 12911, 14927, 16397, 18740, 20076, 1852, 2604, 4207, 5917, 7810, 11812, 14150, 16016,
    19889, 21492, 1804, 2620, 3678, 6548, 12497, 14203, 15703, 17333, 19103, 20230, 2506, 3327,
    5771, 8350, 9622, 11449, 14434, 15813, 18873, 20521, 2497, 3398, 7517, 10748, 12588, 14010,
    15736, 17287, 19392, 20594, 1610, 2363, 3748, 7104, 9750, 11188, 14751, 16775, 18438, 20791,
    2477, 3204, 5099, 8445, 10783, 11867, 13811, 15162, 17666, 20469, 2428, 3434, 5035, 6718, 8257,
    9747, 14200, 16365, 18132, 20717, 1753, 2404, 4218, 8975, 12009, 13226, 15341, 16861, 19319,
    20861, 2358, 2999, 4683, 5910, 7907, 13394, 15849, 17364, 19708, 20749, 1711, 2454, 3535, 5594,
    10775, 14517, 16413, 17724, 19978, 20999, 1662, 2500, 5875, 8189, 10233, 12581, 14948, 16970,
    19541, 20780, 3807, 5388, 7886, 9740, 12036, 14236, 17101, 18701, 20941, 21875, 2204, 3094,
    4736, 7753, 10234, 11191, 14418, 16913, 18442, 19723, 2138, 2879, 4189, 7939, 12151, 13281,
    14987, 16700, 18309, 19723, 2823, 4082, 5984, 7506, 9220, 10316, 13032, 16799, 18776, 19960,
    3588, 4813, 7252, 9674, 12024, 13315, 15497, 17246, 19524, 20770, 3168, 4006, 5609, 7404, 8719,
    10920, 14035, 15326, 19462, 21148, 1684, 2301, 3988, 9023, 12468, 13885, 17341, 18777, 20659,
    21629, 3617, 4461, 6691, 8869, 10342, 12276, 15065, 16463, 19542, 20850, 3364, 4882, 7998,
    10474, 13534, 15294, 17589, 18968, 20498, 21389, 1796, 2613, 3825, 6442, 8370, 10165, 15241,
    17786, 19762, 20961, 1870, 2669, 5146, 7541, 10014, 12899, 14596, 15949, 17399, 19803, 2847,
    3565, 5557, 7543, 8918, 10270, 11683, 14053, 19388, 21287, 2142, 2726, 4986, 10025, 11549,
    13110, 14940, 16431, 20762, 21744, 2277, 3121, 4687, 6415, 7529, 9373, 15162, 17606, 19189,
    20763, 1684, 2409, 3793, 7056, 12071, 13850, 15594, 17281, 20501, 21555, 2349, 3042, 5352,
    7830, 9140, 12374, 14673, 15963, 20684, 21707, 3200, 4369, 6762, 8947, 11680, 13686, 16536,
    18240, 20639, 21639, 2175, 3111, 4794, 6962, 8985, 10171, 13550, 17391, 19502, 20577, 2153,
    3070, 4314, 6372, 11205, 13145, 14733, 17088, 19355, 20375, 3330, 4320, 6071, 8184, 9819,
    11075, 13258, 15054, 17243, 19983, 2570, 4180, 6885, 8819, 11124, 12947, 15822, 17561, 19764,
    20973, 2192, 2984, 5286, 6891, 8568, 12438, 14569, 16183, 19371, 20525, 1801, 2600, 3689, 6907,
    13292, 15289, 16722, 17943, 19690, 20640, 3058, 3841, 5711, 8545, 9966, 11406, 15516, 16810,
    19444, 21140, 3178, 4947, 9169, 11191, 13415, 14762, 16382, 17838, 20244, 21378, 1620, 2328,
    3910, 6684, 10362, 12816, 14769, 16619, 20337, 21506, 2615, 3771, 5249, 7184, 11316, 12681,
    14521, 16622, 18783, 19928, 3053, 4039, 5607, 6848, 8111, 9490, 14496, 17729, 19792, 20945,
    1894, 2481, 4831, 10469, 12928, 14026, 15502, 16954, 20417, 21500, 2189, 2891, 5280, 7139,
    9022, 13822, 16239, 17762, 20722, 21620, 1634, 2394, 3414, 5760, 12282, 15215, 16996, 18339,
    20683, 21583, 2401, 3068, 5972, 8957, 10136, 13590, 16139, 17535, 20900, 21795, 3440, 5069,
    8080, 10051, 12770, 15226, 17787, 19414, 21335, 22137, 2372, 3100, 5194, 8857, 10414, 11814,
    15752, 17139, 18958, 20615, 2434, 3325, 4766, 6933, 11957, 14243, 15806, 17444, 19739, 20651,
    2800, 4452, 6149, 7895, 10418, 11426, 13824, 16958, 19424, 20395, 3752, 5257, 7694, 9653,
    12124, 13693, 16365, 18146, 20230, 21334, 3084, 3854, 6113, 7454, 9157, 13322, 15654, 16962,
    19251, 20394, 2218, 3247, 7669, 11310, 13726, 15222, 17087, 18382, 20048, 21067, 3961, 5386,
    7301, 8904, 10513, 12529, 15823, 17794, 20314, 21443, 3921, 6298, 10105, 12216, 14728, 16179,
    17811, 18990, 20717, 21624, 1427, 2080, 3153, 5175, 9727, 12721, 15725, 17630, 19539, 21340,
    1625, 2284, 3815, 6171, 10072, 13406, 14979, 16352, 18243, 21066, 2708, 3662, 5637, 7308, 8899,
    10593, 12973, 16253, 20789, 21687, 2253, 2906, 4410, 8874, 11255, 12356, 14900, 16129, 19839,
    21376, 2364, 3137, 4459, 5828, 6946, 9018, 15332, 18261, 20313, 21492, 1847, 2626, 3829, 7094,
    11823, 13113, 16337, 18017, 19696, 20713, 2222, 3015, 4576, 7733, 9992, 11212, 14251, 15896,
    20179, 21464, 1985, 3362, 7269, 9658, 12036, 13858, 16356, 17994, 20068, 21235, 2359, 3167,
    5102, 7618, 9006, 10601, 15466, 17073, 18677, 20395, 2379, 3145, 4806, 8413, 11574, 12564,
    15675, 17568, 19224, 20363, 2534, 3833, 5461, 7161, 9610, 11013, 14096, 16223, 17827, 19777,
    2594, 3228, 5882, 10208, 11857, 13079, 15488, 16857, 19258, 20836, 2557, 3293, 4939, 6193,
    7433, 11415, 14710, 16070, 20320, 21520, 2112, 2775, 4653, 9024, 13383, 14602, 16123, 17634,
    19407, 20597, 2730, 3534, 6385, 9210, 10626, 12173, 14053, 15984, 20282, 21387, 3253, 4570,
    7291, 9685, 13183, 14611, 16446, 18007, 20133, 21158, 1943, 2815, 4209, 7091, 10265, 11409,
    15004, 17659, 19608, 20616, 2487, 3138, 4874, 9012, 11288, 12244, 14913, 16524, 18203, 20075,
    3046, 3907, 5543, 6867, 8001, 10729, 15230, 16776, 18850, 20499, 1954, 2557, 4552, 10024,
    12304, 13441, 16410, 17719, 20104, 21331, 2348, 2980, 4567, 5783, 7471, 13191, 16601, 17989,
    20883, 21728, 1730, 2466, 3832, 5700, 9583, 14546, 17648, 18659, 20358, 21354, 2566, 3355,
    6510, 8222, 9753, 13425, 15455, 17010, 20385, 21413, 3830, 5684, 9116, 10797, 12423, 14581,
    17147, 18757, 21063, 21938, 2290, 3516, 5186, 6880, 10484, 11676, 13705, 16798, 19423, 20361,
    2539, 3274, 4792, 8437, 12746, 13832, 15386, 17107, 18959, 20065, 3463, 4459, 6085, 7851, 9206,
    10929, 14926, 16291, 18227, 20204, 3331, 4944, 8597, 10704, 12335, 13772, 15923, 17543, 20199,
    21340, 3394, 4238, 6214, 8042, 9464, 12196, 14502, 15953, 20452, 21568, 1895, 2528, 4771,
    10679, 13783, 14918, 17019, 18403, 20619, 21615, 3857, 5556, 7806, 9496, 10930, 12095, 14708,
    16842, 19211, 20591, 2526, 4220, 8890, 11576, 14039, 16016, 17646, 19012, 21073, 21888, 1868,
    2639, 4534, 7468, 8982, 11527, 15765, 17309, 20309, 21533, 1981, 2818, 5692, 7738, 10390,
    13939, 15489, 16684, 18283, 20106, 2676, 3465, 6205, 8544, 9913, 11134, 12721, 15481, 19749,
    20925, 2590, 3254, 6414, 10523, 11898, 13610, 15766, 17120, 20751, 21759, 2712, 3506, 5277,
    6771, 8021, 10379, 16637, 18450, 20383, 21451, 2076, 2885, 4440, 7303, 12019, 14864, 16453,
    17762, 20376, 21284, 2401, 3094, 5201, 8854, 10229, 11964, 15334, 16738, 20757, 21774, 2631,
    4104, 7734, 10147, 12165, 14452, 17125, 18632, 20941, 21840, 2602, 3639, 5757, 7766, 9341,
    10900, 15683, 17800, 19781, 20953, 2241, 3282, 5323, 7276, 11474, 13180, 15024, 16723, 20167,
    21241, 3126, 4371, 6188, 8287, 10542, 11639, 14272, 16350, 18077, 19564, 2960, 4160, 8032,
    9986, 11301, 13160, 15826, 17587, 20375, 21443, 2898, 3625, 5516, 6873, 8230, 12574, 15340,
    16715, 20693, 21637, 2605, 3358, 5227, 8061, 13868, 15494, 16986, 18386, 20271, 21202, 2996,
    3702, 6361, 9694, 10944, 12706, 15353, 16718, 20414, 21530, 4131, 6783, 9920, 11887, 13819,
    15033, 16865, 18299, 20366, 21428, 1731, 2432, 4143, 8357, 10729, 12663, 15959, 17589, 20407,
    21556, 3331, 4406, 5935, 8312, 11492, 12477, 14957, 17158, 19197, 20337, 3619, 4640, 6244,
    7476, 8758, 10668, 15572, 17355, 19843, 21150, 2159, 2836, 6816, 11329, 12765, 14365, 16286,
    17765, 20657, 21664, 3127, 3950, 5856, 7145, 9161, 13778, 16665, 18167, 20608, 21467, 1826,
    2543, 3956, 7263, 13116, 15998, 17606, 18750, 20608, 21517, 2046, 2881, 6177, 9085, 11310,
    14254, 16957, 18788, 21054, 21904, 4065, 6024, 9162, 11168, 13573, 15788, 18206, 19512, 21237,
    22072, 2553, 3429, 5465, 8464, 10830, 12010, 16289, 18118, 19966, 21041, 3008, 3950, 5678,
    8190, 12613, 13864, 15954, 17620, 19729, 20801, 3806, 5051, 6783, 8428, 9844, 11149, 14948,
    17239, 19366, 20664, 4265, 6089, 8510, 10359, 12544, 14194, 16680, 18223, 20250, 21360, 3564,
    4552, 6651, 8186, 9477, 12345, 16015, 17421, 20538, 21565, 1988, 3050, 7276, 10411, 13048,
    15455, 17925, 19421, 21133, 21932, 4258, 6167, 8378, 9848, 11508, 13210, 15913, 17733, 20189,
    21352, 3749, 6051, 9898, 11932, 14895, 16660, 18712, 19970, 21308, 22040,
];

/// Second-stage LSF codebook, 64 entries x 10; the low and high halves of
/// an LSF vector are quantised independently against the same table.
pub static LSF_CB2: [i16; 640] = [
    -413, -545, -88, -320, -722, -644, -1198, -131, -498, 481, -509, -748, -658, 377, -181, -439,
    118, -354, -889, -402, -363, -420, -568, -846, 29, 98, -565, -708, -962, -521, -102, -233,
    -299, -853, -1153, -202, -918, -1345, 0, 86, -661, -588, 761, -152, -369, -326, -846, 73, -486,
    -697, -286, -590, 268, 331, -297, -1048, -122, 230, -492, -254, -682, -498, 17, -246, 424, 414,
    219, -227, -793, -943, -1, 307, -158, -338, -333, 168, -1163, -250, 28, -349, -174, -443, -672,
    80, -684, -425, -181, -917, -667, 386, -304, -465, -830, 195, 547, -405, 614, 372, -656, -770,
    -66, -150, -829, -434, -327, 577, -270, -1086, -437, 238, -775, 338, 134, -497, -164, -708,
    -300, -574, 349, 270, -125, -205, 770, -353, -822, -655, -1162, 499, 171, -236, -476, 6, 120,
    319, 65, -127, 229, 597, -47, -50, 37, 118, -448, -1464, -152, -43, 558, -130, -200, -493,
    -291, 773, 400, 91, -273, 174, -482, -204, 580, 20, -180, -378, 222, -479, -80, -511, -496,
    -494, -108, -272, -82, -380, -1173, 507, 1, -764, 452, -225, -626, 304, -127, -178, -754,
    -1224, 708, 113, -255, -568, -274, -608, 234, 26, -264, -398, -940, -151, -784, -723, 818, 521,
    -711, -611, 995, 542, 107, -486, -273, 826, -169, -626, -301, -562, -216, 949, 271, -1361, 154,
    38, 268, 281, -197, -262, -200, -273, 1095, 806, -147, 9, -372, -587, 323, 78, -31, 1082, -214,
    351, 37, 293, 142, -486, 22, -160, 105, 353, -1183, -113, 106, -644, 74, -29, 94, -67, -960,
    -175, 614, -925, 849, 669, -155, -317, 412, 214, -845, -644, -46, 667, 318, -520, -449, -107,
    331, 171, 366, -231, -707, -370, 546, -158, 274, 161, -189, -299, 935, 897, -443, -380, -315,
    289, 541, 207, 71, 165, 105, 767, 365, -760, -62, 1124, 339, 32, 287, 180, 258, -472, 364, 548,
    571, -65, 241, -123, 465, 380, 651, 62, -44, 225, 201, -196, 794, 326, -80, -151, -4, -35,
    -546, -84, -263, 294, -209, 938, -141, -312, -408, 63, 50, -228, -29, 63, -451, -258, -230,
    -68, 69, -1162, 385, 337, 73, -567, -1226, 230, 52, 3, 159, -931, -545, 167, -542, -782, 149,
    54, -440, -152, 901, -390, 481, 232, -430, 560, -411, -663, -46, -268, -262, 808, -361, -635,
    140, 142, 81, -195, -226, 300, -185, -123, 508, 202, 758, 25, -892, -192, 331, 209, -68, 185,
    -123, 580, -908, 444, 287, -63, 299, -2, -550, 182, -453, -39, 368, -467, -241, 747, -34, -232,
    -456, 1030, 805, 284, 881, 593, -274, -548, 132, -38, -336, -508, 160, 1048, -206, -530, 147,
    -219, 38, 538, 691, -639, -84, -445, 151, -321, 850, 765, -146, -20, 1426, 131, -295, -302,
    -1388, 509, 730, 258, -48, -273, 301, 361, 368, 154, 340, 545, 431, 116, 346, 625, -100, -1061,
    45, 480, 464, 180, -299, 133, -351, 811, 825, 174, 364, 766, -582, -420, 704, 372, 88, -55,
    445, 139, -158, -162, -524, 68, 97, -146, 216, -58, -524, 597, 221, -370, 1013, 268, -345, 238,
    186, 279, -285, -863, 1058, 307, -213, -147, -193, -144, 506, 471, 76, -766, -959, 266, -87,
    -938, 550, 619, -250, -234, 1234, 810, 461, 57, -455, 1130, 327, -236, 6, -215, 213, 1589, 225,
    -728, 636, 512, 617, 471, 27, 90, 516, 7, 999, 1202, 669, 67, -448, -594, 624, 426, 71, 594,
    139, 951, 17, 526, 258, -54, 362, 197, 503, 451, -591, 269, 1, -44, 253, 193, 346, 171, -295,
    402, 768, -211, 1209, 781, 158, -48, 574, 417, -434, -191, 339, 944, 333, -492, 276, 339, 685,
    525, 74, -178, -395, 84, 851, 89, 368, 553, 210, 116, 1058, 636, 39, 140, -435, 665, 937, 529,
    395, 338, 631, 764, 593, -5, 690, 1258, 681, 347, 493, 776, 185, -231, 560, 895, 955, 442, 181,
    22, 864, 949, 567, 61, -157, 922, 214, 227, 850, 505,
];

/// MA predictor coefficients, 2 modes x 3 past frames x 10 (Q15).
pub static LSF_MA_PRED: [i16; 60] = [
    3990, 2294, 1702, 3436, 3945, 3804, 3904, 3381, 2782, 2531, -154, -467, 89, -100, -110, -117,
    -132, -220, -401, -299, -925, -1262, -842, -1478, -1569, -1727, -1590, -778, -632, -276, 9139,
    9199, 9828, 10769, 10925, 11205, 11459, 11587, 11703, 11630, 307, -2, -133, 502, 513, 754,
    1101, 673, 609, 939, 424, -238, -69, -484, -645, -731, -922, -1555, -1639, -1428,
];

/// MA predictor residual gain, 2 modes x 10 (Q15).
pub static LSF_MA_GAIN: [i16; 20] = [
    29857, 32203, 31819, 30911, 30502, 30808, 30585, 30385, 31019, 30812, 22898, 23809, 23143,
    21982, 21976, 21540, 21129, 22063, 22095, 21627,
];

/// Reciprocal of [`LSF_MA_GAIN`], used to rebuild the predictor memory when
/// a frame is lost.
pub static LSF_MA_GAIN_INV: [i16; 20] = [
    4495, 4168, 4218, 4342, 4400, 4357, 4388, 4417, 4327, 4356, 5862, 5637, 5800, 6106, 6108, 6231,
    6352, 6083, 6075, 6206,
];