MODEM73

MODEM73 is an open source software modem that works with any HF, VHF, or UHF radio capable of 2400 Hz of bandwidth.

Also available over rngit:

rns://4cf8a0651c4d73cacd0f93ac1d95e80a/public/modem73

It Just Works, over anything

SSB, AM, and FM are all supported. It's plug and play compatible with any KISS application and works with rigctl, CM108 sound devices, and serial PTT out of the box.

There are three modem families, each suited for covering any possible RF setup from clean line of sight FM links to poor HF band conditions. The receiver decodes all of them at the same time, so one station can hear anything another station sends without switching modes.

OFDM

Based on the open source COFDMTV modem developed by Ahmet Inan / aicodix GmbH. Modulations from BPSK to QAM4096 with code rates from 1/4 to 5/6 and payloads from 256 to 6144 bytes per frame. Rates run from about 790 bits per second to over 13 kilobits per second in the same 2400 Hz.

ROBUST

A set of slow modes built for fading HF paths such as 40 and 80 meter NVIS. Five modes from 1150 bps down to 149 bps in either 2400 Hz or a 600 Hz narrow variant.

MFSK

A non-coherent mode for weak signal propagation and backup links.

Mode tables

On VHF/UHF FM, use any OFDM mode.
On good HF SSB paths, use OFDM at 8PSK 2/3 or below.
On fading/weaker HF paths, use ROBUST modes. For very weak signals or as a backup use MFSK.

OFDM

Bitrate in bps / payload in bytes, by code rate. 2400 Hz bandwidth.

Short frames

Modulation1/41/22/33/45/6
BPSK300 / 64700 / 128900 / 1711000 / 1921100 / 213
QPSK500 / 641100 / 1281400 / 1711600 / 1921800 / 213
8PSK1100 / 2562100 / 5122900 / 6843200 / 7683600 / 852
QAM161000 / 1282100 / 2562900 / 3423200 / 3843600 / 426
QAM642200 / 5124300 / 10245700 / 13686400 / 15367100 / 1704
QAM2562700 / 5125400 / 10247300 / 13688200 / 15369100 / 1704
QAM10243700 / 10247500 / 204810000 / 273611200 / 307212500 / 3408
QAM40964300 / 10248600 / 204811400 / 273612800 / 307214200 / 3408

Normal frames

Modulation1/41/22/33/45/6
BPSK400 / 128800 / 2561100 / 3421200 / 3841300 / 426
QPSK800 / 2561600 / 5122100 / 6842400 / 7682600 / 852
8PSK1200 / 5122400 / 10243200 / 13683600 / 15364000 / 1704
QAM161600 / 5123200 / 10244200 / 13684700 / 15365200 / 1704
QAM642400 / 10244800 / 20486400 / 27367200 / 30728000 / 3408
QAM2563200 / 10246300 / 20488400 / 27369500 / 307210500 / 3408
QAM10244100 / 20488300 / 409611000 / 547212400 / 614413800 / 6816
QAM40964800 / 20489600 / 409612800 / 547214400 / 614416000 / 6816

Long frames

Modulation1/41/22/33/45/6
BPSK428 / 256856 / 5121144 / 6841285 / 7681425 / 852
QPSK856 / 5121713 / 10242288 / 13682569 / 15362850 / 1704
8PSK1275 / 10242551 / 20483408 / 27363826 / 30724245 / 3408
QAM161713 / 10243425 / 20484576 / 27365138 / 30725700 / 3408
QAM642551 / 20485101 / 40966815 / 54727652 / 61448489 / 6816
QAM2563425 / 20486851 / 40969152 / 547210276 / 614411400 / 6816
QAM1024-----
QAM4096-----
ROBUST
ModeBandwidthPayloadAirtimeBitrate
RDM-12002400 Hz512 B3.6 s1150 bps
RDM-8002400 Hz512 B5.2 s781 bps
RDM-6002400 Hz512 B7.0 s585 bps
RDM-3002400 Hz512 B13.8 s296 bps
RDMN-300600 Hz512 B13.8 s296 bps
RDMN-150600 Hz512 B27.5 s149 bps
RDM-1200S2400 Hz172 B1.9 s731 bps
RDM-800S2400 Hz172 B2.7 s513 bps
RDM-600S2400 Hz172 B3.6 s378 bps
RDM-300S2400 Hz172 B7.1 s194 bps
RDMN-300S600 Hz172 B7.0 s196 bps
RDMN-150S600 Hz172 B13.9 s99 bps
MFSK
ModeTonesBandwidthCode ratePayloadBitrate
MFSK-88250 Hz1/219 B34 bps
MFSK-1616500 Hz1/227 B48 bps
MFSK-32321000 Hz1/235 B63 bps
MFSK-32R321000 Hz3/455 B99 bps

Building from source

On a system with apt? Run the installer script:

./install.sh

Or build manually:

# Debian/Ubuntu/Pi
sudo apt install git build-essential libncurses-dev g++

git clone https://github.com/RFnexus/modem73
cd modem73
make

# Optional: move to /usr/local/bin
sudo make install

For CM108 USB PTT support, install libhidapi-dev before building. The Makefile will auto-detect it and enable the feature.

Running

By default, MODEM73 listens for KISS on port 8001 and starts a JSON control port on 8073. See CONTROL_PORT.md for the full spec.

# Start in UI mode
./modem73

# Start in headless mode
./modem73 --headless

# See all options
./modem73 --help

There are five PTT options: NONE (speaker/mic over the air), rigctl, VOX, serial, and CM108.

# rigctl, while rigctld is running
./modem73 --rigctl localhost:4532

# VOX with 500ms lead and 150ms tail
./modem73 --ptt vox --vox-freq 1200 --vox-lead 500 --vox-tail 150

# Serial
./modem73 --ptt com --com-port /dev/ttyUSB0 --com-line rts

# CM108 USB audio interface (GPIO3 is the default)
./modem73 --ptt cm108 --cm108-gpio 3

AIOC

modem73 supports the All In One Cable out of the box. Set PTT to COM, specify your COM port, set PTT line to BOTH and Invert to INVERT RTS. The AIOC usually shows up as /dev/ttyACMx and may change after a restart or replug.

Reticulum

Want to use modem73 with Reticulum? Grab the modem73interface, drop it into ~/.reticulum/interfaces/, and add this to your Reticulum config:

[[MODEM73]]
type = Modem73Interface
enabled = yes
target_host = 127.0.0.1
target_port = 8001
control_host = 127.0.0.1
control_port = 8073

Updating

modem73 includes an update utility. To update to the latest version:

./update.sh