SDR-J DAB-0.99X, WFM-RPI and SDR-J SW 7.2 (update 01-09-16)

The SDR-J software for Linux and Windows

SDR-J is a set of open source programs for Software Defined Radio, at least the receiving side. Started as a hobby project (it still is!!!) for getting some sound using an Elektor SDR card as device, it evolved into the current set of programs.
The set consists of software for DAB (Windows and Linux PC as well as on a Raspberry PI 2), software for (W)FM (Windows and Linux PC and Raspberry PI 2), software for "classic radio", i.e. amateur modes and DRM, on Windows and Linux PC (it will run on the RPI 2 though), and some simple software for viewing spectra, also on Windows and Linux PC.
Software is written in C++, and use is made of the Qt framework for the GUI, and many, many libraries available through a GPL. Recently, as an exercise in programming a - limited - version of the DAB-RPI software is also encoded in the Ada programming language. See below.
In the current update a number of errors is repaired, and the software is compiled against the most recent libraries for the devices.

Supported devices.

All programs provide direct support for common DABsticks (using the RT2832 chipset) and the SDRplay as input device. The DAB, WFM and spectrumviewer programs also provide direct support for the AIRspy (including the AIRspy mini).
The Windows versions of the programs now provide support for common extio-XXX dll's.
The "classic" radio provides direct support for the SDRplay, DABsticks. Furthermore, under Linux there is - if so configured - direct support for the PMSDR and the elektor card while under Windows these - and other - devices are supported through extioXXX.dll's.
Note that the current Windows executables are compiled against the 1.95 library for the SDRplay and the 1.0.8 library for the Airspy.

DAB on the PC and the Raspberry PI 2

There are two versions of the DAB software (not counting the Ada version), one will run on a PC (Linux or Windows), the other one runs also on a PC (Linux or Windows) but is optimized to be used on the Raspberry PI 2. Both versions support the same set of input devices. The Raspberry PI 2 has a processor chip with 4 computing cores, the chip is sufficiently powerful to run the DAB-RPI software, a version optimized for the 4 cores of the chip was developed. Current version for both the sdr-j-dab and the dab-rpi is 0.997, both programs slowly moving towards a version 1.0. The algorithms applied in these two programs are the same, and while the basis of the software for the two implementations is the same, there are a few implementation differences. While - in both programs - the audio seems to be OK, data handling is immature. Unfortunately, since most of the DAB transmissions that can be received locally do not contain a data part, progress in developing the data handling is slow.

Supported devices

The SDRplay is supported, the SDRplay site has all information for obtaining the required libraries, note that the software was compiled against library version 1.95. Under Windows and Linux one can select the SDRplay through an entry in the GUI (if so configured). Under Windows one can select te SDRplay through an entry in the GUI directly, or through the entry for the extio-XXX dll's (and then - obviously - selecting the appropriate dll). In the first picture on the left the the sdr-j-dab software shows the spectrum when the SDRplay is chosen directly (all on Linux), with the DAB-RPI running remotely on an RPI 2. The second picture shows the sdr-j-dab software running under Windows, using an extioXXX.dll for the SDRplay.

sdrplay direct sdrplay through extio

The first picture shows the DAB software, running on the PC with the AIRspy attached. The second picture shows the DAB software as normally used by me, i.e. the DAB-RPI running on the RPI, while I am listening on my laptop. The DAB-RPI software sends - it is then configured that way - the generated PCM samples (rate 48000) to a TCP port (port 20040) rather than to the soundchips on the RPI. On the laptop then runs a very simple program "soundClient", reading the stream and sending it to the soundcard.
More or less as a gadget, in this picture the same channel is being selected on the Ada version of the DAB software running on the laptop.

supported airspy two dabs

A DABstick can be selected directly in the GUI of the program, a DABstick running with an rtl_rcp server can be accessed and - for Windows - the appropriate extio-XXX.dll can be used.
The rtl_tcp connection was tested using a local host connection (the picture), and further with a 100 Mb (wired) link between a Raspberry PI 2 running the rtl_tcp server and my laptop running the client software. Of course setting up the required libraries and server is your own responsibility.

dab through rtl_tcp dab through rtl_tcp

