Main Content

Signal Reception Using Software-Defined Radios

Since R2025a

This example shows how to tune software-defined radios (SDRs) to receive signals using the SDR Receiver app. In this example, you:

  1. Configure SDRs for continuous signal reception.

  2. Visualize the IQ samples, power spectrum, and constellation.

  3. Correct RF impairments.

  4. Export app configuration to MATLAB™ script.

Required Hardware and Software

To run this example, you need one of these radios and the corresponding software support package.

  • USRP™ N2xx series or B2xx series radio and Communications Toolbox Support Package for USRP Radio. For more information, see USRP Radio and Supported Hardware and Required Software.

  • USRP™ N3xx series, X series, or E320 radio and Wireless Testbench Support Package for NI USRP Radios. For more information, see Supported Radio Devices (Wireless Testbench) (Wireless Testbench).

  • ADALM-PLUTO radio and Communications Toolbox Support Package for Analog Devices® ADALM-PLUTO Radio. For more information, see ADALM-Pluto Radio.

  • RTL-SDR radio and Communications Toolbox™ Support Package for RTL-SDR Radio. For more information, see RTL-SDR Radio.

Introduction

An SDR is a wireless device that consists of a configurable RF front end with an FPGA or programmable system-on-chip (SoC) to perform digital functions. Commercially available SDRs transmit and receive signals at different frequencies to implement wireless standards such as FM, LTE, WLAN, and 5G.

An SDR block which consists of an antenna, RF processing block, and digital processing block. The SDR block is connected to the host computer with MATLAB using an Ethernet cable or USB.

While using SDRs, the common challenges include setting the correct gain and estimating accurate frequency and phase offset values. The SDR Receiver app provides an interactive interface to tune the gain of the selected SDR. Additionally, the app also allows you to adjust the phase offset, fine frequency offset, and coarse frequency offset during signal reception and you can observe how each adjustment affects the received signal.

The image below shows the workflow used in the SDR Receiver app.

Open SDR Receiver App

To open the SDR Receiver app, run the command shown below.

app = SDRReceiver();

Screenshot of the SDR Receiver app window.

Configure Signal Parameters

Center Frequency (Hz): Specify Center Frequency as a nonnegative scalar. The valid range of Center Frequency value depends on the selected SDR.

  • The table below shows the Center Frequency range for USRP™ radios. For USRP radios with supported RF daughterboards, the valid range of Center Frequency depends on the RF daughterboard.

Radio

Center Frequency Range

B Series

[34e6, 6e9]

USRP N300, USRP N310

[10e6, 6.05e9]

USRP N320, USRP N321

[3e6, 6.1e9]

USRP X410

[1e6, 8e9]

USRP X300, USRP X310

[10e6, 6e9]

*This is typical range but varies with daughter board.

N2xx-Series

[10e6, 6e9]

*This is typical range but varies with daughter board.

For more information on the range of center frequency, use info() method of the respective receiver System objects.

  • For PLUTO radio, the valid tuning range of Center Frequency is from 325 MHz to 3.8 GHz. Communications Toolbox Support Package for Analog Devices ADALM-Pluto Radio enables you to use the PLUTO radio outside the qualified tuning range by configuring the radio to operate using the AD9364 firmware. To extend the Center Frequency range, at the MATLAB command prompt, enter configurePlutoRadio('AD9364').

  • For RTL-SDR radio, the Center Frequency range depends on the tuner chips.

Tuner

Center Frequency Range

Elonics E4000

52 - 2200 MHz with a gap from 1100 MHz to 1250 MHz (varies)

Rafael Micro R820T

24 - 1766 MHz

Rafael Micro R828D

24 - 1766 MHz

Fitipower FC0013

22 - 1100 MHz (FC0013B/C, FC0013G has a separate L-band input, which is unconnected on most sticks)

Fitipower FC0012

22 - 948.6 MHz

FCI FC2580

146 - 308 MHz and 438 - 924 MHz (gap in between)

For more information, see [1].

Rx Gain (dB): Specify the SDR receiver gain in dB. The valid range of Rx Gain value depends on the selected SDR.

  • For USRP radios, the valid range of Rx Gain depends on the RF daughterboard. To get valid gain values, use the info() method of comm.SDRuReceiver.

  • For PLUTO radio, Rx Gain ranges varies with center frequency.

Center Frequency Range

Gain (in dB)

70 MHz - 1300 MHz

[-1,73]

1300 MHz - 4 GHz

[-3,71]

4 GHz - 6 GHz

[-10,62]

  • For RTL-SDR, the valid range of Rx Gain values depends on the tuner chip. To get valid gain values, use the info() method of comm.SDRRTLReceiver.

Sample Rate (Hz): Specify the baseband sample rate of the radio front end in Hz as a positive numeric scalar.

  • For USRP radios, Sample Rate depends on the master clock rate (MCR) and decimation factor.

SampleRate=MCRDecimationfactorHz

