convolutional coding for CSD

This patch adds the convolutional code definitions for CSD (circuit
switched data) on TCH/F channels with user bit rates of 2400, 4800, 9600
and 14400 bps.

Related: OS#4396, OS#1572
Change-Id: I412131d7ee2e676402bf8d88394af17c4447b664
This commit is contained in:
Harald Welte 2020-02-12 23:08:17 +01:00
parent 7b9b3074a2
commit 65e0edc73f
3 changed files with 123 additions and 0 deletions

View File

@ -121,6 +121,10 @@ gsm0503_cs3;
gsm0503_cs2_np;
gsm0503_cs3_np;
gsm0503_tch_fr;
gsm0503_tch_f24;
gsm0503_tch_f48;
gsm0503_tch_f96;
gsm0503_tch_f144;
gsm0503_tch_hr;
gsm0503_tch_afs_12_2;
gsm0503_tch_afs_10_2;

View File

@ -6,6 +6,38 @@
[..] Encoding / Decoding cycle : OK
[..] Encoding / Decoding cycle : OK
[+] Testing: gsm0503_tch_f24
[.] Input length : ret = 72 exp = 72 -> OK
[.] Output length : ret = 456 exp = 456 -> OK
[.] Random vector checks:
[..] Encoding / Decoding cycle : OK
[..] Encoding / Decoding cycle : OK
[..] Encoding / Decoding cycle : OK
[+] Testing: gsm0503_tch_f48
[.] Input length : ret = 152 exp = 152 -> OK
[.] Output length : ret = 468 exp = 468 -> OK
[.] Random vector checks:
[..] Encoding / Decoding cycle : OK
[..] Encoding / Decoding cycle : OK
[..] Encoding / Decoding cycle : OK
[+] Testing: gsm0503_tch_f96
[.] Input length : ret = 240 exp = 240 -> OK
[.] Output length : ret = 456 exp = 456 -> OK
[.] Random vector checks:
[..] Encoding / Decoding cycle : OK
[..] Encoding / Decoding cycle : OK
[..] Encoding / Decoding cycle : OK
[+] Testing: gsm0503_tch_f144
[.] Input length : ret = 290 exp = 290 -> OK
[.] Output length : ret = 456 exp = 456 -> OK
[.] Random vector checks:
[..] Encoding / Decoding cycle : OK
[..] Encoding / Decoding cycle : OK
[..] Encoding / Decoding cycle : OK
[+] Testing: gsm0503_rach
[.] Input length : ret = 14 exp = 14 -> OK
[.] Output length : ret = 36 exp = 36 -> OK

View File

@ -42,6 +42,93 @@ conv_codes = [
]
),
# TCH/F2.4 definition
ConvolutionalCode(
72,
[
(G1, 1),
(G2, 1),
(G3, 1),
(G1, 1),
(G2, 1),
(G3, 1),
],
name = "tch_f24",
description = [
"TCH/F2.4 convolutional code:",
"72 bits blocks, rate 1/6, k = 5",
"G1 = 1 + D + D3 + D4",
"G2 = 1 + D2 + D4",
"G3 = 1 + D + D2 + D3 + D4",
"G1 = 1 + D + D3 + D4",
"G2 = 1 + D2 + D4",
"G3 = 1 + D + D2 + D3 + D4",
]
),
# TCH/F4.8 definition
ConvolutionalCode(
152,
[
(G1, 1),
(G2, 1),
(G3, 1),
],
name = "tch_f48",
description = [
"TCH/F4.8 convolutional code:",
"152 bits blocks, rate 1/3, k = 5",
"G1 = 1 + D + D3 + D4",
"G2 = 1 + D2 + D4",
"G3 = 1 + D + D2 + D3 + D4",
]
),
# TCH/F9.6 definition
ConvolutionalCode(
240,
shared_polys["xcch"],
puncture = [
11, 26, 41, 56, 71, 86, 101, 116, 131, 146, 161, 176,
191, 206, 221, 236, 251, 266, 281, 296, 311, 326, 341, 356,
371, 386, 401, 416, 431, 446, 461, 476, -1
],
name = "tch_f96",
description = [
"TCH/F9.6 convolutional code:",
"240 bits blocks, rate 1/2, k = 5",
"G0 = 1 + D3 + D4",
"G1 = 1 + D + D3 + D4",
]
),
# TCH/F14.4 definition
ConvolutionalCode(
290,
shared_polys["xcch"],
puncture = [
1, 6, 11, 15, 19, 24, 29, 33, 37, 42, 47, 51,
55, 60, 65, 69, 73, 78, 83, 87, 91, 96, 101, 105,
109, 114, 119, 123, 127, 132, 137, 141, 145, 150, 155, 159,
163, 168, 173, 177, 181, 186, 191, 195, 199, 204, 209, 213,
217, 222, 227, 231, 235, 240, 245, 249, 253, 258, 263, 267,
271, 276, 281, 285, 289, 294, 299, 303, 307, 312, 317, 321,
325, 330, 335, 339, 343, 348, 353, 357, 361, 366, 371, 375,
379, 384, 389, 393, 397, 402, 407, 411, 415, 420, 425, 429,
433, 438, 443, 447, 451, 456, 461, 465, 469, 474, 479, 483,
487, 492, 497, 501, 505, 510, 515, 519, 523, 528, 533, 537,
541, 546, 551, 555, 559, 564, 569, 573, 577, 582, 584, 587,
-1
],
name = "tch_f144",
description = [
"TCH/F14.4 convolutional code:",
"290 bits blocks, rate 1/2, k = 5",
"G0 = 1 + D3 + D4",
"G1 = 1 + D + D3 + D4",
]
),
# RACH definition
ConvolutionalCode(
14,