Receiving weather satellite images with Softrock
The National Oceanic and Atmospheric Administration (NOAA) manages a few satellites in low earth orbit. There are three actively transmitting APT signals at the moment, NOAA15, 17, and 18. Each of these satellites passes overhead a few times a day. I’ve been interested in learning how to receive their signals for a while now, and I’ve finally succeeded!
A bit ago, I bought a “SoftRock” SDR (Software Defined Radio, read the excellent 3-part article by Bob Larkin at the ARRL site.) receiver kit from Tony Parks. (A note about his site, he puts a few kits up for sale a few times a month, so he’s almost always sold out.) I think SDR is really, really interesting. I don’t want to get too bogged down in the details of it, because it’s not the point of this post, but I’m going to briefly discuss it. Basically, the idea is that you want to have some minimum amount of electronics to deal with the antenna; letting your computer handle the rest. This can take a variety of forms, but the simplest is the QSD, or Quadrature Sampling Detector.
It sounds complex, but it’s quite like using a strobe light to look at a spinning wheel. The bright light of the strobe “samples” the world at a given interval. If it strobe rate matches the speed of the wheel, the wheel appears still. Stretching the analogy a bit further, imagine that information is written on the wheel. Using the strobe you can read it, even if it’s spinning. While that is an awful analogy, but the idea is that we can sample the radio signal at (nearly) the same frequency as the carrier of our desired signal. When we do this, the signal we want magically appears at the output. If we’re using AM (or its derivatives such as LSB or USB) we can even listen to it directly. It only gets a bit more complex when we consider the quadrature part. Quadrature just means “90 degrees out of phase.” Using another copy of the radio signal, and a sampling clock in quadrature, we can cancel out some noise and interfering signals. Sorry for the tangent, if you read this far (without falling asleep), I recommend you read the linked articles at the top of this paragraph. The math isn’t too hard, and it’s sooo powerful!
This isn’t an image of my SoftRock, it’s a slightly different version, but I don’t have an image handy. It’s a really easy kit to build, and it’s fairly inexpensive. More than that, it’s really easy to use. Once it’s all setup, you just attach it to your computer, power it, and install the antenna!
Once you’ve attached the receiver hardware to your computer, you need some software to use it. This is an image I took of a very well written SDR program on the Mac called DSP Radio. On the left side of the spectrum window, there is the live radio spectrum coming from the satellite. The green box around it represents the bandwidth of my software radio receiver. In a traditional radio, this bandwidth would be set by a filter circuit. Most communication radios only have about 15 kHz of bandwidth. This makes them unable to properly receive satellite weather images. Traditionally, you would have to build or buy a specially-built satellite receiver. With SDR, I can move a slider to scale the bandwidth way, way up! In this case, I’m using about 37 kHz of bandwidth! Notice that there’s all this empty space on the right, this is radio spectrum that I’m receiving, but there’s nothing there. Maybe you can notice the shadow of the satellite data on the right; this is an “image.” These images are the bane of all radio designers. The true test of a receiver (other than sensitivity) is how well these images are suppressed. In this case, they’re suppressed rather well, notice how bright the lines are on the left compared to the right.
The DSP Radio program takes the signals from the Softrock through the audio input of the computer. When you have something tuned in through its interface the demodulated signal appears at the audio output. I’ve been recording these signals as well as passing them to another program called WXtoIMG. This program is not great, I’ll be honest. It’s barely maintained, and you can tell it’s an ugly cross-platform mess. To even get it to work is tricky. But, what it does, it does well. The image at the head of this post was generated using it. When I made that image, I literally had to connect the audio out of one computer to the audio in of another. I’m not sure how I’m going to get around that issue. It can accept data in the form of wav files, provided that they’re linear PCM sampled at 11,025 Hz with at least 16 bit samples. The problem is that the nice political boundaries, lat/lon lines and ground image comes from the program. It does this by computing the location of the satellite and where on the earth its photographing. It has to decode the audio in real time for this to work, which means that I can’t use an audio file. For you to play around with, if you wish, I’ve included a sample wav file. It starts before the satellite pass and ends after, so if begins and ends with static.
NOAA15-baseband.wav (large file warning: 28 MB)
The included audio can be used to create the image below. I used WXtoImg to generate it, though the open source WXAPT could be used under Linux. This image was taken when the satellite was traveling south-north, so I had to flip it vertically and horizontally. On the right side of the image is the A channel, which is visible light, and the left side is the B channel, infrared. Normally, these channels are reversed left-to-right. The stripes and color bars help the decoder line up the image and adjust brightness, contrast, and gamma. (Right-click here to download full-size image: 2080 x 1260 pixels)
My next step is to write some shell scripts on a Linux box to automate this whole process. My goal is to have a page that has the latest satellite image and an archive available at all time. But first, I have to write a post about the antenna I built to receive these signals. Stay tuned!