The RemoteRF client provides users (such as students or researchers) a way to connect to the RemoteRF server deployed on their university campus or in their research lab. The terminal on a user’s personal computer can be used to reserve the software-defined radios (SDRs) that are connected to the RemoteRF server, and then the user can write and run Python scripts locally (on their personal computers) to remotely interface with the SDRs they have reservered.


Users remotely access SDRs connected to RemoteRF over the internet through Python.
Users remotely access SDRs connected to RemoteRF over the internet through Python.


What is a Software-Defined Radio?

Software-defined radio (SDR) is a term often used to describe a transmitter, receiver, or transceiver which is highly reconfigurable through software control. For example, an SDR’s carrier frequency, transmit power, bandwidth, and baseband sampling rate all may be tunable through software such as Python. This is in contrast to application-specific transceivers, which are far less flexible yet often much more optimized and efficient than SDRs.

The most commonly used SDRs today essentially act as a radio frequency (RF) front-end, allowing a user to load custom signals for the radio to transmit and extract signals that the radio receives. Users may generate or process these signals on the SDR itself or in Python, for instance. The versatility of SDRs have made them valuable tools in practicing engineers, researchers, educators, students, and hobbyists, as they provide a flexible platform to conduct wireless experiments and prototype proofs-of-concept.

The ADALM-PLUTO (Pluto SDR), manufactured by Analog Devices.
The ADALM-PLUTO (Pluto SDR), manufactured by Analog Devices.

Within the context of RemoteRF, it is perhaps easiest to think of an SDR as a transceiver onto which complex baseband transmit samples can be pushed and from which complex baseband receive samples can be pulled. As such, all the relevant baseband digital signal processing can be done on a user’s personal computer in Python, leaving the actual upconversion and downconversion to the SDR, along with other RF front-end functionalities such as amplification and some filtering. This means the SDR does not really “do much” on its own—the user must generate and process signals in Python to get the outcome they desire. The ADALM-PLUTO or simply “Pluto SDR”, manufactured by Analog Devices, is one of the most cost-effective SDRs on the market today. Control of a Pluto SDR from Python is summarized by the illustration below.

A simplified block diagram of the Pluto SDR interfaced with Python.
A simplified block diagram of the Pluto SDR interfaced with Python.

Typical RemoteRF Usage

Once a RemoteRF server has been set up on a university campus or in a research lab, its users may connect to the server through a terminal on their personal computers in order to access its SDRs and conduct experiments. Once the user installs RemoteRF software on their personal computer, they can make an account on the RemoteRF server and then reserve access to one or more of its SDRs during desired time slots. Upon reserving a particular SDR for a particular time slot, the RemoteRF server issues the user a unique token (a randomly generated string of characters), which can then be inserted into Python code, allowing only that user to remotely access the SDR during the specified time slot. A sketch of this reservation process is depicted below.

Typical RemoteRF workflow involves reserving an SDR, writing Python code, and running that code to conduct an experiment.
Typical RemoteRF workflow involves reserving an SDR, writing Python code, and running that code to conduct an experiment.

To use the particular SDRs that a user reserved, they would create a Python script that imports a custom RemoteRF library. Then, for each SDR they reserved, the user would instantiate an SDR object within that Python script using the tokens issued for those SDRs. For example, if a user reserved a single Pluto SDR, this would look something similar to the following.

sdr = adi.Pluto(token='ajBMv80jMog') # one SDR for TX and RX

If two Pluto SDRs were reserved, e.g., one for transmission and one for reception, this would look something similar to the following.

sdr_tx = adi.Pluto(token='ajBMv80jMog') # one SDR for TX
sdr_rx = adi.Pluto(token='dUx6lG3I9lA') # another SDR for RX 

From there, the user may interface with the SDRs as if they were directly connected to their personal computer, and the user would run the Python script locally on their personal computer. The vast majority of the Python code would be executed locally, but any commands involving SDRs will be routed over the network to the RemoteRF server, which will execute the commands on the corresponding SDRs. Any return values (such as received signals) will be returned within the user’s Python script, where they can be processed as desired.

Next Steps

The natural next step is to install and configure the RemoteRF client on your computer, then create an account and reserve an SDR.