diff options
author | Vadim Yanitskiy <vyanitskiy@sysmocom.de> | 2022-04-28 01:35:54 +0300 |
---|---|---|
committer | Vadim Yanitskiy <vyanitskiy@sysmocom.de> | 2022-05-10 16:49:16 +0300 |
commit | 284f16e7d7797391e40f034d36756a0dbcf6cf71 (patch) | |
tree | 2c81e01b084e0f301f9e89953e298a8aa4f29f6f /tests | |
parent | 991f3f64d930b249037fb12f63113f727f3666a2 (diff) |
measurement: fix matching of SUB frames by TDMA FN
3GPP TS 45.008, section 8.3 defines active TDMA frame subsets for
TCH channels, which shall always be transmitted even during the
silence periods in DTX mode of operation. Each frame number
listed in this section corresponds to a single burst.
The Uplink measurements always contain TDMA FN of the *first* burst
of a block, so it does not make sense to match the given FN against
all FNs in the respective subset. Instead, we should match only
specific FNs in accordance with the block mapping rules defined in
3GPP TS 45.002, section 7, table 1.
In the active subset for TCH/F there is only one *complete* block
starting at FN=52. Incomplete blocks {52, 53, 54, 55} and {56, 57,
58, 59} contain only 50% of the useful bits (partial SID) and thus
~50% BER, so we don't treat them as SUB.
In the active subsets for TCH/H there are two *complete* blocks
for each sub-slot. Their respective first FNs can be efficiently
defined in a lookup table (see ts45008_dtx_tchh_fn_map[]). Note
that we can use a single lookup table for both sub-slots of TCH/H
because their TDMA FNs do not overlap.
This patch fixes unexpected SUB-RxQual values > 0 on TCH channels
with DTXu enabled and other than AMR (HR, FR, EFR) codec in use.
Change-Id: I8cc3a755a8ad4dc564439aab2298c1e97ac0592d
Related: SYS#5853
Diffstat (limited to 'tests')
-rw-r--r-- | tests/meas/meas_test.c | 47 |
1 files changed, 10 insertions, 37 deletions
diff --git a/tests/meas/meas_test.c b/tests/meas/meas_test.c index a3c514b8..4b8aff81 100644 --- a/tests/meas/meas_test.c +++ b/tests/meas/meas_test.c @@ -379,44 +379,17 @@ static bool test_ts45008_83_is_sub_is_sub(const struct gsm_lchan *lchan, uint32_ switch (lchan->type) { case GSM_LCHAN_TCH_F: - return (fn >= 52 && fn <= 59); + /* block {52, 53, 54, 55, 56, 57, 58, 59} */ + return fn == 52; case GSM_LCHAN_TCH_H: - if (lchan->nr == 0) { - if (fn == 0) - return true; - if (fn == 2) - return true; - if (fn == 4) - return true; - if (fn == 6) - return true; - if (fn == 52) - return true; - if (fn == 54) - return true; - if (fn == 56) - return true; - if (fn == 58) - return true; - } else if (lchan->nr == 1) { - if (fn == 14) - return true; - if (fn == 16) - return true; - if (fn == 18) - return true; - if (fn == 20) - return true; - if (fn == 66) - return true; - if (fn == 68) - return true; - if (fn == 70) - return true; - if (fn == 72) - return true; - } else - OSMO_ASSERT(false); + if (fn == 0) /* H0 block { 0, 2, 4, 6} */ + return true; + if (fn == 52) /* H0 block {52, 54, 56, 58} */ + return true; + if (fn == 14) /* H1 block {14, 16, 18, 20} */ + return true; + if (fn == 66) /* H1 block {66, 68, 70, 72} */ + return true; return false; default: return false; |