FreeCalypso > hg > gsm-codec-lib
comparison dev/efr-tidsp.c @ 138:68215020852b
dev: add efr-tidsp table generator program
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 13 Dec 2022 06:32:25 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
137:b7ea278390eb | 138:68215020852b |
---|---|
1 /* | |
2 * This program constructs a table for extracting a 244-bit EFR codec frame | |
3 * from a 33-byte frame that has been read out of Calypso DSP buffer on a | |
4 * TCH/EFS downlink. Our starting material is Osmocom's rendition of | |
5 * GSM 05.03 Table 6. | |
6 */ | |
7 | |
8 #include <stdio.h> | |
9 #include <stdlib.h> | |
10 | |
11 /* GSM EFR - subjective importance bit ordering */ | |
12 /* This array encodes GSM 05.03 Table 6. | |
13 * | |
14 * It converts between serial parameter output (as described in | |
15 * GSM 06.60 Table 6 and GSM 05.03 Table 5) and the order needed | |
16 * before channel encoding. CRC poly and bit repetition must be | |
17 * applied prior to this table, as in GSM 05.03 3.1.1, to get 260 | |
18 * bits from a 244 bits raw EFR frame. | |
19 */ | |
20 const unsigned short gsm660_bitorder[260] = { | |
21 38, 39, 40, 41, 42, 43, /* 0 -> LTP-LAG 1: b8..b3 */ | |
22 145, 146, 147, 148, 149, 150, /* 6 -> LTP-LAG 3: b8..b3 */ | |
23 93, 94, /* 12 -> LTP-LAG 2: b5..b4 */ | |
24 200, 201, /* 14 -> LTP-LAG 4: b5..b4 */ | |
25 47, /* 16 -> LTP-GAIN 1: b3 */ | |
26 88, /* 17 -> FCB-GAIN 1: b4 */ | |
27 99, /* 18 -> LTP-GAIN 2: b3 */ | |
28 140, /* 19 -> FCB-GAIN 2: b4 */ | |
29 44, /* 20 -> LTP-LAG 1: b2 */ | |
30 151, /* 21 -> LTP-LAG 3: b2 */ | |
31 95, /* 22 -> LTP-LAG 2: b3 */ | |
32 202, /* 23 -> LTP-LAG 4: b3 */ | |
33 1, 2, /* 24 -> LPC 1: b5..b4 */ | |
34 7, /* 26 -> LPC 2: b7 */ | |
35 9, /* 27 -> LPC 2: b5 */ | |
36 17, 18, /* 28 -> LPC 3: b6..b5 */ | |
37 23, /* 30 -> LPC 3: b0 */ | |
38 45, 46, /* 31 -> LTP-LAG 1: b1..b0 */ | |
39 152, 153, /* 33 -> LTP-LAG 3: b1..b0 */ | |
40 96, /* 35 -> LTP-LAG 2: b2 */ | |
41 203, /* 36 -> LTP-LAG 4: b2 */ | |
42 3, 4, /* 37 -> LPC 1: b3..b2 */ | |
43 10, 11, /* 39 -> LPC 2: b4..b3 */ | |
44 15, /* 41 -> LPC 3: b8 */ | |
45 8, /* 42 -> LPC 2: b6 */ | |
46 5, 6, /* 43 -> LPC 1: b1..b0 */ | |
47 12, /* 45 -> LPC 2: b2 */ | |
48 16, /* 46 -> LPC 3: b7 */ | |
49 19, /* 47 -> LPC 3: b4 */ | |
50 97, /* 48 -> LTP-LAG 2: b1 */ | |
51 204, /* 49 -> LTP-LAG 4: b1 */ | |
52 0, /* 50 -> LPC 1: b6 */ | |
53 13, 14, /* 51 -> LPC 2: b1..b0 */ | |
54 20, /* 53 -> LPC 3: b3 */ | |
55 24, 25, /* 54 -> LPC 4: b7..b6 */ | |
56 27, /* 56 -> LPC 4: b4 */ | |
57 154, /* 57 -> LTP-GAIN 3: b3 */ | |
58 206, /* 58 -> LTP-GAIN 4: b3 */ | |
59 195, /* 59 -> FCB-GAIN 3: b4 */ | |
60 247, /* 60 -> FCB-GAIN 4: b4 */ | |
61 89, /* 61 -> FCB-GAIN 1: b3 */ | |
62 141, /* 62 -> FCB-GAIN 2: b3 */ | |
63 196, /* 63 -> FCB-GAIN 3: b3 */ | |
64 248, /* 64 -> FCB-GAIN 4: b3 */ | |
65 252, 253, 254, 255, 256, 257, 258, 259, /* 65 -> CRC-POLY: b7..b0 */ | |
66 48, /* 73 -> LTP-GAIN 1: b2 */ | |
67 100, /* 74 -> LTP-GAIN 2: b2 */ | |
68 155, /* 75 -> LTP-GAIN 3: b2 */ | |
69 207, /* 76 -> LTP-GAIN 4: b2 */ | |
70 21, 22, /* 77 -> LPC 3: b2..b1 */ | |
71 26, /* 79 -> LPC 4: b5 */ | |
72 28, /* 80 -> LPC 4: b3 */ | |
73 51, /* 81 -> PULSE 1_1: b3 */ | |
74 55, /* 82 -> PULSE 1_2: b3 */ | |
75 59, /* 83 -> PULSE 1_3: b3 */ | |
76 63, /* 84 -> PULSE 1_4: b3 */ | |
77 67, /* 85 -> PULSE 1_5: b3 */ | |
78 103, /* 86 -> PULSE 2_1: b3 */ | |
79 107, /* 87 -> PULSE 2_2: b3 */ | |
80 111, /* 88 -> PULSE 2_3: b3 */ | |
81 115, /* 89 -> PULSE 2_4: b3 */ | |
82 119, /* 90 -> PULSE 2_5: b3 */ | |
83 158, /* 91 -> PULSE 3_1: b3 */ | |
84 162, /* 92 -> PULSE 3_2: b3 */ | |
85 166, /* 93 -> PULSE 3_3: b3 */ | |
86 170, /* 94 -> PULSE 3_4: b3 */ | |
87 174, /* 95 -> PULSE 3_5: b3 */ | |
88 210, /* 96 -> PULSE 4_1: b3 */ | |
89 214, /* 97 -> PULSE 4_2: b3 */ | |
90 218, /* 98 -> PULSE 4_3: b3 */ | |
91 222, /* 99 -> PULSE 4_4: b3 */ | |
92 226, /* 100 -> PULSE 4_5: b3 */ | |
93 90, /* 101 -> FCB-GAIN 1: b2 */ | |
94 142, /* 102 -> FCB-GAIN 2: b2 */ | |
95 197, /* 103 -> FCB-GAIN 3: b2 */ | |
96 249, /* 104 -> FCB-GAIN 4: b2 */ | |
97 49, /* 105 -> LTP-GAIN 1: b1 */ | |
98 101, /* 106 -> LTP-GAIN 2: b1 */ | |
99 156, /* 107 -> LTP-GAIN 3: b1 */ | |
100 208, /* 108 -> LTP-GAIN 4: b1 */ | |
101 29, 30, 31, /* 109 -> LPC 4: b2..b0 */ | |
102 32, 33, 34, 35, /* 112 -> LPC 5: b5..b2 */ | |
103 98, /* 116 -> LTP-LAG 2: b0 */ | |
104 205, /* 117 -> LTP-LAG 4: b0 */ | |
105 52, /* 118 -> PULSE 1_1: b2 */ | |
106 56, /* 119 -> PULSE 1_2: b2 */ | |
107 60, /* 120 -> PULSE 1_3: b2 */ | |
108 64, /* 121 -> PULSE 1_4: b2 */ | |
109 68, /* 122 -> PULSE 1_5: b2 */ | |
110 104, /* 123 -> PULSE 2_1: b2 */ | |
111 108, /* 124 -> PULSE 2_2: b2 */ | |
112 112, /* 125 -> PULSE 2_3: b2 */ | |
113 116, /* 126 -> PULSE 2_4: b2 */ | |
114 120, /* 127 -> PULSE 2_5: b2 */ | |
115 159, /* 128 -> PULSE 3_1: b2 */ | |
116 163, /* 129 -> PULSE 3_2: b2 */ | |
117 167, /* 130 -> PULSE 3_3: b2 */ | |
118 171, /* 131 -> PULSE 3_4: b2 */ | |
119 175, /* 132 -> PULSE 3_5: b2 */ | |
120 211, /* 133 -> PULSE 4_1: b2 */ | |
121 215, /* 134 -> PULSE 4_2: b2 */ | |
122 219, /* 135 -> PULSE 4_3: b2 */ | |
123 223, /* 136 -> PULSE 4_4: b2 */ | |
124 227, /* 137 -> PULSE 4_5: b2 */ | |
125 53, /* 138 -> PULSE 1_1: b1 */ | |
126 57, /* 139 -> PULSE 1_2: b1 */ | |
127 61, /* 140 -> PULSE 1_3: b1 */ | |
128 65, /* 141 -> PULSE 1_4: b1 */ | |
129 105, /* 142 -> PULSE 2_1: b1 */ | |
130 109, /* 143 -> PULSE 2_2: b1 */ | |
131 113, /* 144 -> PULSE 2_3: b1 */ | |
132 117, /* 145 -> PULSE 2_4: b1 */ | |
133 160, /* 146 -> PULSE 3_1: b1 */ | |
134 164, /* 147 -> PULSE 3_2: b1 */ | |
135 168, /* 148 -> PULSE 3_3: b1 */ | |
136 172, /* 149 -> PULSE 3_4: b1 */ | |
137 212, /* 150 -> PULSE 4_1: b1 */ | |
138 220, /* 151 -> PULSE 4_3: b1 */ | |
139 224, /* 152 -> PULSE 4_4: b1 */ | |
140 91, /* 153 -> FCB-GAIN 1: b1 */ | |
141 143, /* 154 -> FCB-GAIN 2: b1 */ | |
142 198, /* 155 -> FCB-GAIN 3: b1 */ | |
143 250, /* 156 -> FCB-GAIN 4: b1 */ | |
144 50, /* 157 -> LTP-GAIN 1: b0 */ | |
145 102, /* 158 -> LTP-GAIN 2: b0 */ | |
146 157, /* 159 -> LTP-GAIN 3: b0 */ | |
147 209, /* 160 -> LTP-GAIN 4: b0 */ | |
148 92, /* 161 -> FCB-GAIN 1: b0 */ | |
149 144, /* 162 -> FCB-GAIN 2: b0 */ | |
150 199, /* 163 -> FCB-GAIN 3: b0 */ | |
151 251, /* 164 -> FCB-GAIN 4: b0 */ | |
152 54, /* 165 -> PULSE 1_1: b0 */ | |
153 58, /* 166 -> PULSE 1_2: b0 */ | |
154 62, /* 167 -> PULSE 1_3: b0 */ | |
155 66, /* 168 -> PULSE 1_4: b0 */ | |
156 106, /* 169 -> PULSE 2_1: b0 */ | |
157 110, /* 170 -> PULSE 2_2: b0 */ | |
158 114, /* 171 -> PULSE 2_3: b0 */ | |
159 118, /* 172 -> PULSE 2_4: b0 */ | |
160 161, /* 173 -> PULSE 3_1: b0 */ | |
161 165, /* 174 -> PULSE 3_2: b0 */ | |
162 169, /* 175 -> PULSE 3_3: b0 */ | |
163 173, /* 176 -> PULSE 3_4: b0 */ | |
164 213, /* 177 -> PULSE 4_1: b0 */ | |
165 221, /* 178 -> PULSE 4_3: b0 */ | |
166 225, /* 179 -> PULSE 4_4: b0 */ | |
167 36, 37, /* 180 -> LPC 5: b1..b0 */ | |
168 69, /* 182 -> PULSE 1_5: b1 */ | |
169 71, 72, /* 183 -> PULSE 1_5: b1..b1 */ | |
170 121, /* 185 -> PULSE 2_5: b1 */ | |
171 123, 124, /* 186 -> PULSE 2_5: b1..b1 */ | |
172 176, /* 188 -> PULSE 3_5: b1 */ | |
173 178, 179, /* 189 -> PULSE 3_5: b1..b1 */ | |
174 228, /* 191 -> PULSE 4_5: b1 */ | |
175 230, 231, /* 192 -> PULSE 4_5: b1..b1 */ | |
176 216, 217, /* 194 -> PULSE 4_2: b1..b0 */ | |
177 70, /* 196 -> PULSE 1_5: b0 */ | |
178 122, /* 197 -> PULSE 2_5: b0 */ | |
179 177, /* 198 -> PULSE 3_5: b0 */ | |
180 229, /* 199 -> PULSE 4_5: b0 */ | |
181 73, /* 200 -> PULSE 1_6: b2 */ | |
182 76, /* 201 -> PULSE 1_7: b2 */ | |
183 79, /* 202 -> PULSE 1_8: b2 */ | |
184 82, /* 203 -> PULSE 1_9: b2 */ | |
185 85, /* 204 -> PULSE 1_10: b2 */ | |
186 125, /* 205 -> PULSE 2_6: b2 */ | |
187 128, /* 206 -> PULSE 2_7: b2 */ | |
188 131, /* 207 -> PULSE 2_8: b2 */ | |
189 134, /* 208 -> PULSE 2_9: b2 */ | |
190 137, /* 209 -> PULSE 2_10: b2 */ | |
191 180, /* 210 -> PULSE 3_6: b2 */ | |
192 183, /* 211 -> PULSE 3_7: b2 */ | |
193 186, /* 212 -> PULSE 3_8: b2 */ | |
194 189, /* 213 -> PULSE 3_9: b2 */ | |
195 192, /* 214 -> PULSE 3_10: b2 */ | |
196 232, /* 215 -> PULSE 4_6: b2 */ | |
197 235, /* 216 -> PULSE 4_7: b2 */ | |
198 238, /* 217 -> PULSE 4_8: b2 */ | |
199 241, /* 218 -> PULSE 4_9: b2 */ | |
200 244, /* 219 -> PULSE 4_10: b2 */ | |
201 74, /* 220 -> PULSE 1_6: b1 */ | |
202 77, /* 221 -> PULSE 1_7: b1 */ | |
203 80, /* 222 -> PULSE 1_8: b1 */ | |
204 83, /* 223 -> PULSE 1_9: b1 */ | |
205 86, /* 224 -> PULSE 1_10: b1 */ | |
206 126, /* 225 -> PULSE 2_6: b1 */ | |
207 129, /* 226 -> PULSE 2_7: b1 */ | |
208 132, /* 227 -> PULSE 2_8: b1 */ | |
209 135, /* 228 -> PULSE 2_9: b1 */ | |
210 138, /* 229 -> PULSE 2_10: b1 */ | |
211 181, /* 230 -> PULSE 3_6: b1 */ | |
212 184, /* 231 -> PULSE 3_7: b1 */ | |
213 187, /* 232 -> PULSE 3_8: b1 */ | |
214 190, /* 233 -> PULSE 3_9: b1 */ | |
215 193, /* 234 -> PULSE 3_10: b1 */ | |
216 233, /* 235 -> PULSE 4_6: b1 */ | |
217 236, /* 236 -> PULSE 4_7: b1 */ | |
218 239, /* 237 -> PULSE 4_8: b1 */ | |
219 242, /* 238 -> PULSE 4_9: b1 */ | |
220 245, /* 239 -> PULSE 4_10: b1 */ | |
221 75, /* 240 -> PULSE 1_6: b0 */ | |
222 78, /* 241 -> PULSE 1_7: b0 */ | |
223 81, /* 242 -> PULSE 1_8: b0 */ | |
224 84, /* 243 -> PULSE 1_9: b0 */ | |
225 87, /* 244 -> PULSE 1_10: b0 */ | |
226 127, /* 245 -> PULSE 2_6: b0 */ | |
227 130, /* 246 -> PULSE 2_7: b0 */ | |
228 133, /* 247 -> PULSE 2_8: b0 */ | |
229 136, /* 248 -> PULSE 2_9: b0 */ | |
230 139, /* 249 -> PULSE 2_10: b0 */ | |
231 182, /* 250 -> PULSE 3_6: b0 */ | |
232 185, /* 251 -> PULSE 3_7: b0 */ | |
233 188, /* 252 -> PULSE 3_8: b0 */ | |
234 191, /* 253 -> PULSE 3_9: b0 */ | |
235 194, /* 254 -> PULSE 3_10: b0 */ | |
236 234, /* 255 -> PULSE 4_6: b0 */ | |
237 237, /* 256 -> PULSE 4_7: b0 */ | |
238 240, /* 257 -> PULSE 4_8: b0 */ | |
239 243, /* 258 -> PULSE 4_9: b0 */ | |
240 246, /* 259 -> PULSE 4_10: b0 */ | |
241 }; | |
242 | |
243 unsigned short new_table[244]; | |
244 | |
245 static void | |
246 gen_new_table() | |
247 { | |
248 int i, w, s, ti; | |
249 | |
250 for (i = 0; i < 260; i++) { | |
251 w = gsm660_bitorder[i]; | |
252 /* not doing CRC bits */ | |
253 if (w >= 252) | |
254 continue; | |
255 /* not doing repetition bits */ | |
256 if (w == 71 || w == 72) | |
257 continue; | |
258 if (w == 123 || w == 124) | |
259 continue; | |
260 if (w == 178 || w == 179) | |
261 continue; | |
262 if (w == 230 || w == 231) | |
263 continue; | |
264 /* get s number back from w */ | |
265 if (w >= 232) | |
266 s = w - 8; | |
267 else if (w >= 180) | |
268 s = w - 6; | |
269 else if (w >= 125) | |
270 s = w - 4; | |
271 else if (w >= 73) | |
272 s = w - 2; | |
273 else | |
274 s = w; | |
275 /* TI bit number: gap of 4 between 182 and 78 */ | |
276 if (i >= 182) | |
277 ti = i + 4; | |
278 else | |
279 ti = i; | |
280 new_table[s] = ti; | |
281 } | |
282 } | |
283 | |
284 static void | |
285 emit_output() | |
286 { | |
287 int i; | |
288 | |
289 for (i = 0; i < 244; i++) { | |
290 if (i % 12) | |
291 putchar(' '); | |
292 else { | |
293 putchar('\n'); | |
294 putchar('\t'); | |
295 } | |
296 printf("%3u,", new_table[i]); | |
297 } | |
298 putchar('\n'); | |
299 } | |
300 | |
301 main(argc, argv) | |
302 char **argv; | |
303 { | |
304 gen_new_table(); | |
305 emit_output(); | |
306 exit(0); | |
307 } |