Bugs fixed:
Enhancements:
Credits:
Many thanks to Jim Parkes for pointing me to the Ofcom bug, and Heiko aka Drehrumbum for reporting some errors and suggesting the WFM Pilot frequency measurement.
Bugs fixed:
Enhancements:
Credits:
Many thanks to Heiko aka Drehrumbum for reporting errors.
Bugs fixed (or tried to..):
Enhancements:
Credits:
Many thanks to all who commented, suggested enhancements or reported errors. In particular, I would like to thank Edgar aka cgfan for his many measurements, always pedantically documented, as well as for his many useful hints and observations.
Issues:
Enhancements:
Credits:
Many thanks to all who commented, suggested enhancements or reported errors.Other:
You may find the updated feature list comparing V3 and V4 here .
Issues:
Enhancements:
Credits:
Again, thank you all contributors having an eye on the proper working of the software (andimik, Drehrumbum), commenting (Herman Wijnants), or suggesting new features (Lucas Gallone, Patrick). All of your input is gratefully acknowledged!Other:
You may find the updated feature list comparing V3 and V4 here .
Enhancements:
More Issues and bug fixing:
Credits:
Many thanks for all of your excellent contributions, suggestions, bug reports! This keeps the app alive! In particular, contributions from (alphabetic):Other:
You may find the updated feature list comparing V3 and V4 here .
Issues:
Enhancements:
Credits:
To all of you guys putting their requests, bug reports etc into the "Issues", many thanks! This is really helpful!Other:
You may find the updated feature list comparing V3 and V4 here .
Bernhard, DB9PP, is an RF expert with a long professional experience in the field.
He provided much invaluable input into the QIRX development, in particular when it comes to
the interpretation of quality parameters like Carrier to Noise ratio (C/N) or Modulation Error Ratio (MER)
and the like.
Often parameters like the one mentioned are not easily interpreted from the pure numbers.
Therefore, he wrote a nice and concise DAB-related report,
providing insight into them, based on practical measurements with QIRX.
It is very well readable, and will certainly enhance your understanding of the DAB parameters
you find on the QIRX user interface.
In addition, you can also download it as pdf, if you wish.
Have a look, and enjoy!
General Properties (see also below for Console Version 0.9.3):
Credit:
Thanks to Andreas aka andimik for his keen testing the program's behavior and his always excellent error reports, see above "Issues"!
Bug Fixes:
Enhancements:
Credits:
Thanks to all who put their suggestions, error reports etc. into the "Issues"!Other:
You may find the updated feature list comparing V3 and V4 here .
Bug Fixes:
Enhancements:
Credits:
Thanks to all who put their suggestions, error reports etc. into the "Issues"!Other:
You may find the updated feature list comparing V3 and V4 here .
Bug Fixes:
Enhancements:
Credits:
Thanks to Andreas Mikula aka andimik for his many helpful and careful entries in the "Issues"!Other:
You may find the updated feature list comparing V3 and V4 here .
Bug Fixes:
Enhancements:
Bug Fixes:
Enhancements:
Credits:
Thanks to Herman Wijnants and Andreas Mikula aka andimik for their ongoing and qualified support and remarks!
Other:
Main Changes:
Main Changes:
Major Changes:
There are a number of significant changes and new features in this version.
I hope it will convince you that the new version is well worth the moderate fee
which I - regrettably - have to charge, to cover my costs.
Possible filter values are
Major Changes:
General Changes:
sc.exe CREATE SDRplayAPIService binPath="put here the complete path to sdrplay_apiService.exe"
General Properties:
General Properties:
General Changes:
Changes :
Changes :
Main reason for the release is the fix of the "Audio Loss" error.
Changes :
This is a maintenance release, fixing some errors.
Note: Starting with this release, an issue-tracking repository has been created in GitHub.
It is strongly recommended to enter all errors, suggestions etc. there.
Note: The "Open Issue" of the V3.1.3 is still relevant. I put it as the first entry into the issue-tracker.
New features:
Errors fixed:
Open Issues:
Credits:
Friends from a number of countries have contributed with their suggestions and error reports to this release. In alphabetic order:
In this version some glitches and errors have been repaired, together with the development of sme new features:
Since V1, this V3 is the first version to be multi-mode again. It has many - hopefully interesting - new features.
For a more complete description of its abilities please have a look at the Overview page.
Credits:
Another maintenance release. Apart from fixing some errors, the following additions were made:
Open issues:
Credits:
Another maintenance release. The following bugs and errors are fixed:
Open issues:
This is a maintenance release. On high map tile download requests, QIRX sometimes crashed. This should be fixed in the current release.
This release shows some new or enhanced features.
The data files are installed in the standard user application data directory, mostly looking like so:
C:\Users\<your user name>\AppData\Local\qirx\
The qirx.config file must reside in that directory. All of the other directories might be
edited in the qirx.config file if appropriate, by hand.
This is an interim release.
Software Filter with adjustable and persisted bandwidth and order:
"Order" means the steepness of the filter cutoff. 100 is a reasonable value.
The filter should be activated with marginal signals and scanning (see below).
It costs some performance though.
RSPduo: The Antenna selector in the RSP2 Tab acts as the tuner selector.
This is a major release showing some new features.
rtl-sdr Dongles: For interested hardware experts who like investigating the R820T tuner in detail, QIRX allows for reading and writing the I2C registers
from the "R820T" tab in the "Frontend" section of the GUI.
The (incomplete) documentation of the I2C registers can be found
here.
It might be worth noting that Bernhard (DB9PP)
was able to reveal the meaning of many until now unpublished bits used to program the R820T Rafael tuner. His findings have been included by
Oldenburger in his
rtl_tcp version (see below) as comments, completing the documentation,
and being a new valuable resource for any interested developer.
To illustrate the enhanced possibilites of the found results, Hayati Ayguen published two recommendable articles titled "Unexplored Country" with illustrated examples and explanations (currently in German), downloadable here and here. An English translation will follow soon.
rtl-tcp.exe: This distribution contains the version 0.83 of the TCP/IP server rtl_tcp.exe.
The version has been developed and is maintained by rundfunkforum user Oldenburger.
QIRX is used as a platform for publication of his excellent and sensitive software. You may download his sources here.
This is a maintenance release fixing one "nasty" bug in the TII recognition and a number of other, less "heavy" issues.
This is a major release showing several new features, in particular the integration of Openstreetmap, connected to transmitter geographical data from a database. This is supported by the possibility to connect a GNSS sensor (detecting GPS and/or GLONASS satellites) showing the current own position on the map.
Map Features
The transmitter data come from two different sources having different formats. They have been imported into a single Excel file being used in the software.
GNSS Features
TII Dialog
In the TII dialog, for every detected transmitter the distance between it and the own position is calculated as
absolute and relative distance. In this way it might directly be compared to the CIR distances.
Bandwith Control
In the rtl_tcp I/Q data server, the bandwidth can now be controlled when using a R820T tuner.
It is based on the work of Alexander, dl8aau, found here.
It has been converted into a VisualStudio2017 64-bit project and is included in this distribution.
The integrated bandwidth feature has been a joint effort of Hayati Ayguen (h_ayguen (at) web.de), Oldenburger and Bernhard (DB9PP),
all of them very seasoned experts being active in the rundfunkform.
The bandwidth can be selected in the qirx software and might
enhance the signal quality in the case of a mux with strong neighbours.
Unfortunately, the E4000 tuner gain does not work as in the "old" version of rtl_tcp. Therefore the "old" rtl_tcp is contained in the
distribution as well.
Hayati is preparing a similar release here. However, it is currently not yet finalized.
Audio
The AAC audio decoding and output has been separated into an own -GPL compatible - application, called qirx_audio.
The raw AAC frames are sent via UDP to the qirx_audio.exe and are there decoded and output. This separate executable
is started automatically by qirx. qirx_audio needs the UDP ports 8766, 8767, 8768, 8769 to be open.
The reason for this separation has been to free the QIRX application from "viral" GPL-licensed modules.
License. Starting with Version 2, QIRX is offered under a non-commercial license , incompatible with the GPL. The main reason is that the GPL allows a commercial use by anyone. As we had to learn, this possibility is exploited in practice (of course, without giving feedback) and definitely not in our interest. The new license covers also the database file qirxDAB.xlsx.
This version corrects some minor errors related to the Gain Control together with AGC settings.
Another bugfix was the erroneous behaviour of the CIR spectrum when using the RSP2_tcp driver with sampling rates higher than the usual 2048000sps.This version corrects many errors and inconsistencies of the Beta version. Thanks to all friends of the rundfunkforum who contributed valuable reports for this version.
This version features a complete redesign of the GUI and the internal organisation of the software. The GUI technology has been changed from Windows Forms to the much more flexible Windows Presentation Foundation (WPF). To remain open for future enhancements, the framework PRISM is used as the organisational backbone of the screen layout.
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.
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.
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.
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 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.
In its current version, the RSP2 hardware only is supported. This might change in a future version.
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).
The following sampling rate - bandwidth combinations are possible (ksps - kHz)
Antenna A or B are selectable by the commandline parameter -T (e.g. -T 1 means Antenna A).
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:
They overlap with the ones of rtl_tcp, thus allowing RSP2_tcp to be used in almost the same way as rtl_tcp.
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.
Great thanks to the guys of sdrplay, generously providing the hardware for the development and tests.
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.
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.
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.
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.
The configuration dialog has been revised. The following additional selections are possible in the GUI:
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.
Rare crashes, presumably due to a race condition in cooperation with libfaad. Exact reason could not be found yet.
This release fixes a bug in 1.0.0.5, in the TII Logger (no decimal separator).
This release features a number of changes, mostly in the DAB-Only version.
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.
Marginal signals, particularly those with strong neighbouring muxes, should now synchronize better.
The Transmitter Identification Signals (TII) can be logged into a text file, in a fixed time raster of one second.
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".
All DAB frequencies can be scanned for decodable signals (Menu "Options, Scan"). The recognized set is persisted in the config file.
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.
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.
The error protection level is displayed. With readable, but not too strong signals, the effect of a better error protection can be quite remarkable.
The port number, read from the config file, is now displayed as a tool tip when hovering over the "udp" icon.
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 samples. ADTS mode worked only with 1024 samples 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.
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.
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.
This release introduces some non-functional changes to make the software more maintainable, and a Linux variant of the "DAB-Only" version.
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++.
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.
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.
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"
"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.
Due to the above described common code base, most changes apply to both versions
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.
Bugfix: Frequency jump when changing modulation.
DAB-GUI: Checkbox if the window is treated as topmost or not.
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.
The DAB-Only version has been ported to Linux Debian 9, 64 Bit, running under Mono 5.10.0.160, 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.
vlc --demux=rawaud --rawaud-channels=2 --rawaud-samplerate=48000 udp://@:8765
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).
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.
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.
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.
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.
"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.
This is a maintenance release of the "DAB-Only" branch of the QIRX software.
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.
"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.
This version starts the "DAB-Only" branch of the QIRX software. It is indicated by the leading 1 in the version number string.
Project moved to Visual Studio 2015.
Software partly restructured.
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 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.
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.
"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.
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.
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
The frequency in Hz is included as a part of the filename.
Rare crashes, presumably due to a race condition in cooperation with libfaad. Exact reason could not be found yet.
On termination, process hangs sometimes.
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.
Stopwatch Pause/Continue feature for playback fixed.
Rare crashes, presumably due to a race condition in cooperation with libfaad. Exact reason could not be found yet.
On termination, process hangs sometimes.
Horizontal Splitters
Menu item for predefined GUI layouts.
Scanner hidden per default.
Large Waterfalls possible.
Slow AGC.
Coarse frequency synchronization changed to correlation-based, for improved speed and robustness.
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.
WAV Recording control with file and duration informations.
Visual feedback by red blinking button.
qirx.config enhanced. Storing of layout and last-used informations.
Multiple simultaneous .WAV recordings.
Rare crashes, presumably due to a race condition in cooperation with libfaad. Exact reason could not be found yet.
On termination, process hangs sometimes.
Center Frequency Correction in kHz.
Waterfall Viewer
Initial Version