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

📄 gain_q.c

📁 AMR-NB 的编码实现,纯C, VC下建立工程即可用.
💻 C
📖 第 1 页 / 共 4 页
字号:

#include "gain_q.h"
#include "AmrCode_Comm.h"
#include "basic_op.h"
#include "bitno_tab.h"
#include "qgain475.h"


#define VQ_SIZE_HIGHRATES 128static const Word16 table_gain_highrates[VQ_SIZE_HIGHRATES*4] = 
{
/* Note: column 4 (qua_ener) contains the original values from IS641         to ensure bit-exactness; however, they are not exactly the         rounded value of (20*log10(g_fac))                          *//*g_pit,    g_fac,  qua_ener_MR122, qua_ener */    577,      662,           -2692,   -16214,    806,     1836,           -1185,    -7135,   3109,     1052,           -2008,   -12086,   4181,     1387,           -1600,    -9629,   2373,     1425,           -1560,    -9394,   3248,     1985,           -1070,    -6442,   1827,     2320,            -840,    -5056,    941,     3314,            -313,    -1885,   2351,     2977,            -471,    -2838,   3616,     2420,            -777,    -4681,   3451,     3096,            -414,    -2490,   2955,     4301,              72,      434,   1848,     4500,             139,      836,   3884,     5416,             413,     2484,   1187,     7210,             835,     5030,   3083,     9000,            1163,     7002,   7384,      883,           -2267,   -13647,   5962,     1506,           -1478,    -8900,   5155,     2134,            -963,    -5800,   7944,     2009,           -1052,    -6335,   6507,     2250,            -885,    -5327,   7670,     2752,            -588,    -3537,   5952,     3016,            -452,    -2724,   4898,     3764,            -125,     -751,   6989,     3588,            -196,    -1177,   8174,     3978,             -43,     -260,   6064,     4404,             107,      645,   7709,     5087,             320,     1928,   5523,     6021,             569,     3426,   7769,     7126,             818,     4926,   6060,     7938,             977,     5885,   5594,    11487,            1523,     9172,  10581,     1356,           -1633,    -9831,   9049,     1597,           -1391,    -8380,   9794,     2035,           -1033,    -6220,   8946,     2415,            -780,    -4700,  10296,     2584,            -681,    -4099,   9407,     2734,            -597,    -3595,   8700,     3218,            -356,    -2144,   9757,     3395,            -277,    -1669,  10177,     3892,             -75,     -454,   9170,     4528,             148,      891,  10152,     5004,             296,     1781,   9114,     5735,             497,     2993,  10500,     6266,             628,     3782,  10110,     7631,             919,     5534,   8844,     8727,            1117,     6728,   8956,    12496,            1648,     9921,  12924,      976,           -2119,   -12753,  11435,     1755,           -1252,    -7539,  12138,     2328,            -835,    -5024,  11388,     2368,            -810,    -4872,  10700,     3064,            -429,    -2580,  12332,     2861,            -530,    -3192,  11722,     3327,            -307,    -1848,  11270,     3700,            -150,     -904,  10861,     4413,             110,      663,  12082,     4533,             150,      902,  11283,     5205,             354,     2132,  11960,     6305,             637,     3837,  11167,     7534,             900,     5420,  12128,     8329,            1049,     6312,  10969,    10777,            1429,     8604,  10300,    17376,            2135,    12853,  13899,     1681,           -1316,    -7921,  12580,     2045,           -1026,    -6179,  13265,     2439,            -766,    -4610,  14033,     2989,            -465,    -2802,  13452,     3098,            -413,    -2482,  12396,     3658,            -167,    -1006,  13510,     3780,            -119,     -713,  12880,     4272,              62,      374,  13533,     4861,             253,     1523,  12667,     5457,             424,     2552,  13854,     6106,             590,     3551,  13031,     6483,             678,     4084,  13557,     7721,             937,     5639,  12957,     9311,            1213,     7304,  13714,    11551,            1532,     9221,  12591,    15206,            1938,    11667,  15113,     1540,           -1445,    -8700,  15072,     2333,            -832,    -5007,  14527,     2511,            -723,    -4352,  14692,     3199,            -365,    -2197,  15382,     3560,            -207,    -1247,  14133,     3960,             -50,     -300,  15102,     4236,              50,      298,  14332,     4824,             242,     1454,  14846,     5451,             422,     2542,  15306,     6083,             584,     3518,  14329,     6888,             768,     4623,  15060,     7689,             930,     5602,  14406,     9426,            1231,     7413,  15387,     9741,            1280,     7706,  14824,    14271,            1844,    11102,  13600,    24939,            2669,    16067,  16396,     1969,           -1082,    -6517,  16817,     2832,            -545,    -3283,  15713,     2843,            -539,    -3248,  16104,     3336,            -303,    -1825,  16384,     3963,             -49,     -294,  16940,     4579,             165,      992,  15711,     4599,             171,     1030,  16222,     5448,             421,     2537,  16832,     6382,             655,     3945,  15745,     7141,             821,     4944,  16326,     7469,             888,     5343,  16611,     8624,            1100,     6622,  17028,    10418,            1379,     8303,  15905,    11817,            1565,     9423,  16878,    14690,            1887,    11360,  16515,    20870,            2406,    14483,  18142,     2083,            -999,    -6013,  19401,     3178,            -375,    -2257,  17508,     3426,            -264,    -1589,  20054,     4027,             -25,     -151,  18069,     4249,              54,      326,  18952,     5066,             314,     1890,  17711,     5402,             409,     2461,  19835,     6192,             610,     3676,  17950,     7014,             795,     4784,  21318,     7877,             966,     5816,  17910,     9289,            1210,     7283,  19144,     9290,            1210,     7284,  20517,    11381,            1510,     9089,  18075,    14485,            1866,    11234,  19999,    17882,            2177,    13108,  18842,    32764,            3072,    18494};/* table used in 'low' rates: MR475, MR515, MR59 */#define VQ_SIZE_LOWRATES 64static const Word16 table_gain_lowrates[VQ_SIZE_LOWRATES*4] = {/*g_pit,    g_fac,  qua_ener_MR122, qua_ener */  10813,    28753,            2879,    17333,  20480,     2785,            -570,    -3431,  18841,     6594,             703,     4235,   6225,     7413,             876,     5276,  17203,    10444,            1383,     8325,  21626,     1269,           -1731,   -10422,  21135,     4423,             113,      683,  11304,     1556,           -1430,    -8609,  19005,    12820,            1686,    10148,  17367,     2498,            -731,    -4398,  17858,     4833,             244,     1472,   9994,     2498,            -731,    -4398,  17530,     7864,             964,     5802,  14254,     1884,           -1147,    -6907,  15892,     3153,            -387,    -2327,   6717,     1802,           -1213,    -7303,  18186,    20193,            2357,    14189,  18022,     3031,            -445,    -2678,  16711,     5857,             528,     3181,   8847,     4014,             -30,     -180,  15892,     8970,            1158,     6972,  18022,     1392,           -1594,    -9599,  16711,     4096,               0,        0,   8192,      655,           -2708,   -16305,  15237,    13926,            1808,    10884,  14254,     3112,            -406,    -2444,  14090,     4669,             193,     1165,   5406,     2703,            -614,    -3697,  13434,     6553,             694,     4180,  12451,      901,           -2237,   -13468,  12451,     2662,            -637,    -3833,   3768,      655,           -2708,   -16305,  14745,    23511,            2582,    15543,  19169,     2457,            -755,    -4546,  20152,     5079,             318,     1913,   6881,     4096,               0,        0,  20480,     8560,            1089,     6556,  19660,      737,           -2534,   -15255,  19005,     4259,              58,      347,   7864,     2088,            -995,    -5993,  11468,    12288,            1623,     9771,  15892,     1474,           -1510,    -9090,  15728,     4628,             180,     1086,   9175,     1433,           -1552,    -9341,  16056,     7004,             793,     4772,  14827,      737,           -2534,   -15255,  15073,     2252,            -884,    -5321,   5079,     1228,           -1780,   -10714,  13271,    17326,            2131,    12827,  16547,     2334,            -831,    -5002,  15073,     5816,             518,     3118,   3932,     3686,            -156,     -938,  14254,     8601,            1096,     6598,  16875,      778,           -2454,   -14774,  15073,     3809,            -107,     -646,   6062,      614,           -2804,   -16879,   9338,     9256,            1204,     7251,  13271,     1761,           -1247,    -7508,  13271,     3522,            -223,    -1343,   2457,     1966,           -1084,    -6529,  11468,     5529,             443,     2668,  10485,      737,           -2534,   -15255,  11632,     3194,            -367,    -2212,   1474,      778,           -2454,   -14774};


