DAB, Digital Audio Broadcasting, is the system of choice for digital radio in Europe and Australia. Transmissions take place in the old Band III, i.e. in the range from 175 .. 230 MHz. In this band, there is room for 39 channels, each with a width of 1.5 MHz.
The bandwidth per channel allows transmission of a whole lot of services simultaneously, services are either data or audio services. Since we are talking about digital radio, each service may contain audio, pictures and other files.DAB software was developed - as hobby project and "learning experience" - the main components being:
Qt-DAB as the most extensive with controls and settings for everything for DAB decoding. The repository, containing sources and executables for both Qt-DAB and dabMini is here .
dabMini as the simple dab decoder for just selecting a service, built from the same set of sources as Qt-DAB;
terminal-DAB functional more or less equivalent to dabMini, however, not using complex GUI packages, but using the curses library on a command window. The repository, with sources, is here .
dab-cmdline as a library providing the functionality for decoding DAB accompanied with a number of example programs showing how to use it to create a command line based program as DAB decoder. The repository, containing the sources and a description how to use is here .
eti-stuff as a simple program to generate ETI output from a received DAB transmission. The sources can be found here .
channel-scanner as a simple command line driven program to (continuously) scan over specified channels, report on the contents of these channels and - if as option selected - record a number of seconds of the incoming data into a file. The sources can be found here .
Of course these programs take their input from any of a selection of SDR devices, depending on the configuration. The devices that can be included in the configuration are the devices I have (access to). To maKe life easy, for Qt-DAB and dabMini an appImage is available for running under x86_64 Linux and and installer is available for installing and running under Windows. For the others, one has to create an executable.
Sources are - obviously - also available, see the repositories on github ("https://github.com/JvanKatwijk/").
Qt-DAB, dabMini and dab-cmdline will be described briefly.
The picture shows the main widget of the Qt-DAB program. The program was built with the idea of being in control, i.e. the ability to see elements of the signal, and the ability to select parameters was the basis of the design. Therefore, this main widget contains buttons to show - or hide - other widgets. The program will record which widgets are visible and on starting the program a next time show these widgets as well.
This second picture shows - apart from the station label - all additional widgets, the (in)visibility of which can be set indivuidually vy a button on the main widget.
the spectrum of the signal (blue background). The widget shows next to the spectrum the constellation diagram of the decoded signals and some quality parameters;
the result of the correlation to identify the first sample for a DAB frame, the peaks showing that we receive data from 3 different transmitters (light red background), the peak on sample 504 is the peak of the signal being processed;
the spectrum of the null periods in the data, where the TII data is encodeds (red background);
the development of the SNR (green background);
the technical data widget, shown on the left side of the picture, giving technical information on the selected service, such as the address, the size and the way it was encoded;
the so-called skiplist, next to the technical data widget, a list showing the specification of which channels to visit and which channels to ignore when scanning the band;
the device control widget, at the right side of the picture, here with the SDRplay is the selected device;
the configuration widget, above the spectrum widget, with modifiable settings, such as length of a muting period when muting is selected, selecting a skiplist etc etc.
Of course colors of the different displaying widgets can be adapted to one's own taste. For Qt-DAB an extended user's guide is available here. The guide contains a detailed explanation of the GUI elements, a description of the device widgets for devices that can be configured, an extensive description of what to configure for a build, a description of how to build an executable, and even a desxcription of how to interface another device.
Just to get acquainted with the transmitting capabilities of the Adalm Pluto, a configuration option exists (Linux only) for using an adapted version of the Pluto driver software. With this version - and on selecting the Pluto device as SDR device - the audio of the selected service is transmitted in stereo FM, augmented with the text of the dynamic label if the service as RDS text.
dabMini, built from the same set of sources as Qt-DAB is the other version of the DAB decoder with a Qt driven GUI.
Different from Qt-DAB, where a user selects the device and - during running the program may select a different one - dabMini - on start up - polls a list of configured devices and uses the first one encountered. Device specific information, usually the lna state, the gain and whether or not the agc is on or off can be found on the main widget.
Further selectors are limited to selecting a channel, a service in the currently received transmission or selecting a preset service, similar as in Qt-DAB.
Just as a gadget, dabMini has as option that, while the audio of a selected service is being decoded, the AAC data of a second service can be stored in a file.
The programs above both are controlled thrrough a GUI. An alternative solution is to have a command line driven DAB decoder. Of course, having just a command line implies specifying everything, including the channel and the service name in the command line.
To provide some flexibility, the functionality for DAB decoding, was implemented in a separate library. The library in binary form could be called, or the sources of the library could be included in a program.
6 example programs were added, just to show how to use the library, the programs all share the same structure.
dab-sdrplay-x -M 1 -B "BAND III" -C 12C -P "Radio 4" -G 80 -A default
The programs differ in details, so the most common one is example 2, example 3 has its audio output sent to stdout, example 4 has the AAC frames sent to stdout etc etc.
Based on user requests, an additional example was created that binds a main program written in Python to a (special, binary version of the) library.
The example program 2 supports SDRplay devices (in the configuration one may choose between support using the 2.13 library or the 3.0X library), the AIRspy, the RT2832 based DABsticks, the hackrf, the limeSDR, the Adalm Pluto, and input from files. The sources can be found here .