RTL-SDR for Satellite Weather on GOES16 – Signal Decoding


In the previous two posts we looked at planning for reception of GOES16 weather signals and we did a signal capture as shown above. Improved performance resulted when the LMR400 coax was inserted between the SAWBIRD Filter/LNA at the back of the antenna and the RTL-SDR . From the first planning post, the average noise level was -100dBm. The BPSK spectrum is about 8dB above the noise, so say -92dBm. Our planning was for a signal at -84dBm based on a guess of 60dBmi tx power. Thus a better guesstimate is for a lower satellite Tx power of 52dBmi.

Receive Signal Simulation

Fig.1 BPSK Scicos Simulation
Fig.2 PRBS Data & BPSK 180deg Phase Shift
FIg.3 Rx Data – LPF Output – Mixer Output
20*log10[2Vp2p/1.0vp2p]=6dB [<1/1000]=<0.001
20*log10[2Vp2p/2vp2p]=0dB [6/1000]=0.006
20*log10[2Vp2p/4vp2p]=-6dB [41/1000]=0.041
Table 1 SNR vs. BER for BPSK

Figure 1 shows a Scicos channel model for BPSK transmission. A PRBS data signal directly multiplies a carrier frequency and White Gaussian Noise is added in the channel. The receiver reinserts the carrier and the data is recovered with a LPF and comparator. Table 1 lists the BER vs SNR. Note that this is just for BPSK with no Viterbi or RS coding, just to get a rough idea of performance. At 6dB we have better than 10^-3BER, so with 8dB and Viterbi/RS coding we should have adequate performance to decode pictures successfully.

Decoding Software – goestools on RPi4

In order to decode the GOES16 signal, I used Ref.3 & 4 (from rtl-sdr.com & Alexy) that describe the installation and setup of goestools on a RaspberryPi. The articles are very well written, so not too much to add. The first step was to download an image file for Raspbian Lite OS. I had several old 8Gbyte SD cards left over from earlier installations, so I cleaned off the various partitions from one of them using a DOS utility DISKPART running on Windows10, in a command window.

After that, now with an empty SD card, I used RaspberryPi Imager to load and install the RPiLiteOS. I inserted the SD card into an RPi4 and booted up using my TV as an HDMI monitor. The default user/password is pi/raspberry. I ran <sudo raspi-config> and enabled SSH access. Then I downloaded Putty on my laptop and connected the RPi4 to my LAN. I was able to connect over the LAN to the RPi4 with assigned to the RPi4 (Fig.4). Once connected over the LAN, I ran an update & upgrade <sudo apt update> & <sudo apt full-upgrade>. Then I followed all the steps from Ref.4. For the last step, I used nano to write the parameters into goesrecv.conf directly, rather than the cat command. Once goestools was installed, I inserted the RTL-SDR and ran a test to detect it <rtl_test> as shown in Fig.5.

Fig.4 PUTTY Configuration Screen RPi4 LAN Connection
Fig.5 rtl_test to Detect RTL-SDR on USB Port

The final step was to run goesrecv, orient the dish antenna and see if I could get the Viterbi error rate to decrease to a point where no packets were lost. With no signal, vit(avg) > 2000, when the dish was pointed I could get the vit(avg) to <180 which resulted in no drops as in Fig.6. The YouTube video in Fig.7 shows the procedures used. In the next post we will use a permanent mechanical dish mount and download actual information from the satellite.

Fig.6 Shows the Console Output for goesrecv
Fig.7 YouTube Video RTL-SDR for Satellite Weather on GOES16 – Signal Decoding

Please send your comments, questions and suggestions to:

YouTube Channel
YouTube Channel


#1. – “RTL-SDR for Satellite Weather on GOES16 – Signal Capture”

#2. – “RTL-SDR for Satellite Weather on GOES16 – Planning”

#3. – “RTL-SDR GOES16/17 Reception Tutorial”

#4. – “Receive GOES16/17 with RaspberryPi and RTL-SDR”

By Jeremy Clark

Jeremy Clark is a Senior Telecommunications Engineer and Advanced Amateur Radio Operator VE3PKC. He is the author of E-Books on Telecommunications, Navigation & Electronics.