/*
 *  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.
 */

/*
 * spectrum_ar_model_tables.c
 *
 * This file contains tables with AR coefficients, Gain coefficients
 * and cosine tables.
 *
 */

#include "spectrum_ar_model_tables.h"
#include "settings.h"

/********************* AR Coefficient Tables ************************/

/* cdf for quantized reflection coefficient 1 */
const uint16_t WebRtcIsacfix_kRc1Cdf[12] = {
  0,  2,  4,  129,  7707,  57485,  65495,  65527,  65529,  65531,
  65533,  65535
};

/* cdf for quantized reflection coefficient 2 */
const uint16_t WebRtcIsacfix_kRc2Cdf[12] = {
  0,  2,  4,  7,  531,  25298,  64525,  65526,  65529,  65531,
  65533,  65535
};

/* cdf for quantized reflection coefficient 3 */
const uint16_t WebRtcIsacfix_kRc3Cdf[12] = {
  0,  2,  4,  6,  620,  22898,  64843,  65527,  65529,  65531,
  65533,  65535
};

/* cdf for quantized reflection coefficient 4 */
const uint16_t WebRtcIsacfix_kRc4Cdf[12] = {
  0,  2,  4,  6,  35,  10034,  60733,  65506,  65529,  65531,
  65533,  65535
};

/* cdf for quantized reflection coefficient 5 */
const uint16_t WebRtcIsacfix_kRc5Cdf[12] = {
  0,  2,  4,  6,  36,  7567,  56727,  65385,  65529,  65531,
  65533,  65535
};

/* cdf for quantized reflection coefficient 6 */
const uint16_t WebRtcIsacfix_kRc6Cdf[12] = {
  0,  2,  4,  6,  14,  6579,  57360,  65409,  65529,  65531,
  65533,  65535
};

/* representation levels for quantized reflection coefficient 1 */
const int16_t WebRtcIsacfix_kRc1Levels[11] = {
  -32104, -29007, -23202, -15496, -9279, -2577, 5934, 17535, 24512, 29503, 32104
};

/* representation levels for quantized reflection coefficient 2 */
const int16_t WebRtcIsacfix_kRc2Levels[11] = {
  -32104, -29503, -23494, -15261, -7309, -1399, 6158, 16381, 24512, 29503, 32104
};

/* representation levels for quantized reflection coefficient 3 */
const int16_t WebRtcIsacfix_kRc3Levels[11] = {
  -32104, -29503, -23157, -15186, -7347, -1359, 5829, 17535, 24512, 29503, 32104
};

/* representation levels for quantized reflection coefficient 4 */
const int16_t WebRtcIsacfix_kRc4Levels[11] = {
  -32104, -29503, -24512, -15362, -6665, -342, 6596, 14585, 24512, 29503, 32104
};

/* representation levels for quantized reflection coefficient 5 */
const int16_t WebRtcIsacfix_kRc5Levels[11] = {
  -32104, -29503, -24512, -15005, -6564, -106, 7123, 14920, 24512, 29503, 32104
};

/* representation levels for quantized reflection coefficient 6 */
const int16_t WebRtcIsacfix_kRc6Levels[11] = {
  -32104, -29503, -24512, -15096, -6656, -37, 7036, 14847, 24512, 29503, 32104
};

/* quantization boundary levels for reflection coefficients */
const int16_t WebRtcIsacfix_kRcBound[12] = {
  -32768, -31441, -27566, -21458, -13612, -4663,
  4663, 13612, 21458, 27566, 31441, 32767
};

/* initial index for AR reflection coefficient quantizer and cdf table search */
const uint16_t WebRtcIsacfix_kRcInitInd[6] = {
  5,  5,  5,  5,  5,  5
};

/* pointers to AR cdf tables */
const uint16_t *WebRtcIsacfix_kRcCdfPtr[AR_ORDER] = {
  WebRtcIsacfix_kRc1Cdf,
  WebRtcIsacfix_kRc2Cdf,
  WebRtcIsacfix_kRc3Cdf,
  WebRtcIsacfix_kRc4Cdf,
  WebRtcIsacfix_kRc5Cdf,
  WebRtcIsacfix_kRc6Cdf
};

/* pointers to AR representation levels tables */
const int16_t *WebRtcIsacfix_kRcLevPtr[AR_ORDER] = {
  WebRtcIsacfix_kRc1Levels,
  WebRtcIsacfix_kRc2Levels,
  WebRtcIsacfix_kRc3Levels,
  WebRtcIsacfix_kRc4Levels,
  WebRtcIsacfix_kRc5Levels,
  WebRtcIsacfix_kRc6Levels
};


