aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorVadim Yanitskiy <vyanitskiy@sysmocom.de>2022-04-28 01:35:54 +0300
committerVadim Yanitskiy <vyanitskiy@sysmocom.de>2022-05-10 16:49:16 +0300
commit284f16e7d7797391e40f034d36756a0dbcf6cf71 (patch)
tree2c81e01b084e0f301f9e89953e298a8aa4f29f6f /tests
parent991f3f64d930b249037fb12f63113f727f3666a2 (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.c47
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;