Skip to content

Instantly share code, notes, and snippets.

@mattotodd
Forked from lxe/goes16-rtlsdr.md
Created June 8, 2023 01:28
Show Gist options
  • Save mattotodd/04d1a9fa7c402538748638bbef037ecb to your computer and use it in GitHub Desktop.
Save mattotodd/04d1a9fa7c402538748638bbef037ecb to your computer and use it in GitHub Desktop.
Receive GOES-16 and GOES-17 Images with a Raspberry Pi and RTL-SDR dongle

A guide on how to receive GOES-16 and GOES-17 images using an RTL-SDR dongle.

Hardware

You need:

  1. Raspberry Pi Model B (or B+) with a MicroSD Card $35-40
  2. An RTL-SDR dongle:
  3. LNA and SAW filter for around 1.69GHz
  4. A 1.6 - 1.9 GHz parabolic grid antenna
  5. Adapter (depending on the antenna terminal):
  6. Cable(s)

Total: ~$185

Assembly:

[Antenna] --- [Adapter] --- [(input) SAWBird+ (output)] --- cable --- [RTL-SDR] --- usb --- [Raspberry Pi]

Software

Prep your Raspberry Pi and install necessary drivers and software.

1. Get everything up to date

sudo apt update
sudo apt dist-upgrade

# reboot the device
sudo reboot

2. Install dependencies

# get the packages necessary to build and run goestools
sudo apt install git build-essential cmake libusb-1.0 libopencv-dev libproj-dev

3. Install librtlsdr

Grab the latest librtlsdr source, compile it, and install the shared libraries/includes.

# download, compile, and install librtlsdr
git clone https://github.com/steve-m/librtlsdr.git
cd librtlsdr
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -DINSTALL_UDEV_RULES=ON ..
sudo make -j2 install

# load udev rules and blacklist the DVB driver shipped with the OS
sudo cp ../rtl-sdr.rules /etc/udev/rules.d/
sudo ldconfig
echo 'blacklist dvb_usb_rtl28xxu' | sudo tee --append /etc/modprobe.d/blacklist-dvb_usb_rtl28xxu.conf

# reboot the device
sudo reoboot

4. Test your the RTL-SDR dongle

rtl_test 

5. Install goestools

git clone https://github.com/pietern/goestools.git
cd goestools
git submodule init
git submodule update --recursive
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..

# this will take a while on a raspberry pi
sudo make -j2 install 

6. Create goesrecv.conf config

cat <<EOF > ~/.goesrecv.conf
[demodulator]
mode = "hrit"
source = "rtlsdr"

[rtlsdr]
frequency = 1694100000
sample_rate = 2400000
gain = 5
bias_tee = false

[costas]
max_deviation = 200e3

[decoder.packet_publisher]
bind = "tcp://0.0.0.0:5004"
send_buffer = 1048576

[monitor]
statsd_address = "udp4://localhost:8125"
EOF

If you're using a NooElec SmarTee dongle with an always-on bias tee, or if you're powering your SAWBird through the micro USB port, set bias_tee = false under [rtlsdr].

If you're using RTL-SDR.com dongle, set bias_tee = true to power the SAWBird board.

7. Roughly point your antenna at the satellite.

Find where the GOES-16 or GOES-17 satellites are in the sky at your location using agsattrack.com.

Note the azimuth and elevation.

Use an actual real compass to point your dish at the azimuth. I've been using the iPhone phone compass, which has a 20-30 degree error, which renders it practically useless.

Adjust your dish angle according to the elevation.

8. Run goesrecv and perform fine antenna adjustments

goesrecv -v -i 1 -c ~/goesrecv.conf

This will show output every second that looks something like this:

...
2018-09-15T21:52:03Z [monitor] gain:  8.44, freq: -2121.4, omega: 2.589, vit(avg):  2400, rs(sum):  0, packets: 0, drops:  55

The vit(avg) stat shows the average viterbi error rate over 1 second interval (if running with -i 1).

If there's no signal, the vit value should be over 2000. When signal is stronger it should decrease.

This should help you point the antenna correctly. Slightly rotate the dish right or left and note whether the vit errors are increasing or decreasing. Once you're at the local error minimum, adjust the vertical angle, and do the same.

Once the vit errors are at their lowest, you've pointed the antenna! Double check the antenna position again. GOES-17 and GOES-16 are only about 15 degrees from each other in the sky.

9. Restart goesrecv and play around with the config parameters.

If your vit errors are under 400, and you're observing no packet drops, you're all set!

If the average errors are at around 1500-1800, try the following:

  • Terminate and restart goesrecv. This should allow it to readjust the gain and frequency offset to get a better read on the signal.

  • Cool the Raspberry Pi and the RTL-SDR dongle. I've noticed that temperature might significantly affect reception quality.

  • Play around with goesproc.conf parameters. Try adjusting the gain and sample_rate. For the NooElec XTR or other E4000 tuners, you might need to set your gain to 10 or below.

Once you decreased the error rates, but your vit is still over 400, try making cery slight adjustments to the antenna again.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment