QIRX Version 1.0.8 (DAB-Only) Interim Release, October 2018

This is an interim release, offering optimizations in the continuously necessary frequency corrections of all I/Q-Data. They contribute considerably to the PC-load produced by the software.

  • Standard code optimization

    Technically, the frequency correction consists in a multiplication of two complex numbers, usually requiring four floating point multiplications (remember, for every sample). As pointed out on this website, three multiplications can do the job as well. This has long been used in qirx.

    What has been done here, was nothing spectacular, just reducing the critical code to the absolutely necessary steps. In the tests this resulted - astonishingly - in some improvement of the performance.

  • Parallel Threads

    Usually the samples arrive in chunks of about 2.500 I/Q-Data (2048 + 504 = one DAB symbol). Thus it was expected that the mentioned multiplications of such a block could be accelerated by splitting it up into several parts and process these parts in parallel, each part in a separate thread, to be dispatched by the OS on a separate processor kernel.

    Unexpectedly, the result has been disappointing. No speed gain was observed, on the contrary. The main reason might be that the improvement achieved by the parallelization is cancelled by the multithreading signalling overhead. Of course, the threads had been prepared in advance.
    However, these experiments will be continued with larger memory blocks.

    The critical time to observe is the "Average Symbol Time" on the QIRX GUI. When this time exceeds 1.25ms, no stable synchronization can be maintained, because the software cannot keep pace with the arriving samples.

  • Configuration

    For the described changes, a new xml item has been introduced in qirx.config, called
    <Algorithm moveFrequencyParallel="no" /> .
    This is the default. To activate the described parallel threads, replace the "no" by a "yes" .

RSP2_tcp Version 0.9.3, October 2018

RSP2_tcp is a simple I/Q data server (currently one connection only) based on the sdrplay RSP2 hardware, being compatible to rtl_tcp. RSP2_tcp is an independent console application, written in C++ and running on Windows and Linux. It is delivering 16-bit or 8-bit data behaving like rtl_tcp, thus usable also by other applications. It works with the sdrplay API version of 2.13.

  • RSP2 Only

    In its current version, the RSP2 hardware only is supported. This might change in a future version.

  • 16-Bit or 8-Bit I/Q Data

    RSP2_tcp delivers its I/Q data either as 16-bit values as received from the sdrplay driver dll, or as 8-bit integers. In 16-bit mode, every four bytes form an I/Q sample, in 8-bit mode every two bytes. The mode is selectable by the commandline parameter -W (e.g. -W 1 means 8-bit).

  • Fixed Sampling Rate - Bandwidth Combinations

    The following sampling rate - bandwidth combinations are possible (ksps - kHz)

    • 512 - 300
    • 1024 - 600
    • 2048 - 1536
    • 4096 - 5000 (Nyquist violation)
    • 8192 - 8000

  • Antenna Selector

    Antenna A or B are selectable by the commandline parameter -T (e.g. -T 1 means Antenna A).

  • Compatibility

    In addition to QIRX, the following two popular applications have been tested with RSP2_tcp in its 8-bit mode and a sampling rate of 2048ksps:

    • Andi's Player, a widely used very nice DAB application.
    • SDR# in its TCP/IP mode. The RSP2 is indicated as RTL-SDR (unavoidable).

  • Command line parameters

    They overlap with the ones of rtl_tcp, thus allowing RSP2_tcp to be used in almost the same way as rtl_tcp.

  • Known Issues

    After disconnect, the program sometimes hangs. It is suspected that the "uninitialize" API call does not return. The reason is unknown.

    This might be a serious issue in an unattended operation where continuous operation is required across many connect-disconnect cycles. In its use with QIRX it is of minor importance because QIRX can be configured with "Autostart", each time killing and re-starting the selected I/Q data server.

  • Acknowledgements

    Great thanks to the guys of sdrplay, generously providing the hardware for the development and tests.

SetupRemoteStub, October 2018

The StubForRemoteStart is a listener on a remote machine (w/r to QIRX) waiting for a command from QIRX to start or stop the I/Q Data Server process on that remote machine. It has been a part of QIRX from the beginning, but was rather tedious to use.

