Support this work

Amateur radio · Santiago de ChileSoftware for the HF digital modes

CE3TSK

Tihomir Sokcevic

I build software for the digital modes on HF and operate FT8, FT4 and FT2 from Santiago de Chile. What I make is free and open source, and measured on recorded air before anything is claimed for it.

Icom IC-7300 · 18 m vertical at 2.5 m with elevated radials

The projectv3.0.0-rc10 · free · GPL v3

JTDX Contest Edition

New decoding approaches. More decodes. Decided on time. Built for WW Digi.

A free fork of JTDX with the FT8 decoder rebuilt, the FT4 decoder rewritten, and the WW Digi DX Contest built in: grid exchange, points, multipliers and its own contest log. Every number below was measured on one recorded hour of real air against stock JTDX. The recordings and the script are published, so anyone can repeat them on their own machine.

+27.5 %
More FT8 messages
than stock JTDX, same hour of air
1.1 s
FT8 reply decided
the rest decoded while you transmit
+24 %
More FT4 messages
than stock JTDX, +21 % over WSJT-X
0.6 s
FT4 reply decided
inside FT4’s 1.36 s window

The innovationin no other FT8 program

It keeps decoding through the next periodnew

Every FT8 program decodes once, when the period’s audio is complete, and then leaves the processor idle for about twelve of the next fifteen seconds — whether you are transmitting or listening. JTDX Contest Edition splits the decode in two and spends that time.

your radio you listen you transmit you listen WSJT-X · JTDX · MSHV the period’s audio arrives idle — the decoder waits RX phase, 1.1 s — your reply is decided here JTDX_contest pipeline preset the period’s audio arrives background phase alternate pass · ensemble · residual · classic unit no decode here — you transmitted, so the phase gets two periods, not one into the hint memory later periods pin those messages instead of searching for them 0 s153045 s 14.1 s
Drawn to scale on one clock, over three periods. A decode cannot start before 14.1 s, because that is when the audio it needs has finally arrived, and the auto-sequencer wants its answer about a second later. Everything after that used to be wasted. Note the middle period: you transmitted, so nothing new arrived to decode — the background phase runs through it and into the period after.

RX phase

Deliberately cheap, so the answer is on time. It finishes about 1.1 s into the period and hands the auto-sequencer what it needs to choose your reply.

Background phase

It runs in the idle time that follows, while you transmit and while you listen alike, going back over the audio just decoded with the passes the first phase could never afford: the alternate pass, the ensemble members, a residual pass with every known message subtracted, and a plain classic decode. Listening, it has one period. Transmitting, it has two — the period you transmitted in has nothing new to decode, so that decode is skipped and the phase simply keeps going, close to thirty seconds without a break. It stops the instant the next decode is wanted. In the menus it is called TX background.

And then it pays forward

What the background finds is remembered. Those messages are pinned as known bits in the periods that follow, so a station already heard is recognised almost for free and the budget goes to the ones still hidden.

Available on FT8 in the presets whose name carries pipeline, and on FT4 and FT2 in the presets that run a TX background — recommended and max effort among them. The background phase is off in the plain presets, so a slow machine is never asked to do it.

News & highlightsnewest first

What changed

Release v3.0.0-rc10new

Worked All States: a US station’s state now follows its country, as in USA, CA, and a new state is highlighted and announced – at all, per band or per mode. Where a grid square is shared by several states, FCC licence data places the call (downloadable under Settings > General > Data files), and a QSO is logged with the grid the station sent on the air, never an old one from CALL3.TXT. Likely phantom decodes – plausible but not real, made by chance out of the noise – are marked with a red wave instead of being hidden: a grid outside the sender’s country, /R on HF, a weak decode between two /P stations, a call of no country. Settings now checks your own call and grid against cty.dat and takes grids of up to 12 characters. View > Band and mode buttons in one row puts both rows of buttons into one. The Apple Silicon disk image now runs from macOS 15 Sequoia on. Smaller things: the mouse wheel tunes the dial by 1 kHz away from the kHz digits too, and a left click tunes down, a right click up; the Log QSO window comes to the front and keeps its size and place; JTDX_contest keeps its own notification colours and dark-style setting, apart from stock JTDX’s. Fixed: “don’t show it” for worked stations could be on at random on a fresh install, and on macOS OK in Settings no longer aborts (reported by Luigi IW5DNZ). The Japanese translation was reviewed by a native speaker: Thank you very much to Yoshi JP1LRT.

Release v3.0.0-rc09

