welle.io is a DAB/DAB+ Software Defined Radio (SDR) tool designed to enable users to receive and analyze digital radio broadcasts using various SDR devices. It offers flexibility in hardware choice, allowing users to connect with supported devices like RTL2832U, Airspy, and SoapySDR for versatile broadcasting solutions.
Key Features:
Supported Hardware: Compatible with a range of SDR devices including RTL2832U, Airspy, and SoapySDR, providing options for diverse broadcasting needs.
User Interface: Features both a graphical user interface (GUI) and a command-line interface (welle-cli), catering to different user preferences and technical skill levels.
Logging Capabilities: Enables detailed logging of broadcast data, facilitating in-depth analysis and troubleshooting.
Keyboard Shortcuts: Enhances usability with shortcuts for station navigation, playback control, and volume adjustments.
Audience & Benefits:
Ideal for radio enthusiasts seeking new content, audio engineers requiring detailed broadcasting analysis, and developers integrating SDR technology into projects. welle.io provides the flexibility to access DAB/DAB+ broadcasts using preferred hardware, offering a comprehensive solution for exploring digital radio content.
This repository contains the implementation of an SDR DAB/DAB+ receiver.
Please see the project website https://www.welle.io for a user oriented documentation.
Records DAB frames (.mp2) or DAB+ superframes with RS coding (.dab). This file can be used to analyse X-PAD data with XPADxpert (https://www.basicmaster.de/xpadxpert).
--log-file
Log file name. Redirects all log output texts to a file.
Keyboard shortcuts & hotkeys
Keystroke
Action
F1-F12, 1-9, 0, Ctrl+1-9, Ctrl+0
Play the station no. 'x' in the stations list: 1 for station no. 1, 0 for station no. 10, Ctrl+1 for station no. 11...
S, Media Play, Media Stop, Media Pause, Media Play/Pause
SoapySDR: All SDR-devices that are supported by SoapySDR, gr-osmosdr and uhd. These are too many devices to list them all. To see if your SDR is supported, have a look at the lists at SoapySDR and SoapyOsmo.
Devices supported by gr-osmosdr are supported via SoapyOsmo
Devices supported by uhd are supported via SoapyUHD
Notes
LimeSDR: Connect the antenna to the RX1_W port and configured SoapySDR antenna option to LNAW. SoapySDRUtil --probe=driver=lime may show other possible options.
USRP: Configured SoapySDR driver arguments option to driver=uhd. Configure also antenna and clock source option. To list possible values for antenna and clock source use the command SoapySDRUtil --probe=driver=uhd.
One limitation is of course that the SDR devices must be tunable to the DAB+ frequencies.
Building
General Information
The following libraries and their development files are needed.
Qt 6.8 or above
libfftw3
libfaad
librtlsdr
libusb
libmpg123
libairspy
libmp3lame
libsoapysdr
Debian / Ubuntu Linux
This section shows how to compile welle.io on Debian or Ubuntu (tested with Ubuntu 24.04).
Start Qt Creator and open the project file welle.io.pro inside the folder "welle.io".
Build welle.io
Run welle.io and enjoy it
macOS, Android and FreeBSD
These operating systems are not maintain, currently. You can find the original compiling insturections in the old README.md.
CMake
As an alternative to Qt Creator, CMake can be used for building welle.io after installing dependencies and cloning the repository. On Linux, you can also use CMake to build welle-cli, the command-line backend testing tool that does not require Qt.
Create a build directory inside the repository and change into it
mkdir build
cd build
Run CMake. To enable support for RTL-SDR add the flag -DRTLSDR=1 (requires librtlsdr) and for SoapySDR add -DSOAPYSDR=1 (requires SoapySDR compiled with support for each desired hardware, e.g. UHD for Ettus USRP, LimeSDR, Airspy or HackRF). By default, CMake will build both welle-io and welle-cli. Use -DBUILD_WELLE_IO=OFF or -DBUILD_WELLE_CLI=OFF to compile only the one you need.
cmake ..
or to enable support for both RTL-SDR and Soapy-SDR:
cmake .. -DRTLSDR=1 -DSOAPYSDR=1
If you wish to use KISS FFT instead of FFTW (e.g. to compare performance), use -DKISS_FFT=ON.
Run make (or use the created project file depending on the selected generator)
make
Install it (as super-user)
make install
Run welle.io and enjoy it
welle-cli
If you compile welle-io with cmake you will also get an executable called welle-cli which stands for welle-io command line interface.
Usage of welle-cli
Receive using RTLSDR, and play with ALSA:
`welle-cli -c channel -p programme`
Read an IQ file and play with ALSA: (IQ file format is u8, unless the file ends with FORMAT.iq)
`welle-cli -f file -p programme`
Use -D to dump FIC and all programmes to files:
`welle-cli -c channel -D`
Use -w to enable webserver, decode a programme on demand:
`welle-cli -c channel -w port`
Use -Dw to enable webserver, decode all programmes:
`welle-cli -c channel -Dw port`
Use -C 1 -w to enable webserver, decode programmes one by one in a carousel.
Use -C N -w to enable webserver, decode programmes N by N in a carousel.
This is useful if your machine cannot decode all programmes simultaneously, but you still want to get an overview of the ensemble.
By default, welle-cli will switch every 10 seconds.
With the -P option, welle-cli will switch once DLS and a slide were decoded, staying at most for 80 seconds on a given programme.
welle-cli -c channel -C 1 -w port
welle-cli -c channel -PC 1 -w port
Example: welle-cli -c 12A -C 1 -w 7979 enables the webserver on channel 12A, please then go to http://localhost:7979/ where you can observe all necessary details for every service ID in the ensemble, see the slideshows, stream the audio (by clicking on the Play-Button), check spectrum, constellation, TII information and CIR peak diagramme.
Streaming output options
By default, welle-cli will output in mp3 if in webserver mode.
With the -O option, you can choose between mp3 and flac (lossless) if FLAC support is enabled at build time.
Backend options
-u disable coarse corrector, for receivers who have a low frequency offset.
Use -t [test_number] to run a test. To understand what the tests do, please see source code.
Driver options
By default, welle-cli tries all enabled drivers in turn and uses the first device it can successfully open.
Use -F [driver][,driver_args] to select a specific driver and optionally pass arguments to the driver.
This allows to select the rtl_tcp driver (which is not auto-detected) and pass the hostname or IP address and port of the rtl_tcp server to it:
Windows 10 and older are not officially supported.
Development
You can join the welle.io development. Please visit the wiki to find more information.
Profiling
If you build with cmake and add -DPROFILING=ON, welle-io will generate a few .csv files and a graphviz .dot file that can be used
to analyse and understand which parts of the backend use CPU resources. Use dot -Tpdf profiling.dot > profiling.pdf to generate a graph
visualisation. Search source code for the PROFILE() macro to see where the profiling marks are placed.
Acknowledgement
I would like to thanks to following open source projects. Without these great works this program would not be possible