[ADXA] Multi RX decoding (FT8/FT4/Q65) experiments
Jussi Eloranta
eloranta at aa6kj.hopto.org
Wed May 6 17:20:22 EDT 2026
Hi,
If there are Linux users out with a radio that has dual RX capability
then you may want to try out the following (must be able to compile C
programs).
When using multiple RX antennas (low bands) diversity receive has been
widely used to improve CW/SSB copy. But how about digital modes like
FT8? The first thought is to mix the audio from the two RXs into one and
let WSJT-X decode that. However, there are two issues with this: 1)
there tends to be a small audio phase difference between the two audio
signals in practice (as observed on my K4D) and adding them up does not
give great results, and 2) the noise from both antennas will also be
mixed together. The next thought is to use two separate WSJT-X instances
to decode each RX separately (use -r option to start the 2nd one). While
this works, it is somewhat cumbersome to use while running QSOs because
the two WSJT-X's do not talk to each other. I initially did this such
that the audio from the two RXs on the radio was directed to left and
right stereo audio channels. One WSJT-X read the left and the second the
right channel. The nice thing is that this performs decodes during
identical time windows with the two antennas.
OK, then I decided to improve things a bit. I wrote a piece of code
(called multi) that sits between WSJT-X GUI and the JT9 decoder (name of
the program that decodes FT8/FT4/...). Multi gets the decodes from *two*
JT9 instances (one for each RX), processes them, and passes them on to a
single WSJT-X GUI. When running QSOs, the WSJT-X GUI gets decodes from
both RXs without any extra hassle. Processing here means that multi
picks the decode from the two RXs that has the best signal to noise
(SNR) and drops the other one. It can also filter decodes based on a
given CTY file or collect statistics for antenna comparison. It will
insert information about the relative antenna performance in the decoded
text (see attached photo as an example). Before the decoded message
field one can now find:
= Both RXs had SNR within 2 dB of each other.
a RX a (or antenna attached to RX a) was better than b by more than 2 dB
b RX b was better than a by more than 2 dB
A RX a was better than b by more than 8 dB
B RX b was better than a by more than 8 dB
A! Only RX a was able to decode (not present on b).
B! Only RX b was able to decide (not present on a).
As a sanity check, running the two RXs with identical antennas will give
'=' for all stations. So no big differences between the two RXs & the
program behaved as expected.
At least for me this has improved (and simplified) my low band RX on FT8
a great deal. My RX antennas have different polarizations and this can
help with (slow) variation of polarization. Also the arrival angle can
vary. But, of course, if these variations are faster than the FT8 RX
period then this probably won't help much (other than the directivity
factor of the antennas). But my initial observation is that this
approach works surprisingly well in practice. One could also envision to
have remote SDR receivers sitting at each RX antenna and then get
decodes from them (over wifi or wired ethernet) into single WSJT-X.
Let me know if you are interested in testing this. I wrote a bit more on
my blog page on this (source code on github):
http://aa6kj.hopto.org/wp/?p=153
Jussi (aa6kj)
ps. The attached photo also shows two waterfall displays - one for each
RX. I should take another photo when 80m is actually open properly.
pps. And if there are Linux users out there with Bandmaster V then I
have managed to reverse engineer their protocol & have example code
showing how to set the antenna relays from C program.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: multi.jpeg
Type: image/jpeg
Size: 948110 bytes
Desc: not available
URL: <http://mailman.qth.net/pipermail/adxa/attachments/20260506/c942fcbe/attachment-0001.jpeg>
More information about the ADXA
mailing list