sdr-j fm software
FM receiver V3.20
In version 3.20, the software was made ready for compilation using either Qt5 or Qt6, while furthermore the SDRplay driver was adapted to handle tuner switches with the SDRplay RSPDuo, and the software for saving and restoring the stationlist was rewritten, now the stationlist is maintained as a regular xml file.
New is a so-called PSS (perfect stereo separation) control on the main widget,
contributed by TomNeda, who made quite a number of contributions to the
code.
In computing the 38 Khz signal to decode the L-R signal, from the 19
KHz pilot signal, an error may occur, an offset of a few Hz.
The PSS algorithm applies some techniques to figure out what
correction on the recomputed
38 KHz carrier that has to be applied for a perfect match.
While in previous versions the list of configure devices was
checked on program start up, to find an attacted device, the
current version is slightly different.
On program start up, the software will try to start the device
(if any) that was used on the last occasion, if no such device
can be found, a small devide selection widget will show.
(Note that different from e.g. Qt-DAB, once a device is selected
and opened, no selection for another device is possible
during this program invocation)
Since the number of controls in the main widget was growing,
some controls were transferred to a separate “control” widget.
The main widget has a button, labeled Config with which one can select
and deselect this control widget.
Buttons on the control widget are typically those that are not
often touched when just listening to the radio.
Buttons for setting the deemphasis and the pty labels are therefore now
on the configuration widget, since their setting depends on the country
you are in.
Furthermore, the control widget contains a widget, globstyle on the
picture, that can be used to dynamically set another “skin”
The inputfiltering, i.e. separation between transmissions close to each other
in frequency, or even with (slightly) overlapping frequencies,
is improved.
The filter is pretty strong, but that also means that the filter requires
some serious cpu use.
If the filter is switched “Off”, it is excluded from the processing chain.
As usual, next to the sources, an AppImage (for Linux x64) and a Windows
installer are available in the releases section.
Devices that are supported are
There is also support for file input, however, right now only for
“wav” files with a samplerate of 2304000.
While there is an installer for Windows, and an appImage for Linux64,
it is of course possible to generate an executable.
For compiling and linking lots of libraries and utilities
have to be installed
On Ubuntu, in any case, the (older) 20 version that I use to
create appImages. I use qmake for generating a Makefile,
if you have cmake installed, it is possible to use that instead,
here it is assumed that qmake is used
In Ubuntu 20, where I create AppImages, an executable is generated using Qt5.
Summarizing:
Obviously, we need a C++ compiler and associated libraries
The GUI is developed using the Qt5 framework, for qt5 one needs
to install the qt5-qmake utility (which may have a lightly different
name on other distributions), the qt5 environment and dependent
libraries (here qt5-default, mesa-common-dev libgl1-mesa-dev,
libqt5opengh5-dev, qtbase5-dev)
Furthermore, we need qwt, which is built on Qt5, but a separate library
(here libqwt-qt5-dev)
Note that on different systems, the qwt library and coreresponding include
files may reside on different locations.
Fast fourier transforms, both for generating spectra and for some
advanced filtering, is using the fftw3 subsystem. Note that the
implementation uses the fftw3f (i.e. “float”) version, not the “double”.
For handling the audio output, the portaudio library is used. Note that
the Version 19 library is used, not the older version 18.
For handling file I/O the library libsndfile is used, and for
(some) rate conversions the library libsamplerate.
To allow distributions to run on systems were not all device
libraries are installed, the approach taken is than when selecting
a device, the required functions needed by the interface software
are dynamically loaded. Since all devices use some form
of I/O over USB, the libusb library is also needed.
Once the libraries are loaded, one should look at the “fmreceiver.pro”
file, which is basically a configuration file. The qmake (whatever
version) is able to generate a real Makefile from it.
Of course, the “fmreceiver.pro” file might have to be adapted.
It contains a section for “unix” and one for “win” (i.e. windows.
The system dependencies are two parts:
the compiler flags, set by default on maximum optimization (after
all the program is a serious user of resources). In some cases the
“-flto” flag is known not to be available
the devices.
On selecting a device, the program dynamically loads the functions
from the device library. The advantage is that devices for which
no device library is installed can be part of the configuration.
Of course, for a device you want to use, the device library should
be installed.
The program supports sdrplay RSP devices
(both using the “old” 2.13 library (which does not support the RSPdx)
and the 3.XX (XX = 11 on Windows), When using the 3.10 library or
higher on Windows, the 2.13 library cannot be reached, and the 3.10
library does not support the very first RSP, the RSP 1.
The program support the airspy devices, The program supports “dabsticks”,
The program supports lime devices, program supports hackrf devices and
the program supports the Adalm pluto.
Note that this version does NOT support devices using a soundcard
for data input.
Adapt the configuration (the “CONFIG += XXX” elements in the
“.pro” file, most likely comment out devices that you do not want
to include
run ‘qmake’ (variants of the name are qt5-qmake and qmake-qt5)
which generates a Makefile
if all libraries are installed run “Make”,
The AppImage, part of the distribution on the releases section, is
created on an Ubuntu 16 VM. If you want to experiment, the file
fm-build-script is there that - as the name suggests - is the script
being used to create such an AppImage
Copyright of the fm software is by J Van Katwijk, but parts of the mods
to older versions are done by Thomas Neder, obviously for the
parts he contributed, he the copyrights are his.
-
Good luck