The provided installer (Doubleclick on "SetupRemoteStub.msi") copies the "StubForRemoteStart" together with the I/Q data servers rtl_tcp and RSP2_tcp into the selected directory and copies a starter icon on the desktop. Its listening port can be selected as a command line parameter. When connected, it starts or stops the requested I/Q Data Server according to the accompanied command line parameters.

In QIRX, this port must have been entered into the configuration. All this is relevant only in case of the I/Q Data Server is to be run on a remote machine, and the "Autostart" or "Autostop" feature has been selected. In a local configuration, the data server process is started from QIRX directly.

QIRX Versions 1.0.7 (DAB-Only) and 0.9.7, October 2018

Starting with this version, QIRX may also be driven by RSP2_tcp, an I/Q data server based on the sdrplay RSP2 hardware and being compatible to rtl_tcp. Both products are selectable in the Configuration dialog.

  • Automatic Recognition of the Receiver Hardware

    In contrast to the remark made for the June 2018 version, rtl_tcp transmits a tuner identification immediately after connect. This feature is now used in QIRX. Thus, the tuner selection in the configuration has been deprecated. The feature is implemented in a similar way in the newly introduced RSP2_tcp I/Q data server.

  • SNR Calculation for DAB

    The previously used method of the SNR calculation was based on the relation of the spectrum magnitude relation within the region of active DAB carriers to the one in the region without active DAB carriers. This gave rather inaccurate or even completely wrong results, particularly with marginal signals.

    QIRX now uses an entirely different method by measuring the scattering of the constellation bits around their expected value. This allows for the calculation of a SNR purely based on the quality of the received DAB complex signal, different SNRs being comparable to each other also in the most adverse receiving conditions.

  • Configuration

    The configuration dialog has been revised. The following additional selections are possible in the GUI:

    • Selection of the IQ-Data Server product (currently rtl_tcp and RSP2_tcp)
    • Selection of the IQ-Data Server's device index. This is useful only in case more than one device is connected. Thanks to Austria MV from the radioforum for this suggestion.
    • Selection of the Remote I/Q Data Server Starter, called "StubForRemoteStart". In a local configuration this entry has no effect, even in case the StubForRemoteStart is running.
    • Validation of the entries.
    • Hints and explanations in tooltips and on clicking "Ok".

  • TII Logging

    The TII logging now works also in the situation where only "File Mode" (in contrast to "TCP/IP Mode") has been selected. Thanks to andimik from the radioforum for mentioning this error.

  • Known Issues

    Rare crashes, presumably due to a race condition in cooperation with libfaad. Exact reason could not be found yet.

Version (DAB-Only) and 0.9.6, June 2018

This release fixes a bug in, in the TII Logger (no decimal separator).

Version (DAB-Only) and 0.9.6, June 2018

