// 由 tools/gen_celt_tables.py 生成,请勿手改。
//
// 以下表数据提取自 xiph/opus 参考实现:RFC 6716 §4.3.3 要求比特
// 分配 bit-exact,并明文要求实现者「直接使用同一表数据」,但未在
// 正文中列出这些数值。提取由脚本机械完成并附结构断言。
//
// 版权归属(BSD-3-Clause,见仓库 LICENSE-LIBOPUS):
// Copyright 2001-2023 Xiph.Org, Skype Limited, Octasic,
// Jean-Marc Valin, Timothy B. Terriberry, CSIRO, Gregory Maxwell,
// Mark Borgerding, Erik de Castro Lopo, Mozilla, Amazon
// 来源文件 celt/quant_bands.c 自带的声明:
// Copyright (c) 2007-2008 CSIRO
// Copyright (c) 2007-2009 Xiph.Org Foundation
// Written by Jean-Marc Valin
///|
/// 能量粗量化 Laplace 参数(4 LM × 2 intra/inter × 42=21 带 × 2)。
let cel_e_prob_model : Array[Byte] = [
72, 127, 65, 129, 66, 128, 65, 128, 64, 128, 62, 128, 64, 128, 64, 128, 92, 78,
92, 79, 92, 78, 90, 79, 116, 41, 115, 40, 114, 40, 132, 26, 132, 26, 145, 17, 161,
12, 176, 10, 177, 11, 24, 179, 48, 138, 54, 135, 54, 132, 53, 134, 56, 133, 55,
132, 55, 132, 61, 114, 70, 96, 74, 88, 75, 88, 87, 74, 89, 66, 91, 67, 100, 59,
108, 50, 120, 40, 122, 37, 97, 43, 78, 50, 83, 78, 84, 81, 88, 75, 86, 74, 87,
71, 90, 73, 93, 74, 93, 74, 109, 40, 114, 36, 117, 34, 117, 34, 143, 17, 145, 18,
146, 19, 162, 12, 165, 10, 178, 7, 189, 6, 190, 8, 177, 9, 23, 178, 54, 115, 63,
102, 66, 98, 69, 99, 74, 89, 71, 91, 73, 91, 78, 89, 86, 80, 92, 66, 93, 64, 102,
59, 103, 60, 104, 60, 117, 52, 123, 44, 138, 35, 133, 31, 97, 38, 77, 45, 61, 90,
93, 60, 105, 42, 107, 41, 110, 45, 116, 38, 113, 38, 112, 38, 124, 26, 132, 27,
136, 19, 140, 20, 155, 14, 159, 16, 158, 18, 170, 13, 177, 10, 187, 8, 192, 6,
175, 9, 159, 10, 21, 178, 59, 110, 71, 86, 75, 85, 84, 83, 91, 66, 88, 73, 87,
72, 92, 75, 98, 72, 105, 58, 107, 54, 115, 52, 114, 55, 112, 56, 129, 51, 132,
40, 150, 33, 140, 29, 98, 35, 77, 42, 42, 121, 96, 66, 108, 43, 111, 40, 117, 44,
123, 32, 120, 36, 119, 33, 127, 33, 134, 34, 139, 21, 147, 23, 152, 20, 158, 25,
154, 26, 166, 21, 173, 16, 184, 13, 184, 10, 150, 13, 139, 15, 22, 178, 63, 114,
74, 82, 84, 83, 92, 82, 103, 62, 96, 72, 96, 67, 101, 73, 107, 72, 113, 55, 118,
52, 125, 52, 118, 52, 117, 55, 135, 49, 137, 39, 157, 32, 145, 29, 97, 33, 77,
40,
]
///|
/// 帧间能量预测系数 alpha(按 LM 索引,Q15 已归一化为小数)。
let cel_pred_coef : Array[Double] = [0.8984375, 0.796875, 0.6484375, 0.5]
///|
/// 帧内能量预测系数 beta(按 LM 索引)。
let cel_beta_coef : Array[Double] = [
0.920013427734375, 0.67999267578125, 0.3699951171875, 0.20001220703125,
]
///|
/// 帧内能量预测的固定 beta(§4.3.2.1 的 beta=4915/32768)。
const CEL_BETA_INTRA : Double = 0.149993896484375
///|
/// §4.3.2 每带平均能量:编码端 amp2Log2 从对数能量里减掉它,denormalise_bands 再加回来。取自 celt/quant_bands.c 的 float 组,与同文件 Q4 组逐项相差 16 倍(见上)。
let cel_e_means : Array[Double] = [
6.4375, 6.25, 5.75, 5.3125, 5.0625, 4.8125, 4.5, 4.375, 4.875, 4.6875, 4.5625,
4.4375, 4.875, 4.625, 4.3125, 4.5, 4.375, 4.625, 4.75, 4.4375, 3.75, 3.75, 3.75,
3.75, 3.75,
]
///|
/// 小能量细化的 icdf 表(quant_bands.c small_energy_icdf)。
let cel_small_energy_icdf : Array[Int] = [2, 1, 0]
///|
/// 比特分配 caps 表 [168](§4.3.3 指定直接使用的表数据)。
let cel_cache_caps50 : Array[Byte] = [
224, 224, 224, 224, 224, 224, 224, 224, 160, 160, 160, 160, 185, 185, 185, 178,
178, 168, 134, 61, 37, 224, 224, 224, 224, 224, 224, 224, 224, 240, 240, 240, 240,
207, 207, 207, 198, 198, 183, 144, 66, 40, 160, 160, 160, 160, 160, 160, 160, 160,
185, 185, 185, 185, 193, 193, 193, 183, 183, 172, 138, 64, 38, 240, 240, 240, 240,
240, 240, 240, 240, 207, 207, 207, 207, 204, 204, 204, 193, 193, 180, 143, 66,
40, 185, 185, 185, 185, 185, 185, 185, 185, 193, 193, 193, 193, 193, 193, 193,
183, 183, 172, 138, 65, 39, 207, 207, 207, 207, 207, 207, 207, 207, 204, 204, 204,
204, 201, 201, 201, 188, 188, 176, 141, 66, 40, 193, 193, 193, 193, 193, 193, 193,
193, 193, 193, 193, 193, 194, 194, 194, 184, 184, 173, 139, 65, 39, 204, 204, 204,
204, 204, 204, 204, 204, 201, 201, 201, 201, 198, 198, 198, 187, 187, 175, 140,
66, 40,
]
///|
/// 脉冲缓存条目索引 [5×21](§4.3.4.1):行 = LM+1、列 = 带号,值为 cel_cache_bits50 中的条目起点,−1 表示该 (行, 带) 的 N=0 无效。
let cel_cache_index50 : Array[Int] = [
-1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 41, 41, 41, 82, 82, 123, 164, 200,
222, 0, 0, 0, 0, 0, 0, 0, 0, 41, 41, 41, 41, 123, 123, 123, 164, 164, 240, 266,
283, 295, 41, 41, 41, 41, 41, 41, 41, 41, 123, 123, 123, 123, 240, 240, 240, 266,
266, 305, 318, 328, 336, 123, 123, 123, 123, 123, 123, 123, 123, 240, 240, 240,
240, 305, 305, 305, 318, 318, 343, 351, 358, 364, 240, 240, 240, 240, 240, 240,
240, 240, 305, 305, 305, 305, 343, 343, 343, 351, 351, 370, 376, 382, 387,
]
///|
/// 脉冲缓存位数表 [392](§4.3.4.1,单位 1/8 bit):每条目首槽是 Kmax(≤40),其后 j=1..Kmax 槽存 位数(get_pulses(j))−1。
let cel_cache_bits50 : Array[Byte] = [
40, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 40, 15, 23, 28, 31, 34, 36, 38, 39,
41, 42, 43, 44, 45, 46, 47, 47, 49, 50, 51, 52, 53, 54, 55, 55, 57, 58, 59, 60,
61, 62, 63, 63, 65, 66, 67, 68, 69, 70, 71, 71, 40, 20, 33, 41, 48, 53, 57, 61,
64, 66, 69, 71, 73, 75, 76, 78, 80, 82, 85, 87, 89, 91, 92, 94, 96, 98, 101, 103,
105, 107, 108, 110, 112, 114, 117, 119, 121, 123, 124, 126, 128, 40, 23, 39, 51,
60, 67, 73, 79, 83, 87, 91, 94, 97, 100, 102, 105, 107, 111, 115, 118, 121, 124,
126, 129, 131, 135, 139, 142, 145, 148, 150, 153, 155, 159, 163, 166, 169, 172,
174, 177, 179, 35, 28, 49, 65, 78, 89, 99, 107, 114, 120, 126, 132, 136, 141, 145,
149, 153, 159, 165, 171, 176, 180, 185, 189, 192, 199, 205, 211, 216, 220, 225,
229, 232, 239, 245, 251, 21, 33, 58, 79, 97, 112, 125, 137, 148, 157, 166, 174,
182, 189, 195, 201, 207, 217, 227, 235, 243, 251, 17, 35, 63, 86, 106, 123, 139,
152, 165, 177, 187, 197, 206, 214, 222, 230, 237, 250, 25, 31, 55, 75, 91, 105,
117, 128, 138, 146, 154, 161, 168, 174, 180, 185, 190, 200, 208, 215, 222, 229,
235, 240, 245, 255, 16, 36, 65, 89, 110, 128, 144, 159, 173, 185, 196, 207, 217,
226, 234, 242, 250, 11, 41, 74, 103, 128, 151, 172, 191, 209, 225, 241, 255, 9,
43, 79, 110, 138, 163, 186, 207, 227, 246, 12, 39, 71, 99, 123, 144, 164, 182,
198, 214, 228, 241, 253, 9, 44, 81, 113, 142, 168, 192, 214, 235, 255, 7, 49, 90,
127, 160, 191, 220, 247, 6, 51, 95, 134, 170, 203, 234, 7, 47, 87, 123, 155, 184,
212, 237, 6, 52, 97, 137, 174, 208, 240, 5, 57, 106, 151, 192, 231, 5, 59, 111,
158, 202, 243, 5, 55, 103, 147, 187, 224, 5, 60, 113, 161, 206, 248, 4, 65, 122,
175, 224, 4, 67, 127, 182, 234,
]
///|
/// 静态分配表(§4.3.3 Table 57),按 q 主序 × 21 带展开的 11×21;单位 1/32 bit per MDCT bin。与 RFC 正文转置后逐项相等(见上)。
let cel_alloc_vectors : Array[Int] = [
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 80, 75, 69,
63, 56, 49, 40, 34, 29, 20, 18, 10, 0, 0, 0, 0, 0, 0, 0, 0, 110, 100, 90, 84, 78,
71, 65, 58, 51, 45, 39, 32, 26, 20, 12, 0, 0, 0, 0, 0, 0, 118, 110, 103, 93, 86,
80, 75, 70, 65, 59, 53, 47, 40, 31, 23, 15, 4, 0, 0, 0, 0, 126, 119, 112, 104,
95, 89, 83, 78, 72, 66, 60, 54, 47, 39, 32, 25, 17, 12, 1, 0, 0, 134, 127, 120,
114, 103, 97, 91, 85, 78, 72, 66, 60, 54, 47, 41, 35, 29, 23, 16, 10, 1, 144, 137,
130, 124, 113, 107, 101, 95, 88, 82, 76, 70, 64, 57, 51, 45, 39, 33, 26, 15, 1,
152, 145, 138, 132, 123, 117, 111, 105, 98, 92, 86, 80, 74, 67, 61, 55, 49, 43,
36, 20, 1, 162, 155, 148, 142, 133, 127, 121, 115, 108, 102, 96, 90, 84, 77, 71,
65, 59, 53, 46, 30, 1, 172, 165, 158, 152, 143, 137, 131, 125, 118, 112, 106, 100,
94, 87, 81, 75, 69, 63, 56, 45, 20, 200, 200, 200, 200, 200, 200, 200, 200, 198,
193, 188, 183, 178, 173, 168, 163, 158, 153, 148, 129, 104,
]
///|
/// log2(带宽)×8 向上取整(21 项),逐项等于由 RFC Table 55 带宽推出的值。
let cel_log_n : Array[Int] = [
0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 16, 16, 16, 21, 21, 24, 29, 34, 36,
]
///|
/// allocation trim 的 icdf(11 项 → 0..10),由 RFC Table 58 的 PDF 累积取补得到,与参考实现的 trim_icdf 逐项相等。
let cel_trim_icdf : Array[Int] = [126, 124, 119, 109, 87, 41, 19, 9, 4, 2, 0]
///|
/// pitch post-filter 的 tapset icdf(3 项),RFC Table 56 的 {2,1,1}/4 累积取补得到,与参考实现的 tapset_icdf 逐项相等。
let cel_tapset_icdf : Array[Int] = [2, 1, 0]
///|
/// TF 调整表(§4.3.1,RFC Table 60-63),按 [LM][4*transient + 2*tf_select + tf_res] 展平的 4×8。正值表示更好的频率分辨率,负值表示更好的时间分辨率;与参考实现的 tf_select_table 逐项相等。
let cel_tf_select_table : Array[Int] = [
0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -2, 1, 0, 1, -1, 0, -2, 0, -3, 2, 0, 1, -1,
0, -2, 0, -3, 3, 0, 1, -1,
]
///|
/// 频谱扩展决策的 icdf(4 项 → 0..3),由 RFC Table 56 的 {7,2,21,2}/32 累积取补得到,与参考实现的 spread_icdf 逐项相等。
let cel_spread_icdf : Array[Int] = [25, 23, 2, 0]
///|
/// TF 变换重排用的 sequency 排列(§4.3.4.5,celt/bands.c ordery_table),按 stride=2/4/8/16 分组、组偏移 stride-2 拼成 30 项。每组是 0..s-1 的一个排列;RFC 只提「sequency order」不列数值,故为单源表。
let cel_orderery : Array[Int] = [
1, 0, 3, 0, 2, 1, 7, 0, 4, 3, 6, 1, 5, 2, 15, 0, 8, 7, 12, 3, 11, 4, 14, 1, 9,
6, 13, 2, 10, 5,
]