Project

General

Profile

Bug #1629 » gsm.py

tnt, 03/03/2016 08:37 PM

 
1

    
2
# Helper for poly
3
poly = lambda *args: sum([(1<<x) for x in args])
4

    
5

    
6
# ----------------------------------------------------------------------------
7
# xCCH (SACCH/FACCH/SDCCH)
8
# ----------------------------------------------------------------------------
9

    
10
# Fire code
11
#  g(D) = (D23 + 1)*(D17 + D3 + 1)
12
#       = D40 + D26 + D23 + D17 + D3 + D1
13
#  Remainder: 0
14
#crc_cch = Crc(
15
#
16
#)
17

    
18
# Convolutional Code
19
#  224 bits + 4 flush(0) bits, rate 1/2, k=5
20
#
21
#   G0 = 1 + D3 + D4
22
#   G1 = 1 + D + D3 + D4
23
conv_xcch = ConvolutionalCode(
24
	224, 4, 5,
25
	[
26
		( poly(0,3,4),		1 ),
27
		( poly(0,1,3,4),	1 ),
28
	],
29
)
30

    
31

    
32
# ----------------------------------------------------------------------------
33
# TCH/AFS
34
# ----------------------------------------------------------------------------
35

    
36
# 12.2 kbits
37
# ----------
38

    
39
conv_tch_afs_12_2 = ConvolutionalCode(
40
	250, 5,
41
	[
42
		( 1,				1 ),
43
		( poly(0,1,3,4),	poly(0,3,4) ),
44
	],
45
	name = 'tch_afs_12_2',
46
	description = """250 bits block, rate 1/2, punctured
47

    
48
G0/G0 = 1
49
G1/G0 = 1 + D + D3 + D4 / 1 + D3 + D4
50
"""
51
)
52

    
53
[
54
	321, 325, 329, 333, 337, 341, 345, 349, 353, 357, 361, 363,
55
	365, 369, 373, 377, 379, 381, 385, 389, 393, 395, 397, 401,
56
	405, 409, 411, 413, 417, 421, 425, 427, 429, 433, 437, 441,
57
	443, 445, 449, 453, 457, 459, 461, 465, 469, 473, 475, 477,
58
	481, 485, 489, 491, 493, 495, 497, 499, 501, 503, 505, 507,
59
]
60

    
61

    
62
# 10.2 kbits
63
# ----------
64

    
65
# G1/G3 = 1 + D + D3 + D4 / 1 + D + D2 + D3 + D4
66
# G2/G3 = 1 + D2 + D4     / 1 + D + D2 + D3 + D4
67
# G3/G3 = 1
68

    
69
conv_tch_afs_10_2 = ConvolutionalCode(
70
	210, 4, 5,
71
	[
72
		( poly(0,1,3,4),	poly(0,1,2,3,4) ),
73
		( poly(0,2,4),		poly(0,1,2,3,4) ),
74
		( 1,				1 ),
75
	],
76
)
77

    
78
[
79
	  1,   4,   7,  10,  16,  19,  22,  28,  31,  34,  40,  43,
80
	 46,  52,  55,  58,  64,  67,  70,  76,  79,  82,  88,  91,
81
	 94, 100, 103, 106, 112, 115, 118, 124, 127, 130, 136, 139,
82
	142, 148, 151, 154, 160, 163, 166, 172, 175, 178, 184, 187,
83
	190, 196, 199, 202, 208, 211, 214, 220, 223, 226, 232, 235,
84
	238, 244, 247, 250, 256, 259, 262, 268, 271, 274, 280, 283,
85
	286, 292, 295, 298, 304, 307, 310, 316, 319, 322, 325, 328,
86
	331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364,
87
	367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400,
88
	403, 406, 409, 412, 415, 418, 421, 424, 427, 430, 433, 436,
89
	439, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472,
90
	475, 478, 481, 484, 487, 490, 493, 496, 499, 502, 505, 508,
91
	511, 514, 517, 520, 523, 526, 529, 532, 535, 538, 541, 544,
92
	547, 550, 553, 556, 559, 562, 565, 568, 571, 574, 577, 580,
93
	583, 586, 589, 592, 595, 598, 601, 604, 607, 609, 610, 613,
94
	616, 619, 621, 622, 625, 627, 628, 631, 633, 634, 636, 637,
95
	639, 640,
96
]
97

    
98

    
99
# 7.95 kbits
100
# ----------
101

    
102
# G4/G4 = 1
103
# G5/G4 = 1 + D + D4 + D6           / 1 + D2 + D3 + D5 + D6
104
# G6/G4 = 1 + D + D2 + D3 + D4 + D6 / 1 + D2 + D3 + D5 + D6
105

    
106
conv_tch_afs_7_95 = ConvolutionalCode(
107
	165, 6, 7,
108
	[
109
		( 1,					1 ),
110
		( poly(0,1,4,6),		poly(0,2,3,5,6) ),
111
		( poly(0,1,2,3,4,6),	poly(0,2,3,5,6) ),
112
	],
113
)
114

    
115
[
116
	  1,   2,   4,   5,   8,  22,  70, 118, 166, 214, 262, 310,
117
	317, 319, 325, 332, 334, 341, 343, 349, 356, 358, 365, 367,
118
	373, 380, 382, 385, 389, 391, 397, 404, 406, 409, 413, 415,
119
	421, 428, 430, 433, 437, 439, 445, 452, 454, 457, 461, 463,
120
	469, 476, 478, 481, 485, 487, 490, 493, 500, 502, 503, 505,
121
	506, 508, 509, 511, 512
122
]
123

    
124

    
125
# 7.4 kbits
126
# ---------
127

    
128
#
129
# G1/G3 = 1 + D + D3 + D4 / 1 + D + D2 + D3 + D4
130
# G2/G3 = 1 + D2 + D4     / 1 + D + D2 + D3 + D4
131
# G3/G3 = 1
132
#
133

    
134
conv_tch_afs_7_4 = ConvolutionalCode(
135
	154, 4, 5,
136
	[
137
		( poly(0,1,3,4),	poly(0,1,2,3,4) ),
138
		( poly(0,2,4),		poly(0,1,2,3,4) ),
139
		( 1,				1 ),
140
	],
141
)
142

    
143
[
144
	  0, 355, 361, 367, 373, 379, 385, 391, 397, 403, 409, 415,
145
	421, 427, 433, 439, 445, 451, 457, 460, 463, 466, 468, 469,
146
	471, 472,
147
]
148

    
149
# 6.7 kbits
150
# ---------
151

    
152
# G1/G3 = 1 + D + D3 + D4 / 1 + D + D2 + D3 + D4
153
# G2/G3 = 1 + D2 + D4     / 1 + D + D2 + D3 + D4
154
# G3/G3 = 1
155
# G3/G3 = 1
156

    
157
conv_tch_afs_6_7 = ConvolutionalCode(
158
	140, 4, 5,
159
	[
160
		( poly(0,1,3,4),	poly(0,1,2,3,4) ),
161
		( poly(0,2,4),		poly(0,1,2,3,4) ),
162
		( 1,				1 ),
163
		( 1,				1 ),
164
	],
165
)
166

    
167
[
168
	  1,   3,   7,  11,  15,  27,  39,  55,  67,  79,  95, 107,
169
	119, 135, 147, 159, 175, 187, 199, 215, 227, 239, 255, 267,
170
	279, 287, 291, 295, 299, 303, 307, 311, 315, 319, 323, 327,
171
	331, 335, 339, 343, 347, 351, 355, 359, 363, 367, 369, 371,
172
	375, 377, 379, 383, 385, 387, 391, 393, 395, 399, 401, 403,
173
	407, 409, 411, 415, 417, 419, 423, 425, 427, 431, 433, 435,
174
	439, 441, 443, 447, 449, 451, 455, 457, 459, 463, 465, 467,
175
	471, 473, 475, 479, 481, 483, 487, 489, 491, 495, 497, 499,
176
	503, 505, 507, 511, 513, 515, 519, 521, 523, 527, 529, 531,
177
	535, 537, 539, 543, 545, 547, 549, 551, 553, 555, 557, 559,
178
	561, 563, 565, 567, 569, 571, 573, 575
179
]
180

    
181

    
182
# 5.9 kbits
183
# ---------
184

    
185
# 124 bits + 6 flush(0) bits, rate 1/4, k=7
186
#
187
#  G4/G6 = 1 + D2 + D3 + D5 + D6 / 1 + D + D2 + D3 + D4 + D6
188
#  G5/G6 = 1 + D + D4 + D6       / 1 + D + D2 + D3 + D4 + D6
189
#  G6/G6 = 1
190
#  G6/G6 = 1
191

    
192
conv_tch_afs_5_9 = ConvolutionalCode(
193
	124, 6, 7,
194
	[
195
		( poly(0,2,3,5,6),	poly(0,1,2,3,4,6) ),
196
		( poly(0,1,4,6),	poly(0,1,2,3,4,6) ),
197
		( 1,				1 ),
198
		( 1,				1 ),
199
	],
200
)
201

    
202
[
203
	  0,   1,   3,   5,   7,  11,  15,  31,  47,  63,  79,  95,
204
	111, 127, 143, 159, 175, 191, 207, 223, 239, 255, 271, 287,
205
	303, 319, 327, 331, 335, 343, 347, 351, 359, 363, 367, 375,
206
	379, 383, 391, 395, 399, 407, 411, 415, 423, 427, 431, 439,
207
	443, 447, 455, 459, 463, 467, 471, 475, 479, 483, 487, 491,
208
	495, 499, 503, 507, 509, 511, 512, 513, 515, 516, 517, 519,
209
]
210

    
211
# 5.15 kbits
212
# ----------
213

    
214
# G1/G3 = 1 + D + D3 + D4 / 1 + D + D2 + D3 + D4
215
# G1/G3 = 1 + D + D3 + D4 / 1 + D + D2 + D3 + D4
216
# G2/G3 = 1 + D2 + D4     / 1 + D + D2 + D3 + D4
217
# G3/G3 = 1
218
# G3/G3 = 1
219

    
220
conv_tch_afs_5_15 = ConvolutionalCode(
221
	109, 4, 5,
222
	[
223
		( poly(0,1,3,4),	poly(0,1,2,3,4) ),
224
		( poly(0,1,3,4),	poly(0,1,2,3,4) ),
225
		( poly(0,2,4),		poly(0,1,2,3,4) ),
226
		( 1,				1 ),
227
		( 1,				1 ),
228
	],
229
)
230

    
231
[
232
	  0,   4,   5,   9,  10,  14,  15,  20,  25,  30,  35,  40,
233
	 50,  60,  70,  80,  90, 100, 110, 120, 130, 140, 150, 160,
234
	170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280,
235
	290, 300, 310, 315, 320, 325, 330, 334, 335, 340, 344, 345,
236
	350, 354, 355, 360, 364, 365, 370, 374, 375, 380, 384, 385,
237
	390, 394, 395, 400, 404, 405, 410, 414, 415, 420, 424, 425,
238
	430, 434, 435, 440, 444, 445, 450, 454, 455, 460, 464, 465,
239
	470, 474, 475, 480, 484, 485, 490, 494, 495, 500, 504, 505,
240
	510, 514, 515, 520, 524, 525, 529, 530, 534, 535, 539, 540,
241
	544, 545, 549, 550, 554, 555, 559, 560, 564,
242
]
243

    
244

    
245
# 4.75 kbits
246
# ----------
247

    
248
# G4/G6 = 1 + D2 + D3 + D5 + D6 / 1 + D + D2 + D3 + D4 + D6
249
# G4/G6 = 1 + D2 + D3 + D5 + D6 / 1 + D + D2 + D3 + D4 + D6
250
# G5/G6 = 1 + D + D4 + D6       / 1 + D + D2 + D3 + D4 + D6
251
# G6/G6 = 1
252
# G6/G6 = 1
253

    
254
conv_tch_afs_4_75 = ConvolutionalCode(
255
	101, 6, 7,
256
	[
257
		( poly(0,2,3,5,6),	poly(0,1,2,3,4,6) ),
258
		( poly(0,2,3,5,6),	poly(0,1,2,3,4,6) ),
259
		( poly(0,1,4,6),	poly(0,1,2,3,4,6) ),
260
		( 1,				1 ),
261
		( 1,				1 ),
262
	],
263
)
264

    
265
[
266
	  0,   1,   2,   4,   5,   7,   9,  15,  25,  35,  45,  55,
267
	 65,  75,  85,  95, 105, 115, 125, 135, 145, 155, 165, 175,
268
	185, 195, 205, 215, 225, 235, 245, 255, 265, 275, 285, 295,
269
	305, 315, 325, 335, 345, 355, 365, 375, 385, 395, 400, 405,
270
	410, 415, 420, 425, 430, 435, 440, 445, 450, 455, 459, 460,
271
	465, 470, 475, 479, 480, 485, 490, 495, 499, 500, 505, 509,
272
	510, 515, 517, 519, 520, 522, 524, 525, 526, 527, 529, 530,
273
	531, 532, 534,
274
]
275

    
276

    
277
# ----------------------------------------------------------------------------
278
# TCH/AHS
279
# ----------------------------------------------------------------------------
280

    
281

    
282
# ----------------------------------------------------------------------------
283
# TCH/EFS
284
# ----------------------------------------------------------------------------
285
# EFS preprocessing
286

    
287
# Bits used for the CRC
288
 39,  40,  41,  42,  43,  44,  48,  87,
