uSDR

A tiny, single-sided M.2 SDR board that you can operate easily using your web browser

Limited items in stock

View Purchasing Options
Jul 16, 2024

Project update 15 of 15

Running an srsRAN LTE Network with uSDR

by Andrew Avtushenko

Software Updates!

Over the last month, we have been improving uSDR software and are happy to release 0.9.8 version, mostly it consists of minor bug fixes and performance improvements. We also added support for our multichannel SDR xMASS. Despite it being new hardware, we ported some functions to uSDR. One of these is support for 12-bit I/Q format for uSDR. This allows you to achieve up to 14.75MSPS on the USB2 bus and even run srsRAN with a 5 Mhz channel!

We recommended you update to this latest software (and firmware).

Running an srsRAN LTE Network with uSDR

We’ve also tweaked SoapySDR and, as a result, it’s straightforward to run the srsRAN LTE network with uSDR now! srsRAN_4G is a popular open-source implementation of the LTE network with both implementations of UE (mobile phone), and eNB (base station) and EPC (core network). We’ll be focusing on running simple eNB+EPC configuration. You can use pre-built uSDR packages or build it from sources.

Building srsRAN_4G

srsRAN provides ready-to-use Ubuntu packages, however, these only work with usrp hardware. So we’ll need to build from sources. Detailed instruction is provided on the srsRAN official site.
NOTE: This will fail on Ubuntu 24.04, so you need to use gcc-11 instead of the default compiler. More details are available in this GitHub issue.

SIM Cards

To operate even a test network, you need dedicated SIM cards. The easiest way is to buy preprogrammed SIM cards for test/private networks. We recommend using sysmoISIM-S17 cards.
You’ll get the secret key via email.

Alternatively, you can use programmable SIM cards and create a profile by yourself. Here’s are detailed instructions.

Both ways work fine, so you can use whichever is more convenient.

Configuring EPC

We’ll need to configure EPC to run with SIM card network codes. Edit epc.conf and change mcc and mnc accordingly. Then, you need to append SIM secrets to user_db.csv file. E.g., in our case it’s

ue0,mil,901704356421622,aae018af78cb0fc5276138ef1254d7f0,opc,b0414d943ea6f14889ae04dae16c67e0,8000,00000000239b,7,dynamic

Detailed instructions.

Configuring eNB

For eNB, besides EARFCN/MCC/MNC codes, we also need to specify f.device_name and rf.device_args parameters. The latest depends on actual LTE bandwidth (n_prb). Without this parameter, eNB will work but less efficiently which may lead to more CPU usage and buffer overruns.

BandwidthCommand to run eNB
1.4 Mhz./srsenb --rf.device_name soapy --rf.device_args driver=usdr,desired_rx_pkt=1920 --enb.n_prb 6 --enb.mcc 901 --enb.mnc 70 --rf.rx_gain 35 --rf.tx_gain 20
3 Mhz./srsenb --rf.device_name soapy --rf.device_args driver=usdr,desired_rx_pkt=3840 --enb.n_prb 15 --enb.mcc 901 --enb.mnc 70 --rf.rx_gain 35 --rf.tx_gain 20
5 Mhz./srsenb --rf.device_name soapy --rf.device_args driver=usdr,desired_rx_pkt=5760 --enb.n_prb 25 --enb.mcc 901 --enb.mnc 70 --rf.rx_gain 35 --rf.tx_gain 20
5 Mhz (USB2)./srsenb --rf.device_name soapy --rf.device_args driver=usdr,desired_rx_pkt=5760,rx12bit=1 --enb.n_prb 25 --enb.mcc 901 --enb.mnc 70 --rf.rx_gain 35 --rf.tx_gain 20
10 Mhz./srsenb --rf.device_name soapy --rf.device_args driver=usdr,desired_rx_pkt=11520 --enb.n_prb 50 --enb.mcc 901 --enb.mnc 70 --rf.rx_gain 35 --rf.tx_gain 20
20 Mhz./srsenb --rf.device_name soapy --rf.device_args driver=usdr,desired_rx_pkt=23040 --enb.n_prb 100 --enb.mcc 901 --enb.mnc 70 --rf.rx_gain 35 --rf.tx_gain 20

