Step 1
The first step is to download either the source or compiled binary for your system from modem73.app.
If you're building from source, follow along with the instructions in the README or run install.sh if you are on a Debian or Arch based system.
For a precompiled build, find the release that matches your OS and architecture:
arm64Install the package with apt or your system's package manager:
sudo apt install ./modem73_<version>_<arch>.deb
Grab the latest build from the modem73-win releases. The Windows build is a separate fork, ported to Win32 APIs and PDCurses with LLM assisted tooling, so treat it as experimental. If you do not need serial PTT, running the upstream build under WSL is the more stable path.
To build it yourself, everything is vendored under deps/ (aicodix DSP, PDCurses, hidapi, miniaudio, cJSON) and the exe is statically linked, so there is nothing external to install at build or run time. CM108 USB PTT is always enabled.
Native on Windows, from a MinGW64 shell after installing MSYS2:
pacman -S --needed make mingw-w64-x86_64-gcc make CXX=g++ CC=gcc
Or cross compile from Linux:
# Debian/Ubuntu
sudo apt install make g++-mingw-w64-x86-64-posix
make
Either way you end up with modem73.exe.
Step 2
Once installed, you can launch modem73 in any terminal.
modem73
By default it will start in UI mode where you can configure all of the settings.
To navigate the program you can click with the mouse or use the shortcut keys:
On Windows you will want to call the .exe instead:
# Start in UI mode modem73.exe # Start in headless mode modem73.exe --headless # See all options modem73.exe --help
Step 3
The first tab you will want to head over to is CONFIG. Under config, you'll want to configure your:
Input is what the modem decodes. Set this to whatever your radio or sound interface shows up as on the output side.
Output goes the other way. Set this to your radio's input.
Most interfaces present both under the same name. An all in one audio cable shows up as AIOC, and similarly HF rigs like the ICOM-7300 that have internal soundcards will have their own name.
Push to talk is what keys up the radio to transmit. There are five options:
| Option | Use case |
|---|---|
none | Over the air (speaker/mic) or PTT handled elsewhere |
rigctl | HF rigs with CAT control |
VOX | Radios keyed by an audio tone |
COM (serial) | Serial RTS/DTR keying, including the AIOC and Digirig |
CM108 | GPIO keying on CM108 based sound interfaces |
COM (serial) is the straightforward path for HT interfaces. Point it at the serial device your cable enumerates as and pick RTS or DTR to match the cable.
rigctl comes from the Hamlib library. Install it with the libhamlib-utils package or your distro's equivalent:
sudo apt install libhamlib-utils
modem73 connects to rigctl over TCP, so start rigctld with your rig's options first. For an IC-7300:
rigctld -m 3073 -r /dev/ttyUSB0 -s 115200
Run rigctl -l to find the model number for your radio. rigctld runs in the background, listens on port 4532, and gives you both PTT and control of the rig from modem73 itself, including ALC tuning under the RIG tab when rigctl PTT is selected.
Hamlib ships the rigctld.exe binary. Download it from the Hamlib 4.7.2 release, then add its bin folder to your PATH so you can start rigctld from any terminal.
An example that lets modem73 key up and change frequency on an ICOM-7300:
rigctld.exe -r COM3 -m 3073 -s 19200
Replace COM3 with whatever your radio actually enumerates as. -m is the model number, and rigctl.exe -l lists them all.
To check the connection before pointing modem73 at it, drop the d and run rigctl.exe on its own, then type f to read back the current frequency.
Serial PTT takes a COM port rather than a device path. Check Device Manager for the number, and expect it to change after a reboot or a replug.
modem73.exe --ptt com --com-port COM4 --com-line rts
For the All In One Cable, set PTT to COM, pick your COM port, set PTT line to BOTH, and set invert to NORMAL. Note that this differs from Linux, where the AIOC wants invert set to INVERT RTS.
CM108 keying works the same as it does everywhere else:
modem73.exe --ptt cm108 --cm108-gpio 3
Restart modem73 after changing audio or PTT settings.
If audio is working you will see it coming in on the waterfall. To confirm the transmit side, go to UTILS and hit Send random data, or press 2. Your radio should key up and transmit.
Step 4
modem73 has three families of data modems, and all of them decode simultaneously. Between them they cover poor HF propagation through to clean line of sight FM links.
Three things matter on this screen: the modem itself, which you change with the left and right arrow keys, its settings, and the info panel on the right, which updates to show the details of whatever mode and options you have selected.
Use OFDM for anything over FM, and for stable HF SSB links keep modulation under 8PSK.
Modulation runs from BPSK up to QAM4096. Each step up the ladder buys throughput and costs you required SNR.
Coding rate is the balance between data and redundancy. 1/4 carries the most redundancy, 5/6 the least. On a link with a high noise floor or fading, take the lower rate and give up the throughput.
Frame size is how many bytes go out in one transmission: short, normal, or long frames. It also sets how long the modem spends on air.
Postamble adds a second sync marker at the end of the frame. Worth turning on for high noise, busy channels, or HF fading. It costs 0.4 seconds of extra transmit time.
The RDM modes are built for daily HF use and run from RDM-1200 down to RDM-300.
| Mode | Decodes down to | Survives |
|---|---|---|
| RDM-1200 | 5 dB SNR | 1 second of deep fading |
| RDM-600 | near 0 dB SNR | 2 seconds of deep fading |
These are the modes for long distance HF DXing and NVIS.
MFSK is non-coherent, so it decodes without a preamble or sync. Modes run from 32R down to 8.
Keep these around as your weak signal backup.
Every mode decodes at once, which costs CPU. On a Pi Zero 2 or anything else with limited headroom, disable the ones you aren't using under the decoders section.
Step 5
Carrier sense multiple access means listening for stations already talking before you transmit. modem73 is designed for multiple users sharing a channel, so this is worth setting.
Pick a preset by selecting your band and how busy the channel is. From there you can choose between an audio threshold and sync detection.
Enable Sync only when you are running modem73 over HF.
Step 6
Fragmentation handles incoming packets that exceed your frame size by chunking them automatically.
TX blanking stops you from hearing your own packets.
Settings, presets, and the performance log are stored in %APPDATA%\modem73\.
If you are running modem73interface for Reticulum, the interface file goes in %USERPROFILE%\.reticulum\interfaces\.