⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gain_util.c

📁 audio-video-codecs.rar语音编解码器
💻 C
📖 第 1 页 / 共 5 页
字号:
/*/////////////////////////////////////////////////////////////////////////////
//
//                  INTEL CORPORATION PROPRIETARY INFORMATION
//     This software is supplied under the terms of a license agreement or
//     nondisclosure agreement with Intel Corporation and may not be copied
//     or disclosed except in accordance with the terms of that agreement.
//          Copyright(c) 2005-2007 Intel Corporation. All Rights Reserved.
//
//     Intel(R) Integrated Performance Primitives
//     USC - Unified Speech Codec interface library
//
// By downloading and installing USC codec, you hereby agree that the
// accompanying Materials are being provided to you under the terms and
// conditions of the End User License Agreement for the Intel(R) Integrated
// Performance Primitives product previously accepted by you. Please refer
// to the file ippEULA.rtf or ippEULA.txt located in the root directory of your Intel(R) IPP
// product installation for more information.
//
// A speech coding standards promoted by ITU, ETSI, 3GPP and other
// organizations. Implementations of these standards, or the standard enabled
// platforms may require licenses from various entities, including
// Intel Corporation.
//
//
// Purpose: GSMAMR speech codec: GAIN utilities.
//
*/

#include "owngsmamr.h"
/*********************************************************************************
*   Scalar quantization tables of the codebook gain.
*********************************************************************************/
static __ALIGN32 CONST Ipp16s pTblQntGainCode[LEN_QNT_GAIN*3] =
{
     159,      -3776,       -22731,         206,      -3394,       -20428,          268,      -3005,
  -18088,        349,        -2615,      -15739,        419,        -2345,       -14113,        482,
   -2138,     -12867,          554,       -1932,     -11629,          637,        -1726,     -10387,
     733,      -1518,        -9139,         842,      -1314,        -7906,          969,      -1106,
   -6656,       1114,         -900,        -5416,      1281,         -694,        -4173,       1473,
    -487,      -2931,         1694,         -281,     -1688,         1948,          -75,       -445,
    2241,        133,          801,         2577,       339,         2044,         2963,        545,
    3285,       3408,          752,         4530,      3919,          958,         5772,       4507,
    1165,       7016,         5183,         1371,      8259,         5960,         1577,       9501,
    6855,       1784,        10745,         7883,      1991,        11988,         9065,       2197,
   13231,      10425,         2404,        14474,     12510,         2673,        16096,      16263,
    3060,      18429,        21142,         3448,     20763,        27485,         3836,      23097
};
/****************************************************************************
 * Function: ownQntGainCodebook_GSMAMR()
 ***************************************************************************/
Ipp16s ownQntGainCodebook_GSMAMR (IppSpchBitRate rate, Ipp16s expGainCodeCB, Ipp16s fracGainCodeCB,
                                 Ipp16s *gain, Ipp16s *pQntEnergyErr_M122, Ipp16s *pQntEnergyErr)
{
    const Ipp16s *p;
    Ipp16s i, index;
    Ipp16s predGainCB, err, err_min;
    Ipp16s g_q0;
    g_q0 = 0;

    if(rate == IPP_SPCHBR_12200)  g_q0 = (Ipp16s)(*gain >> 1);

    predGainCB = (Ipp16s)(ownPow2_GSMAMR (expGainCodeCB, fracGainCodeCB));
    if (rate == IPP_SPCHBR_12200) predGainCB = Cnvrt_32s16s(predGainCB << 4);
    else predGainCB = Cnvrt_32s16s(predGainCB << 5);

    p = &pTblQntGainCode[0];
    if(rate == IPP_SPCHBR_12200)
       err_min = Abs_16s((Ipp16s)(g_q0 - (Ipp16s)((predGainCB * *p++) >> 15)));
    else
       err_min = Abs_16s((Ipp16s)(*gain - (Ipp16s)((predGainCB * *p++) >> 15)));

    p += 2;
    index = 0;
    for (i = 1; i < LEN_QNT_GAIN; i++)  {
       if (rate == IPP_SPCHBR_12200) err = Abs_16s((Ipp16s)(g_q0 - ((predGainCB * *p++) >> 15)));
       else err = Abs_16s((Ipp16s)(*gain - ((predGainCB * *p++) >> 15)));
       p += 2;
       if (err < err_min) { err_min = err; index = i; }
    }

    p = &pTblQntGainCode[index * 3];
    if (rate == IPP_SPCHBR_12200) *gain = Cnvrt_32s16s(((predGainCB * *p++) >> 15) << 1);
    else *gain = (Ipp16s)((predGainCB * *p++) >> 15);

    *pQntEnergyErr_M122 = *p++;
    *pQntEnergyErr = *p;
    return index;
}

