Encode and decode FT8 and FT4 weak-signal digital mode transmissions in audio WAV format. FT8 is the most popular amateur HF digital mode since 2018, using 8-GFSK at 6.25 baud with LDPC(174,91) FEC and 77-bit structured messages (callsigns, grid locators, signal reports). FT4 is a faster contest variant. Use this skill whenever the user mentions FT8, FT4, WSJT-X, weak signal, Joe Taylor, K1JT, amateur radio digital, ham radio FT8, HF digital mode, FT8 decoder, grid locator, Maidenhead, CQ call, or wants to create/analyze FT8/FT4 audio WAV files. Covers encoding (messages to WAV) and decoding (WAV to text).
Encode and decode FT8 and FT4 weak-signal digital mode transmissions used in amateur radio HF weak-signal communications.
FT8 (Franke-Taylor design, 8-FSK) was developed by Joe Taylor K1JT and Steve Franke K9AN and released in WSJT-X in 2017. It has become the most popular amateur HF digital mode since 2018 for making contacts under weak signal conditions. FT4 is a faster variant designed for contest use.
This codec handles the complete FT8/FT4 signal chain:
Perfect for ham radio operators and SDR hobbyists who record HF bands and want to decode FT8/FT4 transmissions from their recordings.
FT8:
FT4:
FT8/FT4 supports several message types encoded in a 77-bit payload:
Standard messages: Two callsigns (28 bits each) + grid locator (15 bits) + type (3 bits)
K1JT W9XYZ EN37 (contact with grid)K1JT W9XYZ -15 (signal report in dB)CQ calls: CQ K1JT FN20 (callsign + own grid)
Free text: Up to 13 ASCII characters from the FT8 alphabet
Telemetry: 18 hex digits
Signal reports: R-01 to R+30 or -01 to +30 dB
For decoding, reverse the pipeline:
python3 scripts/ft8_encode.py output.wav --message "CQ K1JT FN20" --freq 1000 --mode ft8
python3 scripts/ft8_decode.py input.wav --mode ft8 --freq 1000
To auto-search for signals across the audio spectrum:
python3 scripts/ft8_decode.py input.wav --mode ft8 --all
Run the comprehensive test suite:
python3 scripts/ft8_test.py
Tests cover: