Docs · Using SondeFox

Decoder support

Every decoder in SondeFox runs inside a portable C++17 core with no radio, USB, or UI dependencies. The same code powers the Android app and the host-side sonde_replay CLI. This page explains the decode pipeline and gives the current status of each sonde type.

How decoding works

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

  1. IQ capture

    The SDR streams over USB OTG (12-bit real samples from an Airspy, synthesized to IQ in software, or native 8-bit IQ from an RTL-SDR), and the capture bridge pushes complex-float 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. 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

Radiosonde decoder support status
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 becomes available once the 51-subframe calibration accumulator fills. Validated against real flights (humidity checked against frame-matched SondeHub data and official sounding archives) and cleared to publish telemetry to SondeHub.
DFM17 (Graw) Beta Detection, framing, and GPS extraction with Hamming(8,4) error correction. The decode has been independently validated against SondeHub's multi-station data, so DFM17 telemetry is cleared to publish to SondeHub. Caveat: DFM serials are unreliable until they stabilize across several frames.
DFM06 / DFM09 (Graw) In validation Same decoder path as DFM17: detection, framing, and GPS extraction with Hamming(8,4) error correction. Decodes locally; SondeHub upload is held until validation completes. The serial caveat above applies here too.
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. Decodes locally; SondeHub upload is held.
iMet-4 / iMet-1-RS (Intermet) In validation AFSK (Bell-202) decode with CRC-checked GPS and PTU frames. Engages automatically when tuned inside the met band. Decodes are shown on-device only; iMet fixes are not uploaded to SondeHub yet.
iMet-54 (Intermet) Roadmap Type is recognized in the registry; 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 have not had yet is enough real flights, with genuine fading, Doppler, and frequency drift, to be independently validated. That is exactly where beta testers help most. If DFM06/09, M10/M20, or iMet sondes fly near you, your field reports and IQ recordings move a decoder from "in validation" to validated.

How a decoder earns its badge

SondeFox is in beta, and we keep the tiers strict: RS41 and DFM17 are the only types cleared to publish to SondeHub, roadmap types are never listed as supported, and "in validation" means exactly that. A decoder's status does not advance until its output has been independently validated against real signals in the field. If a listed status ever looks stale, tell us at [email protected].