/***************************************************************************
 * Function: ownQntGainPitch_M7950_GSMAMR()                                                     *
 ***************************************************************************/
Ipp16s ownQntGainPitch_M7950_GSMAMR (Ipp16s gainPitchLimit, Ipp16s *gain, Ipp16s *gain_cand, Ipp16s *gain_cind)
{
    Ipp16s i, index;
    Ipp16s ii;

    index = ownQntGainPitch_M122_GSMAMR(gainPitchLimit,*gain);

    /* compute three pitchGainVar candidates around the index */

    if (index == 0) ii = index;
    else {
        if (index == LEN_QNT_PITCH-1 || TableQuantGainPitch[index+1] > gainPitchLimit) ii = (Ipp16s)(index - 2);
        else ii = (Ipp16s)(index - 1);
    }

    /* store candidate indices and values */
    for (i = 0; i < 3; i++)  {
        gain_cind[i] = ii;
        gain_cand[i] = TableQuantGainPitch[ii];
        ii++;
    }

    *gain = TableQuantGainPitch[index];
    return index;
}

Ipp16s ownQntGainPitch_M122_GSMAMR (Ipp16s gainPitchLimit, Ipp16s gain)
{
    Ipp16s i, index,  err_min;
    IPP_ALIGNED_ARRAY (16,Ipp16s,gain_diff,LEN_QNT_PITCH);

    ippsSubC_16s_Sfs(TableQuantGainPitch, gain, gain_diff, LEN_QNT_PITCH, 0);
    ippsAbs_16s_I(gain_diff,LEN_QNT_PITCH);

    err_min = gain_diff[0];
    index = 0;

    for (i = 1; i < LEN_QNT_PITCH; i++) {
        if (TableQuantGainPitch[i] > gainPitchLimit) break; /* qua_gain_pitch is mounting */
        if (gain_diff[i] < err_min) {
            err_min = gain_diff[i];
            index = i;
        }
    }
    return index;
}

#define MIN_QUA_ENER         ( -5443) /* Q10 <->    log2 (0.0251189) */
#define MIN_QUA_ENER_MR122   (-32768) /* Q10 <-> 20*log10(0.0251189) */
#define MAX_QUA_ENER         (  3037) /* Q10 <->    log2 (7.8125)    */
#define MAX_QUA_ENER_MR122   ( 18284) /* Q10 <-> 20*log10(7.8125)    */

