I apologize if this question is a little out of scope for the amateur radio stack exchange but I feel like it fit better here than over in any other forum.

I have successfully parsed raw PCM data out of a WAV file representing the signal received from one of NOAA's satellites in APT format. Since its bit rate is 16 bit I combined sequential pairs of bytes into 16 bits using simple bit shifting. I understand these values represent sampled amplitudes.

What I am trying to figure out is where to go from here. I don't really want to use a normal application as most of them are proprietary, and being a ham operator I feel like programming an APT demodulator would be a useful exercise as a rite of passage.

I've done some digging around and have read the APT specification, but it doesn't quite give any clues on what I need to do to transform the signal into the appropriate image. I've read around on other forums, and it seems I need an AM demodulator and some form of an FFT to get it to where I need to be - however I am brand new to this stuff. I come from a computer science and math background so I can definitely handle the learning curve. I'm just about through with my amateur extra exam and the knowledge in there seems have left me with little to work with in this regard. I am willing to dig in but I have to know where to start!

Can anyone provide me any resources on how I can begin to learn how to transform these signals in the raw PCM data to the images I need? . I'd really appreciate it!

  • $\begingroup$ Do these wikis on Radiofax and APT help you out? en.wikipedia.org/wiki/Radiofax and sigidwiki.com/wiki/Automatic_Picture_Transmission_(APT) $\endgroup$
    – captcha
    Nov 12, 2019 at 20:58
  • $\begingroup$ @captcha Unfortunately those are where I started :(. The problem I have isn't the protocol, it's extracting the signal so I can parse the image out of it unfortunately. I realize this will take some DSP but I have no idea where to start...I've considered just picking up a textbook and teaching myself as much as I can for the next 3-4 months. $\endgroup$
    – CL40
    Nov 12, 2019 at 22:10
  • $\begingroup$ What math processing do you plan to use? (Fortran? Python? Mathematica? ...?) $\endgroup$ Nov 14, 2019 at 16:58
  • $\begingroup$ @ChrisK8NVH I have been writing it in C. Fortran might've been a smarter choice given the abundance of resources but I really, really like C and I figured I'd be programming the FFT and stuff myself anyway (for learning). $\endgroup$
    – CL40
    Nov 15, 2019 at 1:34
  • $\begingroup$ Got it. You might consider using python, Matlab, or some higher level system to make the programming easier, there are many libraries out there well defined. Once you have something working you can re-write it however you like with the benefit of having a known-working thing with which to compare. Regarding the signal processing side, others here can answer that far better than I. $\endgroup$ Nov 15, 2019 at 2:22

1 Answer 1


The data is AM modulated on the 2.4 kHz subcarrier, with 256 different levels representing a single value from 0 to 255. It's a scanline every 1/2 second from the cameras with sync and telemetry data added to the beginning and end.

Each line is 2080 data points (words) long, so it broadcasts at 4160 baud. The sync lines at the beginning let you know when a line starts, and helps the decoder to adjust its baud rate if needed.

Channel A starts its 39 word sync with 7 square wave pulses at 1040 Hz, with each pulse being 2 words wide with 2 word spacing, and the remainder blank. Then the space and minute marker at 47 words long. Then the raw 256 value picture data. And then 45 words of telemetry data used to calibrate the range values of the sensor and determine which sensor is transmitting.

Channel B is exactly the same, except its sync is 7 pulses at 832 Hz, making its pulses 3 words wide with 2 word spacing.

Edit: Others around the web have pointed out that you can sample the audio at 9.6 kHz and get 4 samples per wave, take any two consecutive samples $x_{_1}$ and $x_{_2}$, and get the carrier amplitude with $A = \sqrt{{x_{_1}}^2 + {x_{_2}}^2}$ .


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .