srsLTE and LimeSDR Mini

Great news!

I was finally able to get srsLTE up and running without any errors (calibration of Tx/Rx, clock, etc.). For reference, I followed the following the below post mostly, but am using 19.12 for srsLTE instead of the latest release.

I have obtained and programmed a SIM card as well, and placed the parameters in the user_db.csv file in the .config/srslte folder. Also, when I check for networks, I can see the one from the LimeSDR Mini! However, my only problem is that when I select the network on the phone, it doesn’t connect, and the srseNB doesn’t show attaching of any UE. srseNB config is below:

#####################################################################

srsENB configuration file

#####################################################################

#####################################################################

eNB configuration

enb_id: 20-bit eNB identifier.

mcc: Mobile Country Code

mnc: Mobile Network Code

mme_addr: IP address of MME for S1 connnection

gtp_bind_addr: Local IP address to bind for GTP connection

s1c_bind_addr: Local IP address to bind for S1AP connection

n_prb: Number of Physical Resource Blocks (6,15,25,50,75,100)

tm: Transmission mode 1-4 (TM1 default)

nof_ports: Number of Tx ports (1 port default, set to 2 for TM2/3/4)

#####################################################################
[enb]
enb_id = 0x19B
mcc = 117
mnc = 07
mme_addr = 127.0.1.100
gtp_bind_addr = 127.0.1.1
s1c_bind_addr = 127.0.1.1
n_prb = 50
#tm = 4
#nof_ports = 2

#####################################################################

eNB configuration files

sib_config: SIB1, SIB2 and SIB3 configuration file

note: when enabling mbms, use the sib.conf.mbsfn configuration file which includes SIB13

rr_config: Radio Resources configuration file

drb_config: DRB configuration file

#####################################################################
[enb_files]
sib_config = sib.conf
rr_config = rr.conf
drb_config = drb.conf

#####################################################################

RF configuration

dl_earfcn: EARFCN code for DL (only valid if a single cell is configured in rr.conf)

tx_gain: Transmit gain (dB).

rx_gain: Optional receive gain (dB). If disabled, AGC if enabled

Optional parameters:

dl_freq: Override DL frequency corresponding to dl_earfcn

ul_freq: Override UL frequency corresponding to dl_earfcn (must be set if dl_freq is set)

device_name: Device driver family.

Supported options: “auto” (uses first found), “UHD”, “bladeRF”, “soapy” or “zmq”.

device_args: Arguments for the device driver. Options are “auto” or any string.

Default for UHD: “recv_frame_size=9232,send_frame_size=9232”

Default for bladeRF: “”

time_adv_nsamples: Transmission time advance (in number of samples) to compensate for RF delay

from antenna to timestamp insertion.

Default “auto”. B210 USRP: 100 samples, bladeRF: 27.

#####################################################################
[rf]
#dl_earfcn = 1200
#dl_earfcn = 0
#dl_earfcn = 2750
#dl_freq = 1240010000
#ul_freq = 1200
tx_gain = 80
rx_gain = 40

#dl_earfcn = 6200
#tx_gain = 56
#rx_gain = 38
#device_name = soapy
device_args = rxant=LNAH,txant=BAND1

#device_name = auto

For best performance in 2x2 MIMO and >= 15 MHz use the following device_args settings:

USRP B210: num_recv_frames=64,num_send_frames=64

And for 75 PRBs, also append “,master_clock_rate=15.36e6” to the device args

For best performance when BW<5 MHz (25 PRB), use the following device_args settings:

USRP B210: send_frame_size=512,recv_frame_size=512

#device_args = auto
#time_adv_nsamples = auto

Example for ZMQ-based operation with TCP transport for I/Q samples

#device_name = zmq
#device_args = fail_on_disconnect=true,tx_port=tcp://*:2000,rx_port=tcp://localhost:2001,id=enb,base_srate=23.04e6

#####################################################################

Packet capture configuration

MAC Packets are captured to file in the compact format decoded by

the Wireshark mac-lte-framed dissector and with DLT 147.

To use the dissector, edit the preferences for DLT_USER to

add an entry with DLT=147, Payload Protocol=mac-lte-framed.