static __ALIGN32 CONST Ipp16s table_gain_MR475[VEC_QNT_M475_SIZE*4] = {
   812,          128,           542,      140,       2873,         1135,          2266,     3402,
  2067,          563,         12677,      647,       4132,         1798,          5601,     5285,
  7689,          374,          3735,      441,      10912,         2638,         11807,     2494,
 20490,          797,          5218,      675,       6724,         8354,          5282,     1696,
  1488,          428,          5882,      452,       5332,         4072,          3583,     1268,
  2469,          901,         15894,     1005,      14982,         3271,         10331,     4858,
  3635,         2021,          2596,      835,      12360,         4892,         12206,     1704,
 13432,         1604,          9118,     2341,       3968,         1538,          5479,     9936,
  3795,          417,          1359,      414,       3640,         1569,          7995,     3541,
 11405,          645,          8552,      635,       4056,         1377,         16608,     6124,
 11420,          700,          2007,      607,      12415,         1578,         11119,     4654,
 13680,         1708,         11990,     1229,       7996,         7297,         13231,     5715,
  2428,         1159,          2073,     1941,       6218,         6121,          3546,     1804,
  8925,         1802,          8679,     1580,      13935,         3576,         13313,     6237,
  6142,         1130,          5994,     1734,      14141,         4662,         11271,     3321,
 12226,         1551,         13931,     3015,       5081,        10464,          9444,     6706,
  1689,          683,          1436,     1306,       7212,         3933,          4082,     2713,
  7793,          704,         15070,      802,       6299,         5212,          4337,     5357,
  6676,          541,          6062,      626,      13651,         3700,         11498,     2408,
 16156,          716,         12177,      751,       8065,        11489,          6314,     2256,
  4466,          496,          7293,      523,      10213,         3833,          8394,     3037,
  8403,          966,         14228,     1880,       8703,         5409,         16395,     4863,
  7420,         1979,          6089,     1230,       9371,         4398,         14558,     3363,
 13559,         2873,         13163,     1465,       5534,         1678,         13138,    14771,
  7338,          600,          1318,      548,       4252,         3539,         10044,     2364,
 10587,          622,         13088,      669,      14126,         3526,          5039,     9784,
 15338,          619,          3115,      590,      16442,         3013,         15542,     4168,
 15537,         1611,         15405,     1228,      16023,         9299,          7534,     4976,
  1990,         1213,         11447,     1157,      12512,         5519,          9475,     2644,
  7716,         2034,         13280,     2239,      16011,         5093,          8066,     6761,
 10083,         1413,          5002,     2347,      12523,         5975,         15126,     2899,
 18264,         2289,         15827,     2527,      16265,        10254,         14651,    11319,
  1797,          337,          3115,      397,       3510,         2928,          4592,     2670,
  7519,          628,         11415,      656,       5946,         2435,          6544,     7367,
  8238,          829,          4000,      863,      10032,         2492,         16057,     3551,
 18204,         1054,          6103,     1454,       5884,         7900,         18752,     3468,
  1864,          544,          9198,      683,      11623,         4160,          4594,     1644,
  3158,         1157,         15953,     2560,      12349,         3733,         17420,     5260,
  6106,         2004,          2917,     1742,      16467,         5257,         16787,     1680,
 17205,         1759,          4773,     3231,       7386,         6035,         14342,    10012,
  4035,          442,          4194,      458,       9214,         2242,          7427,     4217,
 12860,          801,         11186,      825,      12648,         2084,         12956,     6554,
  9505,          996,          6629,      985,      10537,         2502,         15289,     5006,
 12602,         2055,         15484,     1653,      16194,         6921,         14231,     5790,
  2626,          828,          5615,     1686,      13663,         5778,          3668,     1554,
 11313,         2633,          9770,     1459,      14003,         4733,         15897,     6291,
  6278,         1870,          7910,     2285,      16978,         4571,         16576,     3849,
 15248,         2311,         16023,     3244,      14459,        17808,         11847,     2763,
  1981,         1407,          1400,      876,       4335,         3547,          4391,     4210,
  5405,          680,         17461,      781,       6501,         5118,          8091,     7677,
  7355,          794,          8333,     1182,      15041,         3160,         14928,     3039,
 20421,          880,         14545,      852,      12337,        14708,          6904,     1920,
  4225,          933,          8218,     1087,      10659,         4084,         10082,     4533,
  2735,          840,         20657,     1081,      16711,         5966,         15873,     4578,
 10871,         2574,          3773,     1166,      14519,         4044,         20699,     2627,
 15219,         2734,         15274,     2186,       6257,         3226,         13125,    19480,
  7196,          930,          2462,     1618,       4515,         3092,         13852,     4277,
 10460,          833,         17339,      810,      16891,         2289,         15546,     8217,
 13603,         1684,          3197,     1834,      15948,         2820,         15812,     5327,
 17006,         2438,         16788,     1326,      15671,         8156,         11726,     8556,
  3762,         2053,          9563,     1317,      13561,         6790,         12227,     1936,
  8180,         3550,         13287,     1778,      16299,         6599,         16291,     7758,
  8521,         2551,          7225,     2645,      18269,         7489,         16885,     2248,
 17882,         2884,         17265,     3328,       9417,        20162,         11042,     8320,
  1286,          620,          1431,      583,       5993,         2289,          3978,     3626,
  5144,          752,         13409,      830,       5553,         2860,         11764,     5908,
 10737,          560,          5446,      564,      13321,         3008,         11946,     3683,
 19887,          798,          9825,      728,      13663,         8748,          7391,     3053,
  2515,          778,          6050,      833,       6469,         5074,          8305,     2463,
  6141,         1865,         15308,     1262,      14408,         4547,         13663,     4515,
  3137,         2983,          2479,     1259,      15088,         4647,         15382,     2607,
 14492,         2392,         12462,     2537,       7539,         2949,         12909,    12060,
  5468,          684,          3141,      722,       5081,         1274,         12732,     4200,
 15302,          681,          7819,      592,       6534,         2021,         16478,     8737,
 13364,          882,          5397,      899,      14656,         2178,         14741,     4227,
 14270,         1298,         13929,     2029,      15477,         7482,         15815,     4572,
  2521,         2013,          5062,     1804,       5159,         6582,          7130,     3597,
 10920,         1611,         11729,     1708,      16903,         3455,         16268,     6640,
  9306,         1007,          9369,     2106,      19182,         5037,         12441,     4269,
 15919,         1332,         15357,     3512,      11898,        14141,         16101,     6854,
  2010,          737,          3779,      861,      11454,         2880,          3564,     3540,
  9057,         1241,         12391,      896,       8546,         4629,         11561,     5776,
  8129,          589,          8218,      588,      18728,         3755,         12973,     3149,
 15729,          758,         16634,      754,      15222,        11138,         15871,     2208,
  4673,          610,         10218,      678,      15257,         4146,          5729,     3327,
  8377,         1670,         19862,     2321,      15450,         5511,         14054,     5481,
  5728,         2888,          7580,     1346,      14384,         5325,         16236,     3950,
 15118,         3744,         15306,     1435,      14597,         4070,         12301,    15696,
  7617,         1699,          2170,      884,       4459,         4567,         18094,     3306,
 12742,          815,         14926,      907,      15016,         4281,         15518,     8368,
 17994,         1087,          2358,      865,      16281,         3787,         15679,     4596,
 16356,         1534,         16584,     2210,      16833,         9697,         15929,     4513,
  3277,         1085,          9643,     2187,      11973,         6068,          9199,     4462,
  8955,         1629,         10289,     3062,      16481,         5155,         15466,     7066,
 13678,         2543,          5273,     2277,      16746,         6213,         16655,     3408,
 20304,         3363,         18688,     1985,      14172,        12867,         15154,    15703,
  4473,         1020,          1681,      886,       4311,         4301,          8952,     3657,
  5893,         1147,         11647,     1452,      15886,         2227,          4582,     6644,
  6929,         1205,          6220,      799,      12415,         3409,         15968,     3877,
 19859,         2109,          9689,     2141,      14742,         8830,         14480,     2599,
  1817,         1238,          7771,      813,      19079,         4410,          5554,     2064,
  3687,         2844,         17435,     2256,      16697,         4486,         16199,     5388,
  8028,         2763,          3405,     2119,      17426,         5477,         13698,     2786,
 19879,         2720,          9098,     3880,      18172,         4833,         17336,    12207,
  5116,          996,          4935,      988,       9888,         3081,          6014,     5371,
 15881,         1667,          8405,     1183,      15087,         2366,         19777,     7002,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -