• Stars
    star
    3,904
  • Rank 11,215 (Top 0.3 %)
  • Language
    C++
  • License
    GNU General Publi...
  • Created over 4 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Cross-Platform SDR Software

SDR++, The bloat-free SDR software

Screenshot SDR++ is a cross-platform and open source SDR software with the aim of being bloat free and simple to use.

Build

Features

  • Multi VFO
  • Wide hardware support (both through SoapySDR and dedicated modules)
  • SIMD accelerated DSP
  • Cross-platform (Windows, Linux, OSX and BSD)
  • Full waterfall update when possible. Makes browsing signals easier and more pleasant
  • Modular design (easily write your own plugins)

Installing

Nightly Builds

Nightly builds contain the very latest features and bugfixes. They are usually just stable as normal releases but are available basically minutes to hours after a change has been pushed to the code.

You can download them here. It'll redirect you to the latest nightly on GitHub, scroll down to "Artifacts" and click on the version for your OS.

GitHub currently requires an account for the files to be downloadable so make sure you are logged in.

Windows

Download the latest release from the Releases page and extract to the directory of your choice.

To create a desktop shortcut, rightclick the exe and select Send to -> Desktop (create shortcut), then, rename the shortcut on the desktop to whatever you want.

Linux

Debian-based (Ubuntu, Mint, etc)

Download the latest release from the Releases page and extract to the directory of your choice.

Then, run:

sudo apt install libfftw3-dev libglfw3-dev libvolk2-dev libsoapysdr-dev libairspyhf-dev libiio-dev libad9361-dev librtaudio-dev libhackrf-dev
sudo dpkg -i sdrpp_debian_amd64.deb

If libvolk2-dev is not available, use libvolk1-dev.

Arch-based

Install from source following the instructions below.

WARNING: The sdrpp-git AUR package is no longer official, it is not recommended to use it.

Other

There are currently no existing packages for other distributions, for these systems you'll have to build from source.

MacOS

Download the app bundle from the latest nightly build

BSD

There are currently no BSD packages, refer to Building on Linux / BSD for instructions on building from source.

Building on Windows

The preferred IDE is VS Code in order to have similar development experience across platforms and to build with CMake using the command line.

Install dependencies

  • cmake
  • vcpkg
  • PothosSDR (This will install libraries for most SDRs)
  • RtAudio (You have to build and install it in C:/Program Files (x86)/RtAudio/)

After this, install the following dependencies using vcpkg:

  • fftw3
  • glfw3
  • zstd

You are probably going to build in 64 bit so make sure vcpkg installs the correct versions using .\vcpkg.exe install <package>:x64-windows

Building using the command line

IMPORTANT: Replace <vcpkg install directory> with vcpkg's install directory.

mkdir build
cd build
cmake .. "-DCMAKE_TOOLCHAIN_FILE=<vcpkg install directory>/scripts/buildsystems/vcpkg.cmake" -G "Visual Studio 16 2019"
cmake --build . --config Release

Running for development

Create a new configuration root directory

./create_root.bat

This will create the root_dev directory that will be used to save the configs of sdrpp and the modules.

You will next need to edit the root_dev/config.json file to point to the modules that were built. If the file is missing in your folder run the application once and it will create one with default value -- see later on how to run the application.

Run SDR++ from the command line

From the top directory, you can simply run:

./build/Release/sdrpp.exe -r root_dev -s

Or, if you wish to run from the build directory e.g. build/Release and adapt the relative path to the root_dev folder:

./sdrpp.exe -r ../../root_dev -s

The optional -s argument is for keeping the console active in order to see the error messages.

Because all the paths are relative, for the rest of the command line instructions we are going to assume you are running from the top directory using the former command. As mentioned previously you need to edit root_dev/config.json to add the modules that were built. From the default configuration file you need to add the paths in the modules section. Add to this list all the modules you wish to use.

...
"modules": [
    "./build/radio/Release/radio.dll",
    "./build/recorder/Release/recorder.dll",
    "./build/rtl_tcp_source/Release/rtl_tcp_source.dll",
    "./build/soapy_source/Release/soapy_source.dll",
    "./build/audio_sink/Release/audio_sink.dll"
]
...

You also need to change the location of the resource and module directories, for development, I recommend:

...
"modulesDirectory": "root_dev/modules",
...
"resourcesDirectory": "root_dev/res",
...

Remember that these paths will be relative to the run directory.

Installing SDR++

If you choose to run SDR++ for development, you do not need this step. First, copy over the exe and DLLs from build/Release/ to root_dev.

Next you need to copy over all the modules that were compiled. To do so, copy the DLL file of the module (located in its build folder given below) to the root_dev/modules directory and other DLLs (that do not have the exact name of the module) to the root_dev directory.

The modules built will be some of the following (Repeat the instructions above for all you wish to use):

  • build/radio/Release/
  • build/recorder/Release/
  • build/rtl_tcp_source/Release/
  • build/spyserver_source/Release/
  • build/soapy_source/Release/
  • build/airspyhf_source/Release/
  • build/plutosdr_source/Release/
  • build/audio_sink/Release/

Building on Linux / BSD

Select which modules you wish to build

Depending on which module you want to build, you will need to install some additional dependencies. Here are listed every module that requires addition dependencies. If a module enabled by default and you do not wish to install a particular dependency (or can't, eg. the BladeRF module on Debian Buster), you can disable it using the module parameter listed in the table below

  • soapy_source: SoapySDR + drivers for each SDRs (see SoapySDR docs)
  • airspyhf_source: libairspyhf
  • plutosdr_source: libiio, libad9361
  • audio_sink: librtaudio-dev

Install dependencies

  • cmake
  • fftw3
  • glfw
  • libvolk
  • zstd

Next install dependencies based on the modules you wish to build (See previous step)

Note: make sure you're using GCC 8 or later as older versions do not have std::filesystem built-in.

Building

replace <N> with the number of threads you wish to use to build

mkdir build
cd build
cmake ..
make -j<N>

Create a new root directory

sh ./create_root.sh

Running for development

If you wish to install SDR++, skip to the next step

First run SDR++ from the build directory to generate a default config file

./sdrpp -r ../root_dev/

Then, you will need to edit the root_dev/config.json file to point to the modules that were built. Here is an example of what it should look like:

...
"modules": [
    "./build/radio/radio.so",
    "./build/recorder/recorder.so",
    "./build/rtl_tcp_source/rtl_tcp_source.so",
    "./build/soapy_source/soapy_source.so",
    "./build/audio_sink/audio_sink.so"
]
...

Note: You can generate this list automatically by running find . | grep '\.so' | sed 's/^/"/' | sed 's/$/",/' | sed '/sdrpp_core.so/d' in the build directory.

You also need to change the location of the resource and module directories, for development, I recommend:

...
"modulesDirectory": "./root_dev/modules",
...
"resourcesDirectory": "./root_dev/res",
...

Remember that these paths will be relative to the run directory.

Of course, remember to add entries for all modules that were built and that you wish to use.

Next, from the top directory, you can simply run:

./build/sdrpp -r root_dev

Or, if you wish to run from the build directory, you will need to correct the directories in the config.json file, and then run:

./sdrpp -r ../root_dev

Installing SDR++

To install SDR++, run the following command in your build folder:

sudo make install

Building on MacOS

Warning: This is not for the faint of heart and the instructions are mostly untested. It is recommended to use the nightly builds instead.

Install dependencies

The dependencies are exactly the same as for linux, see that section for the core dependencies as well as the module list for the per-module dependencies. You will need to install the dependencies using Homebrew.

Make sure to install portaudio as it'll be needed later.

An example install command would be:

brew install libusb fftw glfw airspy airspyhf portaudio hackrf rtl-sdr libbladerf codec2 zstd
pip3 install mako

Install volk

You will need to install volk from source. Follow the instructions on their repository. On M1 there are a few more manipulations needed.

Build

You will need a few special cmake argument on top of the linux ones. You will need to enable the portaudio sink modules -DOPT_BUILD_PORTAUDIO_SINK=ON -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON and disable the usual rtaudio sink -DOPT_BUILD_AUDIO_SINK=OFF as well as the option to tell SDR++ that it will run as a MacOS bundle -DUSE_BUNDLE_DEFAULTS=ON. On MacOS versions older than Catalina (10.15), you will also need to use the internal std::filesystem as the OS can't provide it -DOPT_OVERRIDE_STD_FILESYSTEM=ON.

Here is an example of build commands that will build almost all modules at the time of writing. You can always check the CI scripts for the latest arguments just in case but this should work. From the top of the SDRPlusPlus directory:

mkdir build
cd build
cmake .. -DOPT_BUILD_SOAPY_SOURCE=OFF -DOPT_BUILD_BLADERF_SOURCE=ON -DOPT_BUILD_AUDIO_SOURCE=OFF -DOPT_BUILD_AUDIO_SINK=OFF -DOPT_BUILD_PORTAUDIO_SINK=ON -DOPT_BUILD_NEW_PORTAUDIO_SINK=ON -DOPT_BUILD_M17_DECODER=ON -DUSE_BUNDLE_DEFAULTS=ON -DCMAKE_BUILD_TYPE=Release
make -j<N>

Create bundle and install

From the top of the SDRPlusPlus directory:

sh make_macos_bundle.sh ./build ./SDR++.app

This will create a SDR++.app bundle that you can instal like any other MacOS app by dragging it into Applications.

Module List

Not all modules are built by default. I decided to disable the build of those with large libraries, libraries that can't be installed through the package manager (or pothos) and those that are still in beta. Modules in beta are still included in releases for the most part but not enabled in SDR++ (need to be instantiated).

Sources

Name Stage Dependencies Option Built by default Built in Release Enabled in SDR++ by default
airspy_source Working libairspy OPT_BUILD_AIRSPY_SOURCE ✅ ✅ ✅
airspyhf_source Working libairspyhf OPT_BUILD_AIRSPYHF_SOURCE ✅ ✅ ✅
bladerf_source Working libbladeRF OPT_BUILD_BLADERF_SOURCE ⛔ ✅ (not Debian Buster) ✅
file_source Working - OPT_BUILD_FILE_SOURCE ✅ ✅ ✅
hackrf_source Working libhackrf OPT_BUILD_HACKRF_SOURCE ✅ ✅ ✅
hermes_source Beta - OPT_BUILD_HERMES_SOURCE ✅ ✅ ✅
limesdr_source Working liblimesuite OPT_BUILD_LIMESDR_SOURCE ⛔ ✅ ✅
perseus_source Beta libperseus-sdr OPT_BUILD_PERSEUS_SOURCE â›” â›” â›”
plutosdr_source Working libiio, libad9361 OPT_BUILD_PLUTOSDR_SOURCE ✅ ✅ ✅
rfspace_source Working - OPT_BUILD_RFSPACE_SOURCE ✅ ✅ ✅
rtl_sdr_source Working librtlsdr OPT_BUILD_RTL_SDR_SOURCE ✅ ✅ ✅
rtl_tcp_source Working - OPT_BUILD_RTL_TCP_SOURCE ✅ ✅ ✅
sdrplay_source Working SDRplay API OPT_BUILD_SDRPLAY_SOURCE ⛔ ✅ ✅
sdrpp_server_source Working - OPT_BUILD_SDRPP_SERVER_SOURCE ✅ ✅ ✅
soapy_source Working soapysdr OPT_BUILD_SOAPY_SOURCE ✅ ✅ ✅
spectran_source Unfinished RTSA Suite OPT_BUILD_SPECTRAN_SOURCE â›” â›” â›”
spectran_http_source Unfinished - OPT_BUILD_SPECTRAN_HTTP_SOURCE ✅ ✅ ⛔
spyserver_source Working - OPT_BUILD_SPYSERVER_SOURCE ✅ ✅ ✅
usrp_source Beta libuhd OPT_BUILD_USRP_SOURCE â›” â›” â›”

Sinks

Name Stage Dependencies Option Built by default Built in Release Enabled in SDR++ by default
android_audio_sink Working - OPT_BUILD_ANDROID_AUDIO_SINK ⛔ ✅ ✅ (Android only)
audio_sink Working rtaudio OPT_BUILD_AUDIO_SINK ✅ ✅ ✅
network_sink Working - OPT_BUILD_NETWORK_SINK ✅ ✅ ✅
new_portaudio_sink Beta portaudio OPT_BUILD_NEW_PORTAUDIO_SINK ⛔ ✅ ⛔
portaudio_sink Beta portaudio OPT_BUILD_PORTAUDIO_SINK ⛔ ✅ ⛔

Decoders

Name Stage Dependencies Option Built by default Built in Release Enabled in SDR++ by default
atv_decoder Unfinished - OPT_BUILD_ATV_DECODER â›” â›” â›”
dmr_decoder Unfinished - OPT_BUILD_DMR_DECODER â›” â›” â›”
falcon9_decoder Unfinished ffplay OPT_BUILD_FALCON9_DECODER â›” â›” â›”
kgsstv_decoder Unfinished - OPT_BUILD_KGSSTV_DECODER â›” â›” â›”
m17_decoder Beta - OPT_BUILD_M17_DECODER ⛔ ✅ ⛔
meteor_demodulator Working - OPT_BUILD_METEOR_DEMODULATOR ✅ ✅ ⛔
radio Working - OPT_BUILD_RADIO ✅ ✅ ✅
weather_sat_decoder Unfinished - OPT_BUILD_WEATHER_SAT_DECODER â›” â›” â›”

Misc

Name Stage Dependencies Option Built by default Built in Release Enabled in SDR++ by default
discord_integration Working - OPT_BUILD_DISCORD_PRESENCE ✅ ✅ ⛔
frequency_manager Working - OPT_BUILD_FREQUENCY_MANAGER ✅ ✅ ✅
recorder Working - OPT_BUILD_RECORDER ✅ ✅ ✅
rigctl_client Unfinished - OPT_BUILD_RIGCTL_CLIENT ✅ ✅ ⛔
rigctl_server Working - OPT_BUILD_RIGCTL_SERVER ✅ ✅ ✅
scanner Beta - OPT_BUILD_SCANNER ✅ ✅ ⛔
scheduler Unfinished - OPT_BUILD_SCHEDULER â›” â›” â›”

Troubleshooting

First, please make sure you're running the latest automated build. If your issue is linked to a bug it is likely that is has already been fixed in later releases

SDR++ crashes then it won't start again no matter what

This is a bug in 1.0.0 that was fixed in 1.0.1

In some cases, if a crash happened while the config was being saved, the config file would be corrupted and SDR++ would refuse to start because of it.

This has now been fixed. If a config file is corrupted it'll just reset it to its default state.

"hash collision" error when starting

You likely installed the soapysdr-module-all package on Ubuntu/Debian. If not it's still a SoapySDR bug caused by multiple soapy modules coming in conflict. Uninstall anything related to SoapySDR then install soapysdr itself and only the soapy modules you actually need.

"I don't see -insert module name here-, what's going on?"

If the module was included in a later update, it's not enabled in the config. The easiest way to fix this is just to delete the config.json file and let SDR++ recreate it (you will lose your setting relating to the main UI like VFO colors, zoom level and theme). The best option however is to edit the config file to add an instance of the module you wish to have enabled (see the Module List).

SDR++ crashes when stopping a RTL-SDR

This is a bug recently introduced by libusb1.4 To solve, this, simply downgrade to libusb1.3

SDR++ crashes when starting a HackRF

If you also have the SoapySDR module enabled, this is a bug in libhackrf. It's caused by libhackrf not checking if it's already initialized. The solution until a fixed libhackrf version is released is to disable the soapy_source module from SDR++. For this, go into the "Module Manager" menu and click the - button next to the row with "soapy_source". After that, restart SDR++.

Issue not listed here?

If you still have an issue, please open an issue about it or ask on the discord. I'll try to respond as quickly as I can. Please avoid trying to contact me on every platform imaginable thinking I'll respond faster though...

Contributing

Feel free to submit pull requests and report bugs via the GitHub issue tracker. I will soon publish a contributing.md listing the code style to use.

Credits

Patrons

Contributors

Libraries used

More Repositories

1

RyFi

High Reliability IP Modem
C
30
star
2

dsp

The ultimate lightweight DSP library
C++
27
star
3

android-sdr-kit

Docker container and binaries for android builds of common SDR drivers and libraries.
Shell
17
star
4

SIMM

SIMM RAM library for the Arduino MEGA 2560
C++
16
star
5

PenutOS

32bit OS
C
12
star
6

qdsp

DSP for SDR++
C++
11
star
7

MemeOS

32bit OS
C++
11
star
8

ArduinoVideo

Play video on an i2c OLED using an Arduino
Arduino
10
star
9

dc_sdr

My SDR badge insert for defcon
C++
8
star
10

LimeOS

Lightweight Micro Operating System
C++
8
star
11

net

Ultra lightweight cross-platform C++ networking library
C++
7
star
12

cdsp

C++ Header Only DSP Library
C++
7
star
13

rds

LibRDS - An open source implementation of the RDS digital layer
C++
7
star
14

DueOverclock

Overclocking library for the Arduino Due
C++
5
star
15

ArduinOS

Serial OS For any Arduino
Arduino
5
star
16

Elysium

Cross platform raytracing engine
C++
4
star
17

OS-Studio

An OS Developpement Optimized IDE
Visual Basic
4
star
18

HadronUnix

Unix-like operating system from scratch
C
4
star
19

lux

Lightweight GUI Framework
C++
4
star
20

aprs_bridge

APRS to Discord bridge for the Oxyde bot framework
JavaScript
4
star
21

sdrpp_server_map

Map and API for SDR++ server
JavaScript
4
star
22

rt

C++ Raytracer
C++
3
star
23

ser

C++ serial port library
C++
3
star
24

MegaInterface

.NET Interface for Arduino
C#
3
star
25

FSCE

Fast Symbolic Compute Engine for C++17
C++
3
star
26

SwiftRT

C++
2
star
27

Server-Admin

Open Source Server Management Program
Visual Basic
2
star
28

cpp_rt

C++ pathtracer
C++
2
star
29

convert_pal

Convert pallet files to SDR++ colormaps
Python
2
star
30

cli

Command line parsing library
C++
2
star
31

gfx

API-Agnostic Graphics Abstraction Library
C++
2
star
32

pico_codan

RPI Pico interface for the CODAN RF units
C++
2
star
33

Win32Memez

A troll virus which will make anyone go crazy
C#
2
star
34

libnoctar

LibNoctar - A multi-level device control library for the PerVices Noctar SDR
C
2
star
35

OpenWeather

OpenSource Weather station
JavaScript
2
star
36

librsp

Open source driver for RSPs
C
2
star
37

DankBot_Legacy

OpenSource C# customisable discord bot
C#
2
star
38

flog

Fast, lightweight and extendable C++ logging library
C++
2
star
39

ucs

Ultrasonic Communication System
C++
2
star
40

VGA_Pong

VGA example for the µflake FPGA dev board
2
star
41

m17

A lightweight M17 implementation
C
2
star
42

INFO2009

Solutions des exercices du cours INFO2009
C
1
star
43

uflake-tools

Docker based toolchain for the µflake FPGA dev board
Dockerfile
1
star
44

NESPlayground

Testing repo for the NES
Assembly
1
star
45

OpenUpdate

An open-source DtDNS autoupdater !
Visual Basic
1
star
46

dsp2

New version of the DSP library
C++
1
star
47

mkd

Markdown parsing library
C++
1
star
48

OpenJBC

Open Source JBC soldering iron station
C
1
star
49

sdrpp_website

JavaScript
1
star
50

DankZipUtils

An Open-Source Zip Utility
Visual Basic
1
star
51

DankBot

Multiplatform Customisable discord bot
JavaScript
1
star
52

dark_borders_considered_harmful

Extension to fix MyUnicast (ULiege's video podcast platform) dumb style decisions
CSS
1
star
53

RyBot

New Discord bot with an easier to maintain design
JavaScript
1
star
54

DankBarcodeUtils

A Free Open-Source Barcode Lirbrary for .NET
Visual Basic
1
star
55

bld_old

No bullshit build system
Python
1
star
56

chemu

Codan Handset Emulator
C++
1
star
57

dotbackup

My dot files
Roff
1
star