Initial commit
4
.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
/public/
|
||||
/resources/_gen/
|
||||
.hugo_build.lock
|
||||
|
4
.gitmodules
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
[submodule "themes/blowfish"]
|
||||
path = themes/blowfish
|
||||
url = https://github.com/nunocoracao/blowfish.git
|
||||
branch = main
|
2
README.org
Normal file
|
@ -0,0 +1,2 @@
|
|||
* README
|
||||
This is the repository for my personal website https://jeffreyflorek.com
|
5
archetypes/default.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
+++
|
||||
date = '{{ .Date }}'
|
||||
draft = true
|
||||
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
|
||||
+++
|
12
assets/icons/fediverse.svg
Normal file
|
@ -0,0 +1,12 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
|
||||
<path
|
||||
d="M47.923 72.796a18.227 18.227 0 0 1-7.795 7.76l42.798 42.964 10.318-5.229zm56.452 56.67-10.318 5.229 21.686 21.77a18.227 18.227 0 0 1 7.797-7.76zm49.517-39.67-24.23 12.279 1.787 11.427 27.415-13.894a18.227 18.227 0 0 1-4.972-9.812zm-38.295 19.407L58.31 138.237a18.227 18.227 0 0 1 4.973 9.813l54.102-27.42zM97.174 37.686 69.53 91.653l8.162 8.193 29.269-57.138a18.227 18.227 0 0 1-9.787-5.022ZM62.34 105.69l-14.002 27.335a18.227 18.227 0 0 1 9.786 5.021l12.377-24.163ZM39.89 80.675a18.227 18.227 0 0 1-9.106 1.904 18.227 18.227 0 0 1-1.759-.184l8.176 52.297a18.227 18.227 0 0 1 9.106-1.903 18.227 18.227 0 0 1 1.758.184zm23.435 67.634a18.227 18.227 0 0 1 .19 3.672 18.227 18.227 0 0 1-1.922 7.19l52.289 8.391a18.227 18.227 0 0 1-.192-3.672 18.227 18.227 0 0 1 1.924-7.19zM159.048 99.8l-24.135 47.116a18.227 18.227 0 0 1 9.788 5.023l24.134-47.117a18.227 18.227 0 0 1-9.787-5.023zm-32.917-66.64a18.227 18.227 0 0 1-7.797 7.76l37.376 37.52a18.227 18.227 0 0 1 7.797-7.76zm-34.114-5.477L44.77 51.627a18.227 18.227 0 0 1 4.972 9.813L96.99 37.495a18.227 18.227 0 0 1-4.971-9.811zm26.231 13.281a18.227 18.227 0 0 1-9.256 1.98 18.227 18.227 0 0 1-1.595-.168l4.185 26.8 11.42 1.832zm-4.234 44.192 9.896 63.362a18.227 18.227 0 0 1 8.973-1.837 18.227 18.227 0 0 1 1.906.21l-9.354-59.903ZM49.775 61.64a18.227 18.227 0 0 1 .201 3.73 18.227 18.227 0 0 1-1.894 7.139l26.82 4.308 5.271-10.295zm45.968 7.382L90.47 79.318l63.37 10.177a18.227 18.227 0 0 1-.184-3.63 18.227 18.227 0 0 1 1.945-7.229z"
|
||||
style="display:inline" transform="matrix(.13855 0 0 .1385 -2.107 -1.132)" />
|
||||
<g style="display:inline;opacity:1" transform="matrix(.13834 .00753 -.00754 .1383 -1.182 -5.633)">
|
||||
<circle cx="106.266" cy="51.536" r="16.571" />
|
||||
<circle cx="171.428" cy="110.193" r="16.571" />
|
||||
<circle cx="135.764" cy="190.277" r="16.571" />
|
||||
<circle cx="48.559" cy="181.114" r="16.571" />
|
||||
<circle cx="30.329" cy="95.367" r="16.571" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2 KiB |
BIN
assets/img/jeff.jpeg
Normal file
After Width: | Height: | Size: 264 KiB |
78
config/_default/hugo.toml
Normal file
|
@ -0,0 +1,78 @@
|
|||
# -- Site Configuration --
|
||||
# Refer to the theme docs for more details about each of these parameters.
|
||||
# https://blowfish.page/docs/getting-started/
|
||||
|
||||
theme = "blowfish" # UNCOMMENT THIS LINE
|
||||
# baseURL = "https://your_domain.com/"
|
||||
defaultContentLanguage = "en"
|
||||
|
||||
# pluralizeListTitles = "true" # hugo function useful for non-english languages, find out more in https://gohugo.io/getting-started/configuration/#pluralizelisttitles
|
||||
|
||||
enableRobotsTXT = true
|
||||
summaryLength = 0
|
||||
|
||||
buildDrafts = false
|
||||
buildFuture = false
|
||||
|
||||
enableEmoji = true
|
||||
|
||||
# googleAnalytics = "G-XXXXXXXXX"
|
||||
|
||||
[pagination]
|
||||
pagerSize = 100
|
||||
|
||||
[imaging]
|
||||
anchor = 'Center'
|
||||
|
||||
[taxonomies]
|
||||
tag = "tags"
|
||||
category = "categories"
|
||||
author = "authors"
|
||||
series = "series"
|
||||
|
||||
[sitemap]
|
||||
changefreq = 'daily'
|
||||
filename = 'sitemap.xml'
|
||||
priority = 0.5
|
||||
|
||||
[outputs]
|
||||
home = ["HTML", "RSS", "JSON"]
|
||||
|
||||
[related]
|
||||
threshold = 0
|
||||
toLower = false
|
||||
|
||||
[[related.indices]]
|
||||
name = "tags"
|
||||
weight = 100
|
||||
|
||||
[[related.indices]]
|
||||
name = "categories"
|
||||
weight = 100
|
||||
|
||||
[[related.indices]]
|
||||
name = "series"
|
||||
weight = 50
|
||||
|
||||
[[related.indices]]
|
||||
name = "authors"
|
||||
weight = 20
|
||||
|
||||
[[related.indices]]
|
||||
name = "date"
|
||||
weight = 10
|
||||
|
||||
[[related.indices]]
|
||||
applyFilter = false
|
||||
name = 'fragmentrefs'
|
||||
type = 'fragments'
|
||||
weight = 10
|
||||
|
||||
[markup]
|
||||
[markup.goldmark]
|
||||
[markup.goldmark.extensions]
|
||||
[markup.goldmark.extensions.passthrough]
|
||||
enable = true
|
||||
[markup.goldmark.extensions.passthrough.delimiters]
|
||||
block = [['\[', '\]'], ['$$', '$$']]
|
||||
inline = [['\(', '\)']]
|
22
config/_default/languages.en.toml
Normal file
|
@ -0,0 +1,22 @@
|
|||
disabled = false
|
||||
languageCode = "en"
|
||||
languageName = "English"
|
||||
weight = 1
|
||||
title = "Jeffrey K. Florek, Jr."
|
||||
|
||||
[params]
|
||||
displayName = "EN"
|
||||
isoCode = "en"
|
||||
rtl = false
|
||||
dateFormat = "January 2 2006"
|
||||
description = "This is my website, I guess."
|
||||
|
||||
|
||||
[params.author]
|
||||
name = "Jeffrey K. Florek, Jr."
|
||||
image = "img/jeff.jpeg"
|
||||
headline = "`TODO: Write a cool headline.`"
|
||||
bio = "`TODO: Write a bio`"
|
||||
links = [
|
||||
{comment = "https://social.jeffreyflorek.com"},
|
||||
{code = "https://git.florek.systems"}]
|
13
config/_default/markup.toml
Normal file
|
@ -0,0 +1,13 @@
|
|||
# -- Markup --
|
||||
# These settings are required for the theme to function.
|
||||
|
||||
[goldmark]
|
||||
[goldmark.renderer]
|
||||
unsafe = true
|
||||
|
||||
[highlight]
|
||||
noClasses = false
|
||||
|
||||
[tableOfContents]
|
||||
startLevel = 2
|
||||
endLevel = 4
|
79
config/_default/menus.en.toml
Normal file
|
@ -0,0 +1,79 @@
|
|||
# -- Main Menu --
|
||||
# The main menu is displayed in the header at the top of the page.
|
||||
# Acceptable parameters are name, pageRef, page, url, title, weight.
|
||||
#
|
||||
# The simplest menu configuration is to provide:
|
||||
# name = The name to be displayed for this menu link
|
||||
# pageRef = The identifier of the page or section to link to
|
||||
#
|
||||
# By default the menu is ordered alphabetically. This can be
|
||||
# overridden by providing a weight value. The menu will then be
|
||||
# ordered by weight from lowest to highest.
|
||||
|
||||
[[main]]
|
||||
name = "Blog"
|
||||
pageRef = "posts"
|
||||
weight = 10
|
||||
|
||||
[[main]]
|
||||
name = "Projects"
|
||||
pageRef = "projects"
|
||||
weight = 20
|
||||
|
||||
[[main]]
|
||||
name = "Docs"
|
||||
pageRef = "docs"
|
||||
weight = 30
|
||||
|
||||
#[[main]]
|
||||
# name = "Parent"
|
||||
# weight = 20
|
||||
|
||||
#[[main]]
|
||||
# name = "example sub-menu 1"
|
||||
# parent = "Parent"
|
||||
# pageRef = "posts"
|
||||
# weight = 20
|
||||
|
||||
#[[main]]
|
||||
# name = "example sub-menu 2"
|
||||
# parent = "Parent"
|
||||
# pageRef = "posts"
|
||||
# weight = 20
|
||||
|
||||
#[[subnavigation]]
|
||||
# name = "An interesting topic"
|
||||
# pageRef = "tags/interesting-topic"
|
||||
# weight = 10
|
||||
|
||||
#[[subnavigation]]
|
||||
# name = "My Awesome Category"
|
||||
# pre = "github"
|
||||
# pageRef = "categories/awesome"
|
||||
# weight = 20
|
||||
|
||||
# [[main]]
|
||||
# name = "Categories"
|
||||
# pageRef = "categories"
|
||||
# weight = 20
|
||||
|
||||
# [[main]]
|
||||
# name = "Tags"
|
||||
# pageRef = "tags"
|
||||
# weight = 30
|
||||
|
||||
|
||||
# -- Footer Menu --
|
||||
# The footer menu is displayed at the bottom of the page, just before
|
||||
# the copyright notice. Configure as per the main menu above.
|
||||
|
||||
|
||||
[[footer]]
|
||||
name = "Tags"
|
||||
pageRef = "tags"
|
||||
weight = 10
|
||||
|
||||
[[footer]]
|
||||
name = "Categories"
|
||||
pageRef = "categories"
|
||||
weight = 20
|
3
config/_default/module.toml
Normal file
|
@ -0,0 +1,3 @@
|
|||
[hugoVersion]
|
||||
extended = false
|
||||
min = "0.87.0"
|
104
config/_default/params.toml
Normal file
|
@ -0,0 +1,104 @@
|
|||
colorScheme = "noir"
|
||||
defaultAppearance = "light"
|
||||
autoSwitchAppearance = true
|
||||
enableSearch = true
|
||||
enableCodeCopy = true
|
||||
replyByEmail = false
|
||||
mainSections = [ "posts", "projects" ]
|
||||
disableImageOptimization = false
|
||||
disableTextInHeader = false
|
||||
giteaDefaultServer = "https://git.fsfe.org"
|
||||
forgejoDefaultServer = "https://git.florek.systems"
|
||||
firebase = { }
|
||||
fathomAnalytics = { }
|
||||
umamiAnalytics = { }
|
||||
selineAnalytics = { }
|
||||
buymeacoffee = { }
|
||||
verification = { }
|
||||
rssnext = { }
|
||||
highlightCurrentMenuArea = ""
|
||||
smartTOC = true
|
||||
smartTOCHideUnfocusedChildren = true
|
||||
|
||||
[header]
|
||||
layout = "basic"
|
||||
|
||||
[footer]
|
||||
showCopyright = true
|
||||
showThemeAttribution = true
|
||||
showAppearanceSwitcher = true
|
||||
showScrollToTop = true
|
||||
|
||||
[homepage]
|
||||
layout = "profile"
|
||||
showRecent = true
|
||||
showRecentItems = "5"
|
||||
showMoreLink = true
|
||||
showMoreLinkDest = "/posts/"
|
||||
cardView = false
|
||||
cardViewScreenWidth = false
|
||||
layoutBackgroundBlur = false
|
||||
|
||||
[article]
|
||||
showDate = true
|
||||
showDateOnlyInArticle = false
|
||||
showDateUpdated = false
|
||||
showAuthor = true
|
||||
showHero = true
|
||||
layoutBackgroundBlur = true
|
||||
layoutBackgroundHeaderSpace = true
|
||||
showBreadcrumbs = true
|
||||
showDraftLabel = true
|
||||
showEdit = false
|
||||
editAppendPath = true
|
||||
seriesOpened = false
|
||||
showHeadingAnchors = true
|
||||
showPagination = true
|
||||
invertPagination = false
|
||||
showReadingTime = false
|
||||
showTableOfContents = true
|
||||
showTaxonomies = true
|
||||
showCategoryOnly = false
|
||||
showAuthorsBadges = ""
|
||||
showWordCount = true
|
||||
showZenMode = false
|
||||
heroStyle = "big"
|
||||
|
||||
[list]
|
||||
showHero = false
|
||||
layoutBackgroundBlur = true
|
||||
layoutBackgroundHeaderSpace = true
|
||||
showBreadcrumbs = false
|
||||
showSummary = true
|
||||
showViews = false
|
||||
showLikes = false
|
||||
showTableOfContents = false
|
||||
showCards = false
|
||||
orderByWeight = false
|
||||
groupByYear = true
|
||||
cardView = false
|
||||
cardViewScreenWidth = false
|
||||
constrainItemsWidth = true
|
||||
heroStyle = "basic"
|
||||
|
||||
[sitemap]
|
||||
excludedKinds = [ "taxonomy", "term" ]
|
||||
|
||||
[taxonomy]
|
||||
showTermCount = true
|
||||
showHero = false
|
||||
showBreadcrumbs = false
|
||||
showViews = false
|
||||
showLikes = false
|
||||
showTableOfContents = false
|
||||
cardView = false
|
||||
|
||||
[term]
|
||||
showHero = false
|
||||
showBreadcrumbs = false
|
||||
showViews = false
|
||||
showLikes = false
|
||||
showTableOfContents = true
|
||||
groupByYear = false
|
||||
cardView = false
|
||||
cardViewScreenWidth = false
|
0
content/docs/_index.md
Normal file
0
content/posts/_index.md
Normal file
BIN
content/projects/satellite-imagery/channel-7-full-disk.jpg
Normal file
After Width: | Height: | Size: 264 KiB |
BIN
content/projects/satellite-imagery/false-color-cropped.jpg
Normal file
After Width: | Height: | Size: 397 KiB |
BIN
content/projects/satellite-imagery/featured.jpg
Normal file
After Width: | Height: | Size: 265 KiB |
229
content/projects/satellite-imagery/index.md
Normal file
|
@ -0,0 +1,229 @@
|
|||
---
|
||||
title: "Satellite Imagery with RTL-SDR and GOES 16"
|
||||
date: 2025-06-08
|
||||
draft: false
|
||||
description: "Receiving full disk images of the Earth from GOES 16 with an RTL-SDR and a 2.4 GHz Parabolic Grid Antenna"
|
||||
categories: Electronics
|
||||
tags: [Raspberry Pi, SDR]
|
||||
---
|
||||
|
||||
Receiving full disk images of the Earth from GOES 16 with an RTL-SDR and a 2.4 GHz Parabolic Grid Antenna.
|
||||
|
||||
{{< alert >}}
|
||||
**Heads up!** This article was originally posted on my old website in April of 2019. While the general process of receiving images from GOES 16 won't have changed, the software tools may have evolved since then. Make sure to read the documentation for `goestools` and don't copy and paste any terminal commands below without fully understanding what you're asking for!
|
||||
{{< /alert >}}
|
||||
|
||||
## Introduction
|
||||
After stumbling upon the online communities around software defined radio (mainly the [RTL-SDR Blog](https://www.rtl-sdr.com/) and the [RTL-SDR subreddit](https://www.reddit.com/r/rtlsdr/)), I discovered it was possible to receive high resolution, full disk images of the Earth from NOAA's [GOES](https://en.wikipedia.org/wiki/Geostationary_Operational_Environmental_Satellite) satellites using cheap and simple (relative to most other satcom systems) hardware setup. Since I'm located in the Northeastern United States, I've got a pretty good view of [GOES-16](https://en.wikipedia.org/wiki/GOES-16), so I decided to see if I could actually manage to set up a receiver.
|
||||
|
||||
## Hardware
|
||||
Based on a few guides I found online (see Notes below), I determined that I needed the following hardware:
|
||||
1. Raspberry Pi 3B+.
|
||||
2. An RTL-SDR software-defined radio dongle.
|
||||
<img src="pi-and-rtl-sdr.jpg" alt="Photograph of a Raspberry Pi single board computer with an RTL-SDR software-defined radio attached.">
|
||||
3. A low noise amplifier (LNA) and SAW filter designed for the frequency that the GOES satellite uses (around 1.7 GHz). I used the [SAWbird+ GOES Barebones from Nooelec](https://www.nooelec.com/store/sawbird-plus-goes.html).
|
||||
4. A 2.4 GHz parabolic grid antenna [modified for 1.7 GHz](https://www.reddit.com/r/RTLSDR/comments/9ahdzc/modification_of_wifi_grid_antenna_to_make_it_work/).
|
||||
<img src="satellite-dish.jpg" alt="Photograph of a satellite dish mounted on a tripod pointing towards the sky.">
|
||||
5. Various RF adapters and coaxial cables needed to connect everything together (depends on the specific setup, see Notes below).
|
||||
<img src="satellite-wires.jpg" alt="Photograph of a satellite dish showing it connected to the RTL-SDR dongle via a coaxial cable.">
|
||||
|
||||
## Software
|
||||
To setup the software side of things, I followed [lxe's guide](https://gist.github.com/lxe/c1756ca659c3b78414149a3ea723eae2), summarized below.
|
||||
> Prep your Raspberry Pi and install necessary drivers and software.
|
||||
>
|
||||
> **0. Get your Raspberry Pi ready**
|
||||
>
|
||||
> - Download [Raspbian Lite Image](https://www.raspberrypi.org/downloads/raspbian/) and [Etcher](https://etcher.io/)
|
||||
> - Use Etcher to write the image to the SD card.
|
||||
> - Mount the SD card as a volume on your machine.
|
||||
> - Follow [this procedure](https://www.raspberrypi.org/forums/viewtopic.php?t=191252) to configure WiFi and SSH.
|
||||
> - Plug the card into your Raspberry Pi and turn it on.
|
||||
> - Find the IP address of the Raspberry Pi using your gateway/router administrative interface.
|
||||
>
|
||||
> Now you can SSH into your Raspberry PI as `pi` with a default password `raspberry`.
|
||||
>
|
||||
> **1. Get everything up to date**
|
||||
>
|
||||
> From now on all commands should be run on the Raspberry Pi.
|
||||
>
|
||||
> ```bash
|
||||
> sudo apt update
|
||||
> sudo apt dist-upgrade
|
||||
> sudo reboot
|
||||
> ```
|
||||
>
|
||||
> **2. Install dependencies**
|
||||
>
|
||||
> ```bash
|
||||
> sudo apt install git build-essential cmake libusb-1.0 libopencv-dev libproj-dev
|
||||
> ```
|
||||
>
|
||||
> **3. Install `librtlsdr`**
|
||||
>
|
||||
> Grab the latest [librtlsdr](https://github.com/steve-m/librtlsdr.git) source, compile it, and install the shared libraries/includes.
|
||||
>
|
||||
> ```bash
|
||||
> 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
|
||||
>
|
||||
> 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
|
||||
>
|
||||
> sudo reboot
|
||||
> ```
|
||||
>
|
||||
> **4. Test your the RTL-SDR dongle**
|
||||
>
|
||||
> ```bash
|
||||
> rtl_test
|
||||
> ```
|
||||
>
|
||||
> You should see something like this:
|
||||
>
|
||||
> ```
|
||||
> Found 1 device(s):
|
||||
> 0: Realtek, RTL2838UHIDIR, SN: 00000001
|
||||
> ...
|
||||
> ```
|
||||
>
|
||||
> If it hangs, just press <kbd>Ctrl</kbd> + <kbd>C</kbd> to exit. It doesn't have to finish.
|
||||
>
|
||||
> If there are errors, or if the device is not recognized:
|
||||
>
|
||||
> - Reinstall the driver from Step 3
|
||||
> - Ensure the dongle is secured in the USB port
|
||||
> - Remove all USB hubs and plug in into the Pi directly
|
||||
> - Make sure you power your Raspberry Pi with at least a 2.5A power supply
|
||||
> - Check the device using `lsusb` command. You should see `ID 0bda:2838 Realtek Semiconductor Corp. RTL2838` or something of the like listed there. If not, try the previous steps.
|
||||
> - Run `dmesg` and check for errors such as `error -71` related to the USB device. This may mean that your RTL-SDR receiver might be broken. This happened to me, so I ordered another one, which ran fine.
|
||||
>
|
||||
> **5. Install [`goestools`](https://github.com/pietern/goestools.git)**
|
||||
>
|
||||
> ```bash
|
||||
> 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 ..
|
||||
>
|
||||
> sudo make -j2 install
|
||||
> ```
|
||||
>
|
||||
> **6. Create `goesrecv.conf` config**
|
||||
>
|
||||
> ```bash
|
||||
> 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](http://www.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, rendering it practically useless.
|
||||
>
|
||||
> Adjust your dish angle according to the elevation.
|
||||
>
|
||||
> **8. Run goesrecv and perform fine antenna adjustments**
|
||||
>
|
||||
> ```bash
|
||||
> 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](https://en.wikipedia.org/wiki/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, perform the same process to find the minimum error rate while slightly adjusting the vertical angle.
|
||||
>
|
||||
> When the `vit` errors are at their lowest, you've pointed the antenna. Double check the antenna position again with a compass to make sure you're pointed at the intended satellite; 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 `goesrecv.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 very slight adjustments to the antenna again.
|
||||
>
|
||||
> **10. Process packets into images**
|
||||
>
|
||||
> While `goesrecv` is running, in a separate session, run:
|
||||
>
|
||||
> ```bash
|
||||
> goesproc -c /usr/share/goestools/goesproc-goesr.conf -m packet --subscribe tcp://127.0.0.1:5004
|
||||
> ```
|
||||
>
|
||||
> Once `goesproc` receives enough packets, it will start writing images and text to the locations described in `/usr/share/goestools/goesproc-goesr.conf`.
|
||||
>
|
||||
> ```
|
||||
> Writing: ./goes16/m2/ch13/2018-09-15/GOES16_M2_CH13_20180915T231750Z.jpg
|
||||
> Writing: ./goes16/m2/ch13_enhanced/2018-09-15/GOES16_M2_CH13_enhanced_20180915T231750Z.jpg
|
||||
> Writing: ./goes16/m2/ch02/2018-09-15/GOES16_M2_CH02_20180915T231750Z.jpg
|
||||
> Writing: ./goes16/m2/fc/2018-09-15/GOES16_M2_FC_20180915T231750Z.jpg
|
||||
> Writing: ./goes16/m1/ch07/2018-09-15/GOES16_M1_CH07_20180915T231820Z.jpg
|
||||
> ...
|
||||
> ```
|
||||
|
||||
## Results
|
||||
Here are some of the images I was able to get off of GOES 16:
|
||||
{{< gallery >}}
|
||||
<img src="false-color-cropped.jpg" alt="False color image from GOES 16, cropped to show full resolution." class="grid-w50">
|
||||
<img src="channel-7-full-disk.jpg" alt="Full disk image of the Earth received from GOES 16 Channel 7." class="grid-w50">
|
||||
<img src="misc-full-disk.jpg" alt="Full disk image recieved from GOES 16." class="grid-w50">
|
||||
<img src="misc-full-disk-2.jpg" alt="Colorful full disk image received from GOES 16. Enhanced with software post processing." class="grid-w50">
|
||||
{{< /gallery >}}
|
||||
|
||||
## Notes
|
||||
This wouldn't have been possible without the work of a lot of others before me.
|
||||
Some of the most useful resources I found about this subject are:
|
||||
* Pieter Noordhuis' [goestools](https://github.com/pietern/goestools) and his guide for setting up [A minimal LRIT/HRIT receiver](https://pietern.github.io/goestools/guides/minimal_receiver.html)
|
||||
* This [guide](https://gist.github.com/lxe/c1756ca659c3b78414149a3ea723eae2) that goes into a little more detail about how to use goestools.
|
||||
* Additionally the [RTL-SDR Blog](https://www.rtl-sdr.com/) is a wealth of knowledge about anything to do with this type of software defined radio.
|
BIN
content/projects/satellite-imagery/misc-full-disk-2.jpg
Normal file
After Width: | Height: | Size: 417 KiB |
BIN
content/projects/satellite-imagery/misc-full-disk.jpg
Normal file
After Width: | Height: | Size: 283 KiB |
BIN
content/projects/satellite-imagery/pi-and-rtl-sdr.jpg
Normal file
After Width: | Height: | Size: 192 KiB |
BIN
content/projects/satellite-imagery/satellite-dish.jpg
Normal file
After Width: | Height: | Size: 565 KiB |
BIN
content/projects/satellite-imagery/satellite-wires.jpg
Normal file
After Width: | Height: | Size: 279 KiB |
5
deploy
Executable file
|
@ -0,0 +1,5 @@
|
|||
#!/bin/sh
|
||||
|
||||
hugo && rsync -avz --delete ./public/ ceres:~/public/jeffreyflorek.com
|
||||
|
||||
exit 0
|
3
hugo.toml
Normal file
|
@ -0,0 +1,3 @@
|
|||
baseURL = 'https://example.org/'
|
||||
languageCode = 'en-us'
|
||||
title = 'My New Hugo Site'
|
1
themes/blowfish
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit 0b06a64139beba6287e7685f4c810ad4ff772fde
|