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.
welle.io is a fork from dab-rpi and sdr-j-dab which is now qt-dab https://github.com/JvanKatwijk/qt-dab.
apt install welle.io
, see the /usr/share/doc/welle.io/README.Debian for maintainer noteswelle-io
package:
sudo dnf install -y https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
sudo dnf install --refresh welle-io
sudo port install welle.io
sudo port install welle.io +cli
(if you wish to install also welle-cli)/usr/ports/
)
cd /usr/ports/audio/welle.io/
make install clean
pkg install welle.io`
If you discovered an issue please open a new issue.
welle.io is under development. You can also try the latest developer builds. But PLEASE BE WARNED the builds are automatically created and untested.
welle.io nightly builds (Windows, Linux, macOS, Android)
macOS: welle.io devel builds on macOS MacPorts are updated periodically manually and can be installed through port welle.io-devel. The port has no maintainer so please feel free to update it yourself in case you need to use a more recent devel version
sudo port install welle.io-devel
The command-line parameters are:
Parameter | Description |
---|---|
-h, --help | Show help |
-v, --version | Show version |
--dump-file | 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 | Start playback/Stop |
N, Media next | play next station in list |
P, Media Previous | play previous station |
M, Volume Mute | mute/unmute |
Ctrl+Up, Volume Up | Volume Up |
Ctrl+Down, Volume Down | Volume Down |
The following SDR devices are supported
Connect the antenna to the RX1_W port and configured SoapySDR antenna option to LNAW
. SoapySDRUtil --probe=driver=lime
may show other possible options.
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
.
The following libraries and their development files are needed:
This section shows how to compile welle.io on Debian or Ubuntu (tested with Ubuntu 22.04).
sudo apt install git build-essential
sudo apt install libfaad-dev libmpg123-dev libfftw3-dev librtlsdr-dev libusb-1.0-0-dev mesa-common-dev libglu1-mesa-dev libpulse-dev libsoapysdr-dev libairspy-dev libmp3lame-dev libflac++-dev
sudo apt install libqt6charts6-dev qt6-base-dev qt6-tools-dev-tools qt6-multimedia-dev qt6-wayland-dev libqt6core5compat6-dev libqt63dquick6 libqt6qml6 qt6-declarative-dev qml6-module-qtquick-controls qml6-module-qtquick qml6-module-qt5compat-graphicaleffects qml6-module-qtcharts qml6-module-qtmultimedia qml6-module-qtquick-window qml6-module-qtquick-layouts qml6-module-qtqml-workerscript qml6-module-qtwayland-compositor qml6-module-qtquick-templates qtcreator
git clone https://github.com/AlbrechtL/welle.io.git
welle.io.pro
inside the folder "welle.io".A compiled version can be found at the release page
This sections shows how to compile welle.io on Windows 10. Windows 7 should also be possible but is not tested.
welle.io.pro
inside the folder "welle.io".WARNING: Not tested with Qt 6.2!
To build for macOS, you have have several options: Either you install everything incl. dependencies manually (not covered here and not recommended) or use Homebrew or MacPorts.
Assuming that you have Homebrew installed, execute the following steps:
brew tap AlbrechtL/welle_io https://github.com/AlbrechtL/welle.io
brew install AlbrechtL/welle_io/welle.io
You can either use the welle.io port available in macports, or compile with QT Creator.
This is the easiest way and will manage the dependencies for you. Variants enabled by default are : "airspy" "rtlsdr" "soapysdr". Each enables compilation with that specific input device library.
sudo port install welle.io
Additional variants are : "cli" (to install also welle-cli) "profiling" & "kiss_fft".
With MacPorts, welle.io is installed as a bundle app in /Applications/MacPorts
.
You can also use welle.io-devel port if you prefer:
sudo port install welle.io-devel
You need to install the dependencies with MacPorts first, assuming you have MacPorts installed:
sudo port install fftw-3-single faad2 rtl-sdr libusb mpg123 lame
git clone https://github.com/AlbrechtL/welle.io.git
WARNING: Not tested with Qt 6.2!
This section describes how to build welle.io from sources on FreeBSD 12.2 and 13.0.
pkg install alsa-lib faad lame mpg123 pkgconf cmake qt5-charts \
qt5-core qt5-declarative qt5-gui qt5-multimedia qt5-network \
qt5-quickcontrols2 qt5-widgets qt5-buildtools qt5-qmake \
rtl-sdr fftw3-float fftw3
For SoapySDR support, you will also need soapysdr
. For AirSpy support, you will need airspy
.
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.
mkdir build
cd build
-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
.
make
make install
WARNING: Not tested with Qt 6.2!
A compiled version of welle.io (APK file) can be found at at the Google Play store or at the release page.
welle.io uses the "RTL2832U driver" from Martin Marinov, to be found at the Google play store or at F-droid. Also see (sources or APK file). Please note that a recent version of this driver is needed (v3.06 or above), otherwise welle.io will not find your stick.
This sections shows how to compile welle.io for Android.
git clone https://github.com/AlbrechtL/welle.io.git
welle.io.pro
inside the folder "welle.io".If you compile welle-io with cmake
you will also get an executable called welle-cli which stands for welle-io command line interface.
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.
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.
-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.
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 autodetected) and pass the hostname or IP address and port of the rtl_tcp server to it:
welle-cli -C 10B -p GRRIF -F rtl_tcp,192.168.12.34:1234
welle-cli -C 10B -P GRRIF -F rtl_tcp,my.rtl-tcp.local:9876
Right now, rtl_tcp
is the only driver that accepts options from the command line.
welle-cli -c 10B -p GRRIF
welle-cli -f ./ofdm.iq -p GRRIF
welle-cli -f ./ofdm.iq -t 1
You can join the welle.io development. Please visit the wiki to find more information.
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.