How to Build a Ground Station for LEO Constellations

By | Wednesday, June 24, 2026

What Makes LEO Ground Stations a Different Beast

If you’ve ever worked with a classic geostationary setup—a big, beefy dish pointed at a satellite that barely moves—you’ll find LEO constellations a bit of a shock. These birds fly low and fast, skimming the horizon at 300 to 1,200 km, and they’re gone in minutes. You can’t just park a dish and sip data. You need a system that swings quickly, tracks precisely, and hands off signals without a hiccup. I’m Henrik Lindqvist, and after a few decades of getting my hands dirty with this stuff, I’ve learned that the real work is in the slew rates, the link budgets, and the software that ties it all together.

A modern LEO ground station isn’t a single antenna—it’s a coordinated network of smaller, agile dishes or phased-array panels. The idea is to grab as much contact time as possible across multiple satellites without breaking the bank. You’re juggling telemetry downloads, command uploads, and sometimes relaying data between spacecraft. The hardware has to be tough, the RF chain has to be clean, and the software has to be smart enough to keep up.

Satellite dish array under night sky
Multiple antennas are often needed to maintain continuous coverage for LEO constellations.

Link Budget: Do the Math Before You Spend a Penny

I’ve seen too many people buy a shiny dish first and then wonder why their data is full of holes. The link budget comes first—always. For LEO, it’s a moving target. The satellite’s range, elevation, and speed all change during a pass, so you need to calculate the worst-case scenario. Start with the satellite’s EIRP and your station’s G/T. A typical X-band downlink might push 10–15 dBW. Your job is to make sure you can close the link at the lowest planned elevation, usually 5 or 10 degrees above the horizon. At those low angles, atmospheric noise and ground clutter eat into your margin fast. Don’t fool yourself by only calculating for a perfect overhead pass.

Let’s run a quick example. A satellite at 500 km altitude and 5 degrees elevation is about 2,800 km away. At 8 GHz, free-space path loss is roughly 179 dB. Add in a couple dB for atmospheric absorption, maybe half a dB for polarization mismatch, and another half for pointing error. To pull a clean 1 Mbps QPSK signal with a bit-error rate of 10-6, you’ll need a carrier-to-noise density ratio around 60 dB-Hz. With a system noise temperature of 150 K on a clear day, your G/T should be at least 10 dB/K. That points you toward a 1.2- to 1.8-meter dish with a solid low-noise amplifier. Skip the LNA optimization, and you’ll be fighting noise forever.

Close-up of parabolic dish antenna feed horn
The feed horn and LNA are what really set your system noise temperature.

Choosing Your Weapon: Spinning Dishes or Staring Panels

You’ve basically got two paths: motorized parabolic dishes or electronically steered phased arrays. A 1.8-meter dish in X-band gives you about 41 dBi, and the gain-per-dollar is hard to beat. But you need a positioner that can whip around at 10–20 degrees per second in azimuth and 5–10 in elevation without losing accuracy. Direct-drive motors with absolute encoders are the way to go—they avoid the backlash and drift you get with gear-driven mounts. Wind is a real problem; a radome helps, but it adds cost and a bit of RF loss. I’ve seen dishes shake themselves out of alignment during a storm, and that’s a service call nobody wants.

Phased arrays are the newer option. A panel with 256 or 1,024 elements can steer the beam electronically in microseconds, and it can track several satellites at once. The catch? Lower gain per element and a higher price tag. A 0.5-meter array might only give you 25–30 dBi, so you either need a bigger array or more power from the satellite. But for constellations with hundreds of spacecraft, the ability to track multiple targets with zero moving parts is a huge advantage. Maintenance drops, reliability goes up. I’ve watched a phased-array installation pay for itself in two years just by avoiding downtime.

The SDR Backend: Where the Waveforms Live

Forget the old hardware modems that were locked to one modulation scheme. LEO constellations switch waveforms depending on the pass—QPSK when the signal is weak, 8PSK or 16APSK when the satellite is overhead and you can push more bits. A software-defined radio like the Ettus X310 or LimeSDR, paired with GNU Radio or custom FPGA firmware, gives you that flexibility. I usually put the physical layer on the FPGA for low latency and let a general-purpose processor handle the higher-layer protocols. It’s a setup that can grow with the constellation instead of becoming obsolete in two years.

Doppler compensation is something you can’t ignore. At 8 GHz, a satellite moving at 7.5 km/s can shift the frequency by ±200 kHz. Your receiver has to chase that shift in real time, tweaking the local oscillator based on the predicted pass geometry. Grab the latest TLEs from Space-Track.org, compute the range-rate, and feed that into your SDR’s frequency correction loop. A phase-locked loop with a wide capture range can mop up the remaining error. On the uplink side, pre-compensate the transmit frequency so the satellite sees its nominal receiver frequency—otherwise, its PLL might never lock, and you’ll be shouting into the void.

Rack-mounted SDR equipment with signal analysis display
A rack of SDRs and processing units forms the digital backbone of a flexible ground station.

Orchestrating a Network of Stations

