diff options
author | Sylvain Munaut <tnt@246tNt.com> | 2011-12-14 20:40:36 +0100 |
---|---|---|
committer | Sylvain Munaut <tnt@246tNt.com> | 2011-12-14 23:02:53 +0100 |
commit | 069fa2e094d13df3ce206794829b4a9b2832f0a8 (patch) | |
tree | d67e3533354d3afadb16e9bd7b60709b6c4075e6 /src/l1 | |
parent | 77037d37bc78ea166d9e5fdea954cf1056f9d4b9 (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.c | 54 |
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, +}; + /*! }@ */ |