Receiving GOES Weather Satellite Images with Raspberry Pi and RTL-SDR: HRIT Decoding
NOAA's polar-orbiting APT satellites are the traditional entry point into weather satellite reception with an RTL-SDR, but they're a low-earth-orbit system — each satellite is only overhead and receivable for about 10–15 minutes per pass, a few times a day. GOES is a different animal entirely: it's a geostationary satellite, parked over one fixed point above the equator, transmitting continuously, 24/7, with no pass scheduling required. The tradeoff is a more demanding RF setup — GOES broadcasts its HRIT (High Rate Information Transmission) data downlink in L-band at much lower signal strength than NOAA's VHF APT signal, requiring a dish antenna and LNA rather than the simple V-dipole or QFH antenna that works fine for APT. This project covers building a GOES HRIT receive setup with a Raspberry Pi and RTL-SDR.
GOES vs. NOAA APT: Why This Is a Different Build
NOAA APTGOES HRIT OrbitLow-earth polar orbitGeostationary (fixed position in the sky) Frequency bandVHF (~137 MHz)L-band (~1.69 GHz) AntennaV-dipole or QFH, omnidirectional, no aiming neededDirectional dish (typically 60cm+), must be precisely aimed and fixed on the satellite's position Signal availabilityOnly during ~10-15 minute overhead passes, a few times dailyContinuous, 24/7, once the dish is aimed correctly Signal strength / setup difficultyRelatively strong, forgiving setupWeak, requires an LNA and precise aiming; noticeably less forgiving Image contentBasic visible/IR imagery, lower resolutionFull-disk and regional imagery across multiple spectral bands, significantly higher resolution and update frequencyAntenna and RF Chain
GOES HRIT reception needs real directional gain, unlike APT's simple omnidirectional antennas. The standard hobbyist approach is a repurposed satellite TV dish (an old DirecTV or similar offset dish in the 60–90cm range works well) with the feed replaced by a purpose-built L-band helical or patch feed designed for the GOES HRIT frequency. A low-noise amplifier (LNA) rated for L-band, mounted as close to the feed as physically possible to minimize cable loss before the signal is amplified, is not optional at this signal level — skipping it is the most common reason a first attempt fails to lock onto the signal at all.
- Dish: An offset-fed satellite dish repurposed from DirecTV/Dish Network equipment is the standard, cost-effective starting point; purpose-sold GOES dish kits also exist for those who'd rather not source and adapt a used dish.
- Feed: A dedicated L-band helical feed sized for the GOES downlink frequency, replacing the dish's original Ku-band LNB feed entirely.
- LNA: Mount directly at the feed, before any significant cable run, to keep the noise figure of the whole chain as low as possible.
- Coax: Low-loss cable (LMR-400 or better) for the run from the LNA to the SDR, since L-band signal loses meaningfully more energy per foot of cheap coax than APT's VHF signal does.
- RTL-SDR: A standard RTL-SDR dongle with good frequency stability (a TCXO-equipped model is strongly preferred over a bare stock dongle, since frequency drift is a real problem for locking onto GOES's narrow, precisely-defined downlink).
Aiming the Dish
Because GOES is geostationary, the dish is aimed once at commissioning and then left fixed — there's no tracking motor needed, unlike a satellite dish following a moving target. Use a satellite-finder app or online GOES look-angle calculator (inputting your latitude/longitude) to compute the azimuth and elevation to your regional GOES satellite (GOES-East or GOES-West, depending on which covers your location), then physically aim and lock the dish to those coordinates. This step benefits from patience — a degree or two of error is the difference between a strong, reliable lock and no signal at all, and fine adjustment while watching signal strength in the receiving software is normal and expected.
Software Chain
- SDR capture/demodulation: Software such as goestools (specifically its gnd and decode components) handles tuning the RTL-SDR to the GOES HRIT frequency, demodulating the signal, and decoding the HRIT data stream into individual image and data packets.
- Packet assembly: HRIT transmits imagery in segments across multiple spectral bands continuously; the decoder software reassembles these segments into complete images as enough packets for a given pass/scan arrive.
- Image processing: The reassembled imagery can be combined into false-color composites, animated loops, and full-disk or regional crops depending on what the software and your interest support — multispectral GOES data supports much richer processing than APT's simpler visible/IR channels.
Running the Pi as a dedicated, always-on receiver (rather than a shared-purpose machine) makes sense given GOES's continuous transmission — unlike an APT setup that only needs to wake up for scheduled passes, a GOES station is most useful left running continuously to build up a steady stream of current imagery.
Common Problems
SymptomLikely Cause No signal lock at allDish aim off by more than roughly a degree; verify look angles and re-aim carefully, or missing/misplaced LNA Intermittent lock, drops frequentlyCable run loss too high for the LNA gain to overcome; shorten the run or use lower-loss cable; also check for a physical obstruction (trees, structures) intermittently blocking line of sight to the satellite Lock achieved but images are corrupted or incompleteRTL-SDR frequency drift (favor a TCXO-equipped dongle) or marginal SNR requiring finer dish aim adjustment Strong signal but no packets decodingSoftware configuration mismatch (wrong satellite/frequency selected, or decoder expecting a different HRIT parameter set) rather than an RF problemIs This Worth It Over APT?
For a first weather-satellite project, NOAA APT remains the easier and cheaper starting point — a simple antenna, no aiming, and results within an afternoon. GOES HRIT is a meaningfully bigger investment in both money (dish, feed, LNA, better cable) and setup effort (precise aiming, more careful RF chain management), but the payoff is a continuously updating, much higher-resolution, multispectral imagery feed instead of a few short low-res passes a day. It's a natural next project for someone who's already run an APT station and wants to go further into satellite RF reception rather than a recommended starting point on its own.
Related Guides
- Build an ADS-B Flight Tracker with Raspberry Pi and RTL-SDR
- Build an APRS iGate and Digipeater with Raspberry Pi and RTL-SDR
- Build a NOAA Weather Satellite Receiver with Raspberry Pi and RTL-SDR: APT Decoding and Image Generation
- How to Install Klipper on Any 3D Printer: Complete Setup Guide
- How to Set Up OpenCV Machine Vision on a Raspberry Pi
- Raspberry Pi: Complete Headless Setup Guide (No Monitor Needed)
- Raspberry Pi: Headless OS Setup
- How to Set Up a Raspberry Pi Headless with SSH and WiFi