APT (NOAA weather-satellite downlink)
Automatic Picture Transmission: an analogue 137 MHz downlink where the picture is the loudness of a 2400 Hz tone. No packets, no checksum, no coding, and a decoder you can write in the standard library.
APT (Automatic Picture Transmission) is the analogue image downlink carried by the NOAA polar-orbiting weather satellites, essentially unchanged since 1963. There are no packets in it, no header, no length field and no checksum. The signal is a tone, and the brightness of the ground under the satellite is how loud that tone is at each instant. It is the easiest real satellite downlink to receive and the only one you can decode end to end with nothing but the standard library.
What it is
Point an FM receiver at the 137 MHz band during a pass and you hear a steady tone with a hard tick twice a second. The tick is the line marker; the tone is a 2400 Hz subcarrier amplitude-modulated to about 87 percent by the image.
| Quantity | Value |
|---|---|
| Band | 137 to 138 MHz, narrowband FM |
| Subcarrier | 2400 Hz, AM, about 87 percent depth |
| Line rate | 2 lines per second |
| Line width | 2080 words (one word = one pixel) |
| Word rate | 4160 words per second |
| Channels | 2 per line, 1040 words each |
Each 1040-word channel is four fields: 39 words of sync, 47 words of space view, 909 words of image, 45 words of telemetry. The two sync trains are shaped differently on purpose. Sync A is 4 black words, then 7 repetitions of white white black black, then 7 black; its cycle is 4 words, so at 4160 words per second it is a 1040 Hz square wave. Sync B is 4 black words then 7 repetitions of white white white black black; its 5-word cycle gives 832 Hz. Different frequencies, so a decoder locking on one can never confuse it with the other.
Because the picture is an amplitude and not a bit pattern, APT degrades gracefully. A weak pass gives a noisy image rather than a decode failure. There is no cliff edge and no error to correct.
Reading the frame
The 909 image words per channel are the ground. The rest is instrument metadata painted into the picture because in 1963 there was nowhere else to put it, and it is what turns a photograph into a measurement.
- Space data, 47 words, is the scanning mirror looking at deep space between swaths. In the visible channel that is black; in the thermal infrared channel it is white, because IR imagery is display-inverted by convention so cold cloud tops stand out. So the space columns tell you which channel is which, and hand you a black and a white reference measured by the same instrument seconds ago.
- Telemetry, 45 words, carries one value per line held constant for 8 lines. Sixteen such wedges make a frame: 16 x 8 = 128 lines = 64 seconds. Wedges 1 to 8 are a grey staircase from one eighth to full scale, wedge 9 is zero modulation, wedges 10 to 15 are temperatures, and wedge 16 identifies which AVHRR channel this half of the line came from. Fit the staircase and you can calibrate the whole frame.
Receiving it
An RTL-SDR plus a turnstile, QFH or simple V-dipole is enough; a polar orbiter flies over you, so no rotator and no aiming. Predict the pass with gpredict, then record the demodulated audio:
rtl_fm -f 137.1M -M fm -s 60k -g 45 -F 9 - \
| sox -t raw -r 60k -es -b16 -c1 -V1 - pass.wav rate 11025
Then decode. noaa-apt is the maintained cross-platform decoder and has both a GUI and a CLI:
noaa-apt -o pass.png pass.wav # see --help for contrast and rotation options
satdump is the general-purpose alternative and can run the whole chain live from the SDR:
satdump live noaa_apt ./out --source rtlsdr --samplerate 2.4e6 --frequency 137.1e6
Doppler is about plus or minus 3 kHz at 137 MHz over a pass, which an FM demodulator with a wide enough filter simply absorbs, so unlike a narrowband digital downlink APT needs no Doppler correction.
Pitfalls
- The receiver filter is the usual failure. APT occupies roughly 34 kHz. A stock 25 kHz NBFM filter clips it and produces a smeared image that looks like a bad antenna; open the filter to about 40 kHz.
- Your sound card lies. The nominal 11025 samples per second is never exact, so the true line period is not exactly 2080 words. Either measure the rate from the drift of the sync train across the recording, or resynchronise every line independently. The second method needs no rate estimate at all.
- NOAA is not Meteor. The Russian Meteor-M satellites also transmit near 137 MHz but use LRPT, a digital QPSK downlink with real channel coding. An APT decoder gets nothing from it.
- The POES fleet is decades past design life and the service has been signalled for retirement, so check a current satellite status page before you plan a pass rather than assuming NOAA-15, -18 and -19 are all still transmitting.
wxtoimgis abandonware. It was the classic decoder, its site went down, and the builds that circulate are unmaintained. Usenoaa-aptorsatdump.