For more information see: https://wiki.wireshark.org/MAC-LTE

Please note that this setting will by default only capture MAC

frames on dedicated channels, and not SIB. You have to build with

WRITE_SIB_PCAP enabled in srsenb/src/stack/mac/mac.cc if you want

SIB to be part of the MAC pcap file.

S1AP Packets are captured to file in the compact format decoded by

the Wireshark s1ap dissector and with DLT 150.

To use the dissector, edit the preferences for DLT_USER to

add an entry with DLT=150, Payload Protocol=s1ap.

mac_enable: Enable MAC layer packet captures (true/false)

mac_filename: File path to use for packet captures

s1ap_enable: Enable or disable the PCAP.

s1ap_filename: File name where to save the PCAP.

#####################################################################
[pcap]
#enable = false
#filename = /tmp/enb.pcap
#s1ap_enable = false
#s1ap_filename = /tmp/enb_s1ap.pcap

#####################################################################

Log configuration

Log levels can be set for individual layers. “all_level” sets log

level for all layers unless otherwise configured.

Format: e.g. phy_level = info

In the same way, packet hex dumps can be limited for each level.

“all_hex_limit” sets the hex limit for all layers unless otherwise

configured.

Format: e.g. phy_hex_limit = 32

Logging layers: rf, phy, phy_lib, mac, rlc, pdcp, rrc, gtpu, s1ap, stack, all

Logging levels: debug, info, warning, error, none

filename: File path to use for log output. Can be set to stdout

to print logs to standard output

file_max_size: Maximum file size (in kilobytes). When passed, multiple files are created.

If set to negative, a single log file will be created.

#####################################################################
[log]
all_level = warning
all_hex_limit = 32
filename = /tmp/enb.log
file_max_size = -1

[gui]
enable = false

#####################################################################

Scheduler configuration options

max_aggr_level: Optional maximum aggregation level index (l=log2(L) can be 0, 1, 2 or 3)

pdsch_mcs: Optional fixed PDSCH MCS (ignores reported CQIs if specified)

pdsch_max_mcs: Optional PDSCH MCS limit

pusch_mcs: Optional fixed PUSCH MCS (ignores reported CQIs if specified)

pusch_max_mcs: Optional PUSCH MCS limit

min_nof_ctrl_symbols: Minimum number of control symbols

max_nof_ctrl_symbols: Maximum number of control symbols

#####################################################################
[scheduler]
#max_aggr_level = -1
#pdsch_mcs = -1
#pdsch_max_mcs = -1
#pusch_mcs = -1
#pusch_max_mcs = 16
#min_nof_ctrl_symbols = 1
#max_nof_ctrl_symbols = 3

#####################################################################

eMBMS configuration options

enable: Enable MBMS transmission in the eNB

m1u_multiaddr: Multicast addres the M1-U socket will register to

m1u_if_addr: Address of the inteferface the M1-U interface will listen for multicast packets.

mcs: Modulation and Coding scheme for MBMS traffic.

#####################################################################
[embms]
#enable = false
#m1u_multiaddr = 239.255.0.1
#m1u_if_addr = 127.0.1.201
#mcs = 20

#####################################################################

Channel emulator options:

enable: Enable/Disable internal Downlink/Uplink channel emulator

– AWGN Generator

awgn.enable: Enable/disable AWGN generator

awgn.snr: Target SNR in dB

– Fading emulator

fading.enable: Enable/disable fading simulator

fading.model: Fading model + maximum doppler (E.g. none, epa5, eva70, etu300, etc)

– Delay Emulator delay(t) = delay_min + (delay_max - delay_min) * (1 + sin(2pi*t/period)) / 2

Maximum speed [m/s]: (delay_max - delay_min) * pi * 300 / period

delay.enable: Enable/disable delay simulator

delay.period_s: Delay period in seconds.

delay.init_time_s: Delay initial time in seconds.

delay.maximum_us: Maximum delay in microseconds

delay.minumum_us: Minimum delay in microseconds

– Radio-Link Failure (RLF) Emulator

rlf.enable: Enable/disable RLF simulator

rlf.t_on_ms: Time for On state of the channel (ms)

