Technical deep-dive · Tempo
The Tempo protocols
Two original weak-signal digital modes for amateur radio. TempoFast brings techniques proven in cellular networks to the HF bands, pulling more information out of every second of air time and clawing signal back over the noise floor on a four-second cycle. TempoDeep gives that up for a non-coherent waveform that keeps working when the path is fading. Keyboard chat at conversation speed is what they were built for, and it is not the only thing a four-second cycle is good for.
Cellular tech, on the ham bands
Borrowed from the phone in your pocket
The two techniques that define TempoFast, incremental-redundancy hybrid ARQ and turbo equalization, are workhorses of modern 4G and LTE cellular systems. They have moved billions of bits through deeply faded, interference-ridden channels. TempoFast is, in essence, an experiment in pointing those same tools at HF.
IR-HARQ · live
When a frame fails, TempoFast does not simply repeat it. Each retransmission sends new parity bits the receiver has never seen, which are joint-turbo-combined into a longer, lower-rate code. You get energy accumulation and extra coding gain together. No other amateur text mode does this. In cellular it is standard. It is wired end to end and on by default.
Turbo equalization
The receiver iterates. A maximum-likelihood trellis detector (BCJR) and the LDPC decoder trade soft information back and forth, each pass refining the other. This is the same iterative-decoding idea that made turbo codes the heart of 3G and 4G. Here it claws an estimated 1.5 to 2 dB out of the noise.
The trade is deliberate. TempoFast gives up roughly 6 dB of raw single-shot sensitivity against FT8 to buy its fast, conversational cycle, then leans on these cellular-grade techniques to win much of it back over several short transmissions. Through the full live pipeline, that IR-HARQ path measures about +2.5 dB of threshold shift and about 2× QSO completion in the −11 to −13 dB zone. Those figures are simulation results.
The short version
Three things make TempoFast different
-
It's coherent.
TempoFast uses 4-ary continuous-phase modulation and tracks carrier phase to demodulate it, where FT8, FT4 and JS8 detect tone energy non-coherently. Coherent detection extracts more information per second of air time, and that is the lever that makes a fast cycle competitive at all.
-
It has IR-HARQ.
A retransmission carries new parity bits, joint-turbo-combined with the original frame to decode a longer, lower-rate code. FT8, FT4 and JS8 are all one-shot block codes per frame with nothing carried across. This is the headline difference, and it is on by default.
-
It's conversational.
A four-second transmit and receive cycle, against 15 s for FT8 and 6 to 30 s for JS8. Short cycles make a back-and-forth feel like a conversation rather than a slideshow.
Where it stands
It works on the air. The numbers are still from the bench.
The first over-the-air TempoFast decode was on 21 July 2026, and the first two-station Tempo QSO (KD9TAW and N9UM, 6 m) completed on 26 July 2026. That retires the biggest question any new waveform faces, which is whether it closes a real RF link at all.
What is still owed is a proper on-air characterisation of decode rate against signal level. Every sensitivity figure quoted on this page comes from AWGN and fading sweeps on the bench, not from the bands. If you run Tempo, an honest report (band, dial, tier, distance, conditions, decodes against what you expected) is worth more than any amount of further simulation.
Mad-scientist mode
The complete Tempo protocol
That was the short version. Below is the full technical write-up: the waveform, the signal chain, the message layer, synchronization, the IR-HARQ math, both tiers, an honest comparison to FT8, FT4 and JS8, and the current status. Goggles on.
2. The design goal and the physics it is fighting
Weak-signal text faces a tradeoff that is fundamental physics, not an engineering shortfall: cycle time versus weak-signal reach.
You can integrate the signal over a long window to dig it out of the noise, or you can keep the cycle short so the conversation flows. Every second you remove from the integration window costs sensitivity. No single waveform is optimal at both ends of that curve.
That is why Tempo ships two tiers rather than one compromise waveform:
- TempoFast (fast tier). A 4 s cycle, coherent, the most information per second of air time, leaning on a carrier-phase stability that fading and Doppler spreading destroy.
- TempoDeep (deep tier). A 15 s cycle, non-coherent, slower but surviving the fading that collapses coherent modes.
Both tiers carry the identical 77-bit message payload and the same LDPC(174,91) FEC (see §4). The tier is never chosen silently. It is a deliberate operator toggle surfaced in the UI, and the engine reads that choice to pick which waveform to modulate and decode and which slot clock to run. The abstraction hides the DSP, not the decision.
2.1 The signal chain at a glance
Both tiers share the message and FEC layers and diverge at modulation, sync, and the slot clock. The TempoFast path:
┌─────────────── shared message + FEC layer ───────────────┐
text / form ──► 77-bit WSJT-X payload ──► +14-bit CRC = 91 bits ──► LDPC(174,91) ──► 174 coded bits
└──────────────────────────────────────────────────────────┘
│
┌──────────────────── TempoFast physical layer ─────────────────────┐
174 bits ─► 2 bits/symbol ─► 87 data symbols + 12 Costas sync = 99 symbols @ 28 Bd
─► 4-CPM (h=1/2, BT=0.3) ─► 3.536 s waveform in a 4.0 s UTC slot ─► AIR
└──────────────────────────────────────────────────────────────────┘
│ (receive)
AIR ─► Costas sync search (time+freq) ─► downconvert ×54 to ≈222.2 Hz baseband (888 cplx samples)
─► turbo decode: iterative BCJR ⇄ LDPC belief-propagation ─► OSD fallback ─► SIC
─► IR-HARQ joint turbo-combine across retransmissions RV0/RV1/RV2 ─► 91 bits ─► CRC check ─► text
3. The TempoFast waveform
TempoFast in one line: 4-CPM, h=1/2, BT=0.3, 99 channel symbols at 28 Bd, designed for coherent demodulation with iterative turbo equalization.
3.1 Modulation: 4-ary continuous-phase modulation (4-CPM)
- 4-ary. Each symbol carries 2 bits (4 states).
- Continuous-phase. The carrier phase never jumps. It advances smoothly across symbol boundaries, which keeps the spectrum tight and makes the signal amenable to coherent, trellis-based detection.
- Modulation index h = 1/2. This controls how far the phase advances per symbol. h = 1/2 is the classic minimum-shift-style index that balances spectral compactness against the distance between symbols, which is what sets sensitivity.
- Gaussian BT = 0.3. The frequency pulse is shaped by a Gaussian filter with time-bandwidth product 0.3. Lower BT means a gentler, more bandwidth-efficient pulse at the cost of more inter-symbol memory, which the trellis detector is built to exploit rather than fight.
Jargon. CPM (continuous-phase modulation): a phase-continuous waveform family. The receiver can treat the phase trajectory as a trellis and detect it with maximum-likelihood / BCJR methods. Modulation index h: the per-symbol phase advance, in units of π. BT (time-bandwidth product): how tightly the Gaussian pulse is shaped. Smaller is narrower-band.
3.2 Symbol and frame structure
| Quantity | Value | Note |
|---|---|---|
| Total channel symbols | 99 (FT1_NN = 99) | 12 sync + 87 data |
| Sync symbols | 12 | three 4×4 Costas arrays |
| Data symbols | 87 | 174 coded bits ÷ 2 bits/symbol |
| Sample rate | 12 kHz | standard WSJT-X audio rate |
| Symbol (baud) rate | 28 Bd | 12000 ÷ (3000/7); 428.57 samples/symbol nominal (429 rounded) |
| Waveform duration | ≈ 3.536 s | inside the frame |
| T/R period | 4.0 s | UTC-aligned (PERIOD_S = 4.0) |
| Transmit start offset | 0.4 s | into the slot, matching FT8/FT4 (see §5.2) |
| Timing tolerance | ±80 ms | slot-boundary alignment (TIMING_TOLERANCE_MS = 80) |
The 3.536 s waveform inside a 4.0 s frame leaves roughly 0.46 s for receive guard plus decoding. The three Costas sync arrays are interleaved with the data (beginning, middle, and end placement), which is what makes the time and frequency search in §5 tractable.
3.3 Occupied bandwidth
TempoFast’s occupied bandwidth is not published as a constant in source. There is no authoritative figure in the modem parameters or the Rust wrapper. Calculated estimates range roughly 42 to 67 Hz depending on method. Treat it as designed to be narrow and quote it as “not specified (est. 42 to 67 Hz)” rather than as a hard spec. Older design discussion floated larger round numbers. None of those is grounded in source and none should be cited.
3.4 Coherent demodulation and turbo equalization
This is where the “most information per second” claim comes from. The TempoFast receive chain is iterative:
- Costas sync candidate search over time and frequency offsets (see §5).
- Downconvert the candidate to complex baseband. The modem downsamples by 54 (
FT1_NDOWN = 54), taking the audio frame to about 222.2 Hz (12000 ÷ 54) and yielding 888 complex baseband samples (FT1_NDMAX = 888) for the matched-filter bank. That is about 9 downsampled samples per channel symbol (888 ÷ 99); the source comment rounds this to “about 8 samples/symbol.” - Turbo decode (
ntype = 1). Iterative BCJR (a maximum-likelihood trellis detector for the CPM phase memory) exchanges soft information back and forth with LDPC belief-propagation decoding. Each pass refines the other. - OSD fallback (
ntype = 2). Ordered-statistics decoding, for when belief propagation alone does not converge. - SIC. Successive interference cancellation, peeling a decoded signal off to expose weaker ones.
- IR-HARQ combining. Joint iterative turbo combining across retransmissions RV0/RV1/RV2 (see §6), with RV detection by a coherent CPM-Costas discriminator.
The iterative loop (step 3) is where TempoFast’s headroom over a vanilla one-shot LDPC decode is expected to come from. The project’s design estimate is 1.5 to 2 dB of gain from iterative turbo equalization, putting the baseline near −15 dB with iterative detection against roughly −14 dB without. That is a medium-confidence design estimate, not a measured figure.
Implementation note. The TempoFast modem uses process-global
SAVEstate (CPM pulse tables, the downsample window, cached FFTW plans) and is not thread-safe, so every entry point serializes behind a global modem mutex. Full over-the-air acquisition (Costas time and frequency search across the passband) is implemented and exposed through thelibtempoC ABI, alongside a frame-aligned real-time path used for loopback testing.
4. The message layer
Tempo deliberately reuses the WSJT-X 77-bit message format, the same source coding FT8, FT4, and JS8 all use. That is the whole interoperability story.
- 77-bit payload. Structured messages (callsigns, grids, reports) and free text pack into 77 bits exactly as in WSJT-X. Because of that, chat, QSO, and Field Day forms ride identically on TempoFast and on TempoDeep.
- 14-bit CRC. Appended to the 77 message bits, giving 91 bits total (
KK = 91). - LDPC(174,91) FEC. The 91 bits encode to 174 coded bits (83 parity bits added). At 2 bits per channel symbol, that is the 87 data symbols in §3.2.
- The decoded result is the 91 bits back out (77 message plus 14 CRC), and the CRC confirms the codeword before the text is unpacked.
The 77-bit packer is reused directly from WSJT-X (GPLv3 heritage), so a fragment that fits the standard message structure is bit-for-bit a WSJT-X-style payload.
4.1 Chunking longer free text
A single 77-bit payload holds only a short fragment of free text. Longer messages are chunked across multiple 4 s frames at the application layer. Each frame carries one valid 77-bit payload, and Tempo reassembles the sequence into the chat stream. The fast 4 s cycle is what makes multi-frame free text feel responsive rather than glacial.
If a piece never arrives, the conversation shows what did arrive, marked “2 of 3 received,” rather than waiting forever with nothing on screen. Pieces are matched per station, so two stations sending at once cannot have their fragments mixed into one garbled message.
5. Synchronization and acquisition
TempoFast syncs on three 4×4 Costas arrays (12 sync symbols total). A Costas array is a frequency-hop pattern with a sharp, near-ideal autocorrelation. It lights up exactly once when time and frequency are aligned, which is what makes a two-dimensional search practical.
Jargon. Costas array: an N×N frequency-hop pattern with a single sharp autocorrelation peak, used as a sync marker that survives noise and frequency offset.
Full acquisition correlates the Costas pattern across a grid of time offsets and frequency offsets across the decode passband. Candidates that correlate strongly become decode attempts.
5.1 The dt convention
TempoFast reports time offset using the WSJT-X convention: dt = t − 0.5, where t is arrival time into the frame. So dt of about −0.1 s means the signal arrived at 0.4 s into the cycle. This centers the nominal frame boundary at dt = 0 and matches what WSJT-X operators already expect.
5.2 Why TempoFast transmits 0.4 s into its slot
TempoFast originally started transmitting at the very beginning of its slot, and its timing search runs forward from zero rather than sweeping backwards the way FT8 and FT4 do. Together those two facts meant a signal arriving even slightly early was not merely weak, it was invisible. A peer PC a quarter-second off UTC was enough to push roughly half of all frames off the edge in each direction, so short messages arrived and longer ones never finished assembling.
TempoFast now starts transmitting 0.4 s into its slot, the same as FT8 and FT4, which leaves room for ordinary clock error at both ends. Both stations need a build carrying this change for a conversation to benefit. If Tempo contacts are unreliable, check the clock reading at both ends first. A few tenths of a second is invisible to FT8 and was fatal here.
6. The differentiator: incremental-redundancy HARQ (IR-HARQ)
This is the part that has no analog in FT8, FT4, or JS8.
Read this first. IR-HARQ is live end-to-end and on by default. A frame that fails to decode standalone (RV0) is buffered and joint-turbo-combined with its retransmissions RV1/RV2. The QSO sequencer drives RV escalation (0 → 1 → 2 on implicit NAK, reset on implicit ACK) and the decode record reports how many RVs were combined. The combine resets per slot to keep stale state out (30 s slot expiry, ±10 Hz frequency tolerance). What remains uncharacterized is on-air decode rate against SNR: every figure in this section comes from simulation, not from measurements on the bands (see §9).
6.1 The problem with just resending
When a weak-signal frame fails to decode, the obvious fix is to resend it. Two ways exist:
- Chase combining. Resend the same 174 coded bits. The receiver averages the two copies, gaining about 3 dB of energy per retransmission. Simple, but you pay full air time to re-hear bits you already have.
- IR-HARQ (incremental redundancy). Resend new parity bits the receiver has never seen. The receiver combines the original 174-bit LLR vector with the fresh parity LLRs, effectively decoding a longer, lower-rate code. You get the energy accumulation of chase combining plus extra coding gain from the lower effective code rate.
IR-HARQ is the strictly superior option and it is TempoFast’s signature.
6.2 How the redundancy accumulates
TempoFast’s IR-HARQ is rate-compatible, built from a mother code extended above the baseline:
| Transmission | Bits sent this TX | Costas variant | Effective code | Cumulative |
|---|---|---|---|---|
| RV0 (1st TX) | base 174 | [0,2,3,1] | LDPC(174,91) | baseline |
| RV1 (2nd TX) | 87 new parity + 87 repeated systematic | [1,3,2,0] | LDPC(261,91) | original + new parity |
| RV2 (3rd TX) | 87 new parity + 87 repeated systematic | [3,0,2,1] | LDPC(348,91) | mother code |
The mother code is the punctured LDPC(348,91), extended from the baseline LDPC(174,91). RV0 carries the base 174 bits, and RV1/RV2 each carry 87 new parity plus 87 repeated systematic bits. Each RV carries a distinct Costas sync variant, which is what lets the receiver identify the RV before data demodulation.
Jargon. RV (redundancy version): which slice of the mother code a transmission carries. Puncturing: sending only a subset of a longer code’s bits. The puncture pattern is optimized to maximize first-transmission (RV0) decode probability while keeping the incremental gain high.
6.3 Why the combining is principled
The receiver combines by adding LLRs: LLR_combined = LLR_1 + LLR_2 + …. For independent AWGN between transmissions this is maximum-likelihood optimal, because the magnitudes already encode reliability and no explicit SNR weighting is needed. On fading channels the 4 s gap between transmissions means each transmission likely sees a different fade state, so the combine also buys time diversity for free.
IR beats chase at real decoder operating points (not just at the Shannon limit, where 2-transmission IR and 2-transmission chase are near-equivalent around −18.5 dB) for three reasons. Practical belief-propagation decoders converge more reliably on lower-rate codes, the finite-length penalty shrinks at lower rates, and new parity bits carry more information than repeated identical bits. Net: 1 to 2 dB at practical operating points.
6.4 Zero signaling overhead
The redundancy version is carried by Costas-array pattern variants (RV0 = [0,2,3,1], RV1 = [1,3,2,0], RV2 = [3,0,2,1]). The receiver identifies the RV during sync acquisition, before data demodulation, using a coherent CPM-Costas discriminator measured at better than 99% accurate with under 1% false detection down to −11 dB, so it knows which slice to expect. Total extra bits for IR-HARQ: zero. It rides entirely on existing protocol structure.
6.5 What this buys
Two sets of figures live here. The measured numbers come from the live joint-turbo combiner and the full live pipeline, validated in simulation and on the Windows cross-build. The design-analysis numbers assume idealizations (independent AWGN, no QRM, no operator delay). Both are simulation results (see §9).
- Measured combiner gain (joint iterative turbo combining): +1.3 dB in AWGN and +3.2 dB under 1 Hz / 1 ms fading, both at 3 transmissions.
- Measured through the full live pipeline: about +2.5 dB threshold shift and about 2× QSO completion in the −11 to −13 dB zone. That is the headline live result.
- Design analysis. IR-HARQ’s sweet spot is the −17 to −20 dB SNR range. At −20 dB, simulated throughput is about 4.5 bps for IR against about 0.3 bps for chase combining. Three-transmission IR-HARQ reaches roughly a −21 to −21.8 dB threshold, on par with and possibly a touch beyond FT8’s commonly cited −21 dB, in 12 seconds total (3 × 4 s). A full QSO at −20 dB (“typical DX conditions”) completes in about 43 s, still faster than FT8’s roughly 60 s at the same SNR.
- Backward compatible. A non-IR station just decodes RV0 (standard LDPC(174,91)), unaware of the RV mechanism. If an IR station’s RV1 is not acknowledged, it falls back to resending RV0 so a legacy station can chase-combine two standard copies.
- Cheap to track. At most 348 bytes of 8-bit LLRs per in-progress station (174 + 87 + 87). A hundred simultaneous in-progress decodes come to about 34 KB. LLRs are discarded after a 30 s slot expiry when no matching transmission arrives.
- Surfaced in the UI. An HARQ.RVn decode badge showing how many RVs were combined, an HARQ on/off toggle (default on), and a session rescue counter tallying frames recovered by combining.
7. The two tiers: TempoFast vs TempoDeep
Both tiers carry the same 77-bit payload and the same LDPC(174,91) FEC. Only the modem, frame length, and T/R clock differ.
7.1 TempoFast: coherent, conversational
- 4-CPM, coherent turbo equalization, 4 s cycle, roughly −15 dB AWGN threshold in simulation.
- Wins when the path is stable: short to medium haul, ground wave, quiet bands, and any time you want a real conversation cadence.
- Loses under fading and multipath. Coherence is the weak point. Because it is coherent it extracts the most information per second of air time, and coherence is exactly what multipath and Doppler spreading destroy.
7.2 TempoDeep: non-coherent, fading-tolerant
TempoDeep is the answer to TempoFast’s fragility on bad paths.
- Modulation. Non-coherent 8-FSK: 8 orthogonal tones, 3 bits/symbol, Gray coded.
- Rate and spacing. Baud = 6.25 Hz, tone spacing = baud = 6.25 Hz, so occupied data bandwidth is 8 × 6.25 = 50 Hz.
- Sampling. 12 kHz, 1920 samples/symbol. A 1920-point FFT gives exactly 6.25 Hz per bin, so each of the 8 tones lands cleanly on its own bin.
- Frame. A linear chirp preamble (about 0.64 s, 4 symbol periods, swept across the 50 Hz band for time and frequency sync) plus 58 data symbols (174 ÷ 3). The on-air frame is 119,040 samples (9.92 s) inside a 15 s T/R slot.
- Decode. Chirp sync, per-symbol FFT energy per bin, then soft-decision LDPC belief propagation. No carrier phase is tracked anywhere.
Why it exists: because it never relies on carrier phase, TempoDeep survives fading that collapses coherent modes. In simulation its AWGN 50% threshold is about −18.6 dB and it loses only about 3.7 dB under per-symbol Rayleigh fading, where coherent modes can lose 10 dB or more. That small fading penalty is the entire reason the tier exists.
TempoDeep acquisition is full-passband. The receiver decodes every signal across 200 to 2900 Hz per slot, like TempoFast’s Costas search. It runs a three-stage scan: a coarse chirp-correlation carrier sweep on a 12.5 Hz grid with pre-folded replicas, a median-threshold peak pick, then a full CRC-14-gated decode per survivor, in roughly 3 to 4 s per slot. The receive offset is a waterfall marker and transmit-pairing hint rather than the sole decode carrier.
7.3 When each wins
- Stable path, want conversation speed: TempoFast.
- Fading, multipath, marginal DX, willing to slow down for reliability: TempoDeep.
- Both carry the same messages, at different speed and robustness tradeoffs, and the operator picks from a visible toggle on every transmission.
8. Fair comparison to FT8 / FT4 / JS8
The honest framing: TempoFast trades raw sensitivity for speed and adds an IR-HARQ path. It is not a sensitivity win over FT8.
| TempoFast | TempoDeep | FT8 | FT4 | JS8 (Normal) | |
|---|---|---|---|---|---|
| Modulation | 4-CPM (h=1/2, BT=0.3) | 8-FSK | 8-GFSK | 4-GFSK † | 8-FSK (JS8) ‡ |
| Demodulation | Coherent (design) | Non-coherent | Non-coherent | Non-coherent | Non-coherent |
| Channel symbols | 99 (12 sync + 87 data) | 4 sync + 58 data | 79 | 105 | FT8 frame |
| Symbol rate | 28 Bd | 6.25 Bd | 6.25 Bd | about 23.4 Bd | 6.25 Bd |
| Occupied BW | not spec. (est. 42 to 67 Hz) | 50 Hz | about 50 Hz | about 90 Hz | about 50 Hz |
| T/R cycle | 4 s | 15 s | 15 s | 7.5 s | 15 s (also 30/10/6) |
| TX time / cycle | 3.54 s | 9.92 s | 12.64 s | 4.48 s | 12.6 s |
| Payload | 77-bit | 77-bit | 77-bit | 77-bit | 77-bit |
| FEC | LDPC(174,91) + CRC-14 | LDPC(174,91) + CRC-14 | LDPC(174,91) + CRC-14 | LDPC(174,91) + CRC-14 | LDPC(174,91) + CRC-14 |
| Sync | 3× 4×4 Costas | linear chirp | 3× 7×7 Costas | Costas | 7×7 Costas |
| HARQ / incr. redundancy | Yes (live, on by default) | No | No | No | No |
| AWGN threshold (2500 Hz) | ≈ −15 dB (sim) | ≈ −18.6 dB (sim) | ≈ −21 dB | ≈ −17.5 dB | (FT8-class) |
| Fading penalty | large (coherent) | ≈ 3.7 dB (sim) | significant under fast fading | — | — |
† FT4 is described as 4-GFSK (four-tone FSK with Gaussian smoothing, per the K1JT/K9AN/G4WJS protocol paper). Some sources use the looser label “4-MFSK.” Because the protocol applies Gaussian smoothing, 4-GFSK is the accurate description. ‡ JS8 is “Jordan Sherer designed 8-FSK,” built directly on FT8’s 8-FSK frame.
Key reads from the table:
- Sensitivity. FT8 at about −21 dB is the most sensitive single-shot mode. TempoFast at about −15 dB sits roughly 2.5 dB below FT4 (about −17.5 dB), and gives up roughly 6 dB to FT8 in exchange for a much shorter cycle and the IR-HARQ path. This is directly analogous to how FT4 itself trades about 3.5 dB of sensitivity against FT8 for roughly half the cycle time. TempoFast pushes that lever further and adds incremental redundancy. (Some JS8 secondary sources quote FT8 theory near −24 dB. That is not the standard operational figure. Use about −21 dB.)
- The structural difference. Every one of FT8, FT4, and JS8 is a one-shot LDPC block code per frame with no HARQ. Reliability comes from strong FEC plus the operator manually repeating whole transmissions. TempoFast’s IR-HARQ, live and on by default, is the only scheme here that accumulates redundancy across retransmissions via joint turbo combining. It is TempoFast’s own design and has not been benchmarked head-to-head against these modes on the air.
- The other structural difference. FT8, FT4, and JS8 are non-coherent, with no carrier-phase tracking, which is a fundamental property of incoherent FSK detection. TempoFast is coherent CPM by design, which is what lets it be fast and still useful, at the cost of fading fragility that TempoDeep exists to cover.
- JS8 context. JS8Call is built directly on the FT8 frame (same LDPC(174,91) plus CRC, 7×7 Costas) with a directed-calling, keyboard-to-keyboard, heartbeat, relay, and store-and-forward layer on top. It is the closest existing conversational analog to what Tempo does, and it inherits FT8’s non-coherent, no-HARQ transport and its 15 s baseline cycle (with selectable 30/10/6 s modes).
Comparison sourcing note. The FT8, FT4, and JS8 figures here are web-sourced. The TempoFast and TempoDeep numbers are the project’s own simulation figures and were not benchmarked against these modes on the air. Do not read the FT8, FT4, and JS8 thresholds beyond the cited values.
9. Status and caveats (read before you draw conclusions)
The honest caveats, in order of how much they should temper what you just read:
- The protocol closes real RF links. The first over-the-air TempoFast decode was on 2026-07-21, and the first two-station Tempo QSO (KD9TAW and N9UM, 6 m) completed on 2026-07-26. The single biggest risk in the project, whether a new waveform works outside a simulator, is retired.
- Sensitivity figures are still simulation-only. Both the TempoFast threshold (about −15 dB AWGN) and the TempoDeep thresholds (about −18.6 dB AWGN, about 3.7 dB fading penalty) are bench numbers from AWGN and Rayleigh-fading sweeps. Real propagation, QRM, and operator behavior are not in the simulation.
- Decode rate against SNR on real bands is the open gate. This is the top remaining protocol item and the thing that blocks calling Tempo operationally reliable. Honest on-air reports (band, dial, tier, distance, conditions, decodes against expectations) are the single most useful contribution anyone can make.
- IR-HARQ is live, and not yet on-air-characterized. Joint iterative turbo combining of RV0/RV1/RV2 is wired end to end and on by default, the QSO sequencer drives RV escalation, and RV detection runs better than 99% accurate down to −11 dB. The gains quoted in §6 are simulation results.
- Clock discipline matters more here than on FT8. See §5.2. A few tenths of a second of UTC error is invisible on FT8 and was fatal to Tempo before the transmit offset was corrected. Both stations need a current build.
- Low-confidence details are flagged as such. The 1.5 to 2 dB turbo-equalization gain is a medium-confidence design estimate. The occupied bandwidth is not a published constant. Where this document says “designed to” rather than “is,” that wording is deliberate.
- Coherence is a design claim. TempoFast’s coherent CPM is the author’s own protocol design, described here as designed and simulated behavior rather than an independently measured property.
Architecture footnotes
- libtempo is Qt-free, built from Fortran and C/C++ over FFTW3, exposing a clean C ABI. It reuses WSJT-X (GPLv3) infrastructure (77-bit packing, LDPC(174,91), FFTW) and adds the TempoFast CPM trellis, matched-filter bank, BCJR, Costas sync search, RV detection, and joint IR-HARQ turbo combining. TempoDeep adds the non-coherent M-FSK detector and full-passband acquisition. Rust crates provide the safe FFI wrapper.
- The same library carries Nexus’s FT8 and FT4 decoders, built from WSJT-X’s own DSP sources (currently tracking upstream 3.0.2). That tier is the production core of the application and is no longer experimental.
- Published Windows binaries are cross-compiled on Linux targeting Windows via mingw-w64, statically linked including the gfortran runtime, so no MinGW runtime DLLs are needed.
10. Summary
TempoFast is a coherent 4-CPM turbo modem on a four-second conversational cycle, sharing the WSJT-X 77-bit payload and LDPC(174,91) FEC with the modes you already know, so the messages are familiar even though the waveform is not. Its distinguishing bets are coherence (more information per second, at the cost of fading fragility), the 4 s cycle (conversation rather than slideshow), and IR-HARQ (redundancy that accumulates across retransmissions via joint turbo combining, which is unique among amateur weak-signal text modes). TempoDeep backstops the fading fragility with a non-coherent tier on the same payload.
TempoFast does not out-sensitize FT8. It trades roughly 6 dB of raw single-shot reach for speed and an incremental-redundancy path. Both tiers have now closed real links on the air, including a completed two-station QSO. What is still owed is a proper on-air decode-rate-against-SNR characterization, and that is where reports from other operators matter most.
Grounding: the waveform, FEC, and sync constants come from the modem source in libtempo/ and the Rust wrapper crates. The IR-HARQ schedule and the design-analysis throughput and threshold figures in §6 come from the project’s IR-HARQ protocol-design analysis. The measured combiner and pipeline gains come from the live HARQ validation harness. All §6 figures are simulation results, not on-air measurements.
Author: KD9TAW. License: GPL-3.0. Repository: GitHub · mirrored on SourceForge.
Run it, read the source
TempoFast and TempoDeep ship inside Nexus. Get them on the air, or read the protocol write-up and the modem source on GitHub.