The sources of the DAB-RPI software contain a subdirectory with sources for a "soundClient" (this client is available as a cross compiled executable in the Windows distribution) with which is it possible to listen through a tcp connection to the sound generated in the RPI.

The OS running on my Raspberry PI 2 is Arch Linux, however, the DAB-RPI software was also successfully tested on Raspbian Jessie on the same RPI.
The set of precompiled Windows programs contains an executable for each of the two versions. Both the sdr-j-dab and the DAB-RPI version are configured for use with SDRplay, AIRSPY, DABSticks and the extIO handler. The Linux version can be configured - by commenting or uncommenting lines in the configuration file - for SDRplay, AIRspy, DABsticks, and UHD Ettus research (the last one not tested by me).

The WFM-RPI software


The software for (W)FM is continued as a set of "small" fm programs, one for each of the supported input devices. There is support for DABstick, for SDRplay and for the AIRspy, for each of these devices an instance of the WFM software is made and for each of these devices an executable is available in the Windows distribution. The Windows version furthermore supports - in a limited way - extIO-XXX.dll's. The software was rewritten to make use of the cores of the RPI 2 processor.
Both the DABstick and the SDRplay are easy to use as device. It must be noted though that since the AIRspy delivers its samples at a rate of 2500000, non-integer decimation has to be applied and the Raspberry PI 2, when asked to run the software with the AIRspy, will be loaded until (or just over) its limits. The software can be used however on a regular PC as well, both under Linux or under Windows.

A new feature is that the FM software supports a program list, which can be set and altered. Such a program list may contain some of the preferred program names with their associated frequency and is maintained between program invocations.

Also new is that - as with the DAB-RPI - the WFM-RPI software - when configured to do so - sends its output to port 20040 - for remote listening (again, my device is not in the same room where I normally stay). The same "listener", i.e. soundClient program can be used for listening.

The software runs on the Raspberry PI 2, and on regular PC's under Linux and Windows. Again, it was extensively tested on a Raspberry PI 2 running Arch Linux, and it was tested to show that compilation on and for Jessie on an RPI 2 did not give problems. However - again -, experiences seem to show that the software under Arch outperforms the software under Jessie in this respect, under Jessie there might be some stuttering in the sound.
The set of precompiled Windows programs contains 4 executables, one for each of the devices mentioned, and one supporting devices for which an extioXXX.dll is available.

The sdr-j-swreceiver-7.2

The swreceiver software implements a - more or less - classical shortwave receiver with some common decoders, such as analog speech, psk, rtty, cw, wheatherfax and so on. Handling of devices for which a Winrad compatible dll exist is now extended with support for fast devices, i.e. devices such as DABsticks and SDRplay that deliver their data through the usb. Since the decoders in the software are all "small-band", the samplerate of the data from these fast devices is reduced to 96000 (it can be set to different values in the configuration file though, but 96000 samples/second leads to a spectrumwidth of 96000 Hz which functions well on a common laptop screen).
The various pieces of software for interfacing to a device as well as the various decoders are implemented as plugins. Since the main program has to "know" where to find the plugins for the input handling and for the decoders, it looks into an ".ini" file for location information. To set up the ".ini" file, a small configuration utility is included, it will set the paths for the different plugins in the ".ini" file. (When starting the program from within the "windows-bin-sw" directory (for Windows) the plugins will be found directly.)


The SDRplay and DABsticks are supported directly, both in the Linux and the Windows version. Under Linux, there is also direct support for the Elad-s1. Furthermore, under Linux support for the Elektor card and the pmSDR can be compiled in, both devices need a cardreader for data input. Direct support under Windows for the Elektor card and for the pmSDR disappeared, since using the extIO-XXX dl for these devices is an excellent alternative.
One of the decoders is an experimental DRM decoder, a decoder for DRM transmissions (currently audio only). Its "version number" (0.15) shows that it is in an early stage of development. Unfortunately, there are not many DRM transmissions, however, the techniques used in digital radio are pretty interesting.

sw-example sw-example

