[MERGED] osmocom-bb[fixeria/trx]: fake_trx/burst_fwd.py: calculate both RSSI and ToA separately

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
Wed Feb 28 18:05:56 UTC 2018


Harald Welte has submitted this change and it was merged.

Change subject: fake_trx/burst_fwd.py: calculate both RSSI and ToA separately
......................................................................


fake_trx/burst_fwd.py: calculate both RSSI and ToA separately

In order to be able to simulate and randomize both RSSI and ToA
values for Uplink and Downlink separately, let's calculate them
in separate methods of the BurstForwarder.

Change-Id: Ia2031f22f2b549c799c782d0c8c8d0691fb6f18c
---
M src/target/fake_trx/burst_fwd.py
1 file changed, 62 insertions(+), 30 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/src/target/fake_trx/burst_fwd.py b/src/target/fake_trx/burst_fwd.py
index bcf2257..503d035 100644
--- a/src/target/fake_trx/burst_fwd.py
+++ b/src/target/fake_trx/burst_fwd.py
@@ -39,42 +39,75 @@
 	# one GSM symbol advance.
 	ta = 0
 
-	# Constants
-	# TODO: add options to change this
-	RSSI_RAND_TRESHOLD = 10
-	RSSI_RAND_MIN = -90
-	RSSI_RAND_MAX = -60
+	# Timing of Arrival values indicated by transceiver
+	# in units of 1/256 of GSM symbol periods. A pair of
+	# base and threshold values defines a range of ToA value
+	# randomization: from (base - threshold) to (base + threshold).
+	toa256_dl_base = 0
+	toa256_ul_base = 0
 
-	# TODO: add options to change this
-	TOA256_RAND_TRESHOLD = 128
-	TOA256_RAND_BASE = 0
+	toa256_dl_threshold = 128
+	toa256_ul_threshold = 128
+
+	# RSSI values indicated by transceiver in dBm.
+	# A pair of base and threshold values defines a range of RSSI
+	# randomization: from (base - threshold) to (base + threshold).
+	rssi_dl_base = -60
+	rssi_ul_base = -70
+
+	rssi_dl_threshold = 10
+	rssi_ul_threshold = 5
 
 	def __init__(self, bts_link, bb_link):
 		self.bts_link = bts_link
 		self.bb_link = bb_link
 
-		# Generate a random RSSI range
-		rssi = random.randint(self.RSSI_RAND_MIN, self.RSSI_RAND_MAX)
-		self.rssi_min = rssi - self.RSSI_RAND_TRESHOLD
-		self.rssi_max = rssi + self.RSSI_RAND_TRESHOLD
+	# Calculates a random ToA value for Downlink bursts
+	def calc_dl_toa256(self):
+		# Calculate a range for randomization
+		toa256_min = self.toa256_dl_base - self.toa256_dl_threshold
+		toa256_max = self.toa256_dl_base + self.toa256_dl_threshold
 
-		# Generate a random ToA range
-		self.toa256_min = self.TOA256_RAND_BASE - self.TOA256_RAND_TRESHOLD
-		self.toa256_max = self.TOA256_RAND_BASE + self.TOA256_RAND_TRESHOLD
-
-	# Calculates ToA value for Uplink bursts (coming to a BTS)
-	def calc_toa_ul(self):
 		# Generate a random ToA value
-		toa256 = random.randint(self.toa256_min, self.toa256_max)
+		toa256 = random.randint(toa256_min, toa256_max)
 
-		# Apply TA value
+		return toa256
+
+	# Calculates a random ToA value for Uplink bursts
+	def calc_ul_toa256(self):
+		# Calculate a range for randomization
+		toa256_min = self.toa256_ul_base - self.toa256_ul_threshold
+		toa256_max = self.toa256_ul_base + self.toa256_ul_threshold
+
+		# Generate a random ToA value
+		toa256 = random.randint(toa256_min, toa256_max)
+
+		# Apply TA value indicated by MS
 		ta256 = self.ta * 256
 		toa256 -= ta256
 
 		return toa256
 
+	# Calculates a random RSSI value for Downlink bursts
+	def calc_dl_rssi(self):
+		# Calculate a range for randomization
+		rssi_min = self.rssi_dl_base - self.rssi_dl_threshold
+		rssi_max = self.rssi_dl_base + self.rssi_dl_threshold
+
+		# Generate a random RSSI value
+		return random.randint(rssi_min, rssi_max)
+
+	# Calculates a random RSSI value for Uplink bursts
+	def calc_ul_rssi(self):
+		# Calculate a range for randomization
+		rssi_min = self.rssi_ul_base - self.rssi_ul_threshold
+		rssi_max = self.rssi_ul_base + self.rssi_ul_threshold
+
+		# Generate a random RSSI value
+		return random.randint(rssi_min, rssi_max)
+
 	# Converts a L12TRX message to TRX2L1 message
-	def transform_msg(self, msg_raw):
+	def transform_msg(self, msg_raw, dl = True):
 		# Attempt to parse a message
 		try:
 			msg_l12trx = DATAMSG_L12TRX()
@@ -87,10 +120,12 @@
 		msg_trx2l1 = msg_l12trx.gen_trx2l1()
 
 		# Randomize both RSSI and ToA values
-		msg_trx2l1.rssi = msg_trx2l1.rand_rssi(
-			min = self.rssi_min, max = self.rssi_max)
-		msg_trx2l1.toa256 = msg_trx2l1.rand_toa256(
-			min = self.toa256_min, max = self.toa256_max)
+		if dl:
+			msg_trx2l1.toa256 = self.calc_dl_toa256()
+			msg_trx2l1.rssi = self.calc_dl_rssi()
+		else:
+			msg_trx2l1.toa256 = self.calc_ul_toa256()
+			msg_trx2l1.rssi = self.calc_ul_rssi()
 
 		return msg_trx2l1
 
@@ -108,7 +143,7 @@
 			return None
 
 		# Process a message
-		msg = self.transform_msg(data)
+		msg = self.transform_msg(data, dl = True)
 		if msg is None:
 			return None
 
@@ -140,12 +175,9 @@
 			return None
 
 		# Process a message
-		msg = self.transform_msg(data)
+		msg = self.transform_msg(data, dl = False)
 		if msg is None:
 			return None
-
-		# Emulate ToA value for BTS
-		msg.toa256 = self.calc_toa_ul()
 
 		# Validate and generate the payload
 		payload = msg.gen_msg()

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ia2031f22f2b549c799c782d0c8c8d0691fb6f18c
Gerrit-PatchSet: 1
Gerrit-Project: osmocom-bb
Gerrit-Branch: fixeria/trx
Gerrit-Owner: Vadim Yanitskiy <axilirator at gmail.com>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder



More information about the gerrit-log mailing list