Skip to content

Software setup

Check if SDR devices are found

If all dependencies have been installed correctly, running the following commands should show connected SDR devices. Generally, the devices should be discoverable when running with normal user permissions. If the devices are only found when running these commands as root, you will need to install the relevant udev rules for each devices.

When configuring the devices, some of them will automatically be found (Soapy, LimeSDR) or can be manually searched using the Find devices button.

The dropdown selection that appears for both TX and RX can be manually edited. Enter the desired devices string here, or leave the default discovered value as desired.

When first run, go to the Setup - General Settings tab first and configure the device options, then click Save before starting TX or RX. Without the correct device arguments or the correct antenna selected, the application can crash when enabling RX or TX.

Soapy SDR

USRP

To use USRP devices via gr-osmosdr (default) use a device string of the form uhd=0.

Set the TX Antenna option to TX/RX.

Set the RX Antenna option to RX2 if operating in duplex mode, or TX/RX if operating in semi-duplex mode.

Note that the auto-detected Soapy device can only be used in MMDVM mode because it requires transmit timestamps.

$ SoapySDRUtil --find
######################################################
##     Soapy SDR -- the SDR abstraction library     ##
######################################################

[INFO] [UHD] linux; GNU C++ version 10.2.1 20201207; Boost_107400; UHD_3.15.0.0-4+b1
[INFO] [B200] Loading firmware image: /usr/share/uhd/images/usrp_b200_fw.hex...

Found device 1
  driver = uhd
  label = B200 328F201
  name = MyB200
  product = B200
  serial = 328F201
  type = b200

ADALM-Pluto (PlutoSDR)

ADALM-Pluto requires a device argument like soapy=0,driver=plutosdr, where the soapy device number can be found out by running SoapySDRUtil --find. Both USB and IP over USB modes are supported with module SoapyPlutoSDR.

Set both TX Antenna and RX Antenna to Auto.

$ SoapySDRUtil --find
######################################################
##     Soapy SDR -- the SDR abstraction library     ##
######################################################

Found device 1
  device = plutosdr
  driver = plutosdr
  uri = usb:3.57.5

Found device 2
  device = plutosdr
  driver = plutosdr
  uri = ip:pluto.local

LimeSDR

LimeSDR-mini and LimeNET-Micro devices require a device string like soapy=0,driver=lime,serial=XXXX. To find out the serial number, use the SoapySDRUtil --find command and add the serial number of the device to the device arguments string, like soapy=0,serial=00583A34CAD205,driver=lime.

To use the MMDVM DMR modem with full TDMA support, you will need a LimeSDR device initialized as above. The driver=lime part is important to use the native gr-limesdr support.

Set both TX Antenna and RX Antenna to Auto.

$ SoapySDRUtil --find
######################################################
##     Soapy SDR -- the SDR abstraction library     ##
######################################################

Found device 1
  addr = 24607:1027
  driver = lime
  label = LimeSDR Mini [USB 3.0] 00583A34CAD205
  media = USB 3.0
  module = FT601
  name = LimeSDR Mini
  serial = 00583A34CAD205

RTL-SDR

The default support via gr-osmosdr requires a device string of the form rtl=0.

However, if the SoapySDR module for RTL-SDR was installed, it will auto-detect the RTL device. Note: for some devices, the auto-detected SoapySDR device string will not work for device initialization. In this case use rtl=0 as a device string.

You can manually check for the device presence using:

$ SoapySDRUtil --find
######################################################
##     Soapy SDR -- the SDR abstraction library     ##
######################################################

[INFO] [UHD] linux; GNU C++ version 10.2.1 20201207; Boost_107400; UHD_3.15.0.0-4+b1
Found Rafael Micro R820T tuner

Found device 1
  available = Yes
  driver = rtlsdr
  label = Generic RTL2832U OEM :: 00000001
  manufacturer = Realtek
  product = RTL2838UHIDIR
  rtl = 0
  serial = 00000001
  tuner = Rafael Micro R820T

