项目作者: JvanKatwijk

项目描述 :
sdr-j fm software
高级语言: C++
项目地址: git://github.com/JvanKatwijk/sdr-j-fm.git
创建时间: 2015-11-07T08:42:31Z
项目社区:https://github.com/JvanKatwijk/sdr-j-fm

开源协议:GNU General Public License v2.0

下载


  1. 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.

fm receiver

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)

fm receiver

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.

fm receiver

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.


Supported devices

Devices that are supported are

  • SDRplay devices. Note that on Windows, whenever you have installed a library 3.10 or up, the 2.13 library is not accessible. On Linux there is the
    cjoice between using the 2.13 library and 3.14 (or up) library. Note that
    wwhile the 2.13 library supports the original SDRplay RSP I, the 2.13
    library does noot provide support for the RSPdx, the 3.0X library
    does not provide support for the RSP I when running on Windows.
    Note that the SDRplay driver for 3.XX now supports a selector for the tuner in case an SDRplay RSPDuo is used.
  • Airspy devices;
  • Lime devices;
  • Hackrf devices;
  • Adalm Pluto devices;
  • Dabsticks, i.e. rtlsdr devices.

There is also support for file input, however, right now only for
“wav” files with a samplerate of 2304000.


Buiding an executable

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.

  • sudo apt-get update
  • sudo apt-get install git
  • sudo apt-get install qt5-qmake build-essential g++
  • sudo apt-get install pkg-config
  • sudo apt-get install libsndfile1-dev qt5-default
  • sudo apt-get install libfftw3-dev portaudio19-dev
  • sudo apt-get install zlib1g-dev
  • sudo apt-get install libusb-1.0-0-dev mesa-common-dev
  • sudo apt-get install libgl1-mesa-dev libqt5opengl5-dev
  • sudo apt-get install libsamplerate0-dev libqwt-qt5-dev
  • sudo apt-get install qtbase5-dev

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”,


Building an appImage

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