Advanced Usage

External USIM

This section is only needed if you do not have access to the USIM credentials, or have no control over the network. Note, most programmable or test USIM cards ship with their credentials.

Using an actual SIM card to authenticate the user against the network is an advanced feature. It requires a SIM card reader attached to the PC running srsUE that is supported by PCSClite.

Before using a SIM card, please make sure to disable PIN activation using a regular phone.

In order to compile srsUE with support for it, the pcsclite development headers as well as the pcsc daemon need to be installed and running. On Ubuntu (or other Debian derivates), this can be done with:

sudo apt-get install libpcsclite-dev pcscd pcsc-tools

After this is done, please verify you’ve got a PCSC-compatible reader by running ‘pcsc_scan’.

Now, CMake should pick up the pcsc libraries and build the support code for it. If that is not the case, try with a clean build folder or remove your exisiting CMakeCache.txt:

$ cmake ..
-- PCSC LIBRARIES: /usr/lib/x86_64-linux-gnu/
-- PCSC INCLUDE DIRS: /usr/include/PCSC
-- Building with PCSC support.
$ make

After the build is complete, you can verify the correct operation with the pcsc_usim_test application. Please verify that the IMSI can be read from the card:

$ ./srsue/test/upper/pcsc_usim_test
09:06:36.064073 [USIM] [D] SCARD: MNC length=2
09:06:36.064079 [USIM] [D] MNC length 2
09:06:36.064095 [USIM] [D] SCARD: UMTS auth - RAND
             0000: bc 4c b0 27 b3 4b 7f 51 21 5e 56 5f 67 3f de 4f
09:06:36.064102 [USIM] [D] SCARD: UMTS auth - AUTN
             0000: 5a 17 77 3c 62 57 90 01 cf 47 f7 6d b3 a0 19 46
09:06:36.064107 [USIM] [D] SCARD: scard_transmit: send
             0000: 00 11 00 81 22 10 bc ac b1 17 13 4b 6f 51 21 5e
             0010: 47 47 6d b3 a0 19 46
09:06:36.119675 [USIM] [D] SCARD: SCardTransmit: recv
             0000: 98 62
09:06:36.119707 [USIM] [D] SCARD: UMTS alg response
             0000: 98 62
09:06:36.119717 [USIM] [W] SCARD: UMTS auth failed - MAC != XMAC
09:06:36.119725 [USIM] [E] SCARD: Failure during USIM UMTS authentication
09:06:36.119732 [USIM] [D] SCARD: deinitializing smart card interface

If those steps completed successfully we can now start srsUE by either enabling the PCSC USIM in the config file or by passing the option as an command line argument, e.g., run:

$ ./srsue/src/srsue --usim.mode=pcsc

Channel Emulator

The srsUE application includes an internal channel emulator in the downlink receive path which can emulate uncorrelated fading channels, propagation delay and Radio-Link failure.

The channel emulator can be enabled and disabled with the parameter channel.dl.enable.

dl.enable = true

As mentioned above, the channel emulator can simulate fading channels. It supports 4 different models:

  • none: single tap with no delay, doppler dispersion can be applied if specified.

  • epa: Extended Pedestrian A, described in 3GPP 36.101 Section B.2.1

  • eva: Extended Vehicular A model, described in 3GPP 36.101 Section B.2.1

  • etu: Extended Typical Urban model, described in 3GPP 36.101 Section B.2.1

The fading emulator has two parameters: enable and model. The parameter model is the channel model mentioned above, followed by the maximum Doppler dispersion (e.g. eva5). The following example enables the fading submodule with a EVA fading model and a maximum doppler dispersion of 5 Hz.

dl.fading.enable = true
dl.fading.model  = eva5

The delay simulator generates the delay according to the next formula:

\[d(t) = \text{delay.min}\_\text{us} + (\text{delay.max}\_\text{us} - \text{delay.min}\_\text{us}) \cdot \frac{1 + \sin\left(\frac{2\pi t}{\text{delay.period}}\right)}{2}\]

Where delay.min_us and delay.max_us are specified in microseconds while delay.period must be in seconds.

Hence, the maximum simulated speed is given by:

\[v_\text{max} = (\text{delay.max}\_\text{us} - \text{delay.min}\_\text{us}) \cdot \frac{300 \pi}{\text{delay.period}}\]

The following example enables the delay simulator for having a period of 1h with a minimum delay of 10 microseconds and a maximum delay of 100 microseconds:

dl.delay.enable     = true
dl.delay.period     = 3600
dl.delay.max_us = 100
dl.delay.min_us = 10

Finally, the Radio-Link Failure (RLF) simulator has two states:

  • on: the UE receives baseband signal, unaffected by the simulator.

  • off: the UE does not receive any signal, the simulator substitutes the baseband with zeros.

The time the emulator spends in on is parametrized by rlf.t_on_ms and rlf.t_off_ms for off. Both parameters are expected to be in milliseconds.

The following example enables the RLF simulator for having 2 seconds of blackout every 10 seconds of full baseband signal:

dl.rlf.enable       = true
dl.rlf.t_on_ms      = 10000
dl.rlf.t_off_ms     = 2000


The srsUE supports MIMO operation for transmission modes 1, 2, 3 and 4. The user can select the number of select antennas in the ue.conf

nof_rx_ant = 2

Do you want to attach to a 2 port eNb and you have only one receive channel?

No problem. The UE can attach to 2 port cell and be in TM3 or TM4 without having a second receive antenna. Nevertheless, it will not take advantage of spatial multiplexing and it will not achieve the maximum throughput.


srsRAN 4G 21.10 and 22.04 brought prototype 5G NSA and 5G SA capabilities to srsUE respectively. These capabilities can be enabled via the srsUE configuration file.

To use srsUE in prototype 5G mode, see our 5G NSA and 5G SA application notes.