SDR-J DAB-0.99X, WFM-RPI and SDR-J SW 7.2 (update 24-03-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.
The programs provide direct support for DABsticks and the SDRplay as input device, the DAB, WFM and spectrumviewer programs also provide direct support for the AIRspy. The Windows versions of all programs now provide support for common extio-XXX dll's. The "classic" radio provides direct support for the SDRplay, DABsticks, the PMSDR and the elektor card under Linux and, under Windows next to SDRplay and DABsticks, devices for which an extioXXX.dll exist.

DAB on the PC and the Raspberry PI 2

There are two versions of the DAB software, 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 processor is sufficiently powerful to run the DAB-RPI software, a version optimized for the 4 cores of the chip was developed. Current version for the sdr-j-dab is 0.994, while for dab-rpi it is 0.996, both programs slowly moving towards a version 1.0. The algorithms applied in these two programs are the same, there are implementation differences. While - in both programs - the audio seems to be OK, data handling is still in its infancy. However, 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 library version 1.7 is required. 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).

sdrplay direct sdrplay through extio


The Airspy is supported both under Windows and Linux. The "built-in" support software will work with library version 1.07 and 1.06. Under Windows one might also use the appropriate extioXXX.dll.
Note that in all cases resampling from 2500000 to 2048000 samples/second is done in software.

supported airspy supported airspy


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


In my home situation the - headless - Raspberry PI 2 is located on a different floor than where I normally reside and is controlled through an SSH connection using the home WiFi. To accomodate listening remotely - sitting in the "lazy chair" - the DAB-RPI software sends - if so configured - 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.
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. 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

WFM-RPI WFM-RPI-AIRSPY

The software for (W)FM was modified and is continued as a set of "small" fm programs, one for each kind of input device. 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 and 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.

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 program has to "know" where to find the plugins for the input handling and for the decoders and looks into an ".ini" file for that purpose, a small configuration utility is included. This utility 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.)

configurator


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. Under Linux there is direct support for the Elektor card and the pmSDR that use 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 both a soundcard driven device as the pmSDR and a usb-oriented device as the SDRplay are handled properly by the extio-XXX handler. Note that the 2000000 samplerate with which the SDRplay collects its data is decimated to 96000
The source tree of the sw-receiver contains components to setup 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. I have it running on the Raspberry PI 2 near the antenna I use. It allows me to listen to SW and experiment with decoders while sitting in the "lazy chair".
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).

Spectrumviewer

The spectrumviewer is unchanged, apart from adding support for devices for which an extioXXX.dll exist.
With the Mirics SDRplay a spectrum of nearly 8Mhz can be shown, e.g. nearly half of the FM broadcast band.

spectrum-example spectrum-example

The spectrum example with the AIRspy gives 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 either 2.5 or 10 Mhz wide spectra, and - as stated above - the SDRplay gives you spectra of up to 8 Mhz.

The Linux version can be configured to include or exclude any of the devices DABsticks, 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. Furthermore, the Windows version supports an "extio" button, for selecting a device using the extioXXX.dll.

Manuals and documentation

The 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).

An informal description of the synchronization in the DRM decoder is given in this description, the document is still a draft. Furthermore, an informal tour through the sources of the DAB-RPI software is given in this description, the document is still preliminary.

The Windows executables

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 are to be found on the osmocom site, the SDRplay site resp. through the airspy.com site. Note that we are not able to handle the 1.06 version of the extio-XXX.dll for the Airspy, the 1.07 (preliminary) version runs well though.

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

The sources

Sources for the programs are maintained at github, that site will 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 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
sdr-j-dab
dab-rpi
sdr-j-fm
wfm-rpi
sdr-j-spectrumviewer
sdr-j-sw
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.

Finally...

The software is developed as 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, March 2016
Jan van Katwijk
Lazy Chair Computing
J.vanKatwijk-at-gmail-dot-com