/*******************************************************************************                         LOCAL VARIABLES AND TABLES******************************************************************************/#define NPRED 4  /* number of prediction taps *//* MA prediction coefficients (Q13) */static const Word16 pred[NPRED] = {5571, 4751, 2785, 1556};/* average innovation energy.                               *//* MEAN_ENER  = 36.0/constant, constant = 20*Log10(2)       */#define MEAN_ENER_MR122  783741L  /* 36/(20*log10(2)) (Q17) *//* MA prediction coefficients (Q6)  */static const Word16 pred_MR122[NPRED] = {44, 37, 22, 12};/* minimum quantized energy: -14 dB */#define MIN_ENERGY       -14336       /* 14                 Q10 */#define MIN_ENERGY_MR122  -2381       /* 14 / (20*log10(2)) Q10 */ 

/***************************************************************************  Function:   gainQuant_init*  Purpose:    Allocates state memory and initializes state memory****************************************************************************/
int gainQuant_init (gainQuantState **state){

	gainQuantState* pgainQuantState;
	gc_predState* pgc_predState, * pgc_predUnqState;
	GainAdaptState* pGainAdaptState;

	if (state == (gainQuantState **) NULL)
	{
		fprintf(stderr, "gainQuant_init: invalid parameter\n");
		return -1;
	}
	*state = NULL;

	/* allocate memory */
	if ((pgainQuantState= (gainQuantState *) malloc(sizeof(gainQuantState))) == NULL)
	{
		fprintf(stderr, "gainQuant_init: can not malloc state structure\n");
		return -1;
	}

	pgainQuantState->gain_idx_ptr = NULL;

	pgainQuantState->gc_predSt = NULL;
	pgainQuantState->gc_predUnqSt = NULL;
	pgainQuantState->adaptSt = NULL;

	/* Init sub states */
	// gc_pred_init(&pgainQuantState->gc_predSt);


	if (&pgainQuantState->gc_predSt  == (gc_predState **) NULL)
	{
		fprintf(stderr, "gc_pred_init: invalid parameter\n");
		return -1;
	}

	pgainQuantState->gc_predSt  = NULL;

	/* allocate memory */
	if ((pgc_predState= (gc_predState *) malloc(sizeof(gc_predState))) == NULL)
	{
		fprintf(stderr, "gc_pred_init: can not malloc state structure\n");
		return -1;
	}
	//gc_pred_reset(pgc_predState);
	pgc_predState->past_qua_en[0] = 
	pgc_predState->past_qua_en[1] = 
	pgc_predState->past_qua_en[2] = 
	pgc_predState->past_qua_en[3] = -14336;

	pgc_predState->past_qua_en_MR122[0] = 
	pgc_predState->past_qua_en_MR122[1] = 
	pgc_predState->past_qua_en_MR122[2] =
	pgc_predState->past_qua_en_MR122[3] = -2381;
	pgainQuantState->gc_predSt  = pgc_predState;

	//gc_pred_init(&pgainQuantState->gc_predUnqSt);
	if (&pgainQuantState->gc_predUnqSt== (gc_predState **) NULL)
	{
		fprintf(stderr, "gc_pred_init: invalid parameter\n");
		return -1;
	}

	pgainQuantState->gc_predUnqSt = NULL;

	/* allocate memory */
	if ((pgc_predUnqState= (gc_predState *) malloc(sizeof(gc_predState))) == NULL)
	{
		fprintf(stderr, "gc_pred_init: can not malloc state structure\n");
		return -1;
	}

	//gc_pred_reset(pgc_predUnqState);
	pgc_predUnqState->past_qua_en[0] = 

⌨️ 快捷键说明

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