This release features a number of changes, mostly in the DAB-Only version.

  • Configuration of the Receiver Hardware (both versions)

    Three Tuner types (E4000, R820 and FC0013) are selectable, to enable the software to send the correct gain settings to the tcp server. Unfortunately, that type must be entered manually in the configuration dialog, as rtl_tcp does not allow readbacks. It is displayed on the GUI, however, and persisted in the config file.
    Another type called "OTHER" is selectable as well, sending the position of the "Gain" slider (here 0-100) to the tcp server. This is intended for experimenting with a newly developed simple sdrPlay tcp server, called RSP_tcp, being compatible to rtl_tcp. This server is still experimental. It enables QIRX to process 16-Bit data produced by a RSP2 device (12-Bit ADC) from sdrPlay in its "live" TCP/IP mode. The "File" mode has long been able to replay 16-Bit files.

  • DAB Mux Synchronization (both versions)

    Marginal signals, particularly those with strong neighbouring muxes, should now synchronize better.

  • DAB TII Logging

    The Transmitter Identification Signals (TII) can be logged into a text file, in a fixed time raster of one second.

  • Receiver Calibration

    The ppm calibration offset of the receiver can now be written with a mouseclick on the new menu item "Calibrate". Its working has been explained in the tutorial "Calibrate your rtl-sdr in 15 seconds".

  • DAB Scan

    All DAB frequencies can be scanned for decodable signals (Menu "Options, Scan"). The recognized set is persisted in the config file.

  • Antenna Tuning Aid for DAB

    A tone generator can be switched on, the tone pitch corresponding to the SNR. This can be used to find the best antenna position without having to watch the computer screen.

  • DAB Channel Impulse Response (CIR)

    The CIR of the four strongest peaks is displayed as lines, the length corresponding to the Guard Interval. A vertical bar indicates the start of the FFT Window, the position calculated such as to be located within the overlap of the detected Guard Intervals. It is also possible to move this position manually with the mouse. This feature is just a GUI representation of the (already present since some versions) inner working of finding a good FFT start position.

  • DAB Error Protection Level

    The error protection level is displayed. With readable, but not too strong signals, the effect of a better error protection can be quite remarkable.

  • DAB Audio UDP Port

    The port number, read from the config file, is now displayed as a tool tip when hovering over the "udp" icon.

  • AAC Decoder

    Until now, the Nero libfaad decoder could only be used in "Audio Specific Coding (ASC)" mode and not with "ADTS" headers, because only ASC decoding was able to cope with the DAB frame length of 960 bytes. ADTS mode worked only with 1024 byte frames. A very simple but effective extension was inserted in one of the libfaad files (decoder.c) allowing to use the ADTS mode equally well. QIRX now uses ADTS headers.

  • Known Issues

    Rare crashes, presumably due to a race condition in cooperation with libfaad. Exact reason could not be found yet.
    The reason for sometimes not properly terminating ("process hangs") could (hopefully) be determined. One nasty bug fixed.

  • Acknowledgements

    Thanks to the always helpful and supporting friends in the "mysnip" forum. Escpecially Andreas, Austria MV, cybertorte and (last but only alphabetically) figuren provided great support and help with their suggestions, feedback, raw data files and tests.

Versions March 2018

This release introduces some non-functional changes to make the software more maintainable, and a Linux variant of the "DAB-Only" version.

  • 64 Bit

    QIRX is now 64-Bit software, including all C/C++ parts . All .NET assemblies are compiled with the "AnyCPU" switch. This resolves an inconsistency of the previous versions, where the distributed rtl_tcp.exe has been 64-Bit software, and the C++ qirx-DLLs have been 32-Bit software.
    There are also drawbacks, due to incompatibilities of the Visual C++ and the Linux (gcc) compilers in their treatment of the "long" data type, with the consequence of sometimes hard to locate bugs in the P/Invoke interfaces between .NET and C++.

  • No Installers

    After some experiments it was decided to continue the deployment without installers (.msi). The main reason is that the directory usually used by the installer is write-protected, being unusable for the solution selected here. QIRX uses an instance-individual configuration file (called qirx.config) where configuration items are written to, allowing to run more than one instance (different directories) without mutual interference.

  • qirx_Common

    Both versions, V0.9.5 and V1.0.0.4 now share a common binary code base without source code duplication. The Visual Studio Solution residing in the "qirx_Common" directory contains all projects being identically used for the different versions. This common part contains about 80% of the code.
    In particular, the algorithmic DAB-part is now identical for the versions, ensuring identical DAB behaviour. The newly introduced Linux version is using the shared code base as well.

  • Linux Version

    The "DAB-Only" Version V1.0.0.4 has been ported to Linux (Debian 9 "Stretch") and is running under Mono. Main purpose was to check the compatibility for possible future applications.
    Unfortunately, there are severe restrictions under Mono, in particular in the GUI-related features. Please see the version description below, the installation instructions, and the short report "Porting QIRX to Linux/Mono"

  • Known Issues:

    "Carrier-Missing" detection in the TII spectrum still missing.
    Rare crashes, presumably due to a race condition in cooperation with libfaad. Exact reason could not be found yet.
    On termination, process hangs sometimes.

Version (DAB-Only) and 0.9.5, March 2018

