# RFPI — Satellite Ground Station

A Raspberry Pi and RTL-SDR ground station that predicts METEOR passes, records 137.9 MHz LRPT, decodes weather imagery, catalogs every attempt, and mirrors the results to a desktop archive.

- URL: https://tomshanks.dev/projects/rfpi
- Period: 2026-09 → present
- Capabilities: RF sensing and software-defined radio; Remote sensing and Earth observation; Unattended field infrastructure; Spatial visualization and 3D representation; Engineering tooling and delivery

## System

- orbital elements (Celestrak, SatNOGS fallback, disk cache)
- Skyfield pass prediction
- RTL-SDR Blog V4 at 137.9 MHz, 1.024 Msps
- SatDump LRPT decode (CADU → MSU-MR products)
- SQLite catalog per pass
- hourly mirror to workstation
- browser image explorer

## Claims and evidence

- **Decoded METEOR-M2 3 and METEOR-M2 4 LRPT passes to imagery from a Raspberry Pi 3B and an RTL-SDR on a Denver roof.** _(implemented)_
  - measurement: first usable decodes — 2 passes, 24 image products, 2026-09-14 (54° and 65° peak elevation)
  - measurement: archive to 2026-10-04 — 255 recorded passes (116 LRPT, 63 FM, 76 APRS) · 42 with imagery · 120 placed on the globe
  - measurement: decode elevations — roughly a third of the 42 passes with imagery peaked below 50°; the lowest near 26° (peaks predicted from each pass's saved TLE)
  - artifact: pass dataset — https://tomshanks.dev/projects/rfpi/orbit-globe.json
  - page: case study — https://tomshanks.dev/projects/rfpi
- **Each eligible received pixel becomes one oriented Gaussian on a modeled spherical Earth; scenes are public, hashed and reproducible. Depth is not reconstructed.** _(implemented)_
  - measurement: M2-4 scene — 66,916 Gaussian primitives from one pass
  - artifact: manifest with SHA-256 per file — https://tomshanks.dev/projects/rfpi/gaussian/manifest.json
  - artifact: m24-earth.splat — https://tomshanks.dev/projects/rfpi/gaussian/m24-earth.splat
  - source: hero point-field component and received frame — https://github.com/Tom-Shanks/spatial-fields/tree/main/received-surface
- **The station kept scheduling through a multi-hour upstream orbital-elements outage using a disk cache and a second source; the decoder is fed from a local orbital file so its refresh dropped from minutes to about a second.** _(implemented)_
  - method: operations — five systemd user units, 15-minute watcher, fix journal
  - page: case study — https://tomshanks.dev/projects/rfpi