You can add these parameters to enb.conf instead.

Due to limited USB2 bus bandwidth, only 1.4/3 Mhz/5 Mhz options are suitable. The 5 Mhz band has been supported since version 0.9.8 using 12-bit I/Q format. To enable it, you need to add rx12bit=1 parameter to rf.device_args as in example above. PCIe connectivity works well in any configuration.

NOTE: 1.4/3Mhz may not work with all LTE phones

Running Networks

Before running the network, you need to enable NAT for your internet network device. This can be done by running a simple script:

srsepc_if_masq.sh {name_of_your_internet_device}

Run EPC sudo srsepc epc.conf
Run eNB srsenb either with config file or all parameters in CLI.

Troubleshooting

If the SIM card was set up correctly you’ll see UE Authentication Accepted in EPC log.

ID Response -- IMSI: 901704356421622
Downlink NAS: Sent Authentication Request
UL NAS: Received Authentication Response
Authentication Response -- IMSI 901704356421622
UE Authentication Accepted.

If you have properly configured APN on your mobile, you’ll see an allocation of IP address to your equipment right after authentication.

ESM Info: APN srsapn
Getting subscription information -- QCI 7
Sending Create Session Request.
Creating Session Response -- IMSI: 901704356421622
Creating Session Response -- MME control TEID: 1
Received GTP-C PDU. Message type: GTPC_MSG_TYPE_CREATE_SESSION_REQUEST
SPGW: Allocated Ctrl TEID 1
SPGW: Allocated User TEID 1
SPGW: Allocate UE IP 172.16.0.2

If you don’t see it, please check the internet APN setting on your phone.

Performance

To test network performance, it’s easier to use the perf3 utility. For Android phones, there’s a couple of applications. We’ve been using Aruba Utilities

On the host, you need to run the iperf3 server by iperf3 -s and on your phone you need to run iperf3 with IP address 176.16.0.1 and with the -R option to test Downlink or without to test Uplink.

In normal conditions where your phone lies near uSDR antennas, you should get maximum performance. Unfortunately, my phone doesn’t support QAM256 modulation and it’s limited to 75 Mbit/s on 20 Mhz BW.

Downlink test / eNB log

               -----------------DL----------------|-------------------------UL-------------------------
rat  pci rnti  cqi  ri  mcs  brate   ok  nok  (%) | pusch  pucch  phr  mcs  brate   ok  nok  (%)    bsr
lte    1   48   15   0   28    75M 1000    0   0% |  19.8   18.1   32   21   1.0M  225    0   0%    0.0
lte    1   48   15   0   28    75M 1000    0   0% |  19.7   18.1   31   21   877k  228    0   0%    0.0
lte    1   48   15   0   28    75M 1000    0   0% |  19.7   18.1   31   21   821k  215    0   0%    0.0
lte    1   48   15   0   28    75M 1000    0   0% |  19.8   18.2   32   21   941k  230    0   0%    0.0
lte    1   48   15   0   28    75M 1000    0   0% |  19.8   18.2   30   21   868k  212    0   0%    0.0
lte    1   48   15   0   28    75M 1000    0   0% |  19.7   18.1   32   21   865k  207    0   0%    0.0
lte    1   48   15   0   28    75M 1000    0   0% |  19.8   18.1   31   21   835k  213    0   0%    0.0
lte    1   48   15   0   28    75M 1000    0   0% |  19.8   18.1   32   22   910k  219    0   0%    0.0
lte    1   48   15   0   27    75M  993    0   0% |  19.8   18.1   30   21   1.0M  217    0   0%    608
lte    1   48   15   0   28    75M 1000    0   0% |  19.8   18.2   30   21   875k  217    0   0%    0.0
lte    1   48   15   0   28    75M 1000    0   0% |  19.8   18.1   30   22   874k  212    0   0%    0.0

Uplink test eNB log

               -----------------DL----------------|-------------------------UL-------------------------
