Skip to main content

What is Baud Rate?

Baud rate is the rate at which symbols (signal changes) are transmitted per second. In FSK modulation, where each symbol represents one bit, the baud rate equals the bits per second (bps).
While baud rate and bit rate are often used interchangeably in FSK modulation, they technically differ in systems where one symbol represents multiple bits.

Supported Baud Rates

Minimodem supports a wide range of baud rates, from very slow (45.45 bps) to fast (1200+ bps):

Low Speed (< 100 bps)

  • Default mark: 1585 Hz
  • Default space: 1415 Hz (shift: -170 Hz)
  • Bandwidth: 10 Hz
  • Data bits: 5 (Baudot code)
  • Stop bits: 1.5
Classic radioteletype standard used in amateur radio and maritime communications.
minimodem --rx rtty
minimodem --tx rtty < message.txt
  • Mark: 1400 Hz
  • Space: 1800 Hz (shift: 400 Hz)
  • Bandwidth: 10 Hz
  • Data bits: 5 (Baudot code)
  • Stop bits: 2.0
Telecommunications Device for the Deaf standard.
minimodem --rx tdd
minimodem --tx tdd < message.txt

Medium Speed (100-400 bps)

  • Default mark: 1270 Hz
  • Default space: 1070 Hz (shift: 200 Hz)
  • Bandwidth: 50 Hz
  • Data bits: 8 (ASCII)
  • Default framing: 1 start bit, 1 stop bit
Standard for 300 baud modems, widely used in early computer communications.
minimodem --rx 300
minimodem --tx 300 < data.txt
  • Mark: 980 Hz
  • Space: 1180 Hz
  • Data bits: 8
  • Default framing: 1 start bit, 1 stop bit
ITU-T V.21 standard, similar to Bell 103 but with different frequencies.
minimodem --rx V.21
minimodem --tx V.21 < data.txt

High Speed (≥ 400 bps)

  • Default mark: 1200 Hz
  • Default space: 2200 Hz (shift: -1000 Hz)
  • Bandwidth: 200 Hz
  • Data bits: 8 (ASCII)
  • Default framing: 1 start bit, 1 stop bit
High-speed standard used for caller ID and other applications.
minimodem --rx 1200
minimodem --tx 1200 < data.txt
  • Mark: 2083.33 Hz
  • Space: 1562.5 Hz
  • Data bits: 8
  • Start bits: 0
  • Stop bits: 0
  • Sync byte: 0xAB
Specific Emergency Alert System protocol with no framing bits.
minimodem --rx same
  • Mark: 1300 Hz
  • Space: 1700 Hz
  • Data bits: 39
  • Start bits: 8
  • Stop bits: 0
European train control system protocol.
minimodem --rx uic-train
minimodem --rx uic-ground

Custom Baud Rates

You can specify any arbitrary baud rate as a number:
# Receive at 150 bps
minimodem --rx 150

# Transmit at 2400 bps
minimodem --tx 2400 < data.txt

Automatic Frequency Selection

Minimodem automatically selects appropriate mark/space frequencies based on the baud rate:
if ( bfsk_data_rate >= 400 ) {
    autodetect_shift = -(bfsk_data_rate * 5 / 6);
    if ( bfsk_mark_f == 0 )
        bfsk_mark_f = bfsk_data_rate / 2 + 600;
    if ( bfsk_space_f == 0 )
        bfsk_space_f = bfsk_mark_f - autodetect_shift;
    if ( band_width == 0 )
        band_width = 200;
}

Samples Per Bit

The number of audio samples per bit is calculated as:
samples_per_bit = sample_rate / baud_rate
For example, at 48000 Hz sample rate and 300 baud:
samples_per_bit = 48000 / 300 = 160 samples
Higher baud rates require fewer samples per bit, which can reduce accuracy. Lower baud rates provide more samples per bit, improving reliability.

Frame Structure

A typical frame consists of:
  1. Start bit(s): Signal the beginning of data (default: 1 bit)
  2. Data bits: The actual information (5, 7, or 8 bits)
  3. Stop bit(s): Signal the end of data (default: 1 bit)

Example: 8N1 (8 data bits, No parity, 1 stop bit)

Frame: [start][b0][b1][b2][b3][b4][b5][b6][b7][stop]
Bits:    0     d   d   d   d   d   d   d   d    1
Total frame duration = (1 + 8 + 1) × (1 / baud_rate) seconds

Configuring Frame Parameters

# 7 data bits
minimodem --rx -7 300

# 8 data bits (default with --ascii)
minimodem --rx --ascii 300

# 5 data bits (Baudot)
minimodem --rx --baudot 45.45

# Custom start/stop bits
minimodem --rx --startbits 2 --stopbits 1.5 300
Fractional stop bits (e.g., 1.5) are supported in transmission and represent timing durations, not actual bit counts.

Bandwidth Requirements

The bandwidth parameter affects receiver sensitivity and selectivity:
Baud RateDefault BandwidthPurpose
< 100 bps10 HzNarrow filter for weak signals
100-399 bps50 HzBalanced filtering
≥ 400 bps200 HzWide filter for fast data
Custom bandwidth can be specified:
minimodem --rx --bandwidth 100 300
Bandwidth must not exceed the baud rate, as the code restricts: if (band_width > bfsk_data_rate) band_width = bfsk_data_rate

Performance Considerations

Sample Rate Selection

The default sample rate is 48000 Hz, but you can adjust it:
minimodem --rx --samplerate 44100 1200
Higher sample rates provide:
  • More samples per bit (better accuracy)
  • Higher Nyquist frequency (support for higher frequencies)
  • Increased CPU usage

Frame Overscan

Minimodem uses a 50% overscan strategy to handle slightly faster-than-expected signals. The decoder scans 0.5 bit-width beyond each expected frame position to track timing drift.
float fsk_frame_overscan = 0.5;
unsigned int nsamples_overscan = nsamples_per_bit * fsk_frame_overscan + 0.5f;

Timing Accuracy

Minimodem reports timing accuracy when carrier is lost:
### NOCARRIER ndata=245 confidence=2.156 ampl=0.482 bps=299.87 (rate perfect) ###
or with skew:
### NOCARRIER ndata=245 confidence=2.156 ampl=0.482 bps=303.21 (1.1% fast) ###
This helps diagnose clock drift between transmitter and receiver.

See Also

Build docs developers (and LLMs) love