Skip to main content

General Questions

Minimodem is a general-purpose software audio FSK (Frequency-Shift Keying) modem. It’s a command-line program that can:
  • Decode (receive) audio modem tones at any specified baud rate
  • Generate (transmit) audio modem tones at any specified baud rate
  • Work in real-time via system audio devices
  • Process audio files in batch mode
  • Support various standard FSK protocols
It’s essentially a software implementation of the modems that were once common for connecting computers via phone lines or radio.
Minimodem supports multiple FSK protocols:
  • Bell103 (300 bps) - Classic 300 baud modem
  • Bell202 (1200 bps) - Common for Caller-ID and packet radio
  • V.21 (300 bps) - ITU-T V.21 standard
  • RTTY (45.45 bps) - Radioteletype, popular in amateur radio
  • TTY/TDD (45.45 bps) - Telecommunications Device for the Deaf
  • NOAA SAME (520.83 bps) - Weather alert broadcasts
  • Caller-ID (1200 bps) - Telephone caller identification
  • UIC-751-3 (600 bps) - Train-to-ground communication
  • Custom rates - Any floating-point baud rate value
You can also specify custom baud rates and frequencies for experimental or proprietary protocols.
Minimodem is focused on FSK modulation and doesn’t support:
  • AX.25 framed packets - Use ax25 tools instead
  • Modem control (“AT”) commands - Not a Hayes-compatible modem
  • DTMF tones - No telephone dialing tone generation
  • PSK, QAM, or other modulation schemes - FSK only
  • Error correction protocols - Raw data only, no built-in error correction
For packet radio (AX.25), use minimodem with tools like direwolf or soundmodem.
Yes! Minimodem is released under the GNU General Public License version 3 (GPLv3).
  • Free to use, modify, and distribute
  • Source code available on GitHub
  • Contributions welcome
  • Created by Kamal Mostafa
See the Contributing guide for how to get involved.

Technical Questions

Default: 48000 Hz (48 kHz) works for most applications.Guidelines:
  • Low baud rates (< 300 bps): 24000 Hz or 48000 Hz
  • Medium baud rates (300-1200 bps): 48000 Hz (default)
  • High baud rates (> 1200 bps): 48000 Hz or higher
  • Very high rates (> 6000 bps): May need 96000 Hz or higher
Setting sample rate:
minimodem --rx --samplerate 44100 1200
Sample rate must be at least 2× the highest frequency in your signal (Nyquist theorem).
In FSK (Frequency-Shift Keying):
  • Mark frequency - Represents binary ‘1’ (or ‘mark’ state)
  • Space frequency - Represents binary ‘0’ (or ‘space’ state)
Example (Bell202):
  • Mark: 1200 Hz (binary 1)
  • Space: 2200 Hz (binary 0)
Setting custom frequencies:
minimodem --tx --mark 1200 --space 2200 1200
Auto-detection:
minimodem --rx --auto-carrier 1200
The confidence value is a quality metric based primarily on SNR (signal-to-noise ratio).Typical values:
  • inf (infinity) - Perfect signal, rate perfect
  • 5.0+ - Very clean signal
  • 2.0-5.0 - Good signal
  • 1.5 - Default minimum threshold
  • 1.0-1.5 - Noisy but potentially usable
  • < 1.0 - Too noisy
Acts as “squelch” control:
# Only accept clean signals
minimodem --rx --confidence 3.0 1200

# Accept noisier signals
minimodem --rx --confidence 1.0 1200
Start with the default (1.5) and adjust based on your signal quality.
Default: Minimodem uses PulseAudio by default on Linux (if available).PulseAudio:
  • ✅ Easier for desktop systems
  • ✅ Better integration with modern Linux desktops
  • ✅ Automatic device management
  • ❌ May have higher latency
ALSA:
  • ✅ Lower latency
  • ✅ Better for embedded systems
  • ✅ More direct hardware control
  • ❌ Requires manual device selection
Using ALSA:
minimodem --tx --alsa 1200
minimodem --rx --alsa=hw:1,0 1200
Using sndio (BSD systems):
minimodem --tx --sndio 1200
ASCII (8-N-1):
  • 8 data bits per character
  • No parity
  • 1 stop bit (typically)
  • 256 possible characters
  • Default for most baud rates
Baudot (5-N-1.5):
  • 5 data bits per character
  • No parity
  • 1.5 or 2.0 stop bits
  • 32 possible codes (uses shift for uppercase/symbols)
  • Used by RTTY and TTY/TDD
Usage:
# ASCII (default)
minimodem --tx --ascii 1200

# Baudot (RTTY)
minimodem --tx --baudot 45.45