rat  pci rnti  cqi  ri  mcs  brate   ok  nok  (%) | pusch  pucch  phr  mcs  brate   ok  nok  (%)    bsr
lte    1   48   15   0   14   1.0M  930    0   0% |  19.4    n/a   21   23    50M  999    1   0%   101k
lte    1   48   15   0   10   701k  938    0   0% |  19.4    n/a   21   23    50M 1000    0   0%   102k
lte    1   48   15   0   10   685k  928    0   0% |  19.9    n/a   21   23    50M  999    1   0%   104k
lte    1   48   15   0   11   797k  938    0   0% |  19.7    n/a   21   23    50M 1000    0   0%   104k
lte    1   48   15   0   11   828k  930    0   0% |  19.6    n/a   21   23    50M  999    1   0%   104k
lte    1   48   15   0   10   692k  938    0   0% |  19.5    n/a   21   23    50M  999    1   0%   104k
lte    1   48   15   0   10   744k  929    0   0% |  20.0    n/a   20   23    50M 1000    0   0%   103k
lte    1   48   15   0    9   638k  930    0   0% |  19.9    n/a   21   23    50M  999    1   0%   103k
lte    1   48   15   0   10   705k  938    0   0% |  19.9    n/a   21   23    50M 1000    0   0%   103k
lte    1   48   15   0   12   862k  938    0   0% |  19.4    n/a   20   23    50M 1000    0   0%   103k
lte    1   48   15   0   10   683k  929    0   0% |  19.8    n/a   20   23    50M  999    1   0%   103k

Improving RF Performance with the Development Board

Running a private LTE network or even a test LTE network is subject to local regulation. In some counties, it’s not hard to get a low-power license. The other part is RF compliant emissions.

Most inexpensive SDRs don’t have any selectivity filtering or transmission harmonic reduction. This is crucial to run not just commercial but also test networks. uSDR is a tiny form factor board and fitting proper filtering is physically impossible. That’s why we developed the uSDR development board. It has a power amplifier, low-noise amplifier, a bank of filters, and a bank of LTE duplexers. LNA and PA increase coverage for uplink and downlink. Duplexers significantly reduce out of band emissions on the TX path, on the RX path they improve selectivity (any strong signal may saturate receiving path, thus reducing coverage).

We strongly advise using the development board for doing experiments with LTE networks wherever possible. To use duplexers, you need to connect u.FL cables from uSDR to the development board (RX->J20, TX->J19). (More information.) A single antenna should be connected to J17.

The uSDR dev board has a duplexer bank in bands 2,3,5,7,8.

BandFUplink (Mhz)Downlink (Mhz)Channels
219001850 - 19101930 - 19901.4, 3, 5, 10, 15, 20
318001710 - 17851805 - 18801.4, 3, 5, 10, 15, 20
5850824 - 849869 - 8941.4, 3, 5, 10
726002500 - 25702620 - 26905, 10, 15, 20
8900880 - 915869 - 8941.4, 3, 5, 10

To enable using the duplexer path, you’ll need to add fe=pciefev1:path_band7:pa_on:lna_on to the --rf.device_args parameter using a comma, and where path_band7 reflects using the duplexer for Band Seven. E.g., here’s the full configuration string for 20 MHz bandwidth:

./srsenb --rf.device_name soapy --rf.device_args driver=usdr,desired_rx_pkt=23040,fe=pciefev1:path_band7:pa_on:lna_on --rf.rx_gain 35 --rf.tx_gain 20  --enb.mcc 901 --enb.mnc 70  --enb.n_prb 100

Sign up to receive future updates for uSDR.

uSDR is part of Qorvo RF Accelerator

Key Components

QPL9547TR7 · RF amlplifier
enables RF range

RFSW6042TR7 · RF switch ICs
used in harmonic reduction filter bank

RFSW6062TR7 · RF switch ICs
used in cellular bands diplexer circuits

QPC3223SR · 2-bit digital attenuators
enables automatic gain control (AGC) loop

uSDR is part of AMD FPGA Playground

Key Components

Artix™ 7 XC7A35T-2CPG236C · FPGA
the glue between the radio frequency IC and host interface

uSDR is part of Lime SDR Accelerator

Key Components

LMS6002D · RF transceiver

Subscribe to the Crowd Supply newsletter, highlighting the latest creators and projects