Due to the above described common code base, most changes apply to both versions

  • Raw Files Replay: Round-Robin, i.e. replay continues until stopped by the user.
  • DAB Audio Output:

    Audio Muting per GUI.
    Audio Streaming per UDP Broadcast. This was introduced as a consequence of the difficulty to provide audio output under Linux/Mono. The stream can be fed into the VLC player, see Remark below.

  • V0.9.5

    Bugfix: Frequency jump when changing modulation.
    DAB-GUI: Checkbox if the window is treated as topmost or not.

  • Other:

    TCP/IP Server rtl_tcp start only after having selected TCP/IP menu.
    Separate configuration settings for autostart and autostop of the iq data server.

Version Linux, March 2018

The DAB-Only version has been ported to Linux Debian 9, 64 Bit, running under Mono, having been ported with Monodevelop Version 7.4, build 1035. Main goal was to find out the degree of compatibility achievable between Windows and Linux/Mono for the QIRX project.

  • Main features are identical to the Windows version.
    • DAB synchronization, ensemble and service detection and decoding.
    • MP2 and AAC audio decoding.
    • TII detection and decoding.
    • Pcm16 audio data streamed via UDP broadcast, port configurable in the config file (default is 8765).
    • Remark: Among other existing possibilities, the provided 16-Bit pcm stream can be played with the following command-line by the VLC player, identically under Linux and Windows (credit to GQRX).
      vlc --demux=rawaud --rawaud-channels=2 --rawaud-samplerate=48000 udp://@:8765
    • TCP/IP frontend, both synchronous and asynchronous receiving mode.
    • StubForRemoteStart as a server to start rtl_tcp, commanded from a remote machine.
  • Restrictions

    No spectra. The MS-Chart available in .Net Windows does not work in Mono. Although the namespaces are all available in Monodevelop, the functionality is not, important functions throw a NotImplementedException.

    No Linux audio. NAudio does not work under Linux, as is well-known.
    As a consequence, neither Linux built-in audio nor the Audio .wav recorder are available (but see Remark above).

Version, February 2018, "DAB-Only"

Another maintenance release of the "DAB-Only" branch of the QIRX software, with adjustable resource requirements, due to the possibility to GUI-control the display update rate.

  • General Performance and TII decoding:

    Performance: Display update rate GUI-adjustable from 100ms to 2sec and OFF. QIRX should now run also on lower-end PCs.
    TII decoding: Better recognition with low-strength signals (interface had to be changed). Also helps to reduce false-positives.
    TII Carrier strength now independent of the threshold always between 0 and 1.

  • GUI:

    RS ok% lamp: Value means percentage of audio superframes without Reed-Solomon corrected errors. Before it showed the CRC-error percentage.
    Some Cosmetics: Stereo indicator, icons for the File Replayer and Recorder.
    Window width now also persisted in the config file, not only the height.

  • Code:

    Audio decoding: libfaad2.dll is produced during the build, therefore msvcr120.dll (from VS2013 builds) no longer necessary. Helps to reduce "DLL-Hell".
    Code Maintenance: All compiler warnings removed.

  • Known Issues:

    "Carrier-Missing" detection in the TII spectrum still missing.
    Rare crashes, presumably due to a race condition in cooperation with libfaad. Exact reason could not be found yet.
    On termination, process hangs sometimes.

Version, January 2018, "DAB-Only"

This is a maintenance release of the "DAB-Only" branch of the QIRX software.

  • Changes:

    Some errors corrected.
    Network performance improved (hopefully).
    Configuration file qirx.config is no longer distributed. It is dynamically created when not present.
    Editable items in the "Device" window are saved into the configuration file.

  • Known Issues:

    "Carrier-Missing" detection in the TII spectrum still missing.
    Rare crashes, presumably due to a race condition in cooperation with libfaad. Exact reason could not be found yet.
    On termination, process hangs sometimes.

Version, January 2018, "DAB-Only"