From the picture it can be seen that a soundcard driven device as the pmSDR can be used. The second picture shows how I normally use the radio: a simple server running on the RPI2 at the antenna side, and receiving the (here downsampled) SDRplay samples through the home WiFi to my laptop in the "lazy chair".
The source tree of the sw-receiver contains sources for a (very simple) SDRplay mini-server for use with a "remote" handler in the sw-receiver. The mini server runs on any Linux system and send its decimated samplestream through a simple TCP server.
The set of precompiled Windows programs contains an executable for the sw-receiver programs, together with plugins for the devices mentioned and with plugins for the decoders. The set contains furthermore an executable for the "SDRplay mini-server".
While Windows users can use the DRM decoder directly, Linux users have to do some extra work in creating an adapted faad library to get the decoder running (but of course, the software can be installed without DRM decoder).


The spectrumviewer is unchanged, apart from adding support for devices for which an extioXXX.dll exist and compiling it against the latest versions of the libraries for the supported devices.

spectrum-example spectrum-example

The spectrum examples give the spectrum of a locally received DAB channel. The spectrum-width can be selected - depending on the selected device - within the small control window for the selected device. Automatic stepping through a user-defined range of frequencies, with a user-defined speed and stepsize is also possible.
The spectrum width for DABsticks is limited to 3 MHz, Airspy provides you with a range of rates, depending on whether the device is the "classic" airspy (with 2.5 or 10 Mhz wide spectra) or the Airspy mini, and the SDRplay provides a whole range of rates.

The Linux version can be configured to include or exclude any of the devices: DABstick, the SDRplay or the AIRspy. Again, including a device in the configuration (selectable in either the ".pro" file and/or the CMakeLists.txt file) requires having installed the appropriate libraries. The Windows version is cross-compiled with DABsticks, the SDRplay and the AIRspy in. It will load the required libraries only if the device is activated, so there is no need to have libraries for all devices installed. Furthermore, the Windows version supports an "extio" button, for selecting a device using the extioXXX.dll.

Manuals and documentation

The - unfortunately not up-to-date - manuals can be downloaded here, dab receiver (a manual dedicated to the DAB-RPI is still "under construction"), wfm software, and one for the sw-receiver (note that the manual still refers to the previous version, where the controlbox for the selected device is on the GUI, and where there is no mention of the DRM decoder).

An informal description of the synchronization in the DRM decoder is given in this description, the document continues to be a draft, but contains quite some information on issues with decoding digital signals.

The Windows distribution

The executables for Windows are packed as always in a "zip" file. There are two files, one is a zipped folder for the DAB program, the WFM program and the spectrumviewer, together some dll's. The folder contains the executable for the FM software "old style" as well. The other one is for the sw-receiver together with the plugins for input and decoders.

The libraries for supporting the devices and the extio-XXX.dll's - if not included in the distribution - are to be found on the osmocom site, the SDRplay site resp. through the site.

Note that while the windows-bin-xxx folders are updated once every few (three, four, five) months, sometimes newer versions of some of the executables may be found on the github site (see below)

The Ada Language

As a programming exercise, basically to renew my knowledge of the Ada language, a simplified version of DAB-RPI was rewritten in the Ada Language. For construction of the GUI the gtkAda extension was used. Supported devices are the SDRplay, the AIRspy and the DABsticks. A build file is in the source tree. By default the device for which support is selected is the SDRplay, selecting one of the others requires editing a few, marked, lines in the file "gui/". The Ada version is - obviously - under (continous) development, but it runs pretty well on my laptop. Since gtkAda was not on the RPI I could not try it there.


The sources

Sources for all programs are maintained at github, that site will usually also contain the most recent releases, sometimes including executables for Windows. The Windows executables are all generated using the MINGW64 toolchain, running on Fedora and the executables can be regenerated using the appropriate settings in the configuration files for qmake and - for the sdr-j-dab and the DAB-RPI programs - using cmake.
Sources can be downloaded using
git clone
where XXX is any of
To make life easy, an image of a Debian Jessie distro with both the DAB-RPI and WFM-RPI software installed, is available on request. Note, however, that this image will only run on an RPI 2, not on an RPI 3.


The software is being developed as a hobby project and is available under a GPL. It is - obviously - nice if this software is useful, but as the license states:
SDR-J is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

I am grateful to SDRplay ltd for providing me the possibility to use the SDRplay and to Benjamin Vernoux for providing me the possibility to use the AIRSPY, both wonderful devices.
Suggestions and contributions (material and immaterial) are welcome.
Have Fun!!!

Pijnacker, August 2016
Jan van Katwijk
Lazy Chair Computing