“One glance at a book and you hear the voice of another person, perhaps someone dead for 1,000 years. To read is to voyage through time.”
― Carl Sagan
Geo Stationary Satellite Reception
There’s a lot of information here, so I broke it down and listed it in a table of contents.
Table of Contents
- Building a GOES Receiver
- Setting up and Programming your PI
- Adding Autostart to PI and Goestools
- Examples of types of Imagery
- A note on False Color
- EMWIN Imagery
- Non-Cloud Moisture Imagery Products
- Enable EMWIN and Non CMIP Products
- Web Links for Setting up Satellite Receiving Station
- Weblinks for GOES Data and Imagery Information
- Receiving GK-2A
- A graphical monitor your goestools system
- Animation of Satellite Imagery
After building a system for receiving Polar Orbiting Satellites, I thought I might try and build a system to receive geostationary GOES 16 or 17 imagery.
What is a GOES satellite?
GOES satellites continually view the Western Hemisphere from approximately 22,300 miles above Earth. GOES satellites are designated with a letter prior to launch and renamed with a number once they reach geostationary orbit.
The GOES-R Series is a four-satellite program including GOES-R, GOES-S, GOES-T, and GOES-U. The GOES-R Series Program is a collaborative development and acquisition effort between the National Oceanic and Atmospheric Administration (NOAA) and the National Aeronautics and Space Administration (NASA) to develop, launch and operate the satellites. The locations of the operational GOES-R Series satellites are 75.2⁰ W and 137.2⁰ W, instead of 75⁰ W and 135⁰ W. These shifts eliminate conflicts with other satellite systems. NOAA also maintains an on-orbit spare GOES satellite (GOES 15) at 105⁰ W in the event of an anomaly or failure of GOES-East (16) or GOES-West (17).
The GOES-R Series broadcast services of LRIT (Low Rate Information Transmission) and EMWIN (Emergency Managers Weather Information Network) but does so at a significantly higher data capacity than the previous satellites. Through the technology of Software Defined Radio, the receiver consists of a modest amount of hardware (an antenna, low noise amplifier, RTL-SDR computer interface) at a very low cost. The bulk of the traditional signal processing, error correction decoding and data recovery and display can be done in a conventional personal computer or, with a Raspberry PI. Since they are at a fixed point in space, you do not need to track them, however, you will need a dish antenna to receive the 1694.1 MHZ frequency with a 1.205 MHz bandwidth. The Advanced Baseline Imager is the primary instrument for imaging Earth’s weather, oceans, and the environment. ABI views Earth with three times more spectral channels, four times the resolution, and five times faster scanning than previous GOES satellites. It is this ABI system that I decode the imagery from.
To amplify and filter the weak satellite signal prior to demodulation and decoding, it’s optimal to have an LNA (low-noise amplifier) placed as close to the antenna feed as possible. Also, some filtering should be applied to suppress interference from terrestrial transmissions. Power for the frontend amplifier(s) can be easily provided with DC bias over the coax feedline, or via a separate power supply.
With all that being said, a reminder: You need to be in a location from where you have a direct line of sight to the Satellite! Either GOES 16, Or GOES 17 (or GK-2A if your in the Eastern Hemisphere)
GOES Transmission Details:
Transmission HRIT/EMWIN 400 kbps
Freq 1694.1 MHz
Bandwidth 1.205 MHz
Modulation BPSK (Binary Phase Shift Keying)
Polarization Linear – Vertical offset
Building and programming the receiver
There are plenty of guides online, (I have links below). So the first step was gathering the necessary parts. Since I already had most of the parts and pieces in my repertoire of radio stuff it wasn’t too expensive at all for me, But here is a list of the parts I used
- Raspberry Pi Model 3 B+ with a 32 Gb MicroSD Card $35
- An RTL-SDR dongle: $30-$50
- RTL-SDR.COM V3 ~ or
- NooElec NESDR SmarTee ~ or
- NooElec NESDR SmarTee XTR ~ This is what I used since it has always ON bias tee for powering the LNA
- NooElec LNA SAWBird+ GOES 1.69GHz $35
- A 2.4 GHz parabolic grid antenna (Modified) $65-$120
- N-Male to SMA Male adapter $5
- Cable(s) $10
- SMA Male to Male $ 2
- Right Angle USB 6 inch Jumper $5.99
- some SMA connectors $14
- Waterproof Box $9
- A mast pole or tripod for holding the grid antenna $ 5
- Oh, yes, almost forgot, you’ll need one of two operational GOES satellites, they are a bargain at about $10.9 Billion US dollars for the operational life of the GOES series. Don’t forget the $449 Million dollar launch cost for GOES 16 and 17. But you’re in luck, the U.S. funded a portion of your new hobby!
Total Cost $10,900,000,231.99 (Ten billion nine hundred million two hundred thirty-one dollars and 99 cents) Start saving your change! Or consider it ‘Crowd Funded‘
[Grid Antenna]--[Adapter]-[(input side) SAWBird+ (output side)]-[6" pigtail]-[Nooelec SmarteeXTR]-[6" USB cable]-[Raspberry Pi]- WIFI Network
Setting up and Programming your PI
These are the guides that include the installation of the code for goestools (the software that decodes the signal) that I followed. So I would suggest you follow these to get the BASIC system up and running, then return here after you get a signal and or an image, because there is a lot more you can do!
Note: I recommend this one:
RTL-SDR.COM GOES 16/17 AND GK-2A WEATHER SATELLITE RECEPTION COMPREHENSIVE TUTORIAL
Note that the above tutorial ties into this tutorial:
Receive GOES-16 and GOES-17 Images with a Raspberry Pi
ALL of these guides use the goestools software developed by Pieter Noordhuis and can be found here GOESTOOLS
Follow the guides step by step. Use copy and paste to set up the Rasberry PI
HINT- if you COPY from the web page, you can paste into the terminal screen on PI by right-clicking mouse, or ctrl-shift V
I have some hints for the actual build and pointing and fine-tuning of grid antenna that worked for me.
- USE a GOOD manual compass. I have a Note9 Phone, and no matter how I tried it was off by at least 5-10°. The app Satellite AR, which is mentioned in the tutorial, actually placed GOES 16 about 15° off of what was correct. Here’s a PDF on how to sight a bearing with a compass Sighting a compass bearing
- When sighting in the Grid dish, I used an app for my phone to control and run the PI remotely, The app is called RaspController. This way I could monitor the VIT Averages as I adjusted the antenna, first aligning it by Azimuth (mine was 162.4°), then Elevation (mine was 38.4°). my skew was -14.2°, so I left the dish as it came.
- If you’re using a laptop or desktop, you could use Googe Remote or TeamViewer to view it on your phone.
- Be sure your antenna mount is STABLE. I found that small movement, less than a 1/4″ would seriously alter the VIT average.
- I did use the antenna modification by adding to mine 2.8cm for the reflector. It brought my vit down to 480-500. THEN by flattening out the ‘V’ shaped reflector, I got my vit down to 300’s. THEN the next day I took the spacer out and my Vertibi dropped to 150-170’s and the rs(sum) dropped from the 200’s to under 30! So my advice is to experiment!
- Speaking of Experimenting, the GUIDES I listed above get you the basics of GOES imagery, but you can receive more data than what is shown in the guides, and NOAA does add imagery from time to time as well. The EMWIN data stream has relays from HIMAWARI-8, METEOSAT, all sorts of weather data, and graphics as well. Once you have the basics up and running, take a look further down the page for how to modify the .conf files and create your own to receive other data.
Autostart , I added the ability to have my PI automatically start all of the goestools processes and the syncthing software on boot or after a power glitch. You can view the Processes running by /using the command ‘screen -r goesrev’ or ‘screen -r goesproc’ or, lastly ‘screen -r syncthing’ without the ‘ quotes. To stop view pres ‘ctrl A then D’. You can add other goesproc processes if you wish as well. be sure and match the file structure to your own set up!
By editing the rc.local file in the /etc/ directory on the PI as such:
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
# In order to enable or disable this script just change the execution
# By default this script does nothing.
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
/usr/bin/sudo -u pi /usr/bin/screen -dmS goesrecv /usr/local/bin/goesrecv -v -i 1 -c /home/pi/goesrecv.conf
/usr/bin/sudo -u pi /usr/bin/screen -dmS goesproc /usr/bin/goesproc -c /usr/share/goestools/goesproc-goesr.conf -m packet --subscribe tcp://127.0.0.1:5004 --out /home/pi/goes
/usr/bin/sudo -u pi /usr/bin/screen -dmS syncthing /usr/bin/syncthing
If the ‘screen’ app is not on your PI, run
sudo apt update
sudo apt-get install screen
There is also the Software from US Satcom using there XRIT Decoder software (about $125.00) as of this writing. You will still need the antennas and SDR etc. Here is a great write up by Rodney AAA6RD, Region 6 Director for US Army MARS on his GOES-16/17 setup. The write-up includes what’s required, the setup details, and the results. XRIT Satcom Guide
Some examples of types of captures:
A note on False Color
GOES is color blind. That is it does not “see” in Red Green Blue (RGB), there is no ‘green’ channel. The ABI has 16 separate bands, and these are used to create a false-color image. The Near-Infrared Band or ‘veggie” (which is referred to because of the strong elected signal from the vegetated surface can be used to fill in the green wavelength.
A number of methods have been developed to generate true-color images from the
Advanced Baseline Imager (ABI) on the Geostationary Operational Environmental Satellite (GOES)-16. GOES-16 is the first of a series of four spacecraft with the ABI onboard. This is complicated since the ABI does not have a green (0.55 μm) spectral band. Despite this limitation, representative true color images can be made. Goestools has a method using WXstar within it’s software package that uses a color lookup table (a CLUT or LUT) to generate a False Color image. Otherwise all we would get from GOES is a greyscale image. The created (False Color) natural color aims to mimic what the human eye would see if one were looking at Earth from a distance.
I take this a bit further at times, using imaging software to apply yet another filter using a plugin filter system called ColorEFX which allows me to further enhance the False Color, as seen in the image below:
An example of ‘Enhanced’ False Color.
CONUS imagery from GOES 16
Example of the various channels that can be received from the Advanced Baseline Imager (ABI) (Received 4/13/2020-5/10/2020)
In addition to the baseline channels 02, 07, 08, 09, 13,14,15 there are other sets of imagery that can be received if you enable it in the goestools proc.
The High Rate Information Transmission (HRIT) broadcast stream from GOES-16 carries a number of Virtual Channels, each identified with a Virtual Channel ID (VCID). These channels include all imagery data, EMWIN graphics, text products, and other data products.
Here is an example of what can be received via EMWIN (Emergency Managers Weather Information Network) This needs to be enabled in separate scripting.
Non-Cloud Moisture Imagery Products
In addition to the baseline channels 02, 07, 08, 09, 13,14,15 and EMWIN imagery and data, you can also receive Non-Cloud Moisture Imagery Products (Non CMIP). Again, this needs to be enabled in separate scripting.
How to enable EMWIN, Non CMIP and More
Goestools receives just about everything available to it sent from the Advanced Baseline Imager, but it does not, or can not decode it all. I would say 99% of goestools users only have their system set for the VC (Virtual Channels) of 02,07,08,09,13,14,15. and then goestools ‘enhances’ those CMI Band images into something like false color or say, channel 15 enhanced.
Within the stream that comes from both current GOES are other pieces of data, like EMWIN, non-CMIP imagery and data. BUT you have to enable the reception of this in goestools. Only 02,07,08,09,13,14,15 are ‘on‘ by default.
|VCID #||Product Name||GOES-16|
|0||Admin Text||X||X||60||Text Messages||N/A|
|1||Mesoscale Imagery||X||X||15||HRIT/LRIT||0.5km Band|
2, 2km for bands
7 and 13
|2||CMI Band 2||X||X||30||HRIT/LRIT||2 km|
|7||CMI Band 7||X||X||30||HRIT/LRIT||2 km|
|8||CMI Band 8||X||X||30||HRIT/LRIT||2 km|
|9||CMI Band 9||X||X||30||HRIT/LRIT||2 km|
|13||CMI Band 13||X||X||30||HRIT/LRIT||2 km|
|14||CMI Band 14||X||X||30||HRIT/LRIT||2 km|
|15||CMI Band 15||X||X||30||HRIT/LRIT||2 km|
|16||G16 CMI Band 13||X||180||HRIT/LRIT||2 km|
|17||G17 CMI Band 13||X||180||HRIT/LRIT||2 km|
|20||EMWIN – Priority||X||X||Variable||Text||N/A|
|21||EMWIN – Graphics||X||X||Variable||Graphic|
(e.g. GIF, JPEG)
|22||EMWIN – Other||X||X||Variable||Text and Graphic||N/A|
(e.g. GIF, JPEG)
|25||GOES-R/S Level II|
In my case, I made some new config files that can receive that layer date (all of it is layered).EMWIN is the Emergency Managers Weather Information Network. Its the easiest to set up, and the command can be added to your goesproc-goesr.conf, but I prefer a separate conf file and run it when I want with a new command, because EMWIN , in addition to Himawari, and Meteosat and a lot of NOAA imagery, also send about 30,000 text messages every24 hours!
NOAA also experiments with other data that is derived from the ABI. And in the case of non CMIP (which is just NOAA slang for Non Cloud Moisture Imaging Products) This can be viewed (your already receiving it, just goestools is ignoring it, just like EMWIN) by adding code to your gooestools toolbox. Again, I have mine in a separate conf file.
You can also pull DCS data out of the stream by using goeslrit commands. There’s really a lot to experiment with.
I don’t take credit for this, I am just experimenting with the fantastic tool that Pieter Noordhuis developed. I forked his git repository over to mine and have posted some of the custom scripts I have found or have modified into my fork of his repository.
Just so you know, I did have problems running these concurrently on a PI3, I moved everything over to a PI4 and have not had much of an issue with throttling anymore.
So, now, as an example, this is how I receive non-cmip imagery.
On the PI (or in a text editor such as Notepad++) create a file called GOESnoncmip.conf
- On the PI (or in a text editor such as Notepad++) create a file called GOESnoncmip.conf
- Head over to my github page and copy the script from my GOESnoncmip.conf FILE SCRIPT and paste into your file.
- Save that file to you \home\pi\ directory
- Run the command goesproc -c GOESnoncmip.conf -m packet –subscribe tcp://127.0.0.1:5004 –out /home/pi/goes (or whatever directory you use)
- You should start seeing imagery come in after a minute or so.
My github repository – use at your own risk. https://github.com/creinemann
You can use the same process to set up EMWIN as well. (you could also add it to your main goesproc-goesr.conf file but I prefere to be able to run it separately)
There is a modified script that will filter out all of the texts from the EMWIN stream- thanks to Taylor who figured out a work around in goestools that bypasses the ingestion of the 30,000 texts a day that GOES spits out in the EMWIN stream. The patch is here :
For information about each image band and how they are used in weather monitoring see the ABI BANDS QUICK INFORMATION GUIDES Everything you wanted to know about every band, but were afraid to ask.
Web Links for Setting up an RTL-SDR Raspberry PI Based GOES 16 or 17 Satellite Receiving Station
http://usradioguy.com Authors website for NOAA, Meteor and Goes Satellite Reception
https://www.rtl-sdr.com/rtl-sdr-com-goes-16-17-and-gk-2a-weather-satellite-reception-comprehensive-tutorial/ RTL-SDR.COM GOES 16/17 AND GK-2A WEATHER SATELLITE RECEPTION COMPREHENSIVE TUTORIAL
https://gist.github.com/lxe/c1756ca659c3b78414149a3ea723eae2#file-goes16-rtlsdr-md Receive GOES-16 and GOES-17 Images with a Raspberry Pi and RTL-SDR dongle
https://fuzzthepiguy.tech/goessoftware/ Install GOES Software On A Pi
http://pytroll.github.io/ Pytroll is a modular, free and open-source python framework for the processing of earth observation satellite data.
Weblinks for GOES Data and Imagery Information
http://cimss.ssec.wisc.edu/goes/goesdata.html The GOTO for all things GOES by the University of Wisconsin – Advanced Satellite Products Branch (ASPB) ~ The Birthplace of Satellite Meteorology ~This site has A LOT of information, data, imagery, etc. Including a section on free software for image manipulation, data analysis, phone apps, and more!
https://www.noaasis.noaa.gov/GOES/HRIT/products.html GOES HRIT Schedules (this is what you can download off your dish.
https://www.ospo.noaa.gov/Operations/GOES/schedules.html GOES GRB Schedules (you’ll need a bigger dish!)
https://www.weather.gov/media/crp/GOES_16_Guides_FINALBIS.pdf A PDF of all the GOES ABI channels and what they mean.
https://gifmaker.me/ This is the site the Author uses to create animations from GOES images (note, I reduce the file size of the images BEFORE uploading.
I don’t want to leave out the good folks on the other side of this planet from me so…
Anyone up for a challenge on the other side of the world from me? Sam down in Australia has developed a free opensource software to receive weather images from geostationary meteorological satellite GK-2A. Looks like his testing of it is successful. It receives it LRIT data from goestools, so you could build a system with a grid dish like those of us pulling GOES imagery, then it pipes that data into his packet demultiplexer and xRIT file processor.
Images downlinked from GK-2A are encrypted by the Korean Meteorological Administration (KMA). Decryption keys can be downloaded from KMA’s website and used with xrit-rx.
Source code and files are here: https://github.com/sam210723/xrit-rx
A tool to monitor your goestools system.
Edouard over on github has made a goestool monitor using the Grafana utility to chart out the goestools system. You can view the results via your web browser by simply entering your pi IP address (such as http://192.168.1.4:3000 (yours of course)). Instruction and the files to clone into your PI can be found here https://github.com/elafargue/rpi-tig
NOTE: this package install does require DOCKER be added to your RPI First!! Edouard does have as the first step the DOCKER installation. I could NOT get it to work. So I used this method
- Install Docker
curl -sSL https://get.docker.com | sh
- Add permission to Pi User to run Docker Commands
sudo usermod -aG docker pi
Reboot here or run the next commands with a sudo
- Test Docker installation
docker run hello-world
- IMPORTANT! Install proper dependencies
sudo apt-get install -y libffi-dev libssl-dev
sudo apt-get install -y python3 python3-pip
sudo apt-get remove python-configparser
- Install Docker Compose
sudo pip3 install docker-compose
- Install the RPI-TIG repository
Clone this repository, by using Git Clone
git clone https://github.com/elafargue/rpi-tig.git then
cd rpi-tig and do a single
./start.sh You should be set.
- After a few minutes go to you browser and type
http://your.RPI.IP.address:3000 (like http://192.168.2.20:3000)
At first the user name and password are both admin, you will be prompted to create your own password. On the left-hand side select dashboards, and then select “goesrecv stats”
You should start seeing data. If not then goto settings/data sources, then select Telegraf and make sure it is ticked as DEFAULT.
And this is the version I made to also monitor some of the PI systems such as temperature and CPU load, as well as the goestools information:
If you open the port on your router, you can even monitor your system from anywhere there is internet.
Provisioned dashboards on Grafana cannot be saved, so they really should be used as templates, and saved as a new Dashboard if you want to edit/modify them. this is what I did then built the additional graphs and charts onto my own copy.
It will survive a reboot as well, but if you need to shut it down, use this command within the rpi-tig directory:
Animation of Imagery
So you’ve gotten a ton of images, cool, what’s next? Well, animated them! There are tools online and that you can download to take a series of images and turn them into an animated gif, like this:
Sure, it looks good, but still kind of jerky, so what to do? I learned to use a program call Imagemagick to refine, crop, animate, enhance, smooth, etc. the imagery I receive from GOES, In addition to that I use FFMPEG to further enhance the video into a smooth mp4 ‘movie as in the example below:
Imagemagick was a tough nut to crack for me. By that I mean it took a lot of trial and error to get the scripts to work right on my Windows 10 machine. Again, I have shared some of my scripts on my Custom Imagery Scripts Page You will, of course, have to modify them to work within your file structure and PC. I used batch files to run all of my scripts, which takes a bit more work than the standard Magick commands.
Lastly, I used FFMPEG to interpolate and smooth the ‘space’ between the frames to render a smoother animation.
GOES 16 CONUS from June 4th through June 10th, 2020. Showing Tropical Storm Cristobal as it develops in the Yucatan Pennisula then heads north across the Gulf of Mexico, then roughly up the Mississippi valley into Wisconsin then up into Lake Superior.