Home | History | Annotate | Download | only in src
      1 /* ------------------------------------------------------------------
      2  * Copyright (C) 1998-2009 PacketVideo
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
     13  * express or implied.
     14  * See the License for the specific language governing permissions
     15  * and limitations under the License.
     16  * -------------------------------------------------------------------
     17  */
     18 /****************************************************************************************
     19 Portions of this file are derived from the following 3GPP standard:
     20 
     21     3GPP TS 26.073
     22     ANSI-C code for the Adaptive Multi-Rate (AMR) speech codec
     23     Available from http://www.3gpp.org
     24 
     25 (C) 2004, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC)
     26 Permission to distribute, modify and use this file under the standard license
     27 terms listed above has been obtained from the copyright holder.
     28 ****************************************************************************************/
     29 /*
     30 
     31  Filename: /audio/gsm_amr/c/src/qua_gain_tbl.c
     32 
     33 ------------------------------------------------------------------------------
     34  REVISION HISTORY
     35 
     36  Description: Created this file from the reference, qua_gain.tab
     37 
     38  Description: Added #ifdef __cplusplus and removed "extern" from table
     39               definition.
     40 
     41  Description: Put "extern" back.
     42 
     43  Who:                               Date:
     44  Description:
     45 
     46 ------------------------------------------------------------------------------
     47  MODULE DESCRIPTION
     48 
     49 ------------------------------------------------------------------------------
     50 */
     51 
     52 /*----------------------------------------------------------------------------
     53 ; INCLUDES
     54 ----------------------------------------------------------------------------*/
     55 #include "typedef.h"
     56 #include "qua_gain.h"
     57 #include "qua_gain_tbl.h"
     58 
     59 /*--------------------------------------------------------------------------*/
     60 #ifdef __cplusplus
     61 extern "C"
     62 {
     63 #endif
     64 
     65     /*----------------------------------------------------------------------------
     66     ; MACROS
     67     ; [Define module specific macros here]
     68     ----------------------------------------------------------------------------*/
     69 
     70     /*----------------------------------------------------------------------------
     71     ; DEFINES
     72     ; [Include all pre-processor statements here. Include conditional
     73     ; compile variables also.]
     74     ----------------------------------------------------------------------------*/
     75 
     76     /*----------------------------------------------------------------------------
     77     ; LOCAL FUNCTION DEFINITIONS
     78     ; [List function prototypes here]
     79     ----------------------------------------------------------------------------*/
     80 
     81     /*----------------------------------------------------------------------------
     82     ; LOCAL VARIABLE DEFINITIONS
     83     ; [Variable declaration - defined here and used outside this module]
     84     ----------------------------------------------------------------------------*/
     85 
     86     /* The tables contains the following data:
     87      *
     88      *    g_pitch        (Q14),
     89      *    g_fac          (Q12), (g_code = g_code0*g_fac),
     90      *    qua_ener_MR122 (Q10), (log2(g_fac))
     91      *    qua_ener       (Q10)  (20*log10(g_fac))
     92      *
     93      *    The log2() and log10() values are calculated on the fixed point value
     94      *    (g_fac Q12) and not on the original floating point value of g_fac
     95      *    to make the quantizer/MA predictdor use corresponding values.
     96      */
     97 
     98     /* table used in 'high' rates: MR67 MR74 */
     99 
    100     const Word16 table_gain_highrates[VQ_SIZE_HIGHRATES*4] =
    101     {
    102 
    103         /*
    104          * Note: column 4 (qua_ener) contains the original values from IS641
    105          *       to ensure bit-exactness; however, they are not exactly the
    106          *       rounded value of (20*log10(g_fac))
    107          *
    108          */
    109 
    110         /*g_pit,    g_fac,  qua_ener_MR122, qua_ener */
    111         577,      662,           -2692,   -16214,
    112         806,     1836,           -1185,    -7135,
    113         3109,     1052,           -2008,   -12086,
    114         4181,     1387,           -1600,    -9629,
    115         2373,     1425,           -1560,    -9394,
    116         3248,     1985,           -1070,    -6442,
    117         1827,     2320,            -840,    -5056,
    118         941,     3314,            -313,    -1885,
    119         2351,     2977,            -471,    -2838,
    120         3616,     2420,            -777,    -4681,
    121         3451,     3096,            -414,    -2490,
    122         2955,     4301,              72,      434,
    123         1848,     4500,             139,      836,
    124         3884,     5416,             413,     2484,
    125         1187,     7210,             835,     5030,
    126         3083,     9000,            1163,     7002,
    127         7384,      883,           -2267,   -13647,
    128         5962,     1506,           -1478,    -8900,
    129         5155,     2134,            -963,    -5800,
    130         7944,     2009,           -1052,    -6335,
    131         6507,     2250,            -885,    -5327,
    132         7670,     2752,            -588,    -3537,
    133         5952,     3016,            -452,    -2724,
    134         4898,     3764,            -125,     -751,
    135         6989,     3588,            -196,    -1177,
    136         8174,     3978,             -43,     -260,
    137         6064,     4404,             107,      645,
    138         7709,     5087,             320,     1928,
    139         5523,     6021,             569,     3426,
    140         7769,     7126,             818,     4926,
    141         6060,     7938,             977,     5885,
    142         5594,    11487,            1523,     9172,
    143         10581,     1356,           -1633,    -9831,
    144         9049,     1597,           -1391,    -8380,
    145         9794,     2035,           -1033,    -6220,
    146         8946,     2415,            -780,    -4700,
    147         10296,     2584,            -681,    -4099,
    148         9407,     2734,            -597,    -3595,
    149         8700,     3218,            -356,    -2144,
    150         9757,     3395,            -277,    -1669,
    151         10177,     3892,             -75,     -454,
    152         9170,     4528,             148,      891,
    153         10152,     5004,             296,     1781,
    154         9114,     5735,             497,     2993,
    155         10500,     6266,             628,     3782,
    156         10110,     7631,             919,     5534,
    157         8844,     8727,            1117,     6728,
    158         8956,    12496,            1648,     9921,
    159         12924,      976,           -2119,   -12753,
    160         11435,     1755,           -1252,    -7539,
    161         12138,     2328,            -835,    -5024,
    162         11388,     2368,            -810,    -4872,
    163         10700,     3064,            -429,    -2580,
    164         12332,     2861,            -530,    -3192,
    165         11722,     3327,            -307,    -1848,
    166         11270,     3700,            -150,     -904,
    167         10861,     4413,             110,      663,
    168         12082,     4533,             150,      902,
    169         11283,     5205,             354,     2132,
    170         11960,     6305,             637,     3837,
    171         11167,     7534,             900,     5420,
    172         12128,     8329,            1049,     6312,
    173         10969,    10777,            1429,     8604,
    174         10300,    17376,            2135,    12853,
    175         13899,     1681,           -1316,    -7921,
    176         12580,     2045,           -1026,    -6179,
    177         13265,     2439,            -766,    -4610,
    178         14033,     2989,            -465,    -2802,
    179         13452,     3098,            -413,    -2482,
    180         12396,     3658,            -167,    -1006,
    181         13510,     3780,            -119,     -713,
    182         12880,     4272,              62,      374,
    183         13533,     4861,             253,     1523,
    184         12667,     5457,             424,     2552,
    185         13854,     6106,             590,     3551,
    186         13031,     6483,             678,     4084,
    187         13557,     7721,             937,     5639,
    188         12957,     9311,            1213,     7304,
    189         13714,    11551,            1532,     9221,
    190         12591,    15206,            1938,    11667,
    191         15113,     1540,           -1445,    -8700,
    192         15072,     2333,            -832,    -5007,
    193         14527,     2511,            -723,    -4352,
    194         14692,     3199,            -365,    -2197,
    195         15382,     3560,            -207,    -1247,
    196         14133,     3960,             -50,     -300,
    197         15102,     4236,              50,      298,
    198         14332,     4824,             242,     1454,
    199         14846,     5451,             422,     2542,
    200         15306,     6083,             584,     3518,
    201         14329,     6888,             768,     4623,
    202         15060,     7689,             930,     5602,
    203         14406,     9426,            1231,     7413,
    204         15387,     9741,            1280,     7706,
    205         14824,    14271,            1844,    11102,
    206         13600,    24939,            2669,    16067,
    207         16396,     1969,           -1082,    -6517,
    208         16817,     2832,            -545,    -3283,
    209         15713,     2843,            -539,    -3248,
    210         16104,     3336,            -303,    -1825,
    211         16384,     3963,             -49,     -294,
    212         16940,     4579,             165,      992,
    213         15711,     4599,             171,     1030,
    214         16222,     5448,             421,     2537,
    215         16832,     6382,             655,     3945,
    216         15745,     7141,             821,     4944,
    217         16326,     7469,             888,     5343,
    218         16611,     8624,            1100,     6622,
    219         17028,    10418,            1379,     8303,
    220         15905,    11817,            1565,     9423,
    221         16878,    14690,            1887,    11360,
    222         16515,    20870,            2406,    14483,
    223         18142,     2083,            -999,    -6013,
    224         19401,     3178,            -375,    -2257,
    225         17508,     3426,            -264,    -1589,
    226         20054,     4027,             -25,     -151,
    227         18069,     4249,              54,      326,
    228         18952,     5066,             314,     1890,
    229         17711,     5402,             409,     2461,
    230         19835,     6192,             610,     3676,
    231         17950,     7014,             795,     4784,
    232         21318,     7877,             966,     5816,
    233         17910,     9289,            1210,     7283,
    234         19144,     9290,            1210,     7284,
    235         20517,    11381,            1510,     9089,
    236         18075,    14485,            1866,    11234,
    237         19999,    17882,            2177,    13108,
    238         18842,    32764,            3072,    18494
    239     };
    240 
    241 
    242     /* table used in 'low' rates: MR475, MR515, MR59 */
    243 
    244     const Word16 table_gain_lowrates[VQ_SIZE_LOWRATES*4] =
    245     {
    246         /*g_pit,    g_fac,  qua_ener_MR122, qua_ener */
    247         10813,    28753,            2879,    17333,
    248         20480,     2785,            -570,    -3431,
    249         18841,     6594,             703,     4235,
    250         6225,     7413,             876,     5276,
    251         17203,    10444,            1383,     8325,
    252         21626,     1269,           -1731,   -10422,
    253         21135,     4423,             113,      683,
    254         11304,     1556,           -1430,    -8609,
    255         19005,    12820,            1686,    10148,
    256         17367,     2498,            -731,    -4398,
    257         17858,     4833,             244,     1472,
    258         9994,     2498,            -731,    -4398,
    259         17530,     7864,             964,     5802,
    260         14254,     1884,           -1147,    -6907,
    261         15892,     3153,            -387,    -2327,
    262         6717,     1802,           -1213,    -7303,
    263         18186,    20193,            2357,    14189,
    264         18022,     3031,            -445,    -2678,
    265         16711,     5857,             528,     3181,
    266         8847,     4014,             -30,     -180,
    267         15892,     8970,            1158,     6972,
    268         18022,     1392,           -1594,    -9599,
    269         16711,     4096,               0,        0,
    270         8192,      655,           -2708,   -16305,
    271         15237,    13926,            1808,    10884,
    272         14254,     3112,            -406,    -2444,
    273         14090,     4669,             193,     1165,
    274         5406,     2703,            -614,    -3697,
    275         13434,     6553,             694,     4180,
    276         12451,      901,           -2237,   -13468,
    277         12451,     2662,            -637,    -3833,
    278         3768,      655,           -2708,   -16305,
    279         14745,    23511,            2582,    15543,
    280         19169,     2457,            -755,    -4546,
    281         20152,     5079,             318,     1913,
    282         6881,     4096,               0,        0,
    283         20480,     8560,            1089,     6556,
    284         19660,      737,           -2534,   -15255,
    285         19005,     4259,              58,      347,
    286         7864,     2088,            -995,    -5993,
    287         11468,    12288,            1623,     9771,
    288         15892,     1474,           -1510,    -9090,
    289         15728,     4628,             180,     1086,
    290         9175,     1433,           -1552,    -9341,
    291         16056,     7004,             793,     4772,
    292         14827,      737,           -2534,   -15255,
    293         15073,     2252,            -884,    -5321,
    294         5079,     1228,           -1780,   -10714,
    295         13271,    17326,            2131,    12827,
    296         16547,     2334,            -831,    -5002,
    297         15073,     5816,             518,     3118,
    298         3932,     3686,            -156,     -938,
    299         14254,     8601,            1096,     6598,
    300         16875,      778,           -2454,   -14774,
    301         15073,     3809,            -107,     -646,
    302         6062,      614,           -2804,   -16879,
    303         9338,     9256,            1204,     7251,
    304         13271,     1761,           -1247,    -7508,
    305         13271,     3522,            -223,    -1343,
    306         2457,     1966,           -1084,    -6529,
    307         11468,     5529,             443,     2668,
    308         10485,      737,           -2534,   -15255,
    309         11632,     3194,            -367,    -2212,
    310         1474,      778,           -2454,   -14774
    311     };
    312 
    313     /*--------------------------------------------------------------------------*/
    314 #ifdef __cplusplus
    315 }
    316 #endif
    317 
    318 /*
    319 ------------------------------------------------------------------------------
    320  FUNCTION NAME:
    321 ------------------------------------------------------------------------------
    322  INPUT AND OUTPUT DEFINITIONS
    323 
    324  Inputs:
    325     None
    326 
    327  Outputs:
    328     None
    329 
    330  Returns:
    331     None
    332 
    333  Global Variables Used:
    334     None
    335 
    336  Local Variables Needed:
    337     None
    338 
    339 ------------------------------------------------------------------------------
    340  FUNCTION DESCRIPTION
    341 
    342  None
    343 
    344 ------------------------------------------------------------------------------
    345  REQUIREMENTS
    346 
    347  None
    348 
    349 ------------------------------------------------------------------------------
    350  REFERENCES
    351 
    352  [1] qua_gain.tab,  UMTS GSM AMR speech codec,
    353                     R99 - Version 3.2.0, March 2, 2001
    354 
    355 ------------------------------------------------------------------------------
    356  PSEUDO-CODE
    357 
    358 
    359 ------------------------------------------------------------------------------
    360  RESOURCES USED [optional]
    361 
    362  When the code is written for a specific target processor the
    363  the resources used should be documented below.
    364 
    365  HEAP MEMORY USED: x bytes
    366 
    367  STACK MEMORY USED: x bytes
    368 
    369  CLOCK CYCLES: (cycle count equation for this function) + (variable
    370                 used to represent cycle count for each subroutine
    371                 called)
    372      where: (cycle count variable) = cycle count for [subroutine
    373                                      name]
    374 
    375 ------------------------------------------------------------------------------
    376  CAUTION [optional]
    377  [State any special notes, constraints or cautions for users of this function]
    378 
    379 ------------------------------------------------------------------------------
    380 */
    381 
    382 /*----------------------------------------------------------------------------
    383 ; FUNCTION CODE
    384 ----------------------------------------------------------------------------*/
    385 
    386 
    387 
    388 
    389 
    390 
    391 
    392