Home | History | Annotate | Download | only in source
      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  * SWB16_KLT_Tables.c
     13  *
     14  * This file defines tables used for entropy coding of LPC shape of
     15  * upper-band signal if the bandwidth is 16 kHz.
     16  *
     17  */
     18 
     19 #include "lpc_shape_swb16_tables.h"
     20 #include "settings.h"
     21 #include "webrtc/typedefs.h"
     22 
     23 /*
     24 * Mean value of LAR
     25 */
     26 const double WebRtcIsac_kMeanLarUb16[UB_LPC_ORDER] =
     27 {
     28 0.454978, 0.364747, 0.102999, 0.104523
     29 };
     30 
     31 /*
     32 * A rotation matrix to decorrelate intra-vector correlation,
     33 * i.e. correlation among components of LAR vector.
     34 */
     35 const double WebRtcIsac_kIintraVecDecorrMatUb16[UB_LPC_ORDER][UB_LPC_ORDER] =
     36 {
     37     {-0.020528, -0.085858, -0.002431,  0.996093},
     38     {-0.033155,  0.036102,  0.998786,  0.004866},
     39     { 0.202627,  0.974853, -0.028940,  0.088132},
     40     {-0.978479,  0.202454, -0.039785, -0.002811}
     41 };
     42 
     43 /*
     44 * A rotation matrix to remove correlation among LAR coefficients
     45 * of different LAR vectors. One might guess that decorrelation matrix
     46 * for the first component should differ from the second component
     47 * but we haven't observed a significant benefit of having different
     48 * decorrelation matrices for different components.
     49 */
     50 const double WebRtcIsac_kInterVecDecorrMatUb16
     51 [UB16_LPC_VEC_PER_FRAME][UB16_LPC_VEC_PER_FRAME] =
     52 {
     53     { 0.291675, -0.515786,  0.644927,  0.482658},
     54     {-0.647220,  0.479712,  0.289556,  0.516856},
     55     { 0.643084,  0.485489, -0.289307,  0.516763},
     56     {-0.287185, -0.517823, -0.645389,  0.482553}
     57 };
     58 
     59 /*
     60 * The following 16 vectors define CDF of 16 decorrelated LAR
     61 * coefficients.
     62 */
     63 const uint16_t WebRtcIsac_kLpcShapeCdfVec01Ub16[14] =
     64 {
     65      0,      2,     20,    159,   1034,   5688,  20892,  44653,
     66  59849,  64485,  65383,  65518,  65534,  65535
     67 };
     68 
     69 const uint16_t WebRtcIsac_kLpcShapeCdfVec1Ub16[16] =
     70 {
     71      0,      1,      7,     43,    276,   1496,   6681,  21653,
     72  43891,  58859,  64022,  65248,  65489,  65529,  65534,  65535
     73 };
     74 
     75 const uint16_t WebRtcIsac_kLpcShapeCdfVec2Ub16[18] =
     76 {
     77      0,      1,      9,     54,    238,    933,   3192,   9461,
     78  23226,  42146,  56138,  62413,  64623,  65300,  65473,  65521,
     79  65533,  65535
     80 };
     81 
     82 const uint16_t WebRtcIsac_kLpcShapeCdfVec3Ub16[30] =
     83 {
     84      0,      2,      4,      8,     17,     36,     75,    155,
     85    329,    683,   1376,   2662,   5047,   9508,  17526,  29027,
     86  40363,  48997,  55096,  59180,  61789,  63407,  64400,  64967,
     87  65273,  65429,  65497,  65526,  65534,  65535
     88 };
     89 
     90 const uint16_t WebRtcIsac_kLpcShapeCdfVec4Ub16[16] =
     91 {
     92      0,      1,     10,     63,    361,   1785,   7407,  22242,
     93  43337,  58125,  63729,  65181,  65472,  65527,  65534,  65535
     94 };
     95 
     96 const uint16_t WebRtcIsac_kLpcShapeCdfVec5Ub16[17] =
     97 {
     98      0,      1,      7,     29,    134,    599,   2443,   8590,
     99  22962,  42635,  56911,  63060,  64940,  65408,  65513,  65531,
    100  65535
    101 };
    102 
    103 const uint16_t WebRtcIsac_kLpcShapeCdfVec6Ub16[21] =
    104 {
    105      0,      1,      5,     16,     57,    191,    611,   1808,
    106   4847,  11755,  24612,  40910,  53789,  60698,  63729,  64924,
    107  65346,  65486,  65523,  65532,  65535
    108 };
    109 
    110 const uint16_t WebRtcIsac_kLpcShapeCdfVec7Ub16[36] =
    111 {
    112      0,      1,      4,     12,     25,     55,    104,    184,
    113    314,    539,    926,   1550,   2479,   3861,   5892,   8845,
    114  13281,  20018,  29019,  38029,  45581,  51557,  56057,  59284,
    115  61517,  63047,  64030,  64648,  65031,  65261,  65402,  65480,
    116  65518,  65530,  65534,  65535
    117 };
    118 
    119 const uint16_t WebRtcIsac_kLpcShapeCdfVec8Ub16[21] =
    120 {
    121      0,      1,      2,      7,     26,    103,    351,   1149,
    122   3583,  10204,  23846,  41711,  55361,  61917,  64382,  65186,
    123  65433,  65506,  65528,  65534,  65535
    124 };
    125 
    126 const uint16_t WebRtcIsac_kLpcShapeCdfVec01Ub160[21] =
    127 {
    128      0,      6,     19,     63,    205,    638,   1799,   4784,
    129  11721,  24494,  40803,  53805,  60886,  63822,  64931,  65333,
    130  65472,  65517,  65530,  65533,  65535
    131 };
    132 
    133 const uint16_t WebRtcIsac_kLpcShapeCdfVec01Ub161[28] =
    134 {
    135      0,      1,      3,     11,     31,     86,    221,    506,
    136   1101,   2296,   4486,   8477,  15356,  26079,  38941,  49952,
    137  57165,  61257,  63426,  64549,  65097,  65351,  65463,  65510,
    138  65526,  65532,  65534,  65535
    139 };
    140 
    141 const uint16_t WebRtcIsac_kLpcShapeCdfVec01Ub162[55] =
    142 {
    143      0,      3,     12,     23,     42,     65,     89,    115,
    144    150,    195,    248,    327,    430,    580,    784,   1099,
    145   1586,   2358,   3651,   5899,   9568,  14312,  19158,  23776,
    146  28267,  32663,  36991,  41153,  45098,  48680,  51870,  54729,
    147  57141,  59158,  60772,  62029,  63000,  63761,  64322,  64728,
    148  65000,  65192,  65321,  65411,  65463,  65496,  65514,  65523,
    149  65527,  65529,  65531,  65532,  65533,  65534,  65535
    150 };
    151 
    152 const uint16_t WebRtcIsac_kLpcShapeCdfVec01Ub163[26] =
    153 {
    154      0,      2,      4,     10,     21,     48,    114,    280,
    155    701,   1765,   4555,  11270,  24267,  41213,  54285,  61003,
    156  63767,  64840,  65254,  65421,  65489,  65514,  65526,  65532,
    157  65534,  65535
    158 };
    159 
    160 const uint16_t WebRtcIsac_kLpcShapeCdfVec01Ub164[28] =
    161 {
    162      0,      1,      3,      6,     15,     36,     82,    196,
    163    453,   1087,   2557,   5923,  13016,  25366,  40449,  52582,
    164  59539,  62896,  64389,  65033,  65316,  65442,  65494,  65519,
    165  65529,  65533,  65534,  65535
    166 };
    167 
    168 const uint16_t WebRtcIsac_kLpcShapeCdfVec01Ub165[34] =
    169 {
    170      0,      2,      4,      8,     18,     35,     73,    146,
    171    279,    524,    980,   1789,   3235,   5784,  10040,  16998,
    172  27070,  38543,  48499,  55421,  59712,  62257,  63748,  64591,
    173  65041,  65278,  65410,  65474,  65508,  65522,  65530,  65533,
    174  65534,  65535
    175 };
    176 
    177 const uint16_t WebRtcIsac_kLpcShapeCdfVec01Ub166[71] =
    178 {
    179      0,      1,      2,      6,     13,     26,     55,     92,
    180    141,    191,    242,    296,    355,    429,    522,    636,
    181    777,    947,   1162,   1428,   1753,   2137,   2605,   3140,
    182   3743,   4409,   5164,   6016,   6982,   8118,   9451,  10993,
    183  12754,  14810,  17130,  19780,  22864,  26424,  30547,  35222,
    184  40140,  44716,  48698,  52056,  54850,  57162,  59068,  60643,
    185  61877,  62827,  63561,  64113,  64519,  64807,  65019,  65167,
    186  65272,  65343,  65399,  65440,  65471,  65487,  65500,  65509,
    187  65518,  65524,  65527,  65531,  65533,  65534,  65535
    188 };
    189 
    190 /*
    191 * An array of pointers to CDFs of decorrelated LARs
    192 */
    193 const uint16_t* WebRtcIsac_kLpcShapeCdfMatUb16
    194 [UB_LPC_ORDER * UB16_LPC_VEC_PER_FRAME] = {
    195      WebRtcIsac_kLpcShapeCdfVec01Ub16,
    196      WebRtcIsac_kLpcShapeCdfVec1Ub16,
    197      WebRtcIsac_kLpcShapeCdfVec2Ub16,
    198      WebRtcIsac_kLpcShapeCdfVec3Ub16,
    199      WebRtcIsac_kLpcShapeCdfVec4Ub16,
    200      WebRtcIsac_kLpcShapeCdfVec5Ub16,
    201      WebRtcIsac_kLpcShapeCdfVec6Ub16,
    202      WebRtcIsac_kLpcShapeCdfVec7Ub16,
    203      WebRtcIsac_kLpcShapeCdfVec8Ub16,
    204      WebRtcIsac_kLpcShapeCdfVec01Ub160,
    205      WebRtcIsac_kLpcShapeCdfVec01Ub161,
    206      WebRtcIsac_kLpcShapeCdfVec01Ub162,
    207      WebRtcIsac_kLpcShapeCdfVec01Ub163,
    208      WebRtcIsac_kLpcShapeCdfVec01Ub164,
    209      WebRtcIsac_kLpcShapeCdfVec01Ub165,
    210      WebRtcIsac_kLpcShapeCdfVec01Ub166
    211 };
    212 
    213 /*
    214 * The smallest reconstruction points for quantiztion of LAR coefficients.
    215 */
    216 const double WebRtcIsac_kLpcShapeLeftRecPointUb16
    217 [UB_LPC_ORDER * UB16_LPC_VEC_PER_FRAME] =
    218 {
    219  -0.8250,  -0.9750,  -1.1250,  -2.1750,  -0.9750,  -1.1250,  -1.4250,
    220  -2.6250,  -1.4250,  -1.2750,  -1.8750,  -3.6750,  -1.7250,  -1.8750,
    221  -2.3250,  -5.4750
    222 };
    223 
    224 /*
    225 * Number of reconstruction points of quantizers for LAR coefficients.
    226 */
    227 const int16_t WebRtcIsac_kLpcShapeNumRecPointUb16
    228 [UB_LPC_ORDER * UB16_LPC_VEC_PER_FRAME] =
    229 {
    230    13,    15,    17,    29,    15,    16,    20,    35,    20,
    231    20,    27,    54,    25,    27,    33,    70
    232 };
    233 
    234 /*
    235 * Starting index for entropy decoder to search for the right interval,
    236 * one entry per LAR coefficient
    237 */
    238 const uint16_t WebRtcIsac_kLpcShapeEntropySearchUb16
    239 [UB_LPC_ORDER * UB16_LPC_VEC_PER_FRAME] =
    240 {
    241     6,     7,     8,    14,     7,     8,    10,    17,    10,
    242    10,    13,    27,    12,    13,    16,    35
    243 };
    244 
    245 /*
    246 * LAR quantization step-size.
    247 */
    248 const double WebRtcIsac_kLpcShapeQStepSizeUb16 = 0.150000;
    249