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