Send a picture as sound, or turn a received SSTV signal back into a picture. Slow-scan television sends a still image one line at a time as a single tone whose pitch follows the brightness, slow enough to fit in a voice radio channel.
How SSTV sounds
The tone moves between 1500 Hz for black and 2300 Hz for white. Each line starts with a short pulse at 1200 Hz, below anything in the picture, which a decoder uses to find where the line begins. Before the first line, a VIS header announces the mode: a 1900 Hz leader, then seven bits sent as 1100 Hz for one and 1300 Hz for zero, then a parity bit.
| Mode | Picture | Time | Colour |
|---|---|---|---|
| Robot 36 | 320 × 240 | 36 s | YCbCr, colour at half resolution |
| Martin M1 | 320 × 256 | 114 s | Green, blue, red scans |
| Scottie S1 | 320 × 256 | 110 s | Green, blue, red scans |
| PD 120 | 640 × 496 | 126 s | YCbCr, colour shared by each pair of rows |
| PD 180 | 640 × 496 | 187 s | YCbCr, colour shared by each pair of rows |
Robot 36 is fast because it sends brightness at full detail and colour at half, the way a JPEG does. The Martin and Scottie modes send a full green, blue, and red scan for every line, which takes three times as long and keeps colour edges sharp. The PD modes send two rows per sync pulse, both rows’ brightness and one shared pair of colour scans, which is how they fit four times the pixels of Robot 36 into a few minutes.
Encoding a picture
Load a picture and pick a mode. The picture is resized to the mode’s size, either cropped to fill it or fitted with black bars, and the transmission is written as a WAV. Listen plays it in the page. The callsign overlay writes text in the top left corner, large and outlined, because fine detail is the first thing a noisy path smears.
Decoding
Open a recording, or press Listen with the microphone and hold the phone or laptop near the radio’s speaker. The picture builds up line by line as it is heard, and a recording with several transmissions gives one picture per transmission.
Under the hood, the audio is mixed down around 1700 Hz and filtered, and the angle between successive samples gives the frequency at every sample. The decoder watches those frequencies for a VIS header, then reads each line by finding its sync pulse and averaging the frequency across each pixel’s slice of time.
Straight pictures from imperfect clocks
A sound card that runs 0.1% fast shifts every line by a little more than the last. Over 256 lines of Martin M1 that adds up to 114 ms, enough to shear the picture into a steep slant. The decoder measures the position of every line’s sync pulse and fits a straight line through them, so the timing follows the actual clock of the recording rather than the nominal one.
Getting a clean receive
- Keep the volume moderate. A clipped signal still decodes, but a speaker driven into distortion adds tones that are not there.
- Turn off the radio’s noise reduction and AGC hang if you can; both reshape the tone the decoder needs.
- For the microphone, a quiet room matters more than distance. Keep the phone a few centimetres from the speaker.
- A recording made with a receiver’s audio output is cleaner than anything a microphone hears, so record first when it matters and decode the file.