249 lines
8.2 KiB
C
249 lines
8.2 KiB
C
/*
|
|
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
/*
|
|
* SWB16_KLT_Tables.c
|
|
*
|
|
* This file defines tables used for entropy coding of LPC shape of
|
|
* upper-band signal if the bandwidth is 16 kHz.
|
|
*
|
|
*/
|
|
|
|
#include "lpc_shape_swb16_tables.h"
|
|
#include "settings.h"
|
|
#include "typedefs.h"
|
|
|
|
/*
|
|
* Mean value of LAR
|
|
*/
|
|
const double WebRtcIsac_kMeanLarUb16[UB_LPC_ORDER] =
|
|
{
|
|
0.454978, 0.364747, 0.102999, 0.104523
|
|
};
|
|
|
|
/*
|
|
* A rotation matrix to decorrelate intra-vector correlation,
|
|
* i.e. correlation among components of LAR vector.
|
|
*/
|
|
const double WebRtcIsac_kIintraVecDecorrMatUb16[UB_LPC_ORDER][UB_LPC_ORDER] =
|
|
{
|
|
{-0.020528, -0.085858, -0.002431, 0.996093},
|
|
{-0.033155, 0.036102, 0.998786, 0.004866},
|
|
{ 0.202627, 0.974853, -0.028940, 0.088132},
|
|
{-0.978479, 0.202454, -0.039785, -0.002811}
|
|
};
|
|
|
|
/*
|
|
* A rotation matrix to remove correlation among LAR coefficients
|
|
* of different LAR vectors. One might guess that decorrelation matrix
|
|
* for the first component should differ from the second component
|
|
* but we haven't observed a significant benefit of having different
|
|
* decorrelation matrices for different components.
|
|
*/
|
|
const double WebRtcIsac_kInterVecDecorrMatUb16
|
|
[UB16_LPC_VEC_PER_FRAME][UB16_LPC_VEC_PER_FRAME] =
|
|
{
|
|
{ 0.291675, -0.515786, 0.644927, 0.482658},
|
|
{-0.647220, 0.479712, 0.289556, 0.516856},
|
|
{ 0.643084, 0.485489, -0.289307, 0.516763},
|
|
{-0.287185, -0.517823, -0.645389, 0.482553}
|
|
};
|
|
|
|
/*
|
|
* The following 16 vectors define CDF of 16 decorrelated LAR
|
|
* coefficients.
|
|
*/
|
|
const WebRtc_UWord16 WebRtcIsac_kLpcShapeCdfVec01Ub16[14] =
|
|
{
|
|
0, 2, 20, 159, 1034, 5688, 20892, 44653,
|
|
59849, 64485, 65383, 65518, 65534, 65535
|
|
};
|
|
|
|
const WebRtc_UWord16 WebRtcIsac_kLpcShapeCdfVec1Ub16[16] =
|
|
{
|
|
0, 1, 7, 43, 276, 1496, 6681, 21653,
|
|
43891, 58859, 64022, 65248, 65489, 65529, 65534, 65535
|
|
};
|
|
|
|
const WebRtc_UWord16 WebRtcIsac_kLpcShapeCdfVec2Ub16[18] =
|
|
{
|
|
0, 1, 9, 54, 238, 933, 3192, 9461,
|
|
23226, 42146, 56138, 62413, 64623, 65300, 65473, 65521,
|
|
65533, 65535
|
|
};
|
|
|
|
const WebRtc_UWord16 WebRtcIsac_kLpcShapeCdfVec3Ub16[30] =
|
|
{
|
|
0, 2, 4, 8, 17, 36, 75, 155,
|
|
329, 683, 1376, 2662, 5047, 9508, 17526, 29027,
|
|
40363, 48997, 55096, 59180, 61789, 63407, 64400, 64967,
|
|
65273, 65429, 65497, 65526, 65534, 65535
|
|
};
|
|
|
|
const WebRtc_UWord16 WebRtcIsac_kLpcShapeCdfVec4Ub16[16] =
|
|
{
|
|
0, 1, 10, 63, 361, 1785, 7407, 22242,
|
|
43337, 58125, 63729, 65181, 65472, 65527, 65534, 65535
|
|
};
|
|
|
|
const WebRtc_UWord16 WebRtcIsac_kLpcShapeCdfVec5Ub16[17] =
|
|
{
|
|
0, 1, 7, 29, 134, 599, 2443, 8590,
|
|
22962, 42635, 56911, 63060, 64940, 65408, 65513, 65531,
|
|
65535
|
|
};
|
|
|
|
const WebRtc_UWord16 WebRtcIsac_kLpcShapeCdfVec6Ub16[21] =
|
|
{
|
|
0, 1, 5, 16, 57, 191, 611, 1808,
|
|
4847, 11755, 24612, 40910, 53789, 60698, 63729, 64924,
|
|
65346, 65486, 65523, 65532, 65535
|
|
};
|
|
|
|
const WebRtc_UWord16 WebRtcIsac_kLpcShapeCdfVec7Ub16[36] =
|
|
{
|
|
0, 1, 4, 12, 25, 55, 104, 184,
|
|
314, 539, 926, 1550, 2479, 3861, 5892, 8845,
|
|
13281, 20018, 29019, 38029, 45581, 51557, 56057, 59284,
|
|
61517, 63047, 64030, 64648, 65031, 65261, 65402, 65480,
|
|
65518, 65530, 65534, 65535
|
|
};
|
|
|
|
const WebRtc_UWord16 WebRtcIsac_kLpcShapeCdfVec8Ub16[21] =
|
|
{
|
|
0, 1, 2, 7, 26, 103, 351, 1149,
|
|
3583, 10204, 23846, 41711, 55361, 61917, 64382, 65186,
|
|
65433, 65506, 65528, 65534, 65535
|
|
};
|
|
|
|
const WebRtc_UWord16 WebRtcIsac_kLpcShapeCdfVec01Ub160[21] =
|
|
{
|
|
0, 6, 19, 63, 205, 638, 1799, 4784,
|
|
11721, 24494, 40803, 53805, 60886, 63822, 64931, 65333,
|
|
65472, 65517, 65530, 65533, 65535
|
|
};
|
|
|
|
const WebRtc_UWord16 WebRtcIsac_kLpcShapeCdfVec01Ub161[28] =
|
|
{
|
|
0, 1, 3, 11, 31, 86, 221, 506,
|
|
1101, 2296, 4486, 8477, 15356, 26079, 38941, 49952,
|
|
57165, 61257, 63426, 64549, 65097, 65351, 65463, 65510,
|
|
65526, 65532, 65534, 65535
|
|
};
|
|
|
|
const WebRtc_UWord16 WebRtcIsac_kLpcShapeCdfVec01Ub162[55] =
|
|
{
|
|
0, 3, 12, 23, 42, 65, 89, 115,
|
|
150, 195, 248, 327, 430, 580, 784, 1099,
|
|
1586, 2358, 3651, 5899, 9568, 14312, 19158, 23776,
|
|
28267, 32663, 36991, 41153, 45098, 48680, 51870, 54729,
|
|
57141, 59158, 60772, 62029, 63000, 63761, 64322, 64728,
|
|
65000, 65192, 65321, 65411, 65463, 65496, 65514, 65523,
|
|
65527, 65529, 65531, 65532, 65533, 65534, 65535
|
|
};
|
|
|
|
const WebRtc_UWord16 WebRtcIsac_kLpcShapeCdfVec01Ub163[26] =
|
|
{
|
|
0, 2, 4, 10, 21, 48, 114, 280,
|
|
701, 1765, 4555, 11270, 24267, 41213, 54285, 61003,
|
|
63767, 64840, 65254, 65421, 65489, 65514, 65526, 65532,
|
|
65534, 65535
|
|
};
|
|
|
|
const WebRtc_UWord16 WebRtcIsac_kLpcShapeCdfVec01Ub164[28] =
|
|
{
|
|
0, 1, 3, 6, 15, 36, 82, 196,
|
|
453, 1087, 2557, 5923, 13016, 25366, 40449, 52582,
|
|
59539, 62896, 64389, 65033, 65316, 65442, 65494, 65519,
|
|
65529, 65533, 65534, 65535
|
|
};
|
|
|
|
const WebRtc_UWord16 WebRtcIsac_kLpcShapeCdfVec01Ub165[34] =
|
|
{
|
|
0, 2, 4, 8, 18, 35, 73, 146,
|
|
279, 524, 980, 1789, 3235, 5784, 10040, 16998,
|
|
27070, 38543, 48499, 55421, 59712, 62257, 63748, 64591,
|
|
65041, 65278, 65410, 65474, 65508, 65522, 65530, 65533,
|
|
65534, 65535
|
|
};
|
|
|
|
const WebRtc_UWord16 WebRtcIsac_kLpcShapeCdfVec01Ub166[71] =
|
|
{
|
|
0, 1, 2, 6, 13, 26, 55, 92,
|
|
141, 191, 242, 296, 355, 429, 522, 636,
|
|
777, 947, 1162, 1428, 1753, 2137, 2605, 3140,
|
|
3743, 4409, 5164, 6016, 6982, 8118, 9451, 10993,
|
|
12754, 14810, 17130, 19780, 22864, 26424, 30547, 35222,
|
|
40140, 44716, 48698, 52056, 54850, 57162, 59068, 60643,
|
|
61877, 62827, 63561, 64113, 64519, 64807, 65019, 65167,
|
|
65272, 65343, 65399, 65440, 65471, 65487, 65500, 65509,
|
|
65518, 65524, 65527, 65531, 65533, 65534, 65535
|
|
};
|
|
|
|
/*
|
|
* An array of pointers to CDFs of decorrelated LARs
|
|
*/
|
|
const WebRtc_UWord16* WebRtcIsac_kLpcShapeCdfMatUb16
|
|
[UB_LPC_ORDER * UB16_LPC_VEC_PER_FRAME] = {
|
|
WebRtcIsac_kLpcShapeCdfVec01Ub16,
|
|
WebRtcIsac_kLpcShapeCdfVec1Ub16,
|
|
WebRtcIsac_kLpcShapeCdfVec2Ub16,
|
|
WebRtcIsac_kLpcShapeCdfVec3Ub16,
|
|
WebRtcIsac_kLpcShapeCdfVec4Ub16,
|
|
WebRtcIsac_kLpcShapeCdfVec5Ub16,
|
|
WebRtcIsac_kLpcShapeCdfVec6Ub16,
|
|
WebRtcIsac_kLpcShapeCdfVec7Ub16,
|
|
WebRtcIsac_kLpcShapeCdfVec8Ub16,
|
|
WebRtcIsac_kLpcShapeCdfVec01Ub160,
|
|
WebRtcIsac_kLpcShapeCdfVec01Ub161,
|
|
WebRtcIsac_kLpcShapeCdfVec01Ub162,
|
|
WebRtcIsac_kLpcShapeCdfVec01Ub163,
|
|
WebRtcIsac_kLpcShapeCdfVec01Ub164,
|
|
WebRtcIsac_kLpcShapeCdfVec01Ub165,
|
|
WebRtcIsac_kLpcShapeCdfVec01Ub166
|
|
};
|
|
|
|
/*
|
|
* The smallest reconstruction points for quantiztion of LAR coefficients.
|
|
*/
|
|
const double WebRtcIsac_kLpcShapeLeftRecPointUb16
|
|
[UB_LPC_ORDER * UB16_LPC_VEC_PER_FRAME] =
|
|
{
|
|
-0.8250, -0.9750, -1.1250, -2.1750, -0.9750, -1.1250, -1.4250,
|
|
-2.6250, -1.4250, -1.2750, -1.8750, -3.6750, -1.7250, -1.8750,
|
|
-2.3250, -5.4750
|
|
};
|
|
|
|
/*
|
|
* Number of reconstruction points of quantizers for LAR coefficients.
|
|
*/
|
|
const WebRtc_Word16 WebRtcIsac_kLpcShapeNumRecPointUb16
|
|
[UB_LPC_ORDER * UB16_LPC_VEC_PER_FRAME] =
|
|
{
|
|
13, 15, 17, 29, 15, 16, 20, 35, 20,
|
|
20, 27, 54, 25, 27, 33, 70
|
|
};
|
|
|
|
/*
|
|
* Starting index for entropy decoder to search for the right interval,
|
|
* one entry per LAR coefficient
|
|
*/
|
|
const WebRtc_UWord16 WebRtcIsac_kLpcShapeEntropySearchUb16
|
|
[UB_LPC_ORDER * UB16_LPC_VEC_PER_FRAME] =
|
|
{
|
|
6, 7, 8, 14, 7, 8, 10, 17, 10,
|
|
10, 13, 27, 12, 13, 16, 35
|
|
};
|
|
|
|
/*
|
|
* LAR quantization step-size.
|
|
*/
|
|
const double WebRtcIsac_kLpcShapeQStepSizeUb16 = 0.150000;
|