Radio

Master Clock Rate (MCR)

Supported Decimation Factor Value in the Range [1, 1024]

B Series

Scalar in the range from 5e6 to 61.44e6.

- [1, 3]

- Odd integer from 4 to 128

- Even integer in the range [4,256]

- Integer multiple of 4 in the range [256,512]

N2xx-Series

100e6

- 2, when you set the TransportDataType property to int8

- Odd integer from 4 to 128

- Even integer in the range [4,256]

- Integer multiple of 4 in the range [256,512]

* The range of decimation factor varies with the daughterboard.

USRP N300

USRP N310

- 122.88 MHz

- 125.00 MHz

- 153.60 MHz

- [1, 3]

- Even integer in the range [4,256]

- Integer multiple of 4 in the range [256,512]

- Integer multiple of 8 in the range [512,1016]

USRP N320

USRP N321

- 200.00 MHz

- 245.76 MHz

- 250.00 MHz

- [1, 3]

- Even integer in the range [4,256]

- Integer multiple of 4 in the range [256,512]

- Integer multiple of 8 in the range [512,1016]

USRP X410

- 245.76 MHz

- 250.00 MHz

- [1, 3]

- Even integer in the range [4,256]

- Integer multiple of 4 in the range [256,512]

- Integer multiple of 8 in the range [512,1016]

USRP X300

USRP X310

- 184.32 MHz

- 200.00 MHz

- Integer in the range from 1 to 128

- Even integer in the range from 128 to 256

- Multiple of 4 in the range from 256 to 512

- Multiple of 8 in the range from 512 to 1016

* The range of decimation factor varies with the daughterboard.

For more information, see comm.SDRuReceiver.

  • For PLUTO radio, Sample Rate is the same value as the BasebandSampleRate property of comm.SDRRxPluto. It ranges from 65105 to 61.44e6 samples per second.

  • For RTL-SDR, the valid range of Sample Rate is (225, 300] kHz and (900, 3200] kHz. If you set the Sample Rate greater than 2560 kHz, you might observe dropped samples. For more information about the maximum reliable sample rate, see [1].

Frame Size: Specify number of samples per frame of the output signal as a positive integer.

  • For USRP radios, Frame Size must be an even positive integer from 1 to 256e6.

  • For PLUTO radio, Frame Size must be an even positive integer from 2 to 16,777,216.

  • For RTL-SDR radio, Frame Size must be an even positive integer from 1 to 375,000.

For more information on the range of parameters, use info() method of the respective receiver System objects.

Receive Signal

To receive the signal, click START and to pause the signal reception, click PAUSE. Once the signal reception starts, the app disables the Select SDR.

The app shows the status of reception as Receiving [Total Overruns = <Count of overruns>]. And the app resets the overrun count to 0 before the reception starts.

Apply RF Corrections

To ensure accurate signal transmission and reception in RF communication systems, you must perform RF corrections such as frequency and phase offset corrections.

Phase offset refers to the difference in phase between a received signal and a reference signal, which affects the signal integrity. Frequency offset refers to the difference between the expected carrier frequency and actual received frequency, which leads to signal misalignment and signal degradation.

The SDR Receiver app helps you to interactively estimate phase and frequency offsets using Phase Offset (deg), Coarse Frequency (Hz), and Fine Frequency (Hz) during simulation. Change these parameters to see how they impact the Constellation plot.

Visualize Received Signal

You can visualize the receiving signal using these three plots:

IQ Plot: Plots the real and imaginary parts of the receiving signal, where, X-axis is Samples and Y-axis is Amplitude.

Power Spectrum Plot: Plots the power spectrum of the received signal. The app generates these plots using the spectrumAnalyzer object. In the plot, the X-axis is Frequency in Hz and Y-axis is dBFS (decibels relative to full scale).

Constellation Plot: Plots the constellation of the received signal and estimates the phase and frequency offsets.

Stop Reception

To stop the signal reception, click STOP. Once the reception stops, the app enables the Select SDR controls, which allows you to change the radio.

When reception is complete, the app enables the SDR type, SDR name, SDR address drop-down options and Refresh SDR list button as shown on the left side. The right side of the image shows the deactivated Select SDR controls when the reception is in progress.

Export to MATLAB Script

To generate MATLAB script for the current SDR Receiver app configuration, click Export To MATLAB Script button.

Close the App

To close the SDR Receiver app, run the command shown below.

app.delete();

Conclusion and Further Exploration

In this example, you tune your SDR and estimate phase and frequency offsets based on your requirements.

For more SDR examples, see:

  • QPSK Transmitter with Software-Defined Radios.

  • QPSK Receiver with Software-Defined Radios.

  • Spectrum Analysis of Signals.

  • FM Broadcast Receiver.

References

[1] SDR (Software Defined Radio)

Helper Functions

  • SDRReceiver.m

  • helperUISDRRxWidgets.m

  • helperUISDRRxController.m