Repository navigation
FT8 RX
Receives and decodes FT8, the 15-second digital mode used on the HF amateur bands, and prints each decoded message with the audio frequency it was found on. The decoder is ft8_lib running on the baseband core. No time source is needed: the receiver finds the slot boundary from the signals on the band.
This is an external app and must be present on the SD card in the APPS/ folder.
- Frequency: The dial frequency, as WSJT-X shows it. Frequency step is 100 Hz.
- RF Amp (0 or 1): Enables/disables the internal RF amplifier.
- LNA gain (0–40): Low-noise amplifier gain. See Receive Quality Issues.
- VGA gain (0–62): Variable-gain amplifier gain. See Receive Quality Issues.
- RSSI / Channel: Two bars. The upper one is the RF level in front of the demodulator. The lower one is the peak level in the channel filter and turns red at -3 dBFS, where the decoder starts losing signals. See Gain.
- Volume: Audio output volume. The SSB audio the decoder listens to goes to the speaker or headphone output, so the band can be heard.
-
Band: Presets for the standard FT8 dial frequencies, 160 m to 6 m: 1.840, 3.573, 5.357, 7.074, 10.136, 14.074, 18.100, 21.074, 24.915, 28.074 and 50.313 MHz. Tuning by hand to any other frequency shows
---.
The second line shows the band, the state of the slot synchroniser and the number of messages decoded since the app was opened.
- Searching (red): nothing usable in the passband yet.
- Heard, no decode (yellow): an FT8 transmission is in the passband, but no message has passed its CRC yet. Usually the capture window is not aligned with the slot.
- Syncing (yellow): a message decoded, and the receiver is refining the window to a fraction of a symbol.
- Locked (green): the window follows the slot. Decodes now arrive every 15 seconds while the band is active.
A cold start walks the 15-second slot in four steps, so the first decode can take up to about two minutes. Two minutes of an empty band return the receiver to Searching.
One line per decoded message: the message text on the left and its audio frequency on the right. The frequency is the offset from the dial, 200–2500 Hz, which is where the station sits in the passband. Two stations on 7.074 MHz at 837 Hz and 1312 Hz are two signals, and WSJT-X lists them the same way.
Lines that start with CQ are green.
FT8 sends a callsign as a hash once both stations have exchanged it in full. A hashed callsign shows as <...> until the receiver has heard its owner, then as <CALLSIGN>. The receiver keeps the 32 most recent callsigns for this.
The console holds 17 lines. Older lines scroll off and are not kept; there is no log file.
The receiver has no AGC, because the decoder needs linear amplitude. Too much gain flattens the waterfall the decoder builds, and messages that are plainly audible stop decoding. The lower bar under RSSI is the check: red means the input clips, and LNA or VGA should come down until it is blue again. On HF the bar reads well above half even at zero gain; red is the signal to act on.
The baseband runs at 3.072 MHz and decimates through 384 kHz, 48 kHz and 24 kHz to 12 kHz, demodulates SSB and feeds the audio to a bank of 368 Goertzel filters spaced 6.25 Hz apart across the passband, one FT8 tone per bin. Each of the 79 symbols is 1920 samples. The waterfall of one slot goes through Costas sync, LDPC decoding with 10 iterations and a CRC check; up to 10 messages come out of one slot.
The Goertzel bank takes almost all of the baseband core: the CPU counter reads about 99 %, and some sample buffers are dropped. A slot that loses samples decodes fewer messages than WSJT-X would on the same antenna.
Frequency and gains are saved to rx_ft8.ini on the SD card when App Settings is enabled in the global Settings menu.
How to collaborate
Contributing Guidelines
Trusted contributors
How to ask questions correctly
- PortaPack Versions (which one to buy)
- Features
- HackRF Versions
-
Description of the hardware
- Enclosure/cases
- Care of PortaPack/HackRF
- Repairs
- Mods
🔧 Troubleshooting
- FAQ
- SolveBoard
- 🔌 Boot & power
- 💾 Firmware & recovery
- 📡 Receive & transmit
- 💳 SD card
- 🔗 USB connectivity
- 🧩 Apps
📥 Receivers
- 2-Tone-RX
- ACARS
- ADS-B
- AFSK
- AIS Boats
- Analog TV
- APRS RX
- Audio
- BLE RX
- Detector
- EPIRB RX
- ERT Meter
- Flex RX
- Fox-Hunt
- FPV-Detect
- FT8 RX
- gfxEQ
- Level
- Meteor
- Morse RX
- NOAA
- NRF
- POCSAG
- ProtoView
- Radio
- Radiosonde
- RDS RX
- RTTY RX
- Scanner
- Search
- Signal Hunter
- Spectrum Analyzer
- SSTV RX
- SubCar
- SubGhzD
- Tetra RX
- Time Sink
- TPMS RX
- VOR RX
- Weather
- WeFax
- WMBus RX
📤 Transmitters
- 2-Tone-TX
- ADS-B(S) TX
- Adult Toys
- APRS TX
- BHT Xy/EP
- BLE TX
- BLESpam
- Burger Pager
- CVS Spam
- EPIRB TX
- Flex TX
- FlipperTX
- GPS Sim
- Hopper
- Jammer
- KeeLoq TX
- Key fob TX
- LGE Tool
- MDC-1200 TX
- Morse TX
- OOK
- OOK Brute
- OOK Editor
- P25 TX
- POCSAG TX
- RDS
- RTTY TX
- SAME TX
- Security+ TX
- Signal gen
- Soundboard
- Spectrum Painter
- SSTV
- TEDI/LCR
- TouchTunes
- TPMS TX
- VOR TX
- 🔄 Transceivers
- 🟡 Recon
- 🔴 Capture
▶️ Replay- 🖲️ Remote
- 🔍 Looking Glass
🛠️ Utilities
↳ 🐛 Debug Menu (in Utilities)
🎮 Games
⚙️ Settings
Compilation of the firmware
- Compile on WSL with ninja
- How to compile on Windows faster with WSL 2
- Compile on macOS (Docker)
- Compile on macOS (Homebrew)
- Using Docker and Kitematic
- Docker command-line reference
- Using Buddyworks and other CI platforms
- Notes for Buddy.Works (and other CI platforms)
- Using ARM on Debian host
- All in one script for ARM on Debian host
- Compile on Kali Linux (Debian-based)
- Compile on Arch based distro (exclude Asahi), or other weird distros
- General compiling guide (Linux, for experts)
- Dev build versions
- Notes About ccache
Software Dev Guides
- Code contribution rules
- Documentation standards & guidelines
- Create a Simple App
- Create a Simple External App
- External Apps informations
- Widgets
- UI positioning with macros
- SD Card (DEV)
- Access Radio Hardware
- Interpret Guru meditation crashes
- Create a Complex App
- Theme-system
- Debug via SWD & JTAG
- Debug with serial
- I2C drivers
- Unit tests
Tools
- Research
- UI Screenshots
-
Maintaining
- Creating a prod/stable release (Maintainers only)
- Maintaining rules
- Development States Notes