A standalone C++20 Olivia MFSK modem library extracted from fldigi — with all FLTK, libsamplerate, and fldigi-global dependencies removed — and packaged as a self-contained static library with a clean C++ API.
olivia-modem is a C++20 static library
that provides Olivia MFSK encode and decode as a self-contained module with no
external runtime dependencies. It wraps Pawel Jalocha's original
MFSK_Transmitter and
MFSK_Receiver C++
templates — the same DSP core used in fldigi — and exposes them through a clean
modern interface that has no FLTK, no fldigi globals, and no audio framework.
Audio is always 8000 Hz floating-point double,
supplied by the caller. The library is suitable for embedding in desktop
applications, Raspberry Pi utilities, and any POSIX system with a C++20
compiler and libm.
Olivia is an MFSK digital mode designed for reliable weak-signal HF communication. Unlike most HF digital modes, it is built around a forward error correction layer — every character is protected by Walsh–Hadamard FEC before being transmitted — which makes it substantially more robust than modes that transmit characters directly. Olivia can often copy text through conditions where other modes have already failed.
The mode is configurable across a wide range of bandwidths and tone counts, allowing operators to trade throughput against robustness depending on conditions. The 8/500 mode (8 tones, 500 Hz bandwidth) is the most widely used and is active on frequencies including 14.106 MHz USB.
Olivia is interoperable with fldigi and all other standard Olivia implementations.
Olivia's FEC is a Walsh–Hadamard code applied to each transmitted character before it reaches the MFSK modulator. Each character is encoded into a block of tones × bits-per-symbol coded symbols; the receiver applies the corresponding inverse transform and recovers the original character even if a substantial fraction of the symbols are corrupted by noise or selective fading.
The practical effect is significant: Olivia 8/500 is routinely decoded at SNRs of −10 dB and below in a 500 Hz bandwidth — conditions under which even a received carrier is difficult to hear by ear.
The FEC operates transparently. The caller supplies text to
modulate() and
receives characters from the decode callback — the FEC encoding and decoding
happen internally with no additional API surface.
| Mode | Tones | Bandwidth | Notes |
|---|---|---|---|
| 8/500 | 8 | 500 Hz | Most common; excellent sensitivity |
| 4/250 | 4 | 250 Hz | Very narrow; weak-signal specialist |
| 8/250 | 8 | 250 Hz | Narrow with more FEC depth |
| 16/500 | 16 | 500 Hz | Deeper FEC at same bandwidth |
| 8/1000 | 8 | 1000 Hz | Higher throughput |
| 16/1000 | 16 | 1000 Hz | Common high-speed mode |
| 32/1000 | 32 | 1000 Hz | Maximum FEC robustness |
The public API is a single header:
include/oliviamodem.h.
Configuration is through an
OliviaConfig struct
with sensible defaults for 8/500.
Requirements: CMake 3.16+, a C++20 compiler, and
libm.
All DSP code — the Jalocha MFSK templates, the FHT, and the synchroniser — is
header-only and compiled in with no additional system library requirements.
Olivia would not exist without the people who designed and built it:
Pawel Jalocha (SP9VRC)
Designer of the Olivia mode and author of the original C++ DSP implementation.
Jalocha published the first version of Olivia in 2003–2004 and made his source
available to the amateur radio community. His
MFSK_Transmitter
and
MFSK_Receiver
C++ templates — header-only, parameterised over tone count and bandwidth — are
the DSP core of this library. The Walsh–Hadamard FEC scheme, the MFSK tone
spacing, the synchronisation structure, and the encoding are all his design.
Dave Freese (W1HKJ) & the fldigi project
fldigi is the most widely used multimode HF digital application on the Linux desktop. Dave Freese and the fldigi contributors integrated Jalocha's Olivia implementation into fldigi in the mid-2000s and maintained it through many years of development. The olivia-modem library extracts that implementation from fldigi's source tree — stripping the FLTK and global-state dependencies — and preserves the GPL-3.0 license under which fldigi is distributed.
The Olivia community
Olivia gained traction on HF through years of use by weak-signal operators who valued its robustness under challenging propagation conditions. The de facto calling frequencies — 14.106 MHz USB for 8/500, 7.073 MHz USB in Europe and elsewhere — were established by that community and represent the operating conventions this library is designed to interoperate with.
olivia-modem is released under the GPL-3.0-or-later license, consistent with its origins in the fldigi source tree.