One ground station is a lonely island. To serve a constellation properly, you need a network spread across different longitudes and latitudes. The coordination software—sometimes called a mission control system or ground segment as a service—schedules passes across all antennas, sorts out conflicts, and automates where the data goes. I’ve built these using Orekit for orbit propagation and custom Python schedulers. The trick is deterministic pass prediction: you need to know exactly when a satellite rises, sets, and hits max elevation for each site, then assign antennas based on priority. Low-latency links between stations and a central cloud server make real-time handoffs possible.

Think about data volume. A single LEO satellite in a constellation like Spire or HawkEye 360 might dump 1–2 GB per pass. With 10 satellites and 5 passes each per day, you’re looking at 50–100 GB daily. Your network has to ingest, store, and forward that data without dropping packets. RAID arrays with hot-swappable drives are a start; for petabyte-scale operations, a distributed file system like Ceph is a better fit. And don’t forget security—encrypt all telemetry and command links. Even commercial constellations attract interference and spoofing attempts.

Picking a Site and Battling the Elements

Where you plant the antennas is just as important as the hardware. Hunt for radio-quiet spots, away from microwave links, cell towers, and radar. Spend at least a week with a spectrum analyzer, scanning all the frequencies you’ll use. Terrain can be a mixed blessing: hills block interference but also chop off your horizon view. For LEO, you want a clear line of sight down to 5 degrees elevation in every direction—or at least along the primary orbital paths. If the constellation is in polar orbits, a high-latitude site gives you more passes per day.

Weather isn’t just about rain fade. Snow and ice on a dish surface can detune it and add several dB of loss. Heated reflector covers or hydrophobic coatings are worth the investment. Wind deforms large dishes and can stall positioners; check the manufacturer’s survival wind rating and don’t push it. Lightning protection is non-negotiable—ground all antenna mounts, put surge suppressors on RF and power cables, and use fiber optic links for data to keep your equipment building electrically isolated.

Commissioning: Where the Real Work Begins

Once the hardware is bolted down, testing is what separates a reliable station from a constant headache. Start with static measurements: check antenna gain with a calibrated source, like a satellite beacon or a test transmitter on a drone. Verify G/T by pointing at cold sky and a known hot source. Then move to dynamic tracking—use a drone or a LEO satellite with a well-known ephemeris to test slew rates, pointing accuracy, and Doppler tracking. I’ve seen stations that looked perfect on the bench but fell apart when tracking a real satellite because the control loop oscillated at high speeds.

Software commissioning is just as demanding. Simulate passes with recorded IQ data to validate the demodulator chain. Test the scheduler with historical TLEs to make sure it handles overlapping passes without crashing. Run soak tests—24/7 operation for a week—to catch memory leaks, disk-full conditions, and thermal drift in oscillators. Only then should you connect to a live satellite. And when you do, start with a low-risk, high-elevation pass where the link margin is generous. Rushing this step is how you turn a commissioning into a fire drill.

FAQ: Common Questions on LEO Ground Station Design

What’s the smallest antenna I can get away with for a reliable LEO downlink?

It depends on the frequency band and the satellite’s EIRP, but for typical X-band downlinks at 50–100 Mbps, a 1.2-meter dish is a practical minimum. In S-band, a 0.6-meter patch antenna might work if the satellite transmits at higher power. Always run the link budget for your constellation’s worst-case pass. A bigger antenna gives you more margin for rain, low elevations, and interference, but it also costs more and catches more wind. For phased arrays, the equivalent aperture size is what matters—a 0.5-meter panel with 256 elements can match a 1.2-meter dish in some scenarios, but at a higher price.

How do you handle Doppler shift in real time?

I use a two-step approach. First, predict the Doppler profile from the satellite’s TLE using a propagator like SGP4. That gives you a frequency offset curve for the entire pass. Feed this into your SDR’s local oscillator as a pre-compensation. Second, run a fine-tracking loop—a Costas loop for BPSK/QPSK or a decision-directed PLL for higher-order modulations—to correct residual errors from oscillator drift or TLE inaccuracy. The loop bandwidth should be wide enough to track the rate of change of Doppler (up to 1 kHz/s for Ku-band) but narrow enough to reject noise. A typical setting is 100–500 Hz loop bandwidth.

Can one ground station serve multiple satellites at the same time?

Yes, with the right architecture. A phased array can form multiple independent beams, each tracking a different satellite. With parabolic dishes, you need multiple antennas, each with its own SDR chain. The scheduler assigns satellites to antennas based on priority and pass geometry. A common setup is 2–4 dishes per site, each capable of tracking one satellite, plus a backup dish. The limiting factor is often the SDR processing power—each simultaneous downlink needs a dedicated FPGA or GPU for demodulation. Plan your computing resources accordingly.

Wrapping Up: What I’ve Learned the Hard Way

Building a ground station for LEO constellations is a systems engineering challenge that rewards pragmatism. Don’t over-specify the antenna if your link budget doesn’t need it. Don’t under-invest in software testing. And always design for maintainability—label every cable, document every configuration, and train local staff on basic troubleshooting. The constellation operators I work with value reliability over raw performance. A station that works every pass, even with 3 dB less margin, is worth more than a high-gain monster that fails when it rains.

Start with a clear requirement document, build a conservative link budget, choose antennas that match your tracking needs, and integrate SDRs that can evolve with the constellation’s waveforms. Test ruthlessly, then automate everything. That’s the Lindqvist method, and it hasn’t let me down yet.