Receiving NOAA images with RTL-SDR

Posted on Sun 25 August 2019 in sdr

During summer brake, I set out for a tech adventure together with my son. We wanted to do weather predictions ourselves. Or at least pretend to do so.

What sparked the idea, was a beautiful tweet from Receiving GOES satellites was a bit of a high bar for a first attempt, so I started out with receiving NOAA images. Contrary to the GOES satellites, NOAA's are in Low Earth Orbit and have an analogue downlink at 137MHz, which does not require a dish and amplifier to receive.

I followed the guide I found in the NOAA_APT GitHub repo. We started out by building a very simple V-dipole antenna out of some leftover 1.5mm² electrical wiring. A V-dipole is not the best antenna to receive a circular polarized signal, but let's first see if we get this to work. I connected the two dipole wires to a short piece of coax to connect it to the Belling-Lee connector that fits my RTL-SDR dongle.

our V-dipole antenna

There used to be a lot of NOAA-satellites active, but as of this writing, only three satellites remain in service: NOAA-15, NOAA-18 and NOAA-19. These satellites are in polar orbits around the earth, completing one revolution every 102 minutes. But since the earth is rotating underneath them, they fly over different parts of the planet every time. Figuring out when the satellite will be overhead requires a degree in orbital mechanics. Or the use of some software, such as gpredict. It will calculate where the satellites are at this moment (or an arbitrary moment), and tell you when the next pass will be at your location (or any location, for that matter). It also plots the "ground track" of the satellites, which shows that the satellite visits different parts of the planet on every orbits.

ground track of NOAA-18

To increase my odds, I picked a pass with very high elevation. The higher the satellite is above the horizon, the stronger its signal can be received. And since I had no idea what to expect, I could use every advantage available. gpredict predicted a pass with 85º elevation for today, so I made sure I was ready to receive "something": Antenna oriented for a North-South trajectory, flat on a plastic table in our garden. Things go quick: in 15 minutes, the satellite rises above the horizon, flies overhead, and disappears on the other horizon.

polar plot of satellite position

I had GQRX open, tuned at 137.872500MHz, 300kHz bandwidth. I figured that I'd want the signal a bit away from DC to avoid trouble demodulating. NOAA-18 transmits at 137.9125MHz, with an RF bandwidth of 34kHz, which gives me 23kHz room above DC to accommodate any callibration issues and doppler shift. I enabled the FM demodulator, but all I heard was noise. But the waterfall already showed some promise.

screenshot of GQRX during early acquisition

A bit of patience allowed the satellite to climb higher above the horizon, and that yielded a stronger signal. I could hear the expected 2.4kHz beeping and "tic-toc" sound of the sync signals.

screenshot of GQRX at peak

The next step was a bit of a disappointment. I wanted to demodulate the FM signal sitting at ~40kHz to baseband using a command line tool. But I didn't find any tool to do this. So I took the easy way out and simply replayed the recording in GQRX, recording the demodulated output to a WAV-file. One note if you intend to use WXtoImg: GQRX records in 16bit 48kHz, while WXtoImg requires 11kHz. Luckily, NOAA_APT is happy to accept pretty much anything.

The result was more impressive that I expected. It was a relatively cloudless day, so you could clearly see the coastlines of Denmark and Great Britain, especially on the Infrared channel (right image). Based on the description of the APT signal, the image contains one visible spectrum image (channel 1, 580nm - 680nm, left), and an infrared image (channel 4, 10.30µm - 11.30µm, right).

noaa-18 image