[PATCH] osmo-bts[master]: RACH decoding: Use BER threshold for RACH ghost detection

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Harald Welte gerrit-no-reply at lists.osmocom.org
Mon Feb 26 12:25:50 UTC 2018


Review at  https://gerrit.osmocom.org/6933

RACH decoding: Use BER threshold for RACH ghost detection

When decoding RACH bursts, we should use a BER threshold in order to
help distinguish 'ghost' RACH bursts from real RACH bursts.

The theoretical ideal threshold according to some papers is 7 out of 41
bits qhich aquals to Eb/N0 of 0 dB = 0.1707 (17.07%)

We add a new 'ber10k' parameter to the RACH indication l1sap primitive
(needs separate change for libosmocore), and then fill this value from
osmo-bts-{sysmo,lc15,trx,octphy}.  The common part above L1SAP then
applies the threshold, which can be changed from vty using the
	"max-ber10k-rach <0-10000>"
command available at the BTS node.  The unit is BER in 1/10000, i.e. a
value of 100 equals 1% bit error rate.

Change-Id: Ic41c11f6312a36baa2738547e8dcec80829457f8
---
M include/osmo-bts/gsm_data.h
M src/common/bts.c
M src/common/l1sap.c
M src/common/vty.c
4 files changed, 24 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/33/6933/1

diff --git a/include/osmo-bts/gsm_data.h b/include/osmo-bts/gsm_data.h
index f2574b1..10c9d04 100644
--- a/include/osmo-bts/gsm_data.h
+++ b/include/osmo-bts/gsm_data.h
@@ -111,6 +111,7 @@
 
 	float min_qual_rach;	/* minimum quality for RACH bursts */
 	float min_qual_norm;	/* minimum quality for normal daata */
+	uint16_t max_ber10k_rach;	/* Maximum permitted RACH BER in 0.01% */
 
 	struct {
 		char *sock_path;
diff --git a/src/common/bts.c b/src/common/bts.c
index b10d7f2..15b92d7 100644
--- a/src/common/bts.c
+++ b/src/common/bts.c
@@ -149,6 +149,7 @@
 	btsb->t3105_ms = 300;
 	btsb->min_qual_rach = MIN_QUAL_RACH;
 	btsb->min_qual_norm = MIN_QUAL_NORM;
+	btsb->max_ber10k_rach = 1707; /* 7 of 41 bits is Eb/N0 of 0 dB = 0.1707 */
 	btsb->pcu.sock_path = talloc_strdup(btsb, PCU_SOCK_DEFAULT);
 	for (i = 0; i < ARRAY_SIZE(btsb->t200_ms); i++)
 		btsb->t200_ms[i] = oml_default_t200_ms[i];
diff --git a/src/common/l1sap.c b/src/common/l1sap.c
index 90f045a..50bd612 100644
--- a/src/common/l1sap.c
+++ b/src/common/l1sap.c
@@ -1203,7 +1203,12 @@
 	if (rach_ind->rssi >= btsb->load.rach.busy_thresh)
 		btsb->load.rach.busy++;
 
-	/* FIXME: RACH filtering due to BER limit */
+	/* check for RACH exceeding BER threshold (ghost RACH) */
+	if (rach_ind->ber10k > btsb->max_ber10k_rach) {
+		DEBUGPFN(DL1C, rach_ind->fn, "ignoring RACH request: %u > %u (max BER)\n",
+			rach_ind->ber10k, btsb->max_ber10k_rach);
+		return 0;
+	}
 
 	/* increment number of RACH slots with valid non-handover RACH burst */
 	btsb->load.rach.access++;
diff --git a/src/common/vty.c b/src/common/vty.c
index a1cb2fe..3938de5 100644
--- a/src/common/vty.c
+++ b/src/common/vty.c
@@ -291,6 +291,8 @@
 		VTY_NEWLINE);
 	vty_out(vty, " min-qual-norm %.0f%s", btsb->min_qual_norm * 10.0f,
 		VTY_NEWLINE);
+	vty_out(vty, " max-ber10k-rach %u%s", btsb->max_ber10k_rach,
+		VTY_NEWLINE);
 	if (strcmp(btsb->pcu.sock_path, PCU_SOCK_DEFAULT))
 		vty_out(vty, " pcu-socket %s%s", btsb->pcu.sock_path, VTY_NEWLINE);
 
@@ -588,6 +590,19 @@
 	struct gsm_bts_role_bts *btsb = bts_role_bts(bts);
 
 	btsb->min_qual_norm = strtof(argv[0], NULL) / 10.0f;
+
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_max_ber_rach, cfg_bts_max_ber_rach_cmd,
+	"max-ber10k-rach <0-10000>",
+	"Set the maximum BER for valid RACH requests\n"
+	"BER in 1/10000 units (0=no BER; 100=1% BER)\n")
+{
+	struct gsm_bts *bts = vty->index;
+	struct gsm_bts_role_bts *btsb = bts_role_bts(bts);
+
+	btsb->max_ber10k_rach = strtoul(argv[0], NULL, 10);
 
 	return CMD_SUCCESS;
 }
@@ -1542,6 +1557,7 @@
 	install_element(BTS_NODE, &cfg_bts_ul_power_target_cmd);
 	install_element(BTS_NODE, &cfg_bts_min_qual_rach_cmd);
 	install_element(BTS_NODE, &cfg_bts_min_qual_norm_cmd);
+	install_element(BTS_NODE, &cfg_bts_max_ber_rach_cmd);
 	install_element(BTS_NODE, &cfg_bts_pcu_sock_cmd);
 
 	install_element(BTS_NODE, &cfg_trx_gsmtap_sapi_cmd);

-- 
To view, visit https://gerrit.osmocom.org/6933
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic41c11f6312a36baa2738547e8dcec80829457f8
Gerrit-PatchSet: 1
Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <laforge at gnumonks.org>



More information about the gerrit-log mailing list