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,
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.
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
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.
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.
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.
The first picture shows the DAB software, running on the PC with the AIRspy
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.
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.
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 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.
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.
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 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.
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.
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 airspy.com 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/gui.ads".
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.
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 https://github.com/JvanKatwijk/XXX
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.
Pijnacker, August 2016
Jan van Katwijk
Lazy Chair Computing