hfmodem

W9SSJ / hfmodem

HF data modem

hfmodem supports PACTOR, VARA, ARDOP and experimental sabir modes with shared audio, rig control and host connections.

Run a recording
Pre-alphaAGPL-3.0-only
01 / PACTOR-1 timingPACTOR-1 · 1.25 s per cycle
One PACTOR-1 cycle drawn to scale: a 0.96 second data packet from this station, then a 0.12 second control signal back from the gateway, in a 1.25 second raster. W9SSJ — data packet, 0.96 s gateway — control signal, 0.12 s turnaround measured at 78.6 ms → 0 0.5 1.0 1.25 s 1.75 2.25
A PACTOR-1 exchange with KB5LZK on 40 m: 0.96 s data packets, 0.12 s control signals and a measured 78.6 ms turnaround. Each cycle includes time for switching and propagation.

Modes

Protocol guides

Interactive diagrams describe carrier placement, frame structure, coding and link control.

Mode comparison

Carrier placement, timing and mode parameters

Results

Observed results

Evidence records document radio transfers, remote reception and codec checks.

01

PACTOR

shrike

Mail sent over PACTOR-3 and received over PACTOR-1

Confirmed outbound delivery through WS8EOC over PACTOR-3. Four messages received through KB5LZK over PACTOR-1, with a normal session close.

Evidence
02

VARA

kestrel

Mail received and delivered

Mail reception through K0SI at BW2300 and confirmed outbound delivery through KB8AY. Multiple deliveries confirmed by the operator. The KB8AY delivery used a registered third-party client SID.

Evidence
03

ARDOP

besra

Mail sent and received

hfmodem received messages through WW2MI and W6IDS. An outbound message through WW2MI reached its destination. Codec checks against ardopcf cover all 59 frame types in both directions.

Evidence
04

sabir

experimental

Beacon decoded at remote receivers

The hfmodem decoder recovered 40 m beacons from recordings at public receivers 103 and 302 miles away. Two transmitted gears decoded at both receivers.

Evidence

Run

Replay a recording

Install with Python 3.11 or later. The replay example runs a station from an audio file with transmission disabled.

Terminal / from the repository root
git clone https://github.com/sstjohn/hfmodem
cd hfmodem
python -m venv .venv
./.venv/bin/pip install -e packages/hfhost -e "packages/hfmodem[dev]" -e packages/creance
./.venv/bin/python -m pytest -rs
./.venv/bin/hfmodem station examples/replay.toml

Some tests require a local corpus or an ardopcf binary; -rs lists skipped tests. This example checks station startup: it feeds an ARDOP recording to a VARA lane.