github musithang/sdrtop v0.7.1
v0.7.1 - The Discovery & The Map

4 hours ago

sdrtop goes down to the short waves: native support for the Airspy HF+ Discovery, and with it a new Radio view FT8.

Screenshot-2026-11-01-165429

Airspy HF+ Discovery

Of all the radios I've brought into sdrtop so far, this one was the most interesting to work on, in the best sense, from the driver all the way up to the benches.

It simply doesn't behave like the others. It looks after its own levels: AGC loops in the RF, the IF and the digital stage, always running, so a strong station next door doesn't push it into clipping. Its ATT and LNA are digital gain after the converter, so they decide where the signal sits in the sample word, not how clean it is. The Lab benches had to learn that, and now they describe the radio as it really is: the chain reads ANT▸AGC▸ADC▸ATT▸LNA▸word, and a strong signal shows as HELD, not CLIPPING, because nothing was lost.

Until now the HF+ didn't run in sdrtop at all, since its SoapySDR driver delivers floats. Now a plain sdrtop opens it natively, observer mode included.

Screenshot-2026-11-01-181024

FT8

sdrtop's own FT8 decoder, written from the protocol specification (Franke, Somerville and Taylor, QEX 2020), no library. Under Radio › Digital modes › FT8.

  • Azimuthal equidistant map, centred on your locator. Great circles from you are straight lines, so the bearing on screen is your beam heading. A logarithmic distance scale fits the whole world, out to the antipode, in one disc, near and far DX side by side; linear ranges of 1 500, 3 000 and 9 000 km are true to scale, the first two with the Maidenhead grid.
  • Stations at their own locators. A station that sent no locator gets no dot. Nothing is guessed.
  • Day, night and the grey line, computed for the cycle being heard.
  • Short and long path to any station, bearing and distance; the best DX in the title.
  • The physics of every decode: SNR in 2500 Hz, DT to the millisecond, tone frequency to 0.01 Hz with its Cramér-Rao bound, drift, Costas sync, LDPC repairs and OSD.
  • Clock and path, judged from the median DT of the stations heard.
  • CSV export of every decode, measurements included.
Screenshot-2026-11-01-181433

Against WSJT-X

I recorded four minutes of a busy 20 m afternoon, cut it into fifteen cycles, and gave exactly the same samples to sdrtop and to WSJT-X 3.0.2's decoder, at each of its three depths, on the same laptop, a Lenovo ideapad 100-15IBD with an Intel Core i3-5005U (I test on it on purpose: it's slow, so it shows what sdrtop really costs), one thread each:

Decoder Messages Time per cycle Peak memory
sdrtop 242 5.85 s ~10 MB
WSJT-X, fast (-d 1) 200 1.72 s ~100 MB
WSJT-X, normal (-d 2) 237 2.69 s ~100 MB
WSJT-X, deep (-d 3) 245 7.08 s ~100 MB

And message by message, sdrtop against each setting:

sdrtop against Read by both Only sdrtop Only WSJT-X
WSJT-X, fast 199 43 1
WSJT-X, normal 226 16 11
WSJT-X, deep 233 9 12

sdrtop lands between WSJT-X's normal and deep settings, in messages and in time, with about a tenth of the memory. Where both heard a station they agree closely: DT within 16 ms (standard deviation), frequency on the same hertz for 187 of 233 messages and 1 Hz apart for the rest. SNR reads about 3 dB lower in sdrtop, because it measures the noise right beside each signal, where WSJT-X estimates it across the whole band. WSJT-X's a-priori decodes (the ones it completes from what a CQ usually says) are left out of the count. sdrtop doesn't guess.

The comparison also paid for itself: it found a timing loss on weak signals (fixed, almost a dB more sensitivity) and a steady carrier decoding as an empty message (gone).

Set your position under Options › Station first; without it there is no map.

Also

sdrtop is on the AUR, packaged by Ateles. Thank you! Every view in the menu has a proper name now, and a handful of fixes went in.

Full Changelog: v0.7.0...v0.7.1

Don't miss a new sdrtop release

NewReleases is sending notifications on new releases.