LimeUtil

$ LimeUtil --find
  * [LimeSDR Mini, media=USB 3.0, module=FT601, addr=24607:1027, serial=00583A34CAD205]

UHD

To use USRP devices via gr-osmosdr (default) use a device string of the form uhd=0.

In MMDVM mode Ettus USRP (and other UHD based devices) are supported only directly via gr-uhd, and require a device string like driver=uhd,serial=XXXX. To find out the serial number, use the uhd_find_devices command and add the serial number of the device to the device arguments string, like driver=uhd,serial=583A29C. To use the MMDVM DMR modem with full TDMA support, you will need an Ettus USRP device initialized as above.

$ uhd_find_devices 
[INFO] [UHD] linux; GNU C++ version 10.2.1 20201207; Boost_107400; UHD_3.15.0.0-4+b1
[INFO] [B200] Loading firmware image: /usr/share/uhd/images/usrp_b200_fw.hex...
--------------------------------------------------
-- UHD Device 0
--------------------------------------------------
Device Address:
    serial: 583A29C
    name: MyB200
    product: B200
    type: b200

In the General settings tab you will find two dropdowns which allow you to set the SDR device. These dropdowns are auto-populated at startup if SoapySDR or LimeSDR devices are found while scanning the system. You can also at any time press the Find devices button to search devices again.

Some devices cannot be found automatically and must be manually entered. The dropdown fields allow you to manually edit them with the proper device string.

Device configuration

The antenna fields can be set to Auto in most cases, with the USRP being the most notable exception.

The frequency correction fields allow you to specify a correction value in parts-per-million for devices which don't have a very accurate clock.

After setting the correct device, do not forget to press the Save button, otherwise the settings will not take effect.

VOLK profile optimization

GNU radio main DSP blocks are highly optimized (including on embedded ARM platforms) by using the VOLK library. To minimize the CPU resources consumed by QRadioLink it is recommended to run the volk_profile utility after GNU radio has been installed. This command only needs to be run when GNU Radio or libvolk are upgraded. This command may take a long time to complete.

For older versions of GNU Radio 3.8 and libvolk, it is necessary to perform a workaround step to re-enable digital modes. You need to run the volk_profile command, and after it completes, inspect the file ~/.volk/volk_config in the /home directory. Locate the line starting with volk_8u_x4_conv_k7_r2_8u and ensure it ends with spiral spiral like this: volk_8u_x4_conv_k7_r2_8u spiral spiral. If it does not not, change it so it looks like this. After performing this step, digital modes should work again.

Audio backend

Pulseaudio is the recommended audio backend. It can be configured for low latency audio by changing settings in /etc/pulse. If you experience interruptions or audio glitches with Pulseaudio, you can try the following workaround: add tsched=0 to this line in /etc/pulse/default.pa and restart Pulseaudio

load-module module-udev-detect tsched=0

Alsa may require you to place an .asoundrc file in the home directory with contents similar to this:

period_time 0
period_size 1024
buffer_size 4096
rate 48000

Important note to Pulseaudio users: please use the Pulseaudio provided sinks and sources in the configuration dropdown, not the default device (or pulse).

These audio sinks and sources should look like this:

  • alsa_input.pci-0000_04_00.6.analog-stereo
  • alsa_output.pci-0000_04_00.6.analog-stereo

Pulseaudio devices

The audio should generally be completely artefact and interruptions free. If you experience either while not changing any settings, the Pulseaudio configuration is probably not correct. It is possible however to experience audio issues when changing frequency rapidly by dragging the filter box across the screen, which is an application bug.

Video backend

Video transmission and reception uses the GStreamer Qt backend. When enabling the TX button, the GStreamer camera bin will load, which will take a while. The video device name is configurable in the Settings - General Settings page, by default /dev/video0 will be used, which is the default system camera. Note that in the Qt API the default camera will always be selected according to the system configuration, not the device configured in QRadioLink.