Hi Group,
As part of my experiments with synchronized coherent receivers, I want to reduce FT8 decode times so that I can collect data in real time. I'd like to send spots to PSK reporter as kf7o_rx1, kf7o_rx2, kf7o_22p5, etc, for both HL2 receivers plus combinations of the the IQ streams from both radios. I created a gateware variant with larger CIC so that the RX is decimated to 4kHz IQ in the HL2. I wrote Python scripts which save the streams from RX1 and RX2 as .c2 files, which is a WSJT-X internal format of raw IQ values. The .c2 files are accepted by this modified version of
ft8d. This differs from what SparkSDR or WSJT-X do where the FT8 decoder accepts 12kHz audio. The idea is that native processing of IQ data at a lower sample rate 2*4kHz will be faster than converting a higher rate audio of 12kHz to complex and then processing. ft8d also takes 1 minute worth of data and decodes the entire minute, which may reduce setup/teardown time overheads. I've collected some data:
ft8d (Optimized, loops unrolled and using processor AVX2, -O3 -funroll-loops -march=znver2 -mtune=znver2 -fopt-info)
0.2 seconds for 41 spots at depth 1
2.2 seconds for 61 spots at depth 3
0.9 seconds for 53 spots at depth 5
jt9 (Unoptimized, built straight from the source with default settings)
0.6 seconds for 18 spots at depth 1
6.8 seconds for 30 spots at depth 3
7.8 seconds for 30 spots at depth 5
jt9 (Optimized, loops unrolled and using processor AVX2, -O3 -funroll-loops -march=znver2 -mtune=znver2 -fopt-info)
0.2 seconds for 18 spots at depth 1
2.0 seconds for 30 spots at depth 3
2.1 seconds for 30 spots at depth 5
What I've learned from this data:
* ft8d is faster than jt9, and simpler as we never have to demodulate to USB. The times are for one file decode and use only one CPU. On my machine with 4 CPUs, I can dedicate 2 or 3 CPUs to decoding. The ft8d times are for a full minute of capture, so I should be able to decode 40 to 60 streams in real time.
* jt9 performance can be significantly improved if built to use processor extensions such as SSE or AVX. I plan to rebuild jt9 on the
low-end system at my sister's house which uses SparkSDR and jt9 but will often get bogged down and drop spots during high activity times. Rebuilding jt9 with SSE or AVX enabled should help anyone using SparkSDR with the 6 or 10 RX gateware to skim FT8.
* ft8 and jt9 exhibit different behavior for depth 5 which I don't understand.
73,
Steve
kf7o