aboutsummaryrefslogtreecommitdiffstats
path: root/src/l1
diff options
context:
space:
mode:
authorSylvain Munaut <tnt@246tNt.com>2011-12-14 20:40:36 +0100
committerSylvain Munaut <tnt@246tNt.com>2011-12-14 23:02:53 +0100
commit069fa2e094d13df3ce206794829b4a9b2832f0a8 (patch)
treed67e3533354d3afadb16e9bd7b60709b6c4075e6 /src/l1
parent77037d37bc78ea166d9e5fdea954cf1056f9d4b9 (diff)
l1/conv: Add the special tail-biting code used in TCH3
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
Diffstat (limited to 'src/l1')
-rw-r--r--src/l1/conv.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/l1/conv.c b/src/l1/conv.c
index a8a564b..6b19a30 100644
--- a/src/l1/conv.c
+++ b/src/l1/conv.c
@@ -141,4 +141,58 @@ const struct osmo_conv_code gmr1_conv_15 = {
.next_state = gmr1_conv_next_state,
};
+
+/*
+ * GMR-1 TCH3 Speech (Rate 1/2 with tail biting) convolutional code
+ *
+ * g0(D) = 1 + D^2 + D^3 + D^5 + D^6
+ * g1(D) = 1 + D + D^2 + D^3 + D^6
+ */
+
+static const uint8_t gmr1_conv_tch3_next_output[][2] = {
+ { 0, 3 }, { 1, 2 }, { 3, 0 }, { 2, 1 },
+ { 3, 0 }, { 2, 1 }, { 0, 3 }, { 1, 2 },
+ { 0, 3 }, { 1, 2 }, { 3, 0 }, { 2, 1 },
+ { 3, 0 }, { 2, 1 }, { 0, 3 }, { 1, 2 },
+ { 2, 1 }, { 3, 0 }, { 1, 2 }, { 0, 3 },
+ { 1, 2 }, { 0, 3 }, { 2, 1 }, { 3, 0 },
+ { 2, 1 }, { 3, 0 }, { 1, 2 }, { 0, 3 },
+ { 1, 2 }, { 0, 3 }, { 2, 1 }, { 3, 0 },
+ { 3, 0 }, { 2, 1 }, { 0, 3 }, { 1, 2 },
+ { 0, 3 }, { 1, 2 }, { 3, 0 }, { 2, 1 },
+ { 3, 0 }, { 2, 1 }, { 0, 3 }, { 1, 2 },
+ { 0, 3 }, { 1, 2 }, { 3, 0 }, { 2, 1 },
+ { 1, 2 }, { 0, 3 }, { 2, 1 }, { 3, 0 },
+ { 2, 1 }, { 3, 0 }, { 1, 2 }, { 0, 3 },
+ { 1, 2 }, { 0, 3 }, { 2, 1 }, { 3, 0 },
+ { 2, 1 }, { 3, 0 }, { 1, 2 }, { 0, 3 },
+};
+
+static const uint8_t gmr1_conv_tch3_next_state[][2] = {
+ { 0, 1 }, { 2, 3 }, { 4, 5 }, { 6, 7 },
+ { 8, 9 }, { 10, 11 }, { 12, 13 }, { 14, 15 },
+ { 16, 17 }, { 18, 19 }, { 20, 21 }, { 22, 23 },
+ { 24, 25 }, { 26, 27 }, { 28, 29 }, { 30, 31 },
+ { 32, 33 }, { 34, 35 }, { 36, 37 }, { 38, 39 },
+ { 40, 41 }, { 42, 43 }, { 44, 45 }, { 46, 47 },
+ { 48, 49 }, { 50, 51 }, { 52, 53 }, { 54, 55 },
+ { 56, 57 }, { 58, 59 }, { 60, 61 }, { 62, 63 },
+ { 0, 1 }, { 2, 3 }, { 4, 5 }, { 6, 7 },
+ { 8, 9 }, { 10, 11 }, { 12, 13 }, { 14, 15 },
+ { 16, 17 }, { 18, 19 }, { 20, 21 }, { 22, 23 },
+ { 24, 25 }, { 26, 27 }, { 28, 29 }, { 30, 31 },
+ { 32, 33 }, { 34, 35 }, { 36, 37 }, { 38, 39 },
+ { 40, 41 }, { 42, 43 }, { 44, 45 }, { 46, 47 },
+ { 48, 49 }, { 50, 51 }, { 52, 53 }, { 54, 55 },
+ { 56, 57 }, { 58, 59 }, { 60, 61 }, { 62, 63 },
+};
+
+const struct osmo_conv_code gmr1_conv_tch3 = {
+ .N = 2,
+ .K = 7,
+ .term = CONV_TERM_TAIL_BITING,
+ .next_output = gmr1_conv_tch3_next_output,
+ .next_state = gmr1_conv_tch3_next_state,
+};
+
/*! }@ */