enb: refactored rf_args handling for ZMQ-based radio

this patch moves the rf_dev_args creation for both eNB types
into the eNB base class, since they are identical.

the patch also fixes the arguments for all CA and MIMO configurations

Change-Id: I8ca3ed83e65dc07927385267e5970bc4f5b120d5
This commit is contained in:
Andre Puschmann 2020-04-20 20:39:34 +02:00
parent bf40f8c8bf
commit e2a6da6b48
3 changed files with 57 additions and 54 deletions

View File

@ -99,6 +99,59 @@ class eNodeB(log.Origin, metaclass=ABCMeta):
def num_prb(self):
return self._num_prb
#reference: srsLTE.git srslte_symbol_sz()
def num_prb2symbol_sz(self, num_prb):
if num_prb <= 6:
return 128
if num_prb <= 15:
return 256
if num_prb <= 25:
return 384
if num_prb <= 50:
return 768
if num_prb <= 75:
return 1024
if num_prb <= 110:
return 1536
raise log.Error('invalid num_prb %r', num_prb)
def num_prb2base_srate(self, num_prb):
return self.num_prb2symbol_sz(num_prb) * 15 * 1000
def get_zmq_rf_dev_args(self):
base_srate = self.num_prb2base_srate(self.num_prb())
# Define all 8 possible RF ports (2x CA with 2x2 MIMO)
rf_dev_args = 'fail_on_disconnect=true' \
+ ',tx_port0=tcp://' + self.addr() + ':2000' \
+ ',tx_port1=tcp://' + self.addr() + ':2002' \
+ ',tx_port2=tcp://' + self.addr() + ':2004' \
+ ',tx_port3=tcp://' + self.addr() + ':2006' \
+ ',rx_port0=tcp://' + self.ue.addr() + ':2001' \
+ ',rx_port1=tcp://' + self.ue.addr() + ':2003' \
+ ',rx_port2=tcp://' + self.ue.addr() + ':2005' \
+ ',rx_port3=tcp://' + self.ue.addr() + ':2007'
if self._num_cells == 1:
# Single carrier
if self.num_ports() == 1:
# SISO
rf_dev_args += ',tx_freq0=2630e6,rx_freq0=2510e6'
elif self.num_ports() == 2:
# MIMO
rf_dev_args += ',tx_freq0=2630e6,tx_freq1=2630e6,rx_freq0=2510e6,rx_freq1=2510e6'
elif self._num_cells == 2:
# 2x class
if self.num_ports() == 1:
# SISO
rf_dev_args += ',tx_freq0=2630e6,tx_freq1=2650e6,rx_freq0=2510e6,rx_freq1=2530e6'
elif self.num_ports() == 2:
# MIMO
rf_dev_args += ',tx_freq0=2630e6,tx_freq1=2630e6,tx_freq2=2650e6,tx_freq3=2650e6,rx_freq0=2510e6,rx_freq1=2510e6,rx_freq2=2530e6,rx_freq3=2530e6'
rf_dev_args += ',id=enb,base_srate=' + str(base_srate)
return rf_dev_args
###################
# PUBLIC (test API included)
###################

View File

@ -27,25 +27,6 @@ from . import rfemu
def rf_type_valid(rf_type_str):
return rf_type_str in ('uhd', 'zmq')
#reference: srsLTE.git srslte_symbol_sz()
def num_prb2symbol_sz(num_prb):
if num_prb <= 6:
return 128
if num_prb <= 15:
return 256
if num_prb <= 25:
return 384
if num_prb <= 50:
return 768
if num_prb <= 75:
return 1024
if num_prb <= 110:
return 1536
raise log.Error('invalid num_prb %r', num_prb)
def num_prb2base_srate(num_prb):
return num_prb2symbol_sz(num_prb) * 15 * 1000
class AmarisoftENB(enb.eNodeB):
REMOTE_DIR = '/osmo-gsm-tester-amarisoftenb'
@ -174,15 +155,10 @@ class AmarisoftENB(enb.eNodeB):
# We need to set some specific variables programatically here to match IP addresses:
if self._conf.get('rf_dev_type') == 'zmq':
base_srate = num_prb2base_srate(self.num_prb())
rf_dev_args = 'fail_on_disconnect=true' \
+ ',tx_port0=tcp://' + self.addr() + ':2000' \
+ ',tx_port1=tcp://' + self.addr() + ':2002' \
+ ',rx_port0=tcp://' + self.ue.addr() + ':2001' \
+ ',rx_port1=tcp://' + self.ue.addr() + ':2003' \
+ ',id=enb,base_srate=' + str(base_srate)
base_srate = self.num_prb2base_srate(self.num_prb())
rf_dev_args = self.get_zmq_rf_dev_args()
config.overlay(values, dict(enb=dict(sample_rate = base_srate / (1000*1000),
rf_dev_args=rf_dev_args)))
rf_dev_args = rf_dev_args)))
# Set UHD frame size as a function of the cell bandwidth on B2XX
if self._conf.get('rf_dev_type') == 'uhd' and values['enb'].get('rf_dev_args', None) is not None:

View File

@ -27,25 +27,6 @@ from . import rfemu
def rf_type_valid(rf_type_str):
return rf_type_str in ('zmq', 'uhd', 'soapy', 'bladerf')
#reference: srsLTE.git srslte_symbol_sz()
def num_prb2symbol_sz(num_prb):
if num_prb <= 6:
return 128
if num_prb <= 15:
return 256
if num_prb <= 25:
return 384
if num_prb <= 50:
return 768
if num_prb <= 75:
return 1024
if num_prb <= 110:
return 1536
raise log.Error('invalid num_prb %r', num_prb)
def num_prb2base_srate(num_prb):
return num_prb2symbol_sz(num_prb) * 15 * 1000
class srsENB(enb.eNodeB):
REMOTE_DIR = '/osmo-gsm-tester-srsenb'
@ -194,14 +175,7 @@ class srsENB(enb.eNodeB):
# We need to set some specific variables programatically here to match IP addresses:
if self._conf.get('rf_dev_type') == 'zmq':
base_srate = num_prb2base_srate(self.num_prb())
rf_dev_args = 'fail_on_disconnect=true' \
+ ',tx_port=tcp://' + self.addr() + ':2000' \
+ ',tx_port2=tcp://' + self.addr() + ':2002' \
+ ',rx_port=tcp://' + self.ue.addr() + ':2001' \
+ ',rx_port2=tcp://' + self.ue.addr() + ':2003' \
+ ',tx_freq=2630e6,rx_freq=2510e6,tx_freq2=2650e6,rx_freq2=2530e6' \
+ ',id=enb,base_srate=' + str(base_srate)
rf_dev_args = self.get_zmq_rf_dev_args()
config.overlay(values, dict(enb=dict(rf_dev_args=rf_dev_args)))
# Set UHD frame size as a function of the cell bandwidth on B2XX