/******************** GAIN Coefficient Tables ***********************/

/* cdf for Gain coefficient */
const uint16_t WebRtcIsacfix_kGainCdf[19] = {
  0,  2,  4,  6,  8,  10,  12,  14,  16,  1172,
  11119,  29411,  51699,  64445,  65527,  65529,  65531,  65533,  65535
};

/* representation levels for quantized squared Gain coefficient */
const int32_t WebRtcIsacfix_kGain2Lev[18] = {
  128, 128, 128, 128, 128, 215, 364, 709, 1268,
  1960, 3405, 6078, 11286, 17827, 51918, 134498, 487432, 2048000
};

/* quantization boundary levels for squared Gain coefficient */
const int32_t WebRtcIsacfix_kGain2Bound[19] = {
  0, 21, 35, 59, 99, 166, 280, 475, 815, 1414,
  2495, 4505, 8397, 16405, 34431, 81359, 240497, 921600, 0x7FFFFFFF
};

/* pointers to Gain cdf table */
const uint16_t *WebRtcIsacfix_kGainPtr[1] = {
  WebRtcIsacfix_kGainCdf
};

/* gain initial index for gain quantizer and cdf table search */
const uint16_t WebRtcIsacfix_kGainInitInd[1] = {
  11
};


/************************* Cosine Tables ****************************/

/* cosine table */
const int16_t WebRtcIsacfix_kCos[6][60] = {
  { 512,   512,   511,   510,   508,   507,   505,   502,   499,   496,
        493,   489,   485,   480,   476,   470,   465,   459,   453,   447,
 440,   433,   426,   418,   410,   402,   394,   385,   376,   367,
        357,   348,   338,   327,   317,   306,   295,   284,   273,   262,
 250,   238,   226,   214,   202,   190,   177,   165,   152,   139,
        126,   113,   100,   87,   73,   60,   47,   33,   20,   7       },
  { 512,   510,   508,   503,   498,   491,   483,   473,   462,   450,
        437,   422,   406,   389,   371,   352,   333,   312,   290,   268,
 244,   220,   196,   171,   145,   120,   93,   67,   40,   13,
        -13,   -40,   -67,   -93,   -120,   -145,   -171,   -196,   -220,   -244,
 -268,   -290,   -312,   -333,   -352,   -371,   -389,   -406,   -422,   -437,
        -450,   -462,   -473,   -483,   -491,   -498,   -503,   -508,   -510,   -512    },
  { 512,   508,   502,   493,   480,   465,   447,   426,   402,   376,
        348,   317,   284,   250,   214,   177,   139,   100,   60,   20,
 -20,   -60,   -100,   -139,   -177,   -214,   -250,   -284,   -317,   -348,
        -376,   -402,   -426,   -447,   -465,   -480,   -493,   -502,   -508,   -512,
 -512,   -508,   -502,   -493,   -480,   -465,   -447,   -426,   -402,   -376,
        -348,   -317,   -284,   -250,   -214,   -177,   -139,   -100,   -60,   -20     },
  { 511,   506,   495,   478,   456,   429,   398,   362,   322,   279,
        232,   183,   133,   80,   27,   -27,   -80,   -133,   -183,   -232,
 -279,   -322,   -362,   -398,   -429,   -456,   -478,   -495,   -506,   -511,
        -511,   -506,   -495,   -478,   -456,   -429,   -398,   -362,   -322,   -279,
 -232,   -183,   -133,   -80,   -27,   27,   80,   133,   183,   232,
        279,   322,   362,   398,   429,   456,   478,   495,   506,   511     },
  { 511,   502,   485,   459,   426,   385,   338,   284,   226,   165,
        100,   33,   -33,   -100,   -165,   -226,   -284,   -338,   -385,   -426,
 -459,   -485,   -502,   -511,   -511,   -502,   -485,   -459,   -426,   -385,
        -338,   -284,   -226,   -165,   -100,   -33,   33,   100,   165,   226,
 284,   338,   385,   426,   459,   485,   502,   511,   511,   502,
        485,   459,   426,   385,   338,   284,   226,   165,   100,   33      },
  { 510,   498,   473,   437,   389,   333,   268,   196,   120,   40,
        -40,   -120,   -196,   -268,   -333,   -389,   -437,   -473,   -498,   -510,
 -510,   -498,   -473,   -437,   -389,   -333,   -268,   -196,   -120,   -40,
        40,   120,   196,   268,   333,   389,   437,   473,   498,   510,
 510,   498,   473,   437,   389,   333,   268,   196,   120,   40,
        -40,   -120,   -196,   -268,   -333,   -389,   -437,   -473,   -498,   -510    }
};
