xref: /aosp_15_r20/external/libopus/silk/tables_LTP.c (revision a58d3d2adb790c104798cd88c8a3aff4fa8b82cc)
1*a58d3d2aSXin Li /***********************************************************************
2*a58d3d2aSXin Li Copyright (c) 2006-2011, Skype Limited. All rights reserved.
3*a58d3d2aSXin Li Redistribution and use in source and binary forms, with or without
4*a58d3d2aSXin Li modification, are permitted provided that the following conditions
5*a58d3d2aSXin Li are met:
6*a58d3d2aSXin Li - Redistributions of source code must retain the above copyright notice,
7*a58d3d2aSXin Li this list of conditions and the following disclaimer.
8*a58d3d2aSXin Li - Redistributions in binary form must reproduce the above copyright
9*a58d3d2aSXin Li notice, this list of conditions and the following disclaimer in the
10*a58d3d2aSXin Li documentation and/or other materials provided with the distribution.
11*a58d3d2aSXin Li - Neither the name of Internet Society, IETF or IETF Trust, nor the
12*a58d3d2aSXin Li names of specific contributors, may be used to endorse or promote
13*a58d3d2aSXin Li products derived from this software without specific prior written
14*a58d3d2aSXin Li permission.
15*a58d3d2aSXin Li THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16*a58d3d2aSXin Li AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17*a58d3d2aSXin Li IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18*a58d3d2aSXin Li ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19*a58d3d2aSXin Li LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20*a58d3d2aSXin Li CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21*a58d3d2aSXin Li SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22*a58d3d2aSXin Li INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23*a58d3d2aSXin Li CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24*a58d3d2aSXin Li ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25*a58d3d2aSXin Li POSSIBILITY OF SUCH DAMAGE.
26*a58d3d2aSXin Li ***********************************************************************/
27*a58d3d2aSXin Li 
28*a58d3d2aSXin Li #ifdef HAVE_CONFIG_H
29*a58d3d2aSXin Li #include "config.h"
30*a58d3d2aSXin Li #endif
31*a58d3d2aSXin Li 
32*a58d3d2aSXin Li #include "tables.h"
33*a58d3d2aSXin Li 
34*a58d3d2aSXin Li const opus_uint8 silk_LTP_per_index_iCDF[3] = {
35*a58d3d2aSXin Li        179,     99,      0
36*a58d3d2aSXin Li };
37*a58d3d2aSXin Li 
38*a58d3d2aSXin Li static const opus_uint8 silk_LTP_gain_iCDF_0[8] = {
39*a58d3d2aSXin Li         71,     56,     43,     30,     21,     12,      6,      0
40*a58d3d2aSXin Li };
41*a58d3d2aSXin Li 
42*a58d3d2aSXin Li static const opus_uint8 silk_LTP_gain_iCDF_1[16] = {
43*a58d3d2aSXin Li        199,    165,    144,    124,    109,     96,     84,     71,
44*a58d3d2aSXin Li         61,     51,     42,     32,     23,     15,      8,      0
45*a58d3d2aSXin Li };
46*a58d3d2aSXin Li 
47*a58d3d2aSXin Li static const opus_uint8 silk_LTP_gain_iCDF_2[32] = {
48*a58d3d2aSXin Li        241,    225,    211,    199,    187,    175,    164,    153,
49*a58d3d2aSXin Li        142,    132,    123,    114,    105,     96,     88,     80,
50*a58d3d2aSXin Li         72,     64,     57,     50,     44,     38,     33,     29,
51*a58d3d2aSXin Li         24,     20,     16,     12,      9,      5,      2,      0
52*a58d3d2aSXin Li };
53*a58d3d2aSXin Li 
54*a58d3d2aSXin Li static const opus_uint8 silk_LTP_gain_BITS_Q5_0[8] = {
55*a58d3d2aSXin Li         15,    131,    138,    138,    155,    155,    173,    173
56*a58d3d2aSXin Li };
57*a58d3d2aSXin Li 
58*a58d3d2aSXin Li static const opus_uint8 silk_LTP_gain_BITS_Q5_1[16] = {
59*a58d3d2aSXin Li         69,     93,    115,    118,    131,    138,    141,    138,
60*a58d3d2aSXin Li        150,    150,    155,    150,    155,    160,    166,    160
61*a58d3d2aSXin Li };
62*a58d3d2aSXin Li 
63*a58d3d2aSXin Li static const opus_uint8 silk_LTP_gain_BITS_Q5_2[32] = {
64*a58d3d2aSXin Li        131,    128,    134,    141,    141,    141,    145,    145,
65*a58d3d2aSXin Li        145,    150,    155,    155,    155,    155,    160,    160,
66*a58d3d2aSXin Li        160,    160,    166,    166,    173,    173,    182,    192,
67*a58d3d2aSXin Li        182,    192,    192,    192,    205,    192,    205,    224
68*a58d3d2aSXin Li };
69*a58d3d2aSXin Li 
70*a58d3d2aSXin Li const opus_uint8 * const silk_LTP_gain_iCDF_ptrs[NB_LTP_CBKS] = {
71*a58d3d2aSXin Li     silk_LTP_gain_iCDF_0,
72*a58d3d2aSXin Li     silk_LTP_gain_iCDF_1,
73*a58d3d2aSXin Li     silk_LTP_gain_iCDF_2
74*a58d3d2aSXin Li };
75*a58d3d2aSXin Li 
76*a58d3d2aSXin Li const opus_uint8 * const silk_LTP_gain_BITS_Q5_ptrs[NB_LTP_CBKS] = {
77*a58d3d2aSXin Li     silk_LTP_gain_BITS_Q5_0,
78*a58d3d2aSXin Li     silk_LTP_gain_BITS_Q5_1,
79*a58d3d2aSXin Li     silk_LTP_gain_BITS_Q5_2
80*a58d3d2aSXin Li };
81*a58d3d2aSXin Li 
82*a58d3d2aSXin Li static const opus_int8 silk_LTP_gain_vq_0[8][5] =
83*a58d3d2aSXin Li {
84*a58d3d2aSXin Li {
85*a58d3d2aSXin Li          4,      6,     24,      7,      5
86*a58d3d2aSXin Li },
87*a58d3d2aSXin Li {
88*a58d3d2aSXin Li          0,      0,      2,      0,      0
89*a58d3d2aSXin Li },
90*a58d3d2aSXin Li {
91*a58d3d2aSXin Li         12,     28,     41,     13,     -4
92*a58d3d2aSXin Li },
93*a58d3d2aSXin Li {
94*a58d3d2aSXin Li         -9,     15,     42,     25,     14
95*a58d3d2aSXin Li },
96*a58d3d2aSXin Li {
97*a58d3d2aSXin Li          1,     -2,     62,     41,     -9
98*a58d3d2aSXin Li },
99*a58d3d2aSXin Li {
100*a58d3d2aSXin Li        -10,     37,     65,     -4,      3
101*a58d3d2aSXin Li },
102*a58d3d2aSXin Li {
103*a58d3d2aSXin Li         -6,      4,     66,      7,     -8
104*a58d3d2aSXin Li },
105*a58d3d2aSXin Li {
106*a58d3d2aSXin Li         16,     14,     38,     -3,     33
107*a58d3d2aSXin Li }
108*a58d3d2aSXin Li };
109*a58d3d2aSXin Li 
110*a58d3d2aSXin Li static const opus_int8 silk_LTP_gain_vq_1[16][5] =
111*a58d3d2aSXin Li {
112*a58d3d2aSXin Li {
113*a58d3d2aSXin Li         13,     22,     39,     23,     12
114*a58d3d2aSXin Li },
115*a58d3d2aSXin Li {
116*a58d3d2aSXin Li         -1,     36,     64,     27,     -6
117*a58d3d2aSXin Li },
118*a58d3d2aSXin Li {
119*a58d3d2aSXin Li         -7,     10,     55,     43,     17
120*a58d3d2aSXin Li },
121*a58d3d2aSXin Li {
122*a58d3d2aSXin Li          1,      1,      8,      1,      1
123*a58d3d2aSXin Li },
124*a58d3d2aSXin Li {
125*a58d3d2aSXin Li          6,    -11,     74,     53,     -9
126*a58d3d2aSXin Li },
127*a58d3d2aSXin Li {
128*a58d3d2aSXin Li        -12,     55,     76,    -12,      8
129*a58d3d2aSXin Li },
130*a58d3d2aSXin Li {
131*a58d3d2aSXin Li         -3,      3,     93,     27,     -4
132*a58d3d2aSXin Li },
133*a58d3d2aSXin Li {
134*a58d3d2aSXin Li         26,     39,     59,      3,     -8
135*a58d3d2aSXin Li },
136*a58d3d2aSXin Li {
137*a58d3d2aSXin Li          2,      0,     77,     11,      9
138*a58d3d2aSXin Li },
139*a58d3d2aSXin Li {
140*a58d3d2aSXin Li         -8,     22,     44,     -6,      7
141*a58d3d2aSXin Li },
142*a58d3d2aSXin Li {
143*a58d3d2aSXin Li         40,      9,     26,      3,      9
144*a58d3d2aSXin Li },
145*a58d3d2aSXin Li {
146*a58d3d2aSXin Li         -7,     20,    101,     -7,      4
147*a58d3d2aSXin Li },
148*a58d3d2aSXin Li {
149*a58d3d2aSXin Li          3,     -8,     42,     26,      0
150*a58d3d2aSXin Li },
151*a58d3d2aSXin Li {
152*a58d3d2aSXin Li        -15,     33,     68,      2,     23
153*a58d3d2aSXin Li },
154*a58d3d2aSXin Li {
155*a58d3d2aSXin Li         -2,     55,     46,     -2,     15
156*a58d3d2aSXin Li },
157*a58d3d2aSXin Li {
158*a58d3d2aSXin Li          3,     -1,     21,     16,     41
159*a58d3d2aSXin Li }
160*a58d3d2aSXin Li };
161*a58d3d2aSXin Li 
162*a58d3d2aSXin Li static const opus_int8 silk_LTP_gain_vq_2[32][5] =
163*a58d3d2aSXin Li {
164*a58d3d2aSXin Li {
165*a58d3d2aSXin Li         -6,     27,     61,     39,      5
166*a58d3d2aSXin Li },
167*a58d3d2aSXin Li {
168*a58d3d2aSXin Li        -11,     42,     88,      4,      1
169*a58d3d2aSXin Li },
170*a58d3d2aSXin Li {
171*a58d3d2aSXin Li         -2,     60,     65,      6,     -4
172*a58d3d2aSXin Li },
173*a58d3d2aSXin Li {
174*a58d3d2aSXin Li         -1,     -5,     73,     56,      1
175*a58d3d2aSXin Li },
176*a58d3d2aSXin Li {
177*a58d3d2aSXin Li         -9,     19,     94,     29,     -9
178*a58d3d2aSXin Li },
179*a58d3d2aSXin Li {
180*a58d3d2aSXin Li          0,     12,     99,      6,      4
181*a58d3d2aSXin Li },
182*a58d3d2aSXin Li {
183*a58d3d2aSXin Li          8,    -19,    102,     46,    -13
184*a58d3d2aSXin Li },
185*a58d3d2aSXin Li {
186*a58d3d2aSXin Li          3,      2,     13,      3,      2
187*a58d3d2aSXin Li },
188*a58d3d2aSXin Li {
189*a58d3d2aSXin Li          9,    -21,     84,     72,    -18
190*a58d3d2aSXin Li },
191*a58d3d2aSXin Li {
192*a58d3d2aSXin Li        -11,     46,    104,    -22,      8
193*a58d3d2aSXin Li },
194*a58d3d2aSXin Li {
195*a58d3d2aSXin Li         18,     38,     48,     23,      0
196*a58d3d2aSXin Li },
197*a58d3d2aSXin Li {
198*a58d3d2aSXin Li        -16,     70,     83,    -21,     11
199*a58d3d2aSXin Li },
200*a58d3d2aSXin Li {
201*a58d3d2aSXin Li          5,    -11,    117,     22,     -8
202*a58d3d2aSXin Li },
203*a58d3d2aSXin Li {
204*a58d3d2aSXin Li         -6,     23,    117,    -12,      3
205*a58d3d2aSXin Li },
206*a58d3d2aSXin Li {
207*a58d3d2aSXin Li          3,     -8,     95,     28,      4
208*a58d3d2aSXin Li },
209*a58d3d2aSXin Li {
210*a58d3d2aSXin Li        -10,     15,     77,     60,    -15
211*a58d3d2aSXin Li },
212*a58d3d2aSXin Li {
213*a58d3d2aSXin Li         -1,      4,    124,      2,     -4
214*a58d3d2aSXin Li },
215*a58d3d2aSXin Li {
216*a58d3d2aSXin Li          3,     38,     84,     24,    -25
217*a58d3d2aSXin Li },
218*a58d3d2aSXin Li {
219*a58d3d2aSXin Li          2,     13,     42,     13,     31
220*a58d3d2aSXin Li },
221*a58d3d2aSXin Li {
222*a58d3d2aSXin Li         21,     -4,     56,     46,     -1
223*a58d3d2aSXin Li },
224*a58d3d2aSXin Li {
225*a58d3d2aSXin Li         -1,     35,     79,    -13,     19
226*a58d3d2aSXin Li },
227*a58d3d2aSXin Li {
228*a58d3d2aSXin Li         -7,     65,     88,     -9,    -14
229*a58d3d2aSXin Li },
230*a58d3d2aSXin Li {
231*a58d3d2aSXin Li         20,      4,     81,     49,    -29
232*a58d3d2aSXin Li },
233*a58d3d2aSXin Li {
234*a58d3d2aSXin Li         20,      0,     75,      3,    -17
235*a58d3d2aSXin Li },
236*a58d3d2aSXin Li {
237*a58d3d2aSXin Li          5,     -9,     44,     92,     -8
238*a58d3d2aSXin Li },
239*a58d3d2aSXin Li {
240*a58d3d2aSXin Li          1,     -3,     22,     69,     31
241*a58d3d2aSXin Li },
242*a58d3d2aSXin Li {
243*a58d3d2aSXin Li         -6,     95,     41,    -12,      5
244*a58d3d2aSXin Li },
245*a58d3d2aSXin Li {
246*a58d3d2aSXin Li         39,     67,     16,     -4,      1
247*a58d3d2aSXin Li },
248*a58d3d2aSXin Li {
249*a58d3d2aSXin Li          0,     -6,    120,     55,    -36
250*a58d3d2aSXin Li },
251*a58d3d2aSXin Li {
252*a58d3d2aSXin Li        -13,     44,    122,      4,    -24
253*a58d3d2aSXin Li },
254*a58d3d2aSXin Li {
255*a58d3d2aSXin Li         81,      5,     11,      3,      7
256*a58d3d2aSXin Li },
257*a58d3d2aSXin Li {
258*a58d3d2aSXin Li          2,      0,      9,     10,     88
259*a58d3d2aSXin Li }
260*a58d3d2aSXin Li };
261*a58d3d2aSXin Li 
262*a58d3d2aSXin Li const opus_int8 * const silk_LTP_vq_ptrs_Q7[NB_LTP_CBKS] = {
263*a58d3d2aSXin Li     (opus_int8 *)&silk_LTP_gain_vq_0[0][0],
264*a58d3d2aSXin Li     (opus_int8 *)&silk_LTP_gain_vq_1[0][0],
265*a58d3d2aSXin Li     (opus_int8 *)&silk_LTP_gain_vq_2[0][0]
266*a58d3d2aSXin Li };
267*a58d3d2aSXin Li 
268*a58d3d2aSXin Li /* Maximum frequency-dependent response of the pitch taps above,
269*a58d3d2aSXin Li    computed as max(abs(freqz(taps))) */
270*a58d3d2aSXin Li static const opus_uint8 silk_LTP_gain_vq_0_gain[8] = {
271*a58d3d2aSXin Li       46,      2,     90,     87,     93,     91,     82,     98
272*a58d3d2aSXin Li };
273*a58d3d2aSXin Li 
274*a58d3d2aSXin Li static const opus_uint8 silk_LTP_gain_vq_1_gain[16] = {
275*a58d3d2aSXin Li      109,    120,    118,     12,    113,    115,    117,    119,
276*a58d3d2aSXin Li       99,     59,     87,    111,     63,    111,    112,     80
277*a58d3d2aSXin Li };
278*a58d3d2aSXin Li 
279*a58d3d2aSXin Li static const opus_uint8 silk_LTP_gain_vq_2_gain[32] = {
280*a58d3d2aSXin Li      126,    124,    125,    124,    129,    121,    126,     23,
281*a58d3d2aSXin Li      132,    127,    127,    127,    126,    127,    122,    133,
282*a58d3d2aSXin Li      130,    134,    101,    118,    119,    145,    126,     86,
283*a58d3d2aSXin Li      124,    120,    123,    119,    170,    173,    107,    109
284*a58d3d2aSXin Li };
285*a58d3d2aSXin Li 
286*a58d3d2aSXin Li const opus_uint8 * const silk_LTP_vq_gain_ptrs_Q7[NB_LTP_CBKS] = {
287*a58d3d2aSXin Li     &silk_LTP_gain_vq_0_gain[0],
288*a58d3d2aSXin Li     &silk_LTP_gain_vq_1_gain[0],
289*a58d3d2aSXin Li     &silk_LTP_gain_vq_2_gain[0]
290*a58d3d2aSXin Li };
291*a58d3d2aSXin Li 
292*a58d3d2aSXin Li const opus_int8 silk_LTP_vq_sizes[NB_LTP_CBKS] = {
293*a58d3d2aSXin Li     8, 16, 32
294*a58d3d2aSXin Li };
295