diff options
author | Andreas Eversberg <jolly@eversberg.eu> | 2013-03-31 12:17:02 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2015-09-22 16:41:27 +0200 |
commit | c910a332b261d48fa594f1a3133987c8f650dcb1 (patch) | |
tree | a8d6ecfdc7866ca1c63b0c548a21dc09829bbdec /src/osmo-bts-trx/gsm0503_interleaving.c | |
parent | f62a64e440a1cb8a654e3f49b8f4202022e0348a (diff) |
TRX: Support for TCH/H and GSM half rate transcoding
Diffstat (limited to 'src/osmo-bts-trx/gsm0503_interleaving.c')
-rw-r--r-- | src/osmo-bts-trx/gsm0503_interleaving.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/osmo-bts-trx/gsm0503_interleaving.c b/src/osmo-bts-trx/gsm0503_interleaving.c index 014b4c9c..ec47a6b3 100644 --- a/src/osmo-bts-trx/gsm0503_interleaving.c +++ b/src/osmo-bts-trx/gsm0503_interleaving.c @@ -96,3 +96,49 @@ void gsm0503_tch_fr_interleave(ubit_t *cB, ubit_t *iB) } } +/* + * GSM TCH HR/AHS interleaving and burst mapping + * + * Interleaving: + * + * Given 288 coded input bits, form 4 blocks of 114 bits, + * where even bits of the first 2 blocks and odd bits of the last 2 blocks + * are used: + * + * i(B, j) = c(n, k) k = 0, ..., 227 + * n = 0, ..., N, N + 1, ... + * B = B_0 + 2n + b + * j, b = table[k]; + * + * Mapping on Burst: + * + * e(B, j) = i(B, j) + * e(B, 59 + j) = i(B, 57 + j) j = 0, ..., 56 + * e(B, 57) = h_l(B) + * e(B, 58) = h_n(B) + * + * Where hl(B) and hn(B) are bits in burst B indicating flags. + */ + +void gsm0503_tch_hr_deinterleave(sbit_t *cB, sbit_t *iB) +{ + int j, k, B; + + for (k=0; k<228; k++) { + B = gsm0503_tch_hr_interleaving[k][1]; + j = gsm0503_tch_hr_interleaving[k][0]; + cB[k] = iB[B * 114 + j]; + } +} + +void gsm0503_tch_hr_interleave(ubit_t *cB, ubit_t *iB) +{ + int j, k, B; + + for (k=0; k<228; k++) { + B = gsm0503_tch_hr_interleaving[k][1]; + j = gsm0503_tch_hr_interleaving[k][0]; + iB[B * 114 + j] = cB[k]; + } +} + |