What is Slow Scan TV (SSTV), then? You convert a picture into sound (similar to fax machine or dial-up modem noise) transmit the sound via radio, and convert the received sound back into a picture at the other end. The International Space Station (ISS) has a long history of transmitting SSTV pictures for global events, each lasting several days, where people the world over tune their radios to the ISS and try to receive the pictures every time it flies over their home.
This tutorial was original put up for a transmission on 12 April 2019 to celebrate the anniversary of the launches of Yuri Gagarin in 1961 and the first Space Shuttle, 20 years later, in 1981.
A new transmission will be occurring on 5 June 2019 between 12:00-16:00 UTC and 6 June 2019 between 11:30-15:30 UTC. You can keep an eye on this, along with any future details, on the ARISS-SSTV blog.
You'll need
- Raspberry Pi 2B or later
- 3.5 mm speakers or headphones
- RTL-SDR USB dongle (search for ‘RTL2832U’) with a good whip or dipole antenna
- Tape measure, at least 1 metre
Install prerequisites and set the time
We presume you are running a clean install of Raspbian Stretch Desktop edition and are online.
Firstly, switch the audio output to the 3.5 mm headphone jack. This is needed for the way PulseAudio loops back the system audio as an input device. On the Raspbian desktop, simply right-click the speaker icon in the menu bar and choose Analog.
Then, open a Terminal and install the required software for the project:
sudo apt-get update sudo apt-get install rtl-sdr sox pulseaudio qsstv ntpdate -y
Next, set your time zone and pull the correct time from the internet. In the Raspbian main menu, go to Preferences > Raspberry Pi Configuration > Localisation tab > Set Timezone, change Area and Location accordingly, then click OK.
Finally, go back to the Terminal window to pull the time:
sudo ntpdate pool.ntp.org
Note that the desktop clock in the top right only updates every minute.
Install and test the RTL-SDR dongle
Insert the RTL-SDR dongle into your Pi and screw in the antenna (it can sit on your desk at this stage). Then verify the RTL-SDR is working with the rtl_test program. In a Terminal window, enter:
rtl_test
If you see a ‘failed to open rtlsdr device’ error, remove the dongle, reinsert it, and try rtl_test again. Leave for about 30 seconds and look out for any messages about loss of samples. Press CTRL+C when 30 seconds has elapsed. The loss of 100 bytes or so is acceptable.
Listen to a commercial FM radio station
Let’s tune into a commercial FM radio station to check that both the dongle and the antenna are working correctly. The command below pipes raw data from rtl_fm into ‘play’, which will then produce the audio output. Modify the value after the -f to specify your own FM station/frequency and don’t forget to put the capital M after the number so it knows you mean megahertz and not hertz (98.8MHz is BBC Radio 1 in the UK). In a Terminal, enter:
rtl_fm -M wbfm -f 98.8M | play -r 32k -t raw -e s -b 16 -c 1 -V1 -
Note that the ‘Tuned to’ value in the output doesn’t match. This is due to a property of all SDR hardware, called ‘DC spike’, and can be ignored. Plug in your speakers/headphones and you should now be able to hear audio from the commercial FM station. Move the antenna around or select a different FM radio station with a closer transmitter if the audio is noisy. Press CTRL+C to quit from rtl_fm.
Set up QSSTV
QSSTV is the program that will listen to the audio output on the Raspberry Pi and decode the pictures from the fax/modem noise when the ISS is in range. Let’s just check the settings are all correct. In the main menu, select Internet > QSSTV, then select Options > Configuration and choose the following options in the Sound tab:
- Audio Interface – PulseAudio
- Input and Output Audio Device – default -- Playback/recording through the PulseAudio sound server
- Sound Input – From sound card
- Sound Output – To sound card
Click OK. Next, run the Calibrate function and go make a cup of tea/coffee: Options > Calibrate. Click OK when both progress bars reach 99%.
Decode a picture from test audio
Now that QSSTV is set up, we can download a test audio file, play it, and see a picture slowly appear. In a Terminal, enter:
wget https://raw.githubusercontent.com/davidhoness/sstv_decoder/master/sstv_test.mp3
Select the Receive tab in QSSTV and choose the following settings:
- Use VIS – on
- Auto Slant – on
- Autosave – on
- Signals – Normal
- Mode – Auto
Click the play ► button. Nothing will happen, but just click it to start the receiver.
Open sstvtest.mp3 in the Chromium browser. You can either drag and drop the file from File Manager, or enter file:///home/pi/sstvtest.mp3 into the address bar.
Let it play and watch the picture appear in QSSTV. Notice the waveform and waterfall display activity on the right of the screen. Other SSTV test recordings can be found online.
Prepare for the next SSTV event
To get pictures from the ISS you need to know three things:
- When the ISS will be transmitting the SSTV signal. It’s not always-on.
- What frequency the SSTV signal will be transmitted on (usually 145.8MHz).
- When the ISS will fly over your location.
The ISS flies over most places a few times every day (unless you live in the Arctic/Antarctic). You can find out when the ISS is transmitting on the ARISS SSTV website.
Note that there is an SSTV event starting on 12 April 2019 celebrating the launches of Yuri Gagarin in 1961 and the first Space Shuttle, 20 years later, in 1981. These events usually last for a few days at a time, meaning you will get multiple ISS passes during which you can receive the SSTV signal.
When is the ISS flying over me?
There are many websites you can use for this, but your author’s personal favourite is heavens-above.com.
Click ‘Unspecified’ in the top right to set your location. Type your postal code and country into ‘Enter place to search for’ and click Search. Scroll down and click Update. You’ll now be back on the homepage; under Satellites, click ISS. For ‘Passes to include’, select ‘all’.
The table now showing lists the times of the upcoming ISS passes for your location. The Alt value under ‘Highest point’ is the maximum elevation of the pass above the horizon; 90 would mean it goes directly overhead. Passes with higher maximum elevation will give better results than lower ones. Clicking on any row in the table shows the sky chart for that pass. Imagine holding that picture above your head and aligning it with the compass directions. The line shows the flight path of the ISS and this is useful for roughly positioning your antenna. It can also be useful to look at the ‘Ground track’ (see link in top right). Plan ahead and set up your ground station with time to spare before the ISS flies over.
Adjust your antenna
If you are using the RTL-SDR kit antenna, please read the getting started guide for it.
It’s a good idea to adjust the length of the telescopic arms based on a dipole calculator to match the antenna’s resonant frequency to 145.8MHz. This will help pick up weaker signals from low elevation passes.
Under Desired Frequency, enter 145.8. Under Select Antenna Calculation, select One Side. Click Calculate. The answer should be 48.9 cm.
Remember, there is about 2 cm of metal in each side of the antenna base. So take 48.9 and, before screwing in the arms, use a tape measure to make them both this length minus 2 cm (excluding the screw threads). It doesn’t have to be perfect, but make it as close as possible.
Deploy your antenna
As a general rule, try to get your antenna up as high as possible with a good view of the sky in all directions. Outside is always better, but you can still get the signal from inside a house – you’ll just see more noise in the pictures. Then, with the dipole arms flat, roughly align them with the flight path of the ISS that you find on heavens‑above.com and bend the two arms upwards into a right-angle V-shape. You don’t need to realign it for every pass, but it will yield better results if you do.
Antennas and their performance are sometimes a bit of an art form as opposed to an exact science. Experiment with different configurations on different ISS passes. Try one arm horizontal and one arm vertical, for instance.
Set the correct time again
QSSTV saves the decoded images with a UTC time file name and this is useful later when working out which ISS passes they are from. In a Terminal, enter:
sudo ntpdate pool.ntp.org
Tune into the ISS frequency
We’ll use rtlfm again for this, but note that the command is different to the commercial radio station one. A commercial radio station uses wide band FM whereas the ISS SSTV transmission uses narrow band FM and so we have to set rtlfm up differently. In a Terminal, enter:
rtl_fm -M fm -f 145.8M -s 48k | play -r 48k -t raw -e s -b 16 -c 1 -V1 –
You should be able to hear white noise now (don’t forget the capital M for megahertz), but this will change to the fax/modem noise when the ISS flies over with the transmission active. Keep this window open. A picture is transmitted from the ISS continuously for about two minutes, with another two minutes of off-time before the next picture starts.
- Start QSSTV
- In the Raspbian main menu, select Internet > QSSTV. Select the Receive tab in QSSTV and choose the following settings:
- Use VIS – on
- Auto Slant – on
- Autosave – on
- Mode – Auto
- Save if Complete (%) – 10
Click the play ► button. The waveform and waterfall display on the right should show noise coming from rtl_fm. Leave QSSTV running.
What is Doppler shift?
A common example of Doppler shift is the change of pitch heard when a police car or ambulance speeds past you. Compared to the emitted frequency of the siren, the frequency you hear is higher during the approach, identical at the instant of passing by, and lower during departure. The same thing happens with radio waves as with sound waves. The ISS is moving at 7 km per second!
To compensate for this, ground stations must continually retune their receiver as the ISS approaches (starting ~3.5kHz above 145.8MHz), passes overhead (reaching 145.8MHz exactly), and flies away (ending ~3.5kHz below 145.8MHz).The good news is that QSSTV is clever and can compensate by tracking the centre frequency of the audio signal as the ISS flies over. So you don’t need to do anything!
Compensate for Doppler shift (optional)
It doesn’t make much difference, but if you want to have some fun with this, your author has created a Python script to compensate for Doppler shift. It tracks the ISS using ephem, computes the corrected frequency for when the ISS is passing over, and retunes rtl_fm using a UDP socket.
To use it you’ll first need to run sudo pip3 install ephem and then just start the script in another Terminal window. But first you will need to modify the code to set your location. See the LATITUDE, LONGITUDE, and ALTITUDE variables at the top. Get the values from the top right of heavens‑above.com and just estimate your altitude.
Wait for the ISS to arrive
You may want to leave your ground station overnight or over the weekend to capture several passes. When you return, select the Gallery tab in QSSTV to see what images were received. Alternatively, it’s always exciting to watch the pictures coming in live as the ISS is above you!
Get an SSTV award!
On your Raspberry Pi, the decoded pictures can be found in /home/pi/qsstv/rxsstv. You can <a href="https://www.spaceflightsoftware.com/ARISSSSTV/index.php">upload them to the ARISS SSTV website for verification and recognition.
Check the information for the event on ariss-sstv.blogspot.com to find out how to apply for the award certificates. This will be a PNG file that is emailed to you and will show a unique number. Good luck!
Fall back mode
If any of you were trying to receive SSTV from the ISS between 11 and 14 April 2019 you’ll have noticed a problem with the tones being too quiet to decode. Operationally this is thought to have been caused by a faulty coax switch/coupler on board the ISS weakening the signal. Finding which one is faulty is a bit of a time consuming task for the crew and there’s no guarantee it will be completely fixed for the next event.
So, if it happens again, this fall back mode allows you to record the broadcast from each ISS pass and then post process it in an audio tool like Audacity, after which you can play back the audio and decode the pictures correctly. If the audio level turns out to be fixed then the original instructions are still fine to use.
The original method, where rtl_fm and QSSTV are left running constantly, was chosen for simplicity and so that the file names for each decoded picture would also conveniently record the time the pictures were broadcast by the ISS. That saves you some work when you go to upload them for recognition. This way you will need to do a time calculation before you upload the pictures.
Download prerequisites
Do steps 1 to 5 from the original instructions if you haven't done them (until 'Prepare for the next SSTV event') and then install Audacity
sudo apt-get install audacity
It should appear under the Sound & Video menu once installed. Run it and, if asked about importing audio files, choose the option to read uncompressed audio files directly from the original file (faster). You can also change this under Edit > Preferences > Import/Export. You can close Audacity for now.
Deploy your antenna as before
Repeat steps 7, 8, 9 and 10 (from 'When is the ISS flying over me' to 'What is Doppler shift') from the original instructions to get your radio equipment all set up. Make sure to set the correct time because this is needed for the code in record_iss.py to correctly predict when the ISS is in the sky above you.
Download ISS recording script
We’ve conveniently made a python script to sort this out for you, every time the ISS comes over your location the script will run rtl_fm and save a date stamped raw data file which we can later process in Audacity.
sudo pip3 install ephem wget https://raw.githubusercontent.com/davidhoness/sstv_decoder/master/record_iss.py chmod +x record_iss.py
Be sure to modify the code to set your location. See the LATITUDE, LONGITUDE, and ALTITUDE variables at the top. Get the values from the top right of heavens-above.com and just estimate your altitude.
Start recording
All you have to do now is start record_iss.py and leave it running, make sure you’re online so it can download the ISS telemetry and keep it up to date. For every ISS pass a time stamped .raw file will be created, you can leave it running unattended and check the raw files later on.
python3 record_iss.py
Leave it running and wait for the ISS to arrive, also check ariss-sstv.blogspot.com to find out when the SSTV transmission is active.
Post processing the audio
After the last ISS pass of the day (as shown on heavens-above.com) you’ll have an opportunity to post process the .raw files and listen to the audio.
Start > Sound & Video > Audacity
File > Import > Raw Data
Browse to and select the .raw file you want to import;
Select the following options on the import dialogue;
Encoding – Signed 16-bit PCM
Byte order – Little-endian
Channels – 1 Channel (mono)
Start offset – 0 bytes
Amount to import – 100%
Sample rate – 48000
Click Import. A progress bar will display for a moment or two whereupon you should be able to see the audio waveform. Often with SSTV audio it will look completely flat without the peaks and troughs you might be used to seeing when looking at audio waveforms.
Click the green play button at the top to listen to the audio. It’s possible to skip ahead by clicking on the waveform at any point. Note the zoom buttons are also useful here if you want to get the whole recording on one screen.
If the audio level of the tones is quiet have a play around with Effect > Amplify or Effect > Normalise in the Audacity menu. Try to avoid clipping, where the top and bottom of the waves are clipped, as this actually removes information and will have a negative effect on the final pictures you get.
Once you’re happy you can export to WAV so other applications can play the audio too.
File > Export Audio
Replace aiff with wav in the name box, check the file type is WAV (Microsoft) signed 16-bit PCM and click Save.
Decode the pictures
Start QSSTV.
Internet > QSSTV
Select the Receive tab in QSSTV and choose the following settings:
Use VIS – on
Auto Slant – on
Autosave – on
Mode – Auto
Save if Complete (%) – 10
Click the play ► button.
Now play the post processed audio using either Audacity or whatever audio playback tool you prefer (avoid VLC). If everything is working according to plan the pictures should slowly appear. Note that the audio recording may contain noise and interference you received while the ISS was passing over and, while it’s possible to clean things up in Audacity, you’re at the mercy of what’s in that recording.
Uploading the pictures
You can just repeat step 16 from the original instructions to upload the pictures however you need to be careful when specifying the time for when the pictures were received. The QSSTV file name will contain the time stamp for when they were decoded (which was not live) and the website wants to know the time you received the live transmission from the ISS.
For each picture you can work this out by adding the time stamp from the .raw recording to the “Audio position” value (see the bottom of Audacity during playback) for when the tones for that picture were playing. The website only asks for the nearest minute.
Also note that not all SSTV events from the ISS offer participants official certificates, check the information on ariss-sstv.blogspot.com to find out if certificates are available.
Good luck!