misc: Put git-version-gen into the tarball
[osmocom-bb.git] / src / codec / gsm660.c
1 /* GSM 06.60 - GSM EFR Codec */
2
3 /*
4  * (C) 2010 Sylvain Munaut <tnt@246tNt.com>
5  *
6  * All Rights Reserved
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License along
19  * with this program; if not, write to the Free Software Foundation, Inc.,
20  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21  *
22  */
23
24 #include <stdint.h>
25
26 /* GSM EFR - subjective importance bit ordering */
27         /* This array encodes GSM 05.03 Table 6.
28          *
29          * It converts between serial parameter output (as described in
30          * GSM 06.60 Table 6 and GSM 05.03 Table 5) and the order needed
31          * before channel encoding. CRC poly and bit repetition must be
32          * applied prior to this table, as in GSM 05.03 3.1.1, to get 260
33          * bits from a 244 bits raw EFR frame.
34          */
35 uint16_t gsm660_bitorder[260] = {
36          38,  39,  40,  41,  42,  43,           /*   0 -> LTP-LAG 1: b8..b3 */
37         145, 146, 147, 148, 149, 150,           /*   6 -> LTP-LAG 3: b8..b3 */
38          93,  94,                               /*  12 -> LTP-LAG 2: b5..b4 */
39         200, 201,                               /*  14 -> LTP-LAG 4: b5..b4 */
40          47,                                    /*  16 -> LTP-GAIN 1: b3    */
41          88,                                    /*  17 -> FCB-GAIN 1: b4    */
42          99,                                    /*  18 -> LTP-GAIN 2: b3    */
43         140,                                    /*  19 -> FCB-GAIN 2: b4    */
44          44,                                    /*  20 -> LTP-LAG 1: b2     */
45         151,                                    /*  21 -> LTP-LAG 3: b2     */
46          95,                                    /*  22 -> LTP-LAG 2: b3     */
47         202,                                    /*  23 -> LTP-LAG 4: b3     */
48           1,   2,                               /*  24 -> LPC 1: b5..b4     */
49           7,                                    /*  26 -> LPC 2: b7         */
50           9,                                    /*  27 -> LPC 2: b5         */
51          17,  18,                               /*  28 -> LPC 3: b6..b5     */
52          23,                                    /*  30 -> LPC 3: b0         */
53          45,  46,                               /*  31 -> LTP-LAG 1: b1..b0 */
54         152, 153,                               /*  33 -> LTP-LAG 3: b1..b0 */
55          96,                                    /*  35 -> LTP-LAG 2: b2     */
56         203,                                    /*  36 -> LTP-LAG 4: b2     */
57           3,   4,                               /*  37 -> LPC 1: b3..b2     */
58          10,  11,                               /*  39 -> LPC 2: b4..b3     */
59          15,                                    /*  41 -> LPC 3: b8         */
60           8,                                    /*  42 -> LPC 2: b6         */
61           5,   6,                               /*  43 -> LPC 1: b1..b0     */
62          12,                                    /*  45 -> LPC 2: b2         */
63          16,                                    /*  46 -> LPC 3: b7         */
64          19,                                    /*  47 -> LPC 3: b4         */
65          97,                                    /*  48 -> LTP-LAG 2: b1     */
66         204,                                    /*  49 -> LTP-LAG 4: b1     */
67           0,                                    /*  50 -> LPC 1: b6         */
68          13,  14,                               /*  51 -> LPC 2: b1..b0     */
69          20,                                    /*  53 -> LPC 3: b3         */
70          24,  25,                               /*  54 -> LPC 4: b7..b6     */
71          27,                                    /*  56 -> LPC 4: b4         */
72         154,                                    /*  57 -> LTP-GAIN 3: b3    */
73         206,                                    /*  58 -> LTP-GAIN 4: b3    */
74         195,                                    /*  59 -> FCB-GAIN 3: b4    */
75         247,                                    /*  60 -> FCB-GAIN 4: b4    */
76          89,                                    /*  61 -> FCB-GAIN 1: b3    */
77         141,                                    /*  62 -> FCB-GAIN 2: b3    */
78         196,                                    /*  63 -> FCB-GAIN 3: b3    */
79         248,                                    /*  64 -> FCB-GAIN 4: b3    */
80         252, 253, 254, 255, 256, 257, 258, 259, /*  65 -> CRC-POLY: b7..b0  */
81          48,                                    /*  73 -> LTP-GAIN 1: b2    */
82         100,                                    /*  74 -> LTP-GAIN 2: b2    */
83         155,                                    /*  75 -> LTP-GAIN 3: b2    */
84         207,                                    /*  76 -> LTP-GAIN 4: b2    */
85          21,  22,                               /*  77 -> LPC 3: b2..b1     */
86          26,                                    /*  79 -> LPC 4: b5         */
87          28,                                    /*  80 -> LPC 4: b3         */
88          51,                                    /*  81 -> PULSE 1_1: b3     */
89          55,                                    /*  82 -> PULSE 1_2: b3     */
90          59,                                    /*  83 -> PULSE 1_3: b3     */
91          63,                                    /*  84 -> PULSE 1_4: b3     */
92          67,                                    /*  85 -> PULSE 1_5: b3     */
93         103,                                    /*  86 -> PULSE 2_1: b3     */
94         107,                                    /*  87 -> PULSE 2_2: b3     */
95         111,                                    /*  88 -> PULSE 2_3: b3     */
96         115,                                    /*  89 -> PULSE 2_4: b3     */
97         119,                                    /*  90 -> PULSE 2_5: b3     */
98         158,                                    /*  91 -> PULSE 3_1: b3     */
99         162,                                    /*  92 -> PULSE 3_2: b3     */
100         166,                                    /*  93 -> PULSE 3_3: b3     */
101         170,                                    /*  94 -> PULSE 3_4: b3     */
102         174,                                    /*  95 -> PULSE 3_5: b3     */
103         210,                                    /*  96 -> PULSE 4_1: b3     */
104         214,                                    /*  97 -> PULSE 4_2: b3     */
105         218,                                    /*  98 -> PULSE 4_3: b3     */
106         222,                                    /*  99 -> PULSE 4_4: b3     */
107         226,                                    /* 100 -> PULSE 4_5: b3     */
108          90,                                    /* 101 -> FCB-GAIN 1: b2    */
109         142,                                    /* 102 -> FCB-GAIN 2: b2    */
110         197,                                    /* 103 -> FCB-GAIN 3: b2    */
111         249,                                    /* 104 -> FCB-GAIN 4: b2    */
112          49,                                    /* 105 -> LTP-GAIN 1: b1    */
113         101,                                    /* 106 -> LTP-GAIN 2: b1    */
114         156,                                    /* 107 -> LTP-GAIN 3: b1    */
115         208,                                    /* 108 -> LTP-GAIN 4: b1    */
116          29,  30,  31,                          /* 109 -> LPC 4: b2..b0     */
117          32,  33,  34,  35,                     /* 112 -> LPC 5: b5..b2     */
118          98,                                    /* 116 -> LTP-LAG 2: b0     */
119         205,                                    /* 117 -> LTP-LAG 4: b0     */
120          52,                                    /* 118 -> PULSE 1_1: b2     */
121          56,                                    /* 119 -> PULSE 1_2: b2     */
122          60,                                    /* 120 -> PULSE 1_3: b2     */
123          64,                                    /* 121 -> PULSE 1_4: b2     */
124          68,                                    /* 122 -> PULSE 1_5: b2     */
125         104,                                    /* 123 -> PULSE 2_1: b2     */
126         108,                                    /* 124 -> PULSE 2_2: b2     */
127         112,                                    /* 125 -> PULSE 2_3: b2     */
128         116,                                    /* 126 -> PULSE 2_4: b2     */
129         120,                                    /* 127 -> PULSE 2_5: b2     */
130         159,                                    /* 128 -> PULSE 3_1: b2     */
131         163,                                    /* 129 -> PULSE 3_2: b2     */
132         167,                                    /* 130 -> PULSE 3_3: b2     */
133         171,                                    /* 131 -> PULSE 3_4: b2     */
134         175,                                    /* 132 -> PULSE 3_5: b2     */
135         211,                                    /* 133 -> PULSE 4_1: b2     */
136         215,                                    /* 134 -> PULSE 4_2: b2     */
137         219,                                    /* 135 -> PULSE 4_3: b2     */
138         223,                                    /* 136 -> PULSE 4_4: b2     */
139         227,                                    /* 137 -> PULSE 4_5: b2     */
140          53,                                    /* 138 -> PULSE 1_1: b1     */
141          57,                                    /* 139 -> PULSE 1_2: b1     */
142          61,                                    /* 140 -> PULSE 1_3: b1     */
143          65,                                    /* 141 -> PULSE 1_4: b1     */
144         105,                                    /* 142 -> PULSE 2_1: b1     */
145         109,                                    /* 143 -> PULSE 2_2: b1     */
146         113,                                    /* 144 -> PULSE 2_3: b1     */
147         117,                                    /* 145 -> PULSE 2_4: b1     */
148         160,                                    /* 146 -> PULSE 3_1: b1     */
149         164,                                    /* 147 -> PULSE 3_2: b1     */
150         168,                                    /* 148 -> PULSE 3_3: b1     */
151         172,                                    /* 149 -> PULSE 3_4: b1     */
152         212,                                    /* 150 -> PULSE 4_1: b1     */
153         220,                                    /* 151 -> PULSE 4_3: b1     */
154         224,                                    /* 152 -> PULSE 4_4: b1     */
155          91,                                    /* 153 -> FCB-GAIN 1: b1    */
156         143,                                    /* 154 -> FCB-GAIN 2: b1    */
157         198,                                    /* 155 -> FCB-GAIN 3: b1    */
158         250,                                    /* 156 -> FCB-GAIN 4: b1    */
159          50,                                    /* 157 -> LTP-GAIN 1: b0    */
160         102,                                    /* 158 -> LTP-GAIN 2: b0    */
161         157,                                    /* 159 -> LTP-GAIN 3: b0    */
162         209,                                    /* 160 -> LTP-GAIN 4: b0    */
163          92,                                    /* 161 -> FCB-GAIN 1: b0    */
164         144,                                    /* 162 -> FCB-GAIN 2: b0    */
165         199,                                    /* 163 -> FCB-GAIN 3: b0    */
166         251,                                    /* 164 -> FCB-GAIN 4: b0    */
167          54,                                    /* 165 -> PULSE 1_1: b0     */
168          58,                                    /* 166 -> PULSE 1_2: b0     */
169          62,                                    /* 167 -> PULSE 1_3: b0     */
170          66,                                    /* 168 -> PULSE 1_4: b0     */
171         106,                                    /* 169 -> PULSE 2_1: b0     */
172         110,                                    /* 170 -> PULSE 2_2: b0     */
173         114,                                    /* 171 -> PULSE 2_3: b0     */
174         118,                                    /* 172 -> PULSE 2_4: b0     */
175         161,                                    /* 173 -> PULSE 3_1: b0     */
176         165,                                    /* 174 -> PULSE 3_2: b0     */
177         169,                                    /* 175 -> PULSE 3_3: b0     */
178         173,                                    /* 176 -> PULSE 3_4: b0     */
179         213,                                    /* 177 -> PULSE 4_1: b0     */
180         221,                                    /* 178 -> PULSE 4_3: b0     */
181         225,                                    /* 179 -> PULSE 4_4: b0     */
182          36,  37,                               /* 180 -> LPC 5: b1..b0     */
183          69,                                    /* 182 -> PULSE 1_5: b1     */
184          71,  72,                               /* 183 -> PULSE 1_5: b1..b1 */
185         121,                                    /* 185 -> PULSE 2_5: b1     */
186         123, 124,                               /* 186 -> PULSE 2_5: b1..b1 */
187         176,                                    /* 188 -> PULSE 3_5: b1     */
188         178, 179,                               /* 189 -> PULSE 3_5: b1..b1 */
189         228,                                    /* 191 -> PULSE 4_5: b1     */
190         230, 231,                               /* 192 -> PULSE 4_5: b1..b1 */
191         216, 217,                               /* 194 -> PULSE 4_2: b1..b0 */
192          70,                                    /* 196 -> PULSE 1_5: b0     */
193         122,                                    /* 197 -> PULSE 2_5: b0     */
194         177,                                    /* 198 -> PULSE 3_5: b0     */
195         229,                                    /* 199 -> PULSE 4_5: b0     */
196          73,                                    /* 200 -> PULSE 1_6: b2     */
197          76,                                    /* 201 -> PULSE 1_7: b2     */
198          79,                                    /* 202 -> PULSE 1_8: b2     */
199          82,                                    /* 203 -> PULSE 1_9: b2     */
200          85,                                    /* 204 -> PULSE 1_10: b2    */
201         125,                                    /* 205 -> PULSE 2_6: b2     */
202         128,                                    /* 206 -> PULSE 2_7: b2     */
203         131,                                    /* 207 -> PULSE 2_8: b2     */
204         134,                                    /* 208 -> PULSE 2_9: b2     */
205         137,                                    /* 209 -> PULSE 2_10: b2    */
206         180,                                    /* 210 -> PULSE 3_6: b2     */
207         183,                                    /* 211 -> PULSE 3_7: b2     */
208         186,                                    /* 212 -> PULSE 3_8: b2     */
209         189,                                    /* 213 -> PULSE 3_9: b2     */
210         192,                                    /* 214 -> PULSE 3_10: b2    */
211         232,                                    /* 215 -> PULSE 4_6: b2     */
212         235,                                    /* 216 -> PULSE 4_7: b2     */
213         238,                                    /* 217 -> PULSE 4_8: b2     */
214         241,                                    /* 218 -> PULSE 4_9: b2     */
215         244,                                    /* 219 -> PULSE 4_10: b2    */
216          74,                                    /* 220 -> PULSE 1_6: b1     */
217          77,                                    /* 221 -> PULSE 1_7: b1     */
218          80,                                    /* 222 -> PULSE 1_8: b1     */
219          83,                                    /* 223 -> PULSE 1_9: b1     */
220          86,                                    /* 224 -> PULSE 1_10: b1    */
221         126,                                    /* 225 -> PULSE 2_6: b1     */
222         129,                                    /* 226 -> PULSE 2_7: b1     */
223         132,                                    /* 227 -> PULSE 2_8: b1     */
224         135,                                    /* 228 -> PULSE 2_9: b1     */
225         138,                                    /* 229 -> PULSE 2_10: b1    */
226         181,                                    /* 230 -> PULSE 3_6: b1     */
227         184,                                    /* 231 -> PULSE 3_7: b1     */
228         187,                                    /* 232 -> PULSE 3_8: b1     */
229         190,                                    /* 233 -> PULSE 3_9: b1     */
230         193,                                    /* 234 -> PULSE 3_10: b1    */
231         233,                                    /* 235 -> PULSE 4_6: b1     */
232         236,                                    /* 236 -> PULSE 4_7: b1     */
233         239,                                    /* 237 -> PULSE 4_8: b1     */
234         242,                                    /* 238 -> PULSE 4_9: b1     */
235         245,                                    /* 239 -> PULSE 4_10: b1    */
236          75,                                    /* 240 -> PULSE 1_6: b0     */
237          78,                                    /* 241 -> PULSE 1_7: b0     */
238          81,                                    /* 242 -> PULSE 1_8: b0     */
239          84,                                    /* 243 -> PULSE 1_9: b0     */
240          87,                                    /* 244 -> PULSE 1_10: b0    */
241         127,                                    /* 245 -> PULSE 2_6: b0     */
242         130,                                    /* 246 -> PULSE 2_7: b0     */
243         133,                                    /* 247 -> PULSE 2_8: b0     */
244         136,                                    /* 248 -> PULSE 2_9: b0     */
245         139,                                    /* 249 -> PULSE 2_10: b0    */
246         182,                                    /* 250 -> PULSE 3_6: b0     */
247         185,                                    /* 251 -> PULSE 3_7: b0     */
248         188,                                    /* 252 -> PULSE 3_8: b0     */
249         191,                                    /* 253 -> PULSE 3_9: b0     */
250         194,                                    /* 254 -> PULSE 3_10: b0    */
251         234,                                    /* 255 -> PULSE 4_6: b0     */
252         237,                                    /* 256 -> PULSE 4_7: b0     */
253         240,                                    /* 257 -> PULSE 4_8: b0     */
254         243,                                    /* 258 -> PULSE 4_9: b0     */
255         246,                                    /* 259 -> PULSE 4_10: b0    */
256 };