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