ground-station: Ground Station: The Software-Defined OS for Satellite Passes

An open-source control plane that fuses orbital prediction, SDR orchestration, automated observations, and real-time transcription into one web-native radio stack.

11 min read • View on GitHub • More from sgoudelis

A rooftop radio station fused with a software dashboard. A laptop shows a pass timeline, a dish points toward the sky, and signal lines connect SDR hardware to waveform and transcription panels. The scene explains the article’s core idea: a satellite pass is treated like an automated workflow, not a manual hobby task.
Ground Station turns a pass into a managed event, with hardware, prediction, decoding, and transcription tied together in one control plane.
Key Takeaways

Ground Station is easiest to understand if you ignore the usual satellite-tracking framing. This is not just a nicer Gpredict or another SDR front end. It is a software-defined operating system for a pass: predict it, wake the hardware, tune the radio, record the feed, decode the payload, and put the whole session back to bed when LOS arrives.

A Satellite Pass, Automated Like a Build Pipeline

The repo’s best idea is simple: a pass is a job. Once a satellite crosses the horizon, the system can trigger the observation lifecycle, select the right demodulator, start recording, steer the rotator, and route output into the right storage and transcription path. That makes the station feel less like a bench full of tools and more like a managed service.

That framing matters because radio work has always been full of glue code. Ground Station compresses that glue into a single interface, so the operator spends less time coordinating and more time observing.

Why the Orchestration Layer Is the Real Product

The pass lifecycle works like a state machine. Forecast feeds the scheduled observation, AOS fans out into live subsystems, and LOS collapses everything into stored artifacts and logs.

The orchestration center is `ProcessManager`, which delegates work to demodulator, recorder, and decoder managers while keeping the UI responsive. That is not an implementation detail. It is the product. The software has to coordinate hardware and compute-heavy DSP without blocking the operator or losing the pass.

# Conceptual shape of the orchestration layer
process_manager.start()
process_manager.attach_demodulator(satellite)
process_manager.start_recorder()
process_manager.start_decoder()
process_manager.track_rotator(pass_window)
process_manager.teardown_on_los()

Hybrid concurrency is doing real work here. The backend leans on asyncio for I/O and web responsiveness, then uses multiprocessing for the DSP-heavy path so signal processing does not freeze the rest of the system. In a ground station, that balance is not elegant plumbing. It is the difference between a pass you catch and a pass you miss.

Margin of control

The architecture choice makes sense because SDR and FFT workloads are exactly where Python’s GIL stops being theoretical. I like that the UI can stay alive while the signal chain does heavy lifting. That keeps the operator’s mental model intact.

The Pass Lifecycle: From AOS to LOS

The observation flow begins before the antenna moves. Orbit prediction from TLE data and Skyfield or SGP4 determines the pass window, then the executor turns that forecast into an actual session. When AOS hits, the station wakes up: the SDR powers on, the VFO tunes, the tracker starts steering, and the decoder selected for that satellite takes over.

The important part is that these steps are connected, not merely adjacent. Forecast feeds scheduling. Scheduling feeds observation. Observation fans out into live subsystems. Then the results collapse back into artifacts, logs, and database records at LOS.

StageWhat changesWhat the operator sees
ForecastTLEs are parsed and a pass window is computedA future observation appears on the schedule
AOS triggerThe session starts and hardware is armedThe station wakes up and begins tracking
Active passSDR, decoder, recorder, and rotator run togetherAudio, data, and telemetry arrive in real time
LOS teardownFiles and metadata are finalizedThe UI returns to idle with a complete record

The result is a pass lifecycle that feels deterministic. You are not clicking around to make a dozen things happen in sequence. You are declaring intent and letting the system execute it.

A close-up signal pipeline cutaway on a workbench. A dense stream of IQ samples enters from the left, then splits into multiple lanes for recording, demodulation, decoding, and transcription. The image explains how the software forks work instead of forcing one monolithic process to do everything.
Ground Station treats the signal chain as a fan-out pipeline, which makes the DSP topology visible instead of hiding it behind one black box.

Why the Data Model Matters More Than It Looks

The schema tells the truth about the domain. This is not just audio and frequency. It is transmitter ranges, inversion, UTC-aware timestamps, custom metadata, and a lot of satellite-specific exceptions that do not fit a tidy table.

# The schema points at the real complexity of the domain
transmitter = {
    "uplink_low": 145800000,
    "downlink_high": 437800000,
    "invert": True,
    "metadata": {"satnogs": "compatible", "notes": "custom framing"},
    "timestamp": "UTC-aware"
}

That choice to keep timestamps aware and metadata flexible is a subtle but important sign of maturity. A ground station breaks if time drifts, if the band plan is wrong, or if a satellite needs one-off handling. The model has to accommodate edge cases without turning into a swamp.

Ground Station is a full-featured, open-source software solution for satellite tracking and radio communication. Designed for amateur radio operators, satellite enthusiasts, and researchers, it provides a comprehensive and easy-to-use platform for monitoring spacecraft, controlling radio equipment, and receiving live radio signals from satellites.

sgoudelis, Author/Maintainer · Ground Station GitHub Repository

DSP as a First-Class UI Problem

The project’s DSP topology view is a smart move. It turns the signal chain into something observable. You can reason about queue health, throughput, and bottlenecks the same way you would inspect a production pipeline, which is exactly the right mental model for a system that processes live radio data.

That is where Ground Station feels unusually modern. Old radio software often hides the machinery. This repo surfaces it, which makes troubleshooting and optimization much faster.

The AI Transcription Hook

The transcription path is the feature that makes the whole project feel current. Instead of leaving a pass as an audio file or a waterfall screenshot, the system can route speech through Gemini or Deepgram and turn ephemeral radio into text you can search, skim, and archive.

That changes the value of a pass. It becomes a record, not just a capture. For operators who care about ISS contacts, amateur voice traffic, or live mission chatter, that is a serious upgrade.

Very cool! Automated observations with multiple receivers and audio transcription is sick

flubble, Hacker News User · Hacker News Discussion

How It Compares to SatNOGS and the Usual SDR Stack

Ground Station is competing in a crowded space, but the comparison is cleaner than it first looks. SatNOGS is network-first. Gpredict is tracking-first. Typical SDR stacks are reception-first. Ground Station is orchestration-first.

ProjectPrimary modelStrengthWeaknessBest for
Ground StationUnified pass orchestrationOne control plane for prediction, hardware, DSP, and transcriptionHigh complexity and more moving parts in one repoSingle-station operators who want automation
SatNOGSDistributed station networkShared observation infrastructure and network coordinationLess focused on a single local workflowCommunity stations and shared coverage
Gpredict plus SDR toolsManual tool chainingGreat tracking and flexible reception stackLots of glue work and context switchingPower users who like assembling their own setup

That distinction is the whole editorial point. Ground Station is not trying to win by being one more interface. It is trying to unify the workflow.

The Trade-Offs Behind the Ambition

The ambition cuts both ways. A repo that spans orbital math, multiprocessing DSP, web UI, database migrations, and AI transcription is powerful, but it is also harder to maintain and harder to bus-proof. The more of the station it owns, the more it has to get right.

That trade-off is still worth noticing because it tells you what kind of project this is. It is not a narrow utility built to do one job. It is a serious attempt to make the ground station itself feel like software infrastructure.