This version starts the "DAB-Only" branch of the QIRX software. It is indicated by the leading 1 in the version number string.

  • Non-Functional Changes:

    Project moved to Visual Studio 2015.
    Software partly restructured.

  • Non-DAB Related Changes:

    All information enclosed in a single frame, no floating windows.
    "File" or "TCP/IP" mode can be changed without software restart (thanks to Dave for the hint).
    Possibility to change the receiver frequency in ppm units.

  • DAB Major Changes:

    DAB Multipath Spectrum, displaying the delay difference between multipath signals.
    Zero Symbol detector redesigned.
    Synchronization partly redesigned (thanks to Rolf for the extensive data collection).
    TII Peaks colored according to their transmitter (thanks to Dave for the idea).
    TII Threshold visually indicated in the spectrum.

  • DAB Minor Changes:

    Ensemble Label interpretation error corrected.
    Guard Position now at the right margin of overlapping multipath regions (was in the middle). Still experimental.
    SNR Bar.
    GUI cleaned, little-used controls and indicators removed.

  • Known Issues:

    "Carrier-Missing" detection in the TII spectrum still missing (thanks to Chief Wiggum for the data).
    Rare crashes, presumably due to a race condition in cooperation with libfaad. Exact reason could not be found yet.
    On termination, process hangs sometimes.

  • Acknowledgements

    Special thanks go to

    Dave Bunyan, who provided very useful critical comments, which resulted in a number of changes in the software.
    Rolf, whose many Gigabytes of uploaded data were essential as the test basis to improve the synchronization algorithm.

Version 0.9.4, December 2017

  • DAB:

    The TII decoding is included in the binaries, as dabTII.dll
    Display of the transmitter's geolocation, where still available.
    Presentation of Ensemble Id, Service Id and Transmission Time (UTC) on the GUI.
    Correct Translation of non-ASCII characters

  • Raw Recording and Playback:

    The frequency in Hz is included as a part of the filename.

  • Known Issues:

    Rare crashes, presumably due to a race condition in cooperation with libfaad. Exact reason could not be found yet.
    On termination, process hangs sometimes.

Version 0.9.3, October 2017

  • DAB:

    DAB+ allowed in "Short Subchannels"
    Decoding of DAB (MP2) with audio sample rates of 24000 and 48000Hz.
    Mapping table access error fixed. Inhibited decoding of e.g the BBC services.
    Thanks to Richard Strang from Audio Design, having provided us with the necessaray raw samples for this bug fixing.
    FFT starting position within the guard interval, for more complex and mobile environments. Auto and manual adjust.
    Symbols which do not contribute to a service are ignored. About 15% performance gain.

  • Raw Recording and Playback:

    Stopwatch Pause/Continue feature for playback fixed.

  • Known Issues:

    Rare crashes, presumably due to a race condition in cooperation with libfaad. Exact reason could not be found yet.
    On termination, process hangs sometimes.

Version 0.9.2, September 2017

  • General GUI Form:

    Horizontal Splitters

  • Layout:

    Menu item for predefined GUI layouts.
    Scanner hidden per default.
    Large Waterfalls possible.

  • Device Frontend:

    Slow AGC.

  • DAB:

    Coarse frequency synchronization changed to correlation-based, for improved speed and robustness.

  • Raw Recording and Playback:

    Control element improved. During Recording and Playback, visual feedback by blinking button (red and green, respectively).
    Pause feature for playback.
    Icon to display raw file information.

  • Audio (.WAV) Recording:

    WAV Recording control with file and duration informations.
    Visual feedback by red blinking button.

  • Other:

    qirx.config enhanced. Storing of layout and last-used informations.

  • Bug Fixing:

    Multiple simultaneous .WAV recordings.

  • Known Issues:

    Rare crashes, presumably due to a race condition in cooperation with libfaad. Exact reason could not be found yet.
    On termination, process hangs sometimes.

Version 0.9.1, July 2017

  • Device Frontend:

    Center Frequency Correction in kHz.

  • General Receivers:

    Waterfall Viewer

  • DAB:
    Window Layout
    Legacy DAB (MP2)
    Synchronization of recorded files
    Enhanced manual synchronization control
  • Raw Recording:
    Playback Control
  • Bug Fixing:
    .WAV file size limitation removed

Version 0.9.0, May 2017

Initial Version

  • Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more