blob: 721e546c4a7f9542323262af307f795b96af9c6e [file] [log] [blame]
Oliver Smitha47d37c2019-12-11 08:46:41 +01001#!/usr/bin/env python3
Max32e56412017-10-16 14:58:00 +02002# -*- coding: utf-8 -*-
Vadim Yanitskiy94c00312018-07-02 20:28:55 +07003
Vadim Yanitskiy15492bc2016-11-10 17:10:42 +07004from conv_gen import ConvolutionalCode
5from conv_gen import poly
6
7# Polynomials according to 3GPP TS 05.03 Annex B
8G0 = poly(0, 3, 4)
9G1 = poly(0, 1, 3, 4)
10G2 = poly(0, 2, 4)
11G3 = poly(0, 1, 2, 3, 4)
12G4 = poly(0, 2, 3, 5, 6)
13G5 = poly(0, 1, 4, 6)
14G6 = poly(0, 1, 2, 3, 4, 6)
15G7 = poly(0, 1, 2, 3, 6)
16
17# Shared polynomials
18shared_polys = {
19 "xcch" : [
20 ( G0, 1 ),
21 ( G1, 1 ),
22 ],
23 "mcs" : [
24 ( G4, 1 ),
25 ( G7, 1 ),
26 ( G5, 1 ),
27 ],
28}
29
30# Convolutional code definitions
31conv_codes = [
32 # xCCH definition
33 ConvolutionalCode(
34 224,
35 shared_polys["xcch"],
36 name = "xcch",
37 description = [
38 "xCCH convolutional code:",
39 "228 bits blocks, rate 1/2, k = 5",
40 "G0 = 1 + D3 + D4",
41 "G1 = 1 + D + D3 + D4",
42 ]
43 ),
44
Harald Welte65e0edc2020-02-12 23:08:17 +010045 # TCH/F2.4 definition
46 ConvolutionalCode(
47 72,
48 [
49 (G1, 1),
50 (G2, 1),
51 (G3, 1),
52 (G1, 1),
53 (G2, 1),
54 (G3, 1),
55 ],
56 name = "tch_f24",
57 description = [
58 "TCH/F2.4 convolutional code:",
59 "72 bits blocks, rate 1/6, k = 5",
60 "G1 = 1 + D + D3 + D4",
61 "G2 = 1 + D2 + D4",
62 "G3 = 1 + D + D2 + D3 + D4",
63 "G1 = 1 + D + D3 + D4",
64 "G2 = 1 + D2 + D4",
65 "G3 = 1 + D + D2 + D3 + D4",
66 ]
67 ),
68
69 # TCH/F4.8 definition
70 ConvolutionalCode(
Vadim Yanitskiyce484eb2023-05-25 03:25:58 +070071 148,
Harald Welte65e0edc2020-02-12 23:08:17 +010072 [
73 (G1, 1),
74 (G2, 1),
75 (G3, 1),
76 ],
77 name = "tch_f48",
78 description = [
79 "TCH/F4.8 convolutional code:",
80 "152 bits blocks, rate 1/3, k = 5",
81 "G1 = 1 + D + D3 + D4",
82 "G2 = 1 + D2 + D4",
83 "G3 = 1 + D + D2 + D3 + D4",
84 ]
85 ),
86
87 # TCH/F9.6 definition
88 ConvolutionalCode(
89 240,
90 shared_polys["xcch"],
91 puncture = [
92 11, 26, 41, 56, 71, 86, 101, 116, 131, 146, 161, 176,
93 191, 206, 221, 236, 251, 266, 281, 296, 311, 326, 341, 356,
94 371, 386, 401, 416, 431, 446, 461, 476, -1
95 ],
96 name = "tch_f96",
97 description = [
98 "TCH/F9.6 convolutional code:",
99 "240 bits blocks, rate 1/2, k = 5",
100 "G0 = 1 + D3 + D4",
101 "G1 = 1 + D + D3 + D4",
102 ]
103 ),
104
105 # TCH/F14.4 definition
106 ConvolutionalCode(
107 290,
108 shared_polys["xcch"],
109 puncture = [
110 1, 6, 11, 15, 19, 24, 29, 33, 37, 42, 47, 51,
111 55, 60, 65, 69, 73, 78, 83, 87, 91, 96, 101, 105,
112 109, 114, 119, 123, 127, 132, 137, 141, 145, 150, 155, 159,
113 163, 168, 173, 177, 181, 186, 191, 195, 199, 204, 209, 213,
114 217, 222, 227, 231, 235, 240, 245, 249, 253, 258, 263, 267,
115 271, 276, 281, 285, 289, 294, 299, 303, 307, 312, 317, 321,
116 325, 330, 335, 339, 343, 348, 353, 357, 361, 366, 371, 375,
117 379, 384, 389, 393, 397, 402, 407, 411, 415, 420, 425, 429,
118 433, 438, 443, 447, 451, 456, 461, 465, 469, 474, 479, 483,
119 487, 492, 497, 501, 505, 510, 515, 519, 523, 528, 533, 537,
120 541, 546, 551, 555, 559, 564, 569, 573, 577, 582, 584, 587,
121 -1
122 ],
123 name = "tch_f144",
124 description = [
125 "TCH/F14.4 convolutional code:",
126 "290 bits blocks, rate 1/2, k = 5",
127 "G0 = 1 + D3 + D4",
128 "G1 = 1 + D + D3 + D4",
129 ]
130 ),
131
Vadim Yanitskiy15492bc2016-11-10 17:10:42 +0700132 # RACH definition
133 ConvolutionalCode(
134 14,
135 shared_polys["xcch"],
136 name = "rach",
137 description = ["RACH convolutional code"]
138 ),
139
Max32e56412017-10-16 14:58:00 +0200140 # Extended RACH definition from 3GPP TS 45.003 ยง5.3.2
141 ConvolutionalCode(
142 17,
143 shared_polys["xcch"],
144 puncture = [ 0, 2, 5, 37, 39, 41, -1 ],
145 name = "rach_ext",
146 description = ["Extended RACH (11 bit) convolutional code"]
147 ),
148
Vadim Yanitskiy15492bc2016-11-10 17:10:42 +0700149 # SCH definition
150 ConvolutionalCode(
151 35,
152 shared_polys["xcch"],
153 name = "sch",
154 description = ["SCH convolutional code"]
155 ),
156
157 # CS2 definition
158 ConvolutionalCode(
159 290,
160 shared_polys["xcch"],
161 puncture = [
162 15, 19, 23, 27, 31, 35, 43, 47, 51, 55, 59, 63, 67, 71,
163 75, 79, 83, 91, 95, 99, 103, 107, 111, 115, 119, 123, 127, 131,
164 139, 143, 147, 151, 155, 159, 163, 167, 171, 175, 179, 187, 191, 195,
165 199, 203, 207, 211, 215, 219, 223, 227, 235, 239, 243, 247, 251, 255,
166 259, 263, 267, 271, 275, 283, 287, 291, 295, 299, 303, 307, 311, 315,
167 319, 323, 331, 335, 339, 343, 347, 351, 355, 359, 363, 367, 371, 379,
168 383, 387, 391, 395, 399, 403, 407, 411, 415, 419, 427, 431, 435, 439,
169 443, 447, 451, 455, 459, 463, 467, 475, 479, 483, 487, 491, 495, 499,
170 503, 507, 511, 515, 523, 527, 531, 535, 539, 543, 547, 551, 555, 559,
171 563, 571, 575, 579, 583, 587, -1
172 ],
173 name = "cs2",
174 description = [
175 "CS2 convolutional code:",
176 "G0 = 1 + D3 + D4",
177 "G1 = 1 + D + D3 + D4",
178 ]
179 ),
180
181 # CS3 definition
182 ConvolutionalCode(
183 334,
184 shared_polys["xcch"],
185 puncture = [
186 15, 17, 21, 23, 27, 29, 33, 35, 39, 41, 45, 47, 51, 53,
187 57, 59, 63, 65, 69, 71, 75, 77, 81, 83, 87, 89, 93, 95,
188 99, 101, 105, 107, 111, 113, 117, 119, 123, 125, 129, 131, 135, 137,
189 141, 143, 147, 149, 153, 155, 159, 161, 165, 167, 171, 173, 177, 179,
190 183, 185, 189, 191, 195, 197, 201, 203, 207, 209, 213, 215, 219, 221,
191 225, 227, 231, 233, 237, 239, 243, 245, 249, 251, 255, 257, 261, 263,
192 267, 269, 273, 275, 279, 281, 285, 287, 291, 293, 297, 299, 303, 305,
193 309, 311, 315, 317, 321, 323, 327, 329, 333, 335, 339, 341, 345, 347,
194 351, 353, 357, 359, 363, 365, 369, 371, 375, 377, 381, 383, 387, 389,
195 393, 395, 399, 401, 405, 407, 411, 413, 417, 419, 423, 425, 429, 431,
196 435, 437, 441, 443, 447, 449, 453, 455, 459, 461, 465, 467, 471, 473,
197 477, 479, 483, 485, 489, 491, 495, 497, 501, 503, 507, 509, 513, 515,
198 519, 521, 525, 527, 531, 533, 537, 539, 543, 545, 549, 551, 555, 557,
199 561, 563, 567, 569, 573, 575, 579, 581, 585, 587, 591, 593, 597, 599,
200 603, 605, 609, 611, 615, 617, 621, 623, 627, 629, 633, 635, 639, 641,
201 645, 647, 651, 653, 657, 659, 663, 665, 669, 671, -1
202 ],
203 name = "cs3",
204 description = [
205 "CS3 convolutional code:",
206 "G0 = 1 + D3 + D4",
207 "G1 = 1 + D + D3 + D4",
208 ]
209 ),
210
Vadim Yanitskiy3262f822016-09-23 01:48:59 +0700211 # CS2 definition (non-punctured)
212 ConvolutionalCode(
213 290,
214 shared_polys["xcch"],
215 name = "cs2_np",
216 description = [
217 "CS2 convolutional code (non-punctured):",
218 "G0 = 1 + D3 + D4",
219 "G1 = 1 + D + D3 + D4",
220 ]
221 ),
222
223 # CS3 definition (non-punctured)
224 ConvolutionalCode(
225 334,
226 shared_polys["xcch"],
227 name = "cs3_np",
228 description = [
229 "CS3 convolutional code (non-punctured):",
230 "G0 = 1 + D3 + D4",
231 "G1 = 1 + D + D3 + D4",
232 ]
233 ),
234
Vadim Yanitskiy15492bc2016-11-10 17:10:42 +0700235 # TCH_AFS_12_2 definition
236 ConvolutionalCode(
237 250,
238 [
239 ( 1, 1 ),
240 ( G1, G0 ),
241 ],
242 puncture = [
243 321, 325, 329, 333, 337, 341, 345, 349, 353, 357, 361, 363,
244 365, 369, 373, 377, 379, 381, 385, 389, 393, 395, 397, 401,
245 405, 409, 411, 413, 417, 421, 425, 427, 429, 433, 437, 441,
246 443, 445, 449, 453, 457, 459, 461, 465, 469, 473, 475, 477,
247 481, 485, 489, 491, 493, 495, 497, 499, 501, 503, 505, 507,
248 -1
249 ],
250 name = 'tch_afs_12_2',
251 description = [
252 "TCH/AFS 12.2 kbits convolutional code:",
253 "250 bits block, rate 1/2, punctured",
254 "G0/G0 = 1",
255 "G1/G0 = 1 + D + D3 + D4 / 1 + D3 + D4",
256 ]
257 ),
258
259 # TCH_AFS_10_2 definition
260 ConvolutionalCode(
261 210,
262 [
263 ( G1, G3 ),
264 ( G2, G3 ),
265 ( 1, 1 ),
266 ],
267 puncture = [
268 1, 4, 7, 10, 16, 19, 22, 28, 31, 34, 40, 43,
269 46, 52, 55, 58, 64, 67, 70, 76, 79, 82, 88, 91,
270 94, 100, 103, 106, 112, 115, 118, 124, 127, 130, 136, 139,
271 142, 148, 151, 154, 160, 163, 166, 172, 175, 178, 184, 187,
272 190, 196, 199, 202, 208, 211, 214, 220, 223, 226, 232, 235,
273 238, 244, 247, 250, 256, 259, 262, 268, 271, 274, 280, 283,
274 286, 292, 295, 298, 304, 307, 310, 316, 319, 322, 325, 328,
275 331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364,
276 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400,
277 403, 406, 409, 412, 415, 418, 421, 424, 427, 430, 433, 436,
278 439, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472,
279 475, 478, 481, 484, 487, 490, 493, 496, 499, 502, 505, 508,
280 511, 514, 517, 520, 523, 526, 529, 532, 535, 538, 541, 544,
281 547, 550, 553, 556, 559, 562, 565, 568, 571, 574, 577, 580,
282 583, 586, 589, 592, 595, 598, 601, 604, 607, 609, 610, 613,
283 616, 619, 621, 622, 625, 627, 628, 631, 633, 634, 636, 637,
284 639, 640, -1
285 ],
286 name = 'tch_afs_10_2',
287 description = [
288 "TCH/AFS 10.2 kbits convolutional code:",
289 "G1/G3 = 1 + D + D3 + D4 / 1 + D + D2 + D3 + D4",
290 "G2/G3 = 1 + D2 + D4 / 1 + D + D2 + D3 + D4",
291 "G3/G3 = 1",
292 ]
293 ),
294
295 # TCH_AFS_7_95 definition
296 ConvolutionalCode(
297 165,
298 [
299 ( 1, 1 ),
300 ( G5, G4 ),
301 ( G6, G4 ),
302 ],
303 puncture = [
304 1, 2, 4, 5, 8, 22, 70, 118, 166, 214, 262, 310,
305 317, 319, 325, 332, 334, 341, 343, 349, 356, 358, 365, 367,
306 373, 380, 382, 385, 389, 391, 397, 404, 406, 409, 413, 415,
307 421, 428, 430, 433, 437, 439, 445, 452, 454, 457, 461, 463,
308 469, 476, 478, 481, 485, 487, 490, 493, 500, 502, 503, 505,
309 506, 508, 509, 511, 512, -1
310 ],
311 name = 'tch_afs_7_95',
312 description = [
313 "TCH/AFS 7.95 kbits convolutional code:",
314 "G4/G4 = 1",
315 "G5/G4 = 1 + D + D4 + D6 / 1 + D2 + D3 + D5 + D6",
316 "G6/G4 = 1 + D + D2 + D3 + D4 + D6 / 1 + D2 + D3 + D5 + D6",
317 ]
318 ),
319
320 # TCH_AFS_7_4 definition
321 ConvolutionalCode(
322 154,
323 [
324 ( G1, G3 ),
325 ( G2, G3 ),
326 ( 1, 1 ),
327 ],
328 puncture = [
329 0, 355, 361, 367, 373, 379, 385, 391, 397, 403, 409, 415,
330 421, 427, 433, 439, 445, 451, 457, 460, 463, 466, 468, 469,
331 471, 472, -1
332 ],
333 name = 'tch_afs_7_4',
334 description = [
335 "TCH/AFS 7.4 kbits convolutional code:",
336 "G1/G3 = 1 + D + D3 + D4 / 1 + D + D2 + D3 + D4",
337 "G2/G3 = 1 + D2 + D4 / 1 + D + D2 + D3 + D4",
338 "G3/G3 = 1",
339 ]
340 ),
341
342 # TCH_AFS_6_7 definition
343 ConvolutionalCode(
344 140,
345 [
346 ( G1, G3 ),
347 ( G2, G3 ),
348 ( 1, 1 ),
349 ( 1, 1 ),
350 ],
351 puncture = [
352 1, 3, 7, 11, 15, 27, 39, 55, 67, 79, 95, 107,
353 119, 135, 147, 159, 175, 187, 199, 215, 227, 239, 255, 267,
354 279, 287, 291, 295, 299, 303, 307, 311, 315, 319, 323, 327,
355 331, 335, 339, 343, 347, 351, 355, 359, 363, 367, 369, 371,
356 375, 377, 379, 383, 385, 387, 391, 393, 395, 399, 401, 403,
357 407, 409, 411, 415, 417, 419, 423, 425, 427, 431, 433, 435,
358 439, 441, 443, 447, 449, 451, 455, 457, 459, 463, 465, 467,
359 471, 473, 475, 479, 481, 483, 487, 489, 491, 495, 497, 499,
360 503, 505, 507, 511, 513, 515, 519, 521, 523, 527, 529, 531,
361 535, 537, 539, 543, 545, 547, 549, 551, 553, 555, 557, 559,
362 561, 563, 565, 567, 569, 571, 573, 575, -1
363 ],
364 name = 'tch_afs_6_7',
365 description = [
366 "TCH/AFS 6.7 kbits convolutional code:",
367 "G1/G3 = 1 + D + D3 + D4 / 1 + D + D2 + D3 + D4",
368 "G2/G3 = 1 + D2 + D4 / 1 + D + D2 + D3 + D4",
369 "G3/G3 = 1",
370 "G3/G3 = 1",
371 ]
372 ),
373
374 # TCH_AFS_5_9 definition
375 ConvolutionalCode(
376 124,
377 [
378 ( G4, G6 ),
379 ( G5, G6 ),
380 ( 1, 1),
381 ( 1, 1),
382 ],
383 puncture = [
384 0, 1, 3, 5, 7, 11, 15, 31, 47, 63, 79, 95,
385 111, 127, 143, 159, 175, 191, 207, 223, 239, 255, 271, 287,
386 303, 319, 327, 331, 335, 343, 347, 351, 359, 363, 367, 375,
387 379, 383, 391, 395, 399, 407, 411, 415, 423, 427, 431, 439,
388 443, 447, 455, 459, 463, 467, 471, 475, 479, 483, 487, 491,
389 495, 499, 503, 507, 509, 511, 512, 513, 515, 516, 517, 519,
390 -1
391 ],
392 name = 'tch_afs_5_9',
393 description = [
394 "TCH/AFS 5.9 kbits convolutional code:",
395 "124 bits",
396 "G4/G6 = 1 + D2 + D3 + D5 + D6 / 1 + D + D2 + D3 + D4 + D6",
397 "G5/G6 = 1 + D + D4 + D6 / 1 + D + D2 + D3 + D4 + D6",
398 "G6/G6 = 1",
399 "G6/G6 = 1",
400 ]
401 ),
402
403 # TCH_AFS_5_15 definition
404 ConvolutionalCode(
405 109,
406 [
407 ( G1, G3 ),
408 ( G1, G3 ),
409 ( G2, G3 ),
410 ( 1, 1 ),
411 ( 1, 1 ),
412 ],
413 puncture = [
414 0, 4, 5, 9, 10, 14, 15, 20, 25, 30, 35, 40,
415 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160,
416 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280,
417 290, 300, 310, 315, 320, 325, 330, 334, 335, 340, 344, 345,
418 350, 354, 355, 360, 364, 365, 370, 374, 375, 380, 384, 385,
419 390, 394, 395, 400, 404, 405, 410, 414, 415, 420, 424, 425,
420 430, 434, 435, 440, 444, 445, 450, 454, 455, 460, 464, 465,
421 470, 474, 475, 480, 484, 485, 490, 494, 495, 500, 504, 505,
422 510, 514, 515, 520, 524, 525, 529, 530, 534, 535, 539, 540,
423 544, 545, 549, 550, 554, 555, 559, 560, 564, -1
424 ],
425 name = 'tch_afs_5_15',
426 description = [
427 "TCH/AFS 5.15 kbits convolutional code:",
428 "G1/G3 = 1 + D + D3 + D4 / 1 + D + D2 + D3 + D4",
429 "G1/G3 = 1 + D + D3 + D4 / 1 + D + D2 + D3 + D4",
430 "G2/G3 = 1 + D2 + D4 / 1 + D + D2 + D3 + D4",
431 "G3/G3 = 1",
432 "G3/G3 = 1",
433 ]
434 ),
435
436 # TCH_AFS_4_75 definition
437 ConvolutionalCode(
438 101,
439 [
440 ( G4, G6 ),
441 ( G4, G6 ),
442 ( G5, G6 ),
443 ( 1, 1 ),
444 ( 1, 1 ),
445 ],
446 puncture = [
447 0, 1, 2, 4, 5, 7, 9, 15, 25, 35, 45, 55,
448 65, 75, 85, 95, 105, 115, 125, 135, 145, 155, 165, 175,
449 185, 195, 205, 215, 225, 235, 245, 255, 265, 275, 285, 295,
450 305, 315, 325, 335, 345, 355, 365, 375, 385, 395, 400, 405,
451 410, 415, 420, 425, 430, 435, 440, 445, 450, 455, 459, 460,
452 465, 470, 475, 479, 480, 485, 490, 495, 499, 500, 505, 509,
453 510, 515, 517, 519, 520, 522, 524, 525, 526, 527, 529, 530,
454 531, 532, 534, -1
455 ],
456 name = 'tch_afs_4_75',
457 description = [
458 "TCH/AFS 4.75 kbits convolutional code:",
459 "G4/G6 = 1 + D2 + D3 + D5 + D6 / 1 + D + D2 + D3 + D4 + D6",
460 "G4/G6 = 1 + D2 + D3 + D5 + D6 / 1 + D + D2 + D3 + D4 + D6",
461 "G5/G6 = 1 + D + D4 + D6 / 1 + D + D2 + D3 + D4 + D6",
462 "G6/G6 = 1",
463 "G6/G6 = 1",
464 ]
465 ),
466
467 # TCH_FR definition
468 ConvolutionalCode(
469 185,
470 shared_polys["xcch"],
471 name = "tch_fr",
472 description = ["TCH/F convolutional code"]
473 ),
474
475 # TCH_HR definition
476 ConvolutionalCode(
477 98,
478 [
479 ( G4, 1 ),
480 ( G5, 1 ),
481 ( G6, 1 ),
482 ],
483 puncture = [
484 1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34,
485 37, 40, 43, 46, 49, 52, 55, 58, 61, 64, 67, 70,
486 73, 76, 79, 82, 85, 88, 91, 94, 97, 100, 103, 106,
487 109, 112, 115, 118, 121, 124, 127, 130, 133, 136, 139, 142,
488 145, 148, 151, 154, 157, 160, 163, 166, 169, 172, 175, 178,
489 181, 184, 187, 190, 193, 196, 199, 202, 205, 208, 211, 214,
490 217, 220, 223, 226, 229, 232, 235, 238, 241, 244, 247, 250,
491 253, 256, 259, 262, 265, 268, 271, 274, 277, 280, 283, 295,
492 298, 301, 304, 307, 310, -1,
493 ],
494 name = "tch_hr",
495 description = ["TCH/H convolutional code"]
496 ),
497
498 # TCH_AHS_7_95 definition
499 ConvolutionalCode(
500 129,
501 [
502 ( 1, 1 ),
503 ( G1, G0 ),
504 ],
505 puncture = [
506 1, 3, 5, 7, 11, 15, 19, 23, 27, 31, 35, 43,
507 47, 51, 55, 59, 63, 67, 71, 79, 83, 87, 91, 95,
508 99, 103, 107, 115, 119, 123, 127, 131, 135, 139, 143, 151,
509 155, 159, 163, 167, 171, 175, 177, 179, 183, 185, 187, 191,
510 193, 195, 197, 199, 203, 205, 207, 211, 213, 215, 219, 221,
511 223, 227, 229, 231, 233, 235, 239, 241, 243, 247, 249, 251,
512 255, 257, 259, 261, 263, 265, -1,
513 ],
514 name = "tch_ahs_7_95",
515 description = ["TCH/AHS 7.95 kbits convolutional code"]
516 ),
517
518 # TCH_AHS_7_4 definition
519 ConvolutionalCode(
520 126,
521 [
522 ( 1, 1 ),
523 ( G1, G0 ),
524 ],
525 puncture = [
526 1, 3, 7, 11, 19, 23, 27, 35, 39, 43, 51, 55,
527 59, 67, 71, 75, 83, 87, 91, 99, 103, 107, 115, 119,
528 123, 131, 135, 139, 143, 147, 151, 155, 159, 163, 167, 171,
529 175, 179, 183, 187, 191, 195, 199, 203, 207, 211, 215, 219,
530 221, 223, 227, 229, 231, 235, 237, 239, 243, 245, 247, 251,
531 253, 255, 257, 259, -1,
532 ],
533 name = "tch_ahs_7_4",
534 description = ["TCH/AHS 7.4 kbits convolutional code"]
535 ),
536
537 # TCH_AHS_6_7 definition
538 ConvolutionalCode(
539 116,
540 [
541 ( 1, 1 ),
542 ( G1, G0 ),
543 ],
544 puncture = [
545 1, 3, 9, 19, 29, 39, 49, 59, 69, 79, 89, 99,
546 109, 119, 129, 139, 149, 159, 167, 169, 177, 179, 187, 189,
547 197, 199, 203, 207, 209, 213, 217, 219, 223, 227, 229, 231,
548 233, 235, 237, 239, -1,
549 ],
550 name = "tch_ahs_6_7",
551 description = ["TCH/AHS 6.7 kbits convolutional code"]
552 ),
553
554 # TCH_AHS_5_9 definition
555 ConvolutionalCode(
556 108,
557 [
558 ( 1, 1 ),
559 ( G1, G0 ),
560 ],
561 puncture = [
562 1, 15, 71, 127, 139, 151, 163, 175, 187, 195, 203, 211,
563 215, 219, 221, 223, -1,
564 ],
565 name = "tch_ahs_5_9",
566 description = ["TCH/AHS 5.9 kbits convolutional code"]
567 ),
568
569 # TCH_AHS_5_15 definition
570 ConvolutionalCode(
571 97,
572 [
573 ( G1, G3 ),
574 ( G2, G3 ),
575 ( 1, 1 ),
576 ],
577 puncture = [
578 0, 1, 3, 4, 6, 9, 12, 15, 18, 21, 27, 33,
579 39, 45, 51, 54, 57, 63, 69, 75, 81, 87, 90, 93,
580 99, 105, 111, 117, 123, 126, 129, 135, 141, 147, 153, 159,
581 162, 165, 168, 171, 174, 177, 180, 183, 186, 189, 192, 195,
582 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231,
583 234, 237, 240, 243, 244, 246, 249, 252, 255, 256, 258, 261,
584 264, 267, 268, 270, 273, 276, 279, 280, 282, 285, 288, 289,
585 291, 294, 295, 297, 298, 300, 301, -1,
586 ],
587 name = "tch_ahs_5_15",
588 description = ["TCH/AHS 5.15 kbits convolutional code"]
589 ),
590
591 # TCH_AHS_4_75 definition
592 ConvolutionalCode(
593 89,
594 [
595 ( 1, 1 ),
596 ( G5, G4 ),
597 ( G6, G4 ),
598 ],
599 puncture = [
600 1, 2, 4, 5, 7, 8, 10, 13, 16, 22, 28, 34,
601 40, 46, 52, 58, 64, 70, 76, 82, 88, 94, 100, 106,
602 112, 118, 124, 130, 136, 142, 148, 151, 154, 160, 163, 166,
603 172, 175, 178, 184, 187, 190, 196, 199, 202, 208, 211, 214,
604 220, 223, 226, 232, 235, 238, 241, 244, 247, 250, 253, 256,
605 259, 262, 265, 268, 271, 274, 275, 277, 278, 280, 281, 283,
606 284, -1,
607 ],
608 name = "tch_ahs_4_75",
609 description = ["TCH/AHS 4.75 kbits convolutional code"]
610 ),
611
Philipp Maier31c29ea2020-02-28 14:27:10 +0100612 # TCH_AXS SID UPDATE definition
613 ConvolutionalCode(
614 49,
615 [
616 ( G1, G3 ),
617 ( G2, G3 ),
618 ( 1, 1 ),
619 ( 1, 1 ),
620 ],
621 name = 'tch_axs_sid_update',
622 description = [
623 "TCH/AFS and TCH/AHS SID UPDATE convolutional code:",
624 "G1/G3 = 1 + D + D3 + D4 / 1 + D + D2 + D3 + D4",
625 "G2/G3 = 1 + D2 + D4 / 1 + D + D2 + D3 + D4",
626 "G3/G3 = 1",
627 "G3/G3 = 1",
628 ]
629 ),
630
Vadim Yanitskiy15492bc2016-11-10 17:10:42 +0700631 # EDGE MCS1_DL_HDR definition
632 ConvolutionalCode(
633 36,
634 shared_polys["mcs"],
635 name = "mcs1_dl_hdr",
636 term_type = "CONV_TERM_TAIL_BITING",
637 description = [
638 "EDGE MCS-1 DL header convolutional code:",
639 "42 bits blocks, rate 1/3, k = 7",
640 "G4 = 1 + D2 + D3 + D5 + D6",
641 "G7 = 1 + D + D2 + D3 + D6",
642 "G5 = 1 + D + D4 + D6"
643 ]
644 ),
645
646 # EDGE MCS1_UL_HDR definition
647 ConvolutionalCode(
648 39,
649 shared_polys["mcs"],
650 name = "mcs1_ul_hdr",
651 term_type = "CONV_TERM_TAIL_BITING",
652 description = [
653 "EDGE MCS-1 UL header convolutional code:",
654 "45 bits blocks, rate 1/3, k = 7",
655 "G4 = 1 + D2 + D3 + D5 + D6",
656 "G7 = 1 + D + D2 + D3 + D6",
657 "G5 = 1 + D + D4 + D6"
658 ]
659 ),
660
661 # EDGE MCS1 definition
662 ConvolutionalCode(
663 190,
664 shared_polys["mcs"],
665 name = "mcs1",
666 description = [
667 "EDGE MCS-1 data convolutional code:",
668 "196 bits blocks, rate 1/3, k = 7",
669 "G4 = 1 + D2 + D3 + D5 + D6",
670 "G7 = 1 + D + D2 + D3 + D6",
671 "G5 = 1 + D + D4 + D6"
672 ]
673 ),
674
675 # EDGE MCS2 definition
676 ConvolutionalCode(
677 238,
678 shared_polys["mcs"],
679 name = "mcs2",
680 description = [
681 "EDGE MCS-2 data convolutional code:",
682 "244 bits blocks, rate 1/3, k = 7",
683 "G4 = 1 + D2 + D3 + D5 + D6",
684 "G7 = 1 + D + D2 + D3 + D6",
685 "G5 = 1 + D + D4 + D6"
686 ]
687 ),
688
689 # EDGE MCS3 definition
690 ConvolutionalCode(
691 310,
692 shared_polys["mcs"],
693 name = "mcs3",
694 description = [
695 "EDGE MCS-3 data convolutional code:",
696 "316 bits blocks, rate 1/3, k = 7",
697 "G4 = 1 + D2 + D3 + D5 + D6",
698 "G7 = 1 + D + D2 + D3 + D6",
699 "G5 = 1 + D + D4 + D6"
700 ]
701 ),
702
703 # EDGE MCS4 definition
704 ConvolutionalCode(
705 366,
706 shared_polys["mcs"],
707 name = "mcs4",
708 description = [
709 "EDGE MCS-4 data convolutional code:",
710 "372 bits blocks, rate 1/3, k = 7",
711 "G4 = 1 + D2 + D3 + D5 + D6",
712 "G7 = 1 + D + D2 + D3 + D6",
713 "G5 = 1 + D + D4 + D6"
714 ]
715 ),
716
717 # EDGE MCS5_DL_HDR definition
718 ConvolutionalCode(
719 33,
720 shared_polys["mcs"],
721 name = "mcs5_dl_hdr",
722 term_type = "CONV_TERM_TAIL_BITING",
723 description = [
724 "EDGE MCS-5 DL header convolutional code:",
725 "39 bits blocks, rate 1/3, k = 7",
726 "G4 = 1 + D2 + D3 + D5 + D6",
727 "G7 = 1 + D + D2 + D3 + D6",
728 "G5 = 1 + D + D4 + D6"
729 ]
730 ),
731
732 # EDGE MCS5_UL_HDR definition
733 ConvolutionalCode(
734 45,
735 shared_polys["mcs"],
736 name = "mcs5_ul_hdr",
737 term_type = "CONV_TERM_TAIL_BITING",
738 description = [
739 "EDGE MCS-5 UL header convolutional code:",
740 "51 bits blocks, rate 1/3, k = 7",
741 "G4 = 1 + D2 + D3 + D5 + D6",
742 "G7 = 1 + D + D2 + D3 + D6",
743 "G5 = 1 + D + D4 + D6"
744 ]
745 ),
746
747 # EDGE MCS5 definition
748 ConvolutionalCode(
749 462,
750 shared_polys["mcs"],
751 name = "mcs5",
752 description = [
753 "EDGE MCS-5 data convolutional code:",
754 "468 bits blocks, rate 1/3, k = 7",
755 "G4 = 1 + D2 + D3 + D5 + D6",
756 "G7 = 1 + D + D2 + D3 + D6",
757 "G5 = 1 + D + D4 + D6"
758 ]
759 ),
760
761 # EDGE MCS6 definition
762 ConvolutionalCode(
763 606,
764 shared_polys["mcs"],
765 name = "mcs6",
766 description = [
767 "EDGE MCS-6 data convolutional code:",
768 "612 bits blocks, rate 1/3, k = 7",
769 "G4 = 1 + D2 + D3 + D5 + D6",
770 "G7 = 1 + D + D2 + D3 + D6",
771 "G5 = 1 + D + D4 + D6"
772 ]
773 ),
774
775 # EDGE MCS7_DL_HDR definition
776 ConvolutionalCode(
777 45,
778 shared_polys["mcs"],
779 name = "mcs7_dl_hdr",
780 term_type = "CONV_TERM_TAIL_BITING",
781 description = [
782 "EDGE MCS-7 DL header convolutional code:",
783 "51 bits blocks, rate 1/3, k = 7",
784 "G4 = 1 + D2 + D3 + D5 + D6",
785 "G7 = 1 + D + D2 + D3 + D6",
786 "G5 = 1 + D + D4 + D6"
787 ]
788 ),
789
790 # EDGE MCS7_UL_HDR definition
791 ConvolutionalCode(
792 54,
793 shared_polys["mcs"],
794 name = "mcs7_ul_hdr",
795 term_type = "CONV_TERM_TAIL_BITING",
796 description = [
797 "EDGE MCS-7 UL header convolutional code:",
798 "60 bits blocks, rate 1/3, k = 7",
799 "G4 = 1 + D2 + D3 + D5 + D6",
800 "G7 = 1 + D + D2 + D3 + D6",
801 "G5 = 1 + D + D4 + D6"
802 ]
803 ),
804
805 # EDGE MCS7 definition
806 ConvolutionalCode(
807 462,
808 shared_polys["mcs"],
809 name = "mcs7",
810 description = [
811 "EDGE MCS-7 data convolutional code:",
812 "468 bits blocks, rate 1/3, k = 7",
813 "G4 = 1 + D2 + D3 + D5 + D6",
814 "G7 = 1 + D + D2 + D3 + D6",
815 "G5 = 1 + D + D4 + D6"
816 ]
817 ),
818
819 # EDGE MCS8 definition
820 ConvolutionalCode(
821 558,
822 shared_polys["mcs"],
823 name = "mcs8",
824 description = [
825 "EDGE MCS-8 data convolutional code:",
826 "564 bits blocks, rate 1/3, k = 7",
827 "G4 = 1 + D2 + D3 + D5 + D6",
828 "G7 = 1 + D + D2 + D3 + D6",
829 "G5 = 1 + D + D4 + D6"
830 ]
831 ),
832
833 # EDGE MCS9 definition
834 ConvolutionalCode(
835 606,
836 shared_polys["mcs"],
837 name = "mcs9",
838 description = [
839 "EDGE MCS-9 data convolutional code:",
840 "612 bits blocks, rate 1/3, k = 7",
841 "G4 = 1 + D2 + D3 + D5 + D6",
842 "G7 = 1 + D + D2 + D3 + D6",
843 "G5 = 1 + D + D4 + D6"
844 ]
845 ),
846]