Signals from Space! (part 3)
In the last two parts, I used my homebrew software-defined radio to receive weather image signals from the NOAA-19 satellite and spent some time trying to calculate the satellite's speed using frequency shift measurements. This time around, I'm going to demodulate the raw signal and turn it back into the image the satellite captured.
The NOAA-19 APT signal is a relatively simple signal to understand. When the satellite captures an image, it scans through it line-by-line, at a rate of two lines per second. The brightness of the image during scanning is amplitude modulated on to a 2.4kHz carrier tone, and sounds like this:
You can hear the (slightly painful) 2.4kHz carrier tone. Also notice the tick-tock-tick-tock pulse of the signal. Each tick and tock is a sync signal followed by a line of image data. Why a tick and a tock? APT transmits two images at a time, so the "tock" is the sync signal between data from the first and second images.
I rigged up a GNU Radio Companion "patch" to demodulate the APT signal. It's based off a APT decoder by Alexandru Csete. It filters and demodulates the signal and outputs a file of demodulated data.
I tweaked the demodulated file a bit with Python, normalizing the data to the range (0,255) and writing out a byte-per-sample file:
import numpy
raw = numpy.fromfile('words.f32', dtype=numpy.float32)
normalized = raw / max(raw) * 255.0
output_u8 = numpy.array(normalized, dtype=numpy.uint8)
output_u8.tofile('pixels.u8')
Following Alexandru's lead, I used ImageMagick's "convert" to translate the byte-samples to a PNG image:
convert -size 2080x1194 -depth 8 gray:pixels.u8 image.png
And behold! A really noisy satellite image!
There are two images visible, side-by-side. The left side seems to be a visible spectrum image, while the right seems to be infrared. You can see parts of California, Oregon, and Washington. The Columbia River, a few miles from my house, is somewhat visible, too:
This was my first attempt at capturing a satellite signal, so I was using a crappy all-purpose dipole antenna. Hence the wretched amount of noise. But still, for my first attempt, I'm pretty pleased! Now, to build a better antenna…
Comments
Outstanding!
Hey, this is AWESOME! I've been trying to find more APT resources on the internet and then I stumbled on someone trying to do the same things in the same city. Well, not the same…Beaverton is part of Portland, I guess. I've been wanting to build a new antenna. From what I've read, a quadrifilar helix antenna is best for 137mhz APT reception. Are you going to build one of those or a turnstile antenna?
Hi Tony! If you want to talk about radio and APT and antennas and stuff, you should head into Portland every other Monday night and talk to me and my [http://dorkbotpdx.org/wiki/meetings" rel="nofollow">Dorkbot PDX] friends. We also like talking about music synthesis, robotics, 3D printing, art-bots…
I really want to build an antenna for APT, too. The "double-cross" antenna linked in my post is the most interesting to me. $10 at Home Depot should do the trick. The double-cross seems like a turnstile design, with a few tweaks (like the dipoles being at specific, non-right angles). Quadrifilar antennas look pretty awesome – and probably hard to build. Anyway, I'm still debating what to do there. In the meantime, I'm going crazy building front-end filters for my little downconverter prototype. It turns out a lot of the noise and poor sensitivity is from having NO band-select filtering on the front-end. :-) No surprise, really – I'm just an optimist. Anyway, I'll write up the results of using a better filter (and deeply attenuating KGON and KUFO and K103!). Hopefully, my next satellite image won't be such a hopeless mess!
Nice! I shall have to do that. My friend Kevin is majorly into building robotics so maybe I'll drag him with me.
I'm using an old Icom PCR100 computer controlled radio receiver and a wideband scanner antenna, which covers the 137mhz band, but does a crappy job at it. You're right…the QFH antennas look really hard to build. So far I haven't been able to receive a single good APT image. :(
Hmmm. Are you getting an audio signal that sounds modulated, or just noise?
I need to try out my Icom PCR-1000 on APT, just to see how it compares to what I've done already. So far, I've used a funny little homebrew board using the Analog Devices ADRF6850 chip – definitely not a sophisticated receiver. I was using the crappy dipole that came with my PCR-1000 – just a telescoping antenna like you'd get on a cheap transistor radio, with a 50-Ohm coax cable hanging out the end. I was standing outside, and was waving the antenna around quite a bit to get the best signal. And I was also trying to capture during a very good (virtually overhead) pass of the NOAA-19. I'd say "keep trying" and changing up details about your approach, and see what happens. Also try adjusting the bandwidth (~30KHz), modulation (should be NBFM), and AGC settings. I suppose it's possible you're living very close to a strong interferer, and there's little to be done about that than getting a directional antenna or very aggressive notch filter.
It'd probably help if I even knew how to adjust those settings on my PCR-100. I've not been able to figure out where that bandwidth setting is, unless you're talking about the narrow/wide filter. All I do is open the PCR-100 program, set it to FM 137.1 (or whatever frequency is associated to the given NOAA satellite), then wait. Unfortunately, it's very noisy. Lots of static. WXtoImg doesn't really pick up much but I can hear the satellite faintly in the background. I must not be setting something right!
Also, check out this free software: http://www.wxtoimg.com/
+1 on WxToImg. I haven't used it, but it looks like a simple way to get the best possible image out of the received signal. I learned a lot about the APT signal from Alexandru Csete, and [http://www.oz9aec.net/index.php/gnu-radio/gnu-radio-blog/350-noaa-weather-satellite-reception-with-gnu-radio-and-usrp" rel="nofollow">he used WxToImg] to get some very nice images.
Because I like to do things the hard way, I wanted to try and implement the demodulation myself. The learning is going to come in handy if/when I start implementing demodulation in my software radio FPGA.