rlf.t_off_ms: Time for Off state of the channel (ms)

– High Speed Train Doppler model simulator

hst.enable: Enable/Disable HST simulator

hst.period_s: HST simulation period in seconds

hst.fd_hz: Doppler frequency in Hz

hst.init_time_s: Initial time in seconds

#####################################################################
[channel.dl]
#enable = false

[channel.dl.awgn]
#enable = false
#snr = 30

[channel.dl.fading]
#enable = false
#model = none

[channel.dl.delay]
#enable = false
#period_s = 3600
#init_time_s = 0
#maximum_us = 100
#minimum_us = 10

[channel.dl.rlf]
#enable = false
#t_on_ms = 10000
#t_off_ms = 2000

[channel.dl.hst]
#enable = false
#period_s = 7.2
#fd_hz = 750.0
#init_time_s = 0.0

[channel.ul]
#enable = false

[channel.ul.awgn]
#enable = false
#n0 = -30

[channel.ul.fading]
#enable = false
#model = none

[channel.ul.delay]
#enable = false
#period_s = 3600
#init_time_s = 0
#maximum_us = 100
#minimum_us = 10

[channel.ul.rlf]
#enable = false
#t_on_ms = 10000
#t_off_ms = 2000

[channel.ul.hst]
#enable = false
#period_s = 7.2
#fd_hz = -750.0
#init_time_s = 0.0

#####################################################################

Expert configuration options

pusch_max_its: Maximum number of turbo decoder iterations (Default 4)

pusch_8bit_decoder: Use 8-bit for LLR representation and turbo decoder trellis computation (Experimental)

nof_phy_threads: Selects the number of PHY threads (maximum 4, minimum 1, default 3)

metrics_period_secs: Sets the period at which metrics are requested from the eNB.

metrics_csv_enable: Write eNB metrics to CSV file.

metrics_csv_filename: File path to use for CSV metrics.

pregenerate_signals: Pregenerate uplink signals after attach. Improves CPU performance.

tx_amplitude: Transmit amplitude factor (set 0-1 to reduce PAPR)

rrc_inactivity_timer Inactivity timeout used to remove UE context from RRC (in milliseconds).

max_prach_offset_us: Maximum allowed RACH offset (in us)

eea_pref_list: Ordered preference list for the selection of encryption algorithm (EEA) (default: EEA0, EEA2, EEA1).

eia_pref_list: Ordered preference list for the selection of integrity algorithm (EIA) (default: EIA2, EIA1, EIA0).

#####################################################################
[expert]
#pusch_max_its = 8 # These are half iterations
#pusch_8bit_decoder = false
#nof_phy_threads = 3
#metrics_period_secs = 1
#metrics_csv_enable = false
#metrics_csv_filename = /tmp/enb_metrics.csv
#pregenerate_signals = false
#tx_amplitude = 0.6
#rrc_inactivity_timer = 30000
#max_prach_offset_us = 30
#eea_pref_list = EEA0, EEA2, EEA1
#eia_pref_list = EIA2, EIA1, EIA0

##########################################################

If anyone has any suggestions to finally get the network up and running, I would be very grateful.

Thanks.

Also, srseNB output below:

srslte@srslte-ThinkPad-E590:~$ sudo srsenb

Built in Release mode using commit d045213fb on branch master.

— Software Radio Systems LTE eNodeB —