289
 45,   2,   3,   8,  10,  18,  19,  24,
290
 46,  47, 142, 143, 144, 145, 146, 147,
291
 92,  93, 195, 196,  98, 137, 148,  94,
292
197, 149, 150,  95, 198,   4,   5,  11,
293
 12,  16,   9,   6,   7,  13,  17,  20,
294
 96, 199,   1,  14,  15,  21,  25,  26,
295
 28, 151, 201, 190, 240,  88, 138, 191,
296
241,
297

    
298
# CRC: 
299
#  Divider:   g(D) = D8 + D4 + D3 + D2 + 1
300
#  Remainder: 0
301

    
302

    
303
# ----------------------------------------------------------------------------
304
# TCH/FS
305
# ----------------------------------------------------------------------------
306

    
307
# CRC: (GSM 05.03 3.1.1)
308
#  Divider:   g(D) = D3 + D + 1
309
#  Remainder: 1 + D + D2
310

    
311
# Convolutional Code: (GSM 05.03 3.1.2)
312
#  185 bits + 4 flush(0) bits, rate 1/2, k=5
313
#
314
#   G0 = 1 + D3 + D4
315
#   G1 = 1 + D + D3 + D4
316
#
317

    
318

    
319
# ----------------------------------------------------------------------------
320
# TCH/HS
321
# ----------------------------------------------------------------------------
322

    
323
# CRC: (GSM 05.03 3.2.1) (same as TCH/FS -> TCH/xS)
324
#  Divider:   g(D) = D3 + D + 1
325
#  Remainder: 1 + D + D2
326

    
327
# Convolutional Code: (GSM 05.03 3.2.2)
328
#  98 bits + 6 flush(0) bits, rate 1/3, k=7, punctured
329
#  
330
#   G4 = 1 + D2 + D3 + D5 + D6
331
#   G5 = 1 + D + D4 + D6
332
#   G6 = 1 + D + D2 + D3 + D4 + D6
333
#
334
#   + puncturing see GSM 05.03 - 3.2.2
335
#
336

    
337

    
338
# ----------------------------------------------------------------------------
339
# TCH/F CSD
340
# ----------------------------------------------------------------------------
341

    
342
# TCH/F9.6
343
# --------
344
# 9.6 kbits service (12 kbits radio interface)
345

    
346
# Convolutional Code: (GSM 05.03 3.3.3)
347
#  240 bits + 4 flush(0) bits, rate 1/2, k=5
348
#
349
#   G0 = 1 + D3 + D4
350
#   G1 = 1 + D + D3 + D4
351
#
352

    
353

    
354
# TCH/F4.8
355
# --------
356
# 4.8 kbits service (6 kbits radio interface)
357

    
358
# Convolutional Code: (GSM 05.03 3.4.3)
359
#  152 bits, rate 1/2, k=5
360
#
361
#  G1 = 1 + D + D3 + D4
362
#  G2 = 1 + D2 + D4
363
#  G3 = 1 + D + D2 + D3 + D4
364
#
365

    
366

    
367
# TCH/H4.8
368
# --------
369
# 4.8 kbits service (6 kbits radio interface)
370

    
371
# Same convolutional code as TCH/F9.6
372

    
373

    
374
# TCH/F2.4
375
# --------
376
# 2.4 kbits service (3.6 kbits radio interface)
377

    
378
# Same convolutional code as TCH/F4.8
379

    
380

    
381
# TCH/F14.4
382
# ---------
383
# 14.4 kbits service (14.5 kbits radio interface)
384

    
385
# Convolutional Code: (GSM 05.03 3.8.3)
386
#  290 bits + 4 flush(0) bits, rate 1/2, k=5, punctured
387
#
388
#   G0 = 1 + D3 + D4
389
#   G1 = 1 + D + D3 + D4
390
#
391
# The code is punctured in such a way that the following 132 coded bits:
392
# {C(18*j+1), C(18*j+6), C(18*j+11), C(18*j+15) for j = 0,1,...,31}
393
# and the bits C(577), C(582), C(584) and C(587) are not transmitted.
394

    
395

    
396
# ----------------------------------------------------------------------------
397
# TCH/H CSD
398
# ----------------------------------------------------------------------------
399

    
400
# ----------------------------------------------------------------------------
401
# E-TCH/F ECSD
402
# ----------------------------------------------------------------------------
403

    
(2-2/2)
Add picture from clipboard (Maximum size: 48.8 MB)