Most of you remember packet radio fondly: you type a message, the TNC chops it into packets, adds a 16-bit CRC checksum, sends it, and if the CRC fails the other station says “huh?” and you automatically retransmit. That works great when the path is decent in both directions and stays decent for a few seconds. On weak-signal paths (HF, EME, meteor scatter, LF/MF) the path is usually terrible, often one-way, and fades so quickly that by the time you could ask for a repeat the opening is gone. So every single mode in WSJT-X throws away the whole idea of retransmission (ARQ) and instead puts everything — absolutely everything — into making one single transmission survive. The price you pay is that the message has to be tiny and rigidly structured (callsigns, grids, signal reports, RRR or 73), but that one transmission can be copied 15–25 dB weaker than packet or even CW could ever dream of.
Why rigidly structured? Because we are only sending a few million possible valid messages instead of free text. That lets us space those valid messages as far apart as possible in “bit space.” The distance between any two different valid messages is measured in Hamming distance — simply the number of bit positions that differ between them. The bigger the minimum Hamming distance, the more bit-flips (errors) the code can tolerate, because even if noise flips some bits the received pattern will still be closer to the correct message than to any other possible one. Structured messages give us enormous Hamming distance essentially for free, which is why the decoder can produce perfect copy from what looks like pure noise on the waterfall.
A-priori (AP) decoding is the killer feature you have all experienced in FT8 and Q65: once both callsigns (and often the grid) are known from a previous exchange, the decoder treats those bits as locked, subtracts them from the received signal, and pours all its effort into the remaining unknown bits (the report or 73). The gain is typically 8–10 dB or more — you watch it happen every night when the band is dying and the last decodes still roll in at −27 or −28 dB.
Every transmission carries Costas arrays (known tone patterns at start, middle, and end) so the decoder can find the exact start time and frequency offset even when the signal is invisible. Deep interleaving deliberately shuffles the bits so a long fade only scatters random errors instead of erasing whole characters. Then massive forward error correction cleans up the mess.
Reed-Solomon (RS) coding — used in JT65, JT9, JT4. The message is 72 bits = 12 symbols of 6 bits each. RS(63,12) adds 51 parity symbols (extra redundant symbols calculated from the data symbols) to make 63 total symbols. It can correct up to 25 completely erased symbols. With deep interleaving it turns long EME fades into erasures that RS fixes perfectly. Simple, robust, but needs lots of redundancy (rate ≈0.19).
LDPC (Low-Density Parity-Check) coding — used in FT8, FT4, FST4/FST4W, MSK144. These are modern near-Shannon-limit codes — they operate within a fraction of a dB of the absolute theoretical maximum data rate possible for a given noise level (the “Shannon limit” is the brick wall no code can ever beat). Imagine a big room full of people (the bits) and a few teachers (the parity-check equations). Each person only talks to a handful of teachers (“low density”). Every person shouts what they think their bit is; the teachers shout back whether their equation is satisfied. Everyone keeps whispering updated confidences back and forth for a few rounds until the whole room agrees on one consistent story. That iterative “gossip” or belief-propagation process is what makes LDPC so powerful — it uses the soft confidence levels from the demodulator (how much louder one tone was than the others) to squeeze out another 3–6 dB compared with old hard-decision codes. FT8’s LDPC is roughly rate 0.5 — very efficient.
Convolutional coding — used only in WSPR — is a streaming code with memory: there are no fixed blocks; it just keeps running like a conveyor belt. Each output bit depends on the current input bit and the previous K−1 bits (K=32 in WSPR). The encoder is literally a shift register with a few XOR taps — think of it as a very simple hash that mixes in some memory of what came before. The decoder is the Viterbi algorithm, which is basically the same math your car GPS uses to find the shortest route home: at every intersection (time step) there are multiple possible roads (states of the shift register). Viterbi keeps only the single best (most likely) path to each intersection and throws the others away, so it never explodes in complexity. It is perfect for streaming data with memory and, when heavily interleaved, turns bursty fading into random errors it can fix beautifully.
Q65’s Q-ary Repeat-Accumulate (RA) code — think of it as an LDPC built for symbols instead of bits (each symbol is one of 65 tones). It deliberately repeats symbols, then accumulates (adds them modulo 65) to spread energy, and finally uses soft list decoding — the decoder generates a short shopping list of the most probable complete codewords (instead of just one guess) and picks the one that best matches the soft confidences from all tones. This is perfect for rapidly changing channels where amplitude can drop 20 dB or frequency can jump hundreds of Hz in milliseconds — libration spreading on EME, aircraft-scatter flutter, tropo or ionoscatter multipath. The code can try several hypotheses at once and still converge, which is why Q65 works when everything else is blind.
With those building blocks in mind, here is how each mode uses them in practice, with FT8 as the reference most of you already know.
FT8 is the 15-second, 8-tone Gaussian FSK mode at 6.25 Hz spacing (total occupied bandwidth about 50 Hz) that you use every day on HF and 6 m. It packs a 77-bit structured message into a strong LDPC code with deep interleaving and Costas arrays for rock-solid sync, plus heavy AP decoding, giving a nominal threshold around −21 dB that feels like −28 dB once AP kicks in.
FT4 is identical to FT8 in message structure and LDPC code but uses 4-tone GFSK at 20.83 Hz spacing (about 105 Hz wide) and 7.5-second periods. It sacrifices roughly 3.5 dB of sensitivity for twice the QSO rate and much better tolerance to fast Doppler flutter — the mode you reach for during contests when signals are swinging several hertz per second.
Q65 is the current EME and scatter-mode champion, especially for small to medium stations. It is 65-tone continuous-phase FSK with five submodes (A through E) that trade sensitivity for Doppler tolerance by changing the tone spacing:
- A — narrowest spacing (for 60 s period the spacing is ~ X Hz, total BW ≈ 430 Hz), highest sensitivity, least Doppler tolerance — use when libration spreading is low (new moon periods) or on tropo/ionoscatter with clean paths.
- B — slightly wider spacing, about 1.5–2 dB less sensitive, still excellent for most EME.
- C — medium spacing, the “Goldilocks” choice for typical 2 m EME conditions.
- D — wider still, loses another couple dB but handles more spreading.
- E — widest spacing (up to several hundred Hz tolerance), least sensitive but will copy signals with huge spread that wipe out every other mode — use around full moon when libration is worst or on wild aircraft-scatter paths.
Most 2 m EME operators live in Q65-60A or 60B because it gives the best sensitivity under normal conditions; they only step up to C/D/E when the Echo mode or the waterfall shows big spread. The very low-rate Q-ary RA code plus message averaging and aggressive AP/soft list decoding routinely delivers 4–6 dB advantage over JT65 under spreading conditions, which is why modest two-yagi stations now work DX on 2 m and 70 cm that used to require four long yagis.
MSK144 is the meteor-scatter firehose. It uses Minimum-Shift Keying (continuous-phase FSK with modulation index exactly 0.5 — the narrowest possible spectrum for the bit rate with no phase jumps) at 2000 baud, repeating the entire message many times inside the 15-second (or shorter) window so even a 50 ms meteor ping contains multiple copies. It uses a weaker LDPC code because it only needs one good fragment to succeed.
WSPR remains the classic propagation beacon. It uses 4-tone FSK at 1.46 Hz spacing, convolutional r=1/2 K=32 code with a gigantic interleaver that spreads the 50-bit payload over the full two minutes, and Costas arrays for sync. Threshold −31 dB in 2.5 kHz; still the easiest set-and-forget probe on HF, but most serious LF/MF experimenters have moved to FST4W because it is stronger and click-free.
Bottom line for the group: every mode shares Costas sync + deep interleaving + massive FEC, but the parameters (tone count, spacing, period length, code rate) are deliberately tuned to the exact flavour of propagation misery you are fighting. FT8 is the brilliant general-purpose compromise for “normal” paths. When the path turns nasty — fast Doppler spread, ultra-short pings, galactic noise on LF — just pick the mode that was engineered for that specific kind of nasty, and suddenly contacts that used to be impossible become almost routine.
