Docs · Using SondeFox

Decoder support

Every decoder in SondeFox runs inside libsonde, a portable C++17 core with no radio, USB, or UI dependencies — the exact same code powers the Android app, the host-side sonde_replay CLI, and the desktop SDR++ plugin. This page explains the decode pipeline and gives an honest status for each sonde type.

How decoding works

From antenna to telemetry, one frame of a radiosonde signal passes through this chain:

  1. IQ capture

    The Airspy streams 12-bit samples over USB OTG; the capture bridge synthesizes complex IQ and pushes blocks into a lock-free ring for the DSP thread.

  2. Channelize & demodulate

    A DC blocker, frequency translator, and decimator isolate the sonde's channel (about ±5 kHz for RS41), then a narrow-FM/GFSK demodulator recovers the baseband waveform.

  3. Bit sync

    Symbol-timing recovery locks onto the bit clock (4800 baud for RS41), and matched-filter header correlation identifies the sonde type and finds frame boundaries.

  4. Frame decode

    The frame is de-whitened and split into its sub-packets — for RS41, TLV packets carrying serial, GPS, and PTU data inside a 320-byte frame.

  5. Error correction

    Forward error correction repairs channel damage — two interleaved Reed-Solomon RS(255,231) codewords for RS41, Hamming(8,4) for DFM — and per-packet CRC-16 checks gate what counts as a valid frame.

  6. Telemetry

    The parser converts raw fields into position, velocity, altitude, and UTC time (ECEF → WGS84 for RS41), plus temperature and humidity once enough calibration data has accumulated. Results feed the map, the chase pointer, and (opt-in) SondeHub.

Because the core is hardware-agnostic, every decoder can be exercised offline: sonde_replay plays recorded .cf32 IQ or .wav files through the identical pipeline, which is how new decoders are developed and regression-tested before they ever touch a live signal.

Status matrix

Sonde type Status Notes
RS41 (Vaisala) Beta Full decode: serial, GPS position/velocity, and PTU with real calibration math. Reed-Solomon RS(255,231) error correction; PTU unlocks after the 51-subframe calibration accumulator fills. Validated end-to-end against synthetic IQ; live over-the-air reception from a real Airspy is what the beta is proving in the field.
DFM06 / DFM09 / DFM17 (Graw) In validation Detection, framing, and GPS extraction wired through the pipeline with Hamming(8,4) error correction. Caveat: DFM serials are unreliable until they stabilize across several frames.
M10 / M20 (Meteomodem) In validation Shared decoder with checkM10 checksum verification. M10 runs at ≈9616 baud vs the M20's 9600; the two are disambiguated by the frame's type byte.
iMet-4 / iMet-54 (Intermet) Roadmap Registry entry and detection surface exist; decoder not yet implemented.
LMS6 (Lockheed Martin) Roadmap Planned; not yet implemented.
Meisei Roadmap Planned; not yet implemented.
MRZ Roadmap Planned; not yet implemented.
MTS01 Roadmap Planned; not yet implemented.
What "in validation" means

These decoders are implemented and unit-tested against synthetic signals — the framing, error correction, and GPS extraction all pass on generated test data. What they haven't had yet is a real flight: over-the-air captures with genuine fading, Doppler, and frequency drift. That is exactly where beta testers help most — if DFM or M10/M20 sondes fly near you, your field reports (and IQ recordings) move a decoder from "in validation" to validated.

Honest by design

SondeFox is in beta, and we keep the tiers strict: only RS41 is marketed as working, roadmap types are never listed as supported, and "in validation" means exactly that — a decoder's status doesn't advance until it has proved itself against real signals in the field. If a listed status ever looks stale, tell us at [email protected].