Reading configuration file /home/srslte/.config/srslte/enb.conf…
Opening 1 RF devices with 1 RF channels…
Soapy has found device #0: addr=24607:1027, driver=lime, label=LimeSDR Mini [USB 3.0] 1D588EFA1918BF, media=USB 3.0, module=FT601, name=LimeSDR Mini, serial=1D588EFA1918BF,
[INFO] Make connection: ‘LimeSDR Mini [USB 3.0] 1D588EFA1918BF’
[INFO] Reference clock 40.00 MHz
[INFO] Device name: LimeSDR-Mini
[INFO] Reference: 40 MHz
[INFO] LMS7002M register cache: Disabled
Setting up Rx stream with 1 channel(s)
Setting up Tx stream with 1 channel(s)
[INFO] RX LPF configured
[INFO] RX LPF configured
Set Rx bandwidth to 2.50 MHz
[INFO] Filter calibrated. Filter order-4th, filter bandwidth set to 5 MHz.Real pole 1st order filter set to 2.5 MHz. Preemphasis filter not active
[INFO] TX LPF configured
Set Tx bandwidth to 5.00 MHz
[INFO] Filter calibrated. Filter order-2nd, set to 50 MHz
[INFO] TX LPF configured
Set Tx bandwidth to 50.00 MHz
Available device sensors:

  • clock_locked
  • lms7_temp
    Available sensors for Rx channel 0:
  • lo_locked
    [INFO] Tx calibration finished
    [INFO] Rx calibration finished
    State of gain elements for Rx channel 0 (AGC not supported):
  • TIA: 9.00 dB
  • LNA: 30.00 dB
  • PGA: -4.00 dB
    State of gain elements for Tx channel 0 (AGC not supported):
  • PAD: 45.00 dB
  • IAMP: 0.00 dB
    Rx antenna set to LNAH
    Tx antenna set to BAND1

Warning burst preamble is not calibrated for device lime_mini. Set a value manually

Setting frequency: DL=1805.0 Mhz, UL=1710.0 MHz
[INFO] Selected TX path: Band 2
Setting Sampling frequency 11.52 MHz

==== eNodeB started ===
Type to view trace
[INFO] RX LPF configured
Set Rx bandwidth to 8.64 MHz
[INFO] Filter calibrated. Filter order-4th, filter bandwidth set to 8.64 MHz.Real pole 1st order filter set to 2.5 MHz. Preemphasis filter not active
[INFO] TX LPF configured
Set Tx bandwidth to 8.64 MHz
[INFO] Filter calibrated. Filter order-2nd, set to 50 MHz
[INFO] TX LPF configured
Set Tx bandwidth to 50.00 MHz

Warning TX/RX time offset has not been calibrated for device lime_mini. Set a value manually

[INFO] Tx calibration finished
[INFO] Rx calibration finished

There are fixes specifically for LimeSDR hardware in srsLTE 20.10, along with fixes in Lime Suite 20.10 that will be important to srsLTE users. Hence I would recommend that you use these and not previous versions.

1 Like

Thanks Andrew for your feedback. I assume that would be the case, but for some reason the errors I get with the latest versions seem to cause more issues than they fix. It’s not just calibration of TX/RX, the eNB refuses to even start for some instances I’ve installed!

I have another question; if I set the desired parameters and calibrate on LimeSuiteGUI, and it works fine, is it possible to get those same parameters to run on srsLTE? I feel like there should be a way to have the parameters unchanged, but from what I observe, srsLTE modifies them to its requirements upon running the eNB, and this causes the re-calibration errors.

Can you share details, please. To address potential issues resulting from the gains being set so low that it causes calibration failures, we have introduced a build time option in Lime Suite 20.10.

-DENABLE_NEW_GAIN_BEHAVIOUR=true

You would need to rebuild Lime Suite with this option. It’s not the default and packages don’t configure for this either.

Also you should configure srsLTE with:

-DUSE_LTE_RATES=true

Yes, when the SDR is closed and re-opened it will reset. A mechanism similar to what you suggest is sometimes used with other stacks, whereby Lime Suite GUI is used to save register configuration to an INI file, which is then loaded by the application. However, this is somewhat opaque and the srsLTE developers are not keen on such an approach. I would personally also prefer that we try to address this via API configuration and in a more transparent manner.

A good starting point would be the latest versions of software, with above options configured at build time. Following which we can look at any outstanding issues.

Ok I’m rebuilding the software from scratch again. When I run the script to build with the new gain behavior, I don’t get any indication of a response besides the normal cmake script. Is that fine? Also, I want to enable the GUI in the installation, is there a similar script to run?

srslte@srslte-ThinkPad-E590:~/LimeSuite/builddir$ cmake -DENABLE_NEW_GAIN_BEHAVIOUR=true …
– The C compiler identification is GNU 7.5.0
– The CXX compiler identification is GNU 7.5.0
– Check for working C compiler: /usr/bin/cc
– Check for working C compiler: /usr/bin/cc – works
– Detecting C compiler ABI info
– Detecting C compiler ABI info - done
– Detecting C compile features
– Detecting C compile features - done
– Check for working CXX compiler: /usr/bin/c++
– Check for working CXX compiler: /usr/bin/c++ – works
– Detecting CXX compiler ABI info
– Detecting CXX compiler ABI info - done
– Detecting CXX compile features
– Detecting CXX compile features - done
– Enabling native optimizations
– Looking for pthread.h
– Looking for pthread.h - found
– Looking for pthread_create
– Looking for pthread_create - not found
– Check if compiler accepts -pthread
– Check if compiler accepts -pthread - yes
– Found Threads: TRUE
– Performing Test HAVE_CXX_ATOMICS_WITHOUT_LIB
– Performing Test HAVE_CXX_ATOMICS_WITHOUT_LIB - Success
– Performing Test HAVE_CXX_ATOMICS64_WITHOUT_LIB
– Performing Test HAVE_CXX_ATOMICS64_WITHOUT_LIB - Success
– Found libusb-1.0:
– - Includes: /usr/include/libusb-1.0
– - Libraries: /usr/lib/x86_64-linux-gnu/libusb-1.0.so
– USB_INCLUDE_DIRS: /usr/include/libusb-1.0
– USB_LIBRARIES: /usr/lib/x86_64-linux-gnu/libusb-1.0.so
– USB_INCLUDE_DIRS: /usr/include/libusb-1.0
– USB_LIBRARIES: /usr/lib/x86_64-linux-gnu/libusb-1.0.so
– Could NOT find wxWidgets (missing: wxWidgets_LIBRARIES wxWidgets_INCLUDE_DIRS)
– wxWidgets_DEFINITIONS:
– wxWidgets_INCLUDE_DIRS:
– wxWidgets_LIBRARIES:
– Could NOT find Gnuplot (missing: GNUPLOT_EXECUTABLE)
– Could NOT find OpenGL (missing: OPENGL_opengl_LIBRARY OPENGL_glx_LIBRARY OPENGL_INCLUDE_DIR)
– Could NOT find FLTK (missing: FLTK_LIBRARIES FLTK_INCLUDE_DIR)
– Found Git: /usr/bin/git (found version “2.17.1”)
– Module LMS7Support configured with version: 20.10.0-1480bfea
– octave-config not found (need liboctave-dev), disabling LimeSuiteOctave

– ######################################################
– ## LimeSuite enabled features
– ######################################################

  • LimeSuiteHeaders, The lime suite headers
  • LimeSuiteLibrary, The lime suite library
  • ConnectionFX3, FX3 Connection support
  • ConnectionFTDI, FTDI Connection support
  • ConnectionXillybus, PCIE Xillybus Connection support
  • LimeSuiteExamples, LimeSuite library API examples
  • LimeRFE, LimeRFE support
  • LimeUtilCommand, Command line device discovery utility
  • LimeQuickTest, LimeSDR-QuickTest Utility
  • SoapySDRLMS7, SoapySDR bindings for LMS7

– ######################################################
– ## LimeSuite disabled features
– ######################################################

  • ConnectionEVB7COM, EVB+COM Connection support
  • ConnectionSTREAM_UNITE, STREAM+UNITE Connection support
  • ConnectionRemote, Remote Connection support for testing
  • ConnectionSPI, Rasp Pi 3 SPI Connection support
  • LimeSuiteGUI, GUI Application for LimeSuite
  • LimeSuiteDocAPI, LMS API Doxygen documentation
  • LimeSuiteDesktop, LimeSuite freedesktop integration
  • LimeSuiteOctave, LimeSuite Octave integration

– Install prefix: /usr/local
– Build timestamp: 2020-11-12
– Lime Suite version: 20.10.0-g1480bfea
– ABI/so version: 20.10-1
– Configuring done
– Generating done
– Build files have been written to: /home/srslte/LimeSuite/builddir

You just need to make sure you have the required dependencies installed and looking at the output, you are missing a few, which you should install via your package manager (development files for each also and not just the libraries).

@Wisaam how did you get on with release 20.10?