# Or use preset
minimodem --tx rtty
Baudot is more bandwidth-efficient but has a limited character set.

Usage Questions

Basic file transfer:On the transmitting computer:
minimodem --tx 1200 < file.txt
On the receiving computer:
minimodem --rx 1200 > received.txt
Tips for reliable transfers:
  • Use a physical audio cable for best results
  • Higher baud rates (1200+) work well over cable
  • Lower baud rates (300 or less) work better for acoustic coupling
  • Consider adding error detection at the application layer
With checksums:
# Transmit
cat file.txt | tee >(md5sum >&2) | minimodem --tx 1200

# Receive
minimodem --rx 1200 | tee received.txt | md5sum
Minimodem doesn’t provide built-in error correction. Add checksums or use a higher-level protocol for critical data.
Yes! Minimodem works great with radio:Amateur radio RTTY:
# Connect radio audio output to computer
minimodem --rx --auto-carrier rtty
Transmitting (requires transmitter):
echo "CQ CQ CQ DE CALLSIGN" | minimodem --tx rtty
Common frequencies:
  • RTTY: 14.085 MHz (20m), 7.040 MHz (40m)
  • NOAA SAME: 162.400-162.550 MHz
Tips:
  • Use --auto-carrier for unknown transmitter frequencies
  • RTTY typically uses 170 Hz shift
  • May need --inverted depending on your radio’s mode (USB/LSB)
  • Adjust --confidence for weak signals
For packet radio (AX.25), use minimodem with soundmodem or direwolf software.
Using audio files:
  1. Generate a test transmission:
    echo "Hello World" | minimodem --tx --file test.wav 1200
    
  2. Decode the test file:
    minimodem --rx --file test.wav 1200
    
Local loopback test:
# Terminal 1
minimodem --tx 1200

# Terminal 2  
minimodem --rx 1200
Type in Terminal 1, and it should appear in Terminal 2 (if speakers and microphone are close enough).Run built-in tests:
make check  # After building from source
Depends on your medium:
  • Audio cable: Up to 12000 bps or higher
  • Acoustic (air): 100-300 bps
  • Telephone line: 1200-2400 bps
  • FM radio: 300-1200 bps
  • HF radio: 45-300 bps (RTTY/PSK)
Experimental high rates:
# Try very high rates with audio files
echo "test" | minimodem --tx --file test.wav 12000
minimodem --rx --file test.wav 12000
Higher baud rates require higher audio quality and are more susceptible to noise and distortion.
Yes! Minimodem supports both MDMF and SDMF Caller-ID formats.Receiving Caller-ID:
minimodem --rx callerid
Tips:
  • Connect your phone line to computer’s audio input (use appropriate interface)
  • Caller-ID is transmitted between the first and second ring
  • You may need --inverted depending on your country/system
  • Signal appears for only a short time, so start listening before the call
Testing with a file:
minimodem --rx --file callerid-sample.wav callerid
Ensure you have proper isolation between phone line and computer audio input. Use a commercial phone-to-audio adapter.

Platform-Specific Questions

Yes, using Cygwin:Minimodem can be built and run on Windows using Cygwin. See the Installation guide for detailed instructions.Key points:
  • Requires Cygwin environment
  • Uses PulseAudio for audio
  • Must configure with --without-alsa --without-sndio
  • First run may show PulseAudio warning (run twice)
Quick test:
echo hello | minimodem --tx 100 -M 1000 -S 3000
Yes!Installation:
brew install fftw libsndfile pkg-config

# Build from source
./configure
make
sudo make install
Or use the install script:
./install-dependencies-macos.sh
Audio backend:
  • macOS build typically uses file-based audio
  • For real-time audio, consider using PulseAudio via Homebrew
  • Or use sox for audio device bridging
Yes! Minimodem has been used on:
  • Raspberry Pi - Works great, all features available
  • OpenWRT routers - Successfully tested
  • Embedded Linux - Designed for low-resource systems
Optimization for embedded:
  • Use --without-pulseaudio and use ALSA directly
  • Lower baud rates reduce CPU usage
  • Adjust --limit to reduce computational load
  • Consider --without-benchmarks at build time
Example for low-power systems:
minimodem --rx --limit 1.5 300
Non-FPU systems (older embedded CPUs) can still run minimodem but may need lower baud rates.

Troubleshooting

If you’re experiencing issues:Useful diagnostic command:
minimodem --version
minimodem --benchmarks  # If compiled with benchmark support

Still Have Questions?

Documentation

Browse the complete documentation

Examples

See practical command examples

Use Cases

Learn about real-world applications

GitHub

View source code and report issues

Build docs developers (and LLMs) love