macOS builds for Apple Silicon and Intel: two disk images now, one for Apple Silicon Macs (macOS 26 or newer) and one for Intel Macs from macOS 10.15 Catalina on; on both the program raises macOS’s shared-memory limit itself when it is too small. View > Mode buttons puts the Mode menu in a row of buttons above the band buttons, and a right click on a band button offers that band’s other, non-default frequencies. The Wide Graph now reopens at the size and place it was left, behind the main window. A crash when switching into FT2 is fixed, with more robustness fixes: a race condition that could crash the program – reported on macOS by Luigi IW5DNZ, though every platform had it – and a check at start-up that the decoder beside the program is its own, never a stale one or another program’s. Quitting no longer hangs when the rig or the audio device is not available, and the radio always gets PTT off first. Smaller things: the band scheduler’s fifth entry now fires, the chosen decoding preset shows its tick on Linux as it does on macOS, and in English four buttons lost their space: EnableTx, HaltTx, LogQSO and ClearDX.

Release v3.0.0-rc08

SuperFox arrives, as an experiment, with a decoder of its own: CRC-aided successive-cancellation list decoding, tone bins with QRM normalised, a-priori decoding at four levels and a multi-threaded search, then FT8 QRM removed and MSHV’s three sync windows; the Fox’s code is checked online. By the way, the new “CRC-aided successive-cancellation list decoding” (CA-SCL) method that JTDX_contest rc08 now uses for SuperFox decoding is a technique used widely in 5G cell phone networks, i.e. JTDX_contest is using current, state-of-the-art technological approaches for amateur radio. Help > Check for updates tells you when a new version is out, and an icon beside the Ko-fi cup does the same in the background. A right click marks frequencies as default in both frequency tables, and the band buttons show only those. FT2 frequencies spoiled by stock JTDX are repaired on their own, and the narrow window and several translations were tidied. The Japanese version of the SuperFox decoder explainer was reviewed by a native speaker: Thank you very much to Yoshi JP1LRT.

Release v3.0.0-rc07

FT2 arrives: the fast mode at twice FT4’s rate, decoded by this fork’s own FT4 decoder and transmitted by the same generator, with four measured presets of its own. Its waveform was cross-checked against WSJT-X improved, which decodes these transmissions and is decoded by them, and the first contact was worked on 20 m the day it was finished. On a crowded band FT2 finds 296 of 350 signals at the default preset and 333 at max effort, against 249 for WSJT-X improved on the same audio, with no phantom decode on either side. The benchmark suites gain the FT2 material and a second generation of the crowded FT4 period.

Release v3.0.0-rc06

cty.dat and the LoTW user list now update from inside the program, an optional row of band buttons changes band in one click, and the dark style can be switched from the View menu. The Japanese translation was reviewed by a native: Thank you very much to Yoshi JP1LRT. On Windows the program downloads through Windows’ own secure connection, and the Linux AppImage is built on the official Hamlib 4.7.2.

Release v3.0.0-rc05

JTAlert finds the program again: it reads the rig name out of the window title, and the title now carries it. The Windows installer file names were corrected.

Release v3.0.0-rc04

Official Hamlib now polls the radio the way the JTDX fork does, so most rigs no longer need the patched build. A dialog on first start offers the recommended colour scheme. German and Korean join the interface languages, and the first beta testers are credited in the About box.

The interface, repaired

Dark mode works throughout instead of in patches, a long list of layout faults is gone, and the program itself is translated across nineteen languages.

The measurements, published

Two recorded hours of air, the crowded-band files and a script that replays them on any machine. Check the numbers on this page, or measure your own processor before choosing a preset for it.

WW Digi 2026

The edition was on the air through the contest weekend, in the contest it was built for, and the FT4 decoder work was measured on that band.

What’s nextnothing here is promised

On the bench

What I am looking at next, with an honest label on each. None of it is finished, some of it may never start, and the order can change with what the bands ask for. Anything that does get built arrives measured, like everything above it.

A pipeline preset for smaller machines

to be measured

Today the choice is a plain preset with no background phase at all, or a pipeline tier that expects plenty of threads. Between them sits the common machine: fewer than six cores and six threads, with room for some background decoding but not for all of it. Finding the recipe that fits it means measuring it, like every other preset in the menu.

A Qt6 build

planned

The fork is built on Qt5, which the distributions and the toolchains are starting to leave behind. Moving to Qt6 is what keeps it compiling on the operating systems and compilers that come next, so it is planned as plain maintenance rather than as a feature: if it is done properly, nothing an operator sees changes at all.

About & contactCE3TSK

Who is behind this

I am Tihomir Sokcevic, CE3TSK, in Santiago de Chile. JTDX Contest Edition started because the WW Digi contest needs an exchange that the original JTDX did not handle, and grew into a decoder rebuild: on a crowded band, the difference between hearing a station and not hearing it is where a contest is won.

Nothing here is claimed before it is measured. The hour of air the numbers come from is published with the script that replays it, so any of it can be checked, contradicted or improved on your own machine.

Questions, reports from the air and QSOs are welcome, on the bands as CE3TSK and by mail.

Contact

jtdx_contest@ce3tsk.com

github.com/ce3tsk/jtdx_contest

Support this work

The program is free and stays free. If it earned you a QSO, a coffee is a fine thank-you.

Ko-fi