{"id":4231,"date":"2021-09-02T07:36:05","date_gmt":"2021-09-02T11:36:05","guid":{"rendered":"https:\/\/jeremyclark.ca\/wp\/?p=4231"},"modified":"2026-01-02T14:33:30","modified_gmt":"2026-01-02T19:33:30","slug":"rtl-sdr-for-satellite-weather-on-goes16-signal-decoding","status":"publish","type":"post","link":"https:\/\/jeremyclark.ca\/wp\/telecom\/rtl-sdr-for-satellite-weather-on-goes16-signal-decoding\/","title":{"rendered":"RTL-SDR for Satellite Weather on GOES16 &#8211; Signal Decoding"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">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. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Receive Signal Simulation<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"360\" src=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/09\/bpsk_sim-2-1024x360.jpg\" alt=\"\" class=\"wp-image-4310\" srcset=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/09\/bpsk_sim-2-1024x360.jpg 1024w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/09\/bpsk_sim-2-300x106.jpg 300w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/09\/bpsk_sim-2-768x270.jpg 768w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/09\/bpsk_sim-2-1536x540.jpg 1536w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/09\/bpsk_sim-2-1568x552.jpg 1568w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/09\/bpsk_sim-2.jpg 1751w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Fig.1 BPSK Scicos Simulation<\/figcaption><\/figure>\n<\/div>\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"250\" src=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/09\/bpsk_sim1-1024x250.jpg\" alt=\"\" class=\"wp-image-4288\" srcset=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/09\/bpsk_sim1-1024x250.jpg 1024w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/09\/bpsk_sim1-300x73.jpg 300w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/09\/bpsk_sim1-768x187.jpg 768w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/09\/bpsk_sim1-1536x374.jpg 1536w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/09\/bpsk_sim1.jpg 1539w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Fig.2 PRBS Data &amp; BPSK 180deg Phase Shift<\/figcaption><\/figure>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"594\" src=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/09\/bpsk_sim2-1024x594.jpg\" alt=\"\" class=\"wp-image-4292\" srcset=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/09\/bpsk_sim2-1024x594.jpg 1024w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/09\/bpsk_sim2-300x174.jpg 300w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/09\/bpsk_sim2-768x445.jpg 768w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/09\/bpsk_sim2.jpg 1528w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">FIg.3 Rx Data &#8211; LPF Output &#8211; Mixer Output<\/figcaption><\/figure>\n<\/div>\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>SNR=20*log10[Sp2p\/Np2p]<\/strong><\/td><td><strong>BER<\/strong><\/td><\/tr><tr><td>20*log10[2Vp2p\/1.0vp2p]=6dB  <\/td><td>[&lt;1\/1000]=&lt;0.001 <\/td><\/tr><tr><td>20*log10[2Vp2p\/2vp2p]=0dB  <\/td><td>[6\/1000]=0.006 <\/td><\/tr><tr><td> 20*log10[2Vp2p\/4vp2p]=-6dB   <\/td><td>[41\/1000]=0.041<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Table 1 SNR vs. BER for BPSK<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">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. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Decoding Software &#8211; goestools on RPi4<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In order to decode the GOES16 signal, I used Ref.<a href=\"https:\/\/www.rtl-sdr.com\/rtl-sdr-com-goes-16-17-and-gk-2a-weather-satellite-reception-comprehensive-tutorial\/\">3<\/a> &amp; <a href=\"https:\/\/gist.github.com\/lxe\/c1756ca659c3b78414149a3ea723eae2#file-goes16-rtlsdr-md\">4<\/a> (from rtl-sdr.com &amp; 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 <a href=\"https:\/\/www.raspberrypi.org\/software\/operating-systems\/#raspberry-pi-os-32-bit\">Raspbian Lite OS<\/a>. 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.<br><br>After that, now with an empty SD card, I used <a href=\"https:\/\/www.raspberrypi.org\/blog\/raspberry-pi-imager-imaging-utility\/\">RaspberryPi Imager<\/a> 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 &lt;sudo raspi-config&gt; 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 192.168.0.12 assigned to the RPi4 (Fig.4). Once connected over the LAN, I ran an update &amp; upgrade &lt;sudo apt update&gt; &amp; &lt;sudo apt full-upgrade&gt;. 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 &lt;rtl_test&gt; as shown in Fig.5.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"660\" height=\"663\" src=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/08\/putty_config.jpg\" alt=\"\" class=\"wp-image-4269\" srcset=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/08\/putty_config.jpg 660w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/08\/putty_config-300x300.jpg 300w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/08\/putty_config-150x150.jpg 150w\" sizes=\"auto, (max-width: 660px) 100vw, 660px\" \/><figcaption class=\"wp-element-caption\">Fig.4 PUTTY Configuration Screen RPi4 LAN Connection<\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1010\" height=\"583\" src=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/08\/rtl_test.jpg\" alt=\"\" class=\"wp-image-4271\" srcset=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/08\/rtl_test.jpg 1010w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/08\/rtl_test-300x173.jpg 300w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/08\/rtl_test-768x443.jpg 768w\" sizes=\"auto, (max-width: 1010px) 100vw, 1010px\" \/><figcaption class=\"wp-element-caption\">Fig.5 rtl_test to Detect RTL-SDR on USB Port<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">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) &gt; 2000, when the dish was pointed I could get the vit(avg) to &lt;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. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"222\" src=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/08\/viterbi2-1024x222.jpg\" alt=\"\" class=\"wp-image-4281\" srcset=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/08\/viterbi2-1024x222.jpg 1024w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/08\/viterbi2-300x65.jpg 300w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/08\/viterbi2-768x167.jpg 768w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2021\/08\/viterbi2.jpg 1345w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Fig.6 Shows the Console Output for goesrecv<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube aligncenter wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"RTL-SDR for Satellite Weather on GOES16 - Signal Decoding\" width=\"750\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/PrJ5gfE0Ji8?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Fig.7 YouTube Video RTL-SDR for Satellite Weather on GOES16 &#8211; Signal Decoding<\/figcaption><\/figure>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/jeremyclark.ca\/wp\/blog-topics\/\"><img loading=\"lazy\" decoding=\"async\" width=\"941\" height=\"382\" src=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2025\/10\/space_sat.jpg\" alt=\"\" class=\"wp-image-12347\" style=\"aspect-ratio:2.4633194441175243;width:432px;height:auto\" srcset=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2025\/10\/space_sat.jpg 941w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2025\/10\/space_sat-300x122.jpg 300w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2025\/10\/space_sat-768x312.jpg 768w\" sizes=\"auto, (max-width: 941px) 100vw, 941px\" \/><\/a><figcaption class=\"wp-element-caption\">Space\/Satellite Blog Topics<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Please send your comments, questions and suggestions to:<br><a href=\"https:\/\/jeremyclark.ca\/wp\/contact\">contact:<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.youtube.com\/user\/clarktelecom\"><img loading=\"lazy\" decoding=\"async\" width=\"93\" height=\"98\" src=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2020\/01\/youtube.jpg\" alt=\"YouTube Channel\" class=\"wp-image-687\"\/><\/a><figcaption class=\"wp-element-caption\">YouTube Channel<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">References<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">#1. &#8211; &#8220;RTL-SDR for Satellite Weather on GOES16 &#8211; Signal Capture&#8221;<br><a href=\"https:\/\/jeremyclark.ca\/wp\/telecom\/rtl-sdr-for-satellite-weather-on-goes16-signal-capture\/\">https:\/\/jeremyclark.ca\/wp\/telecom\/rtl-sdr-for-satellite-weather-on-goes16-signal-capture\/<\/a><br><br>#2. &#8211; &#8220;RTL-SDR for Satellite Weather on GOES16 &#8211; Planning&#8221;<br><a href=\"https:\/\/jeremyclark.ca\/wp\/telecom\/rtl-sdr-for-marine-hf-weather-fax\/\"><\/a><a href=\"https:\/\/jeremyclark.ca\/wp\/telecom\/rtl-sdr-for-satellite-weather-on-goes16-planning\/\">https:\/\/jeremyclark.ca\/wp\/telecom\/rtl-sdr-for-satellite-weather-on-goes16-planning\/<\/a><br><br>#3. &#8211; &#8220;RTL-SDR GOES16\/17 Reception Tutorial&#8221;<br><a href=\"https:\/\/jeremyclark.ca\/wp\/telecom\/openplotter-grib-files\/\"><\/a><a href=\"https:\/\/www.rtl-sdr.com\/rtl-sdr-com-goes-16-17-and-gk-2a-weather-satellite-reception-comprehensive-tutorial\/\">https:\/\/www.rtl-sdr.com\/rtl-sdr-com-goes-16-17-and-gk-2a-weather-satellite-reception-comprehensive-tutorial\/<\/a><br><br>#4. &#8211; &#8220;Receive GOES16\/17 with RaspberryPi and RTL-SDR&#8221;<br><a href=\"https:\/\/gist.github.com\/lxe\/c1756ca659c3b78414149a3ea723eae2#file-goes16-rtlsdr-md\">https:\/\/gist.github.com\/lxe\/c1756ca659c3b78414149a3ea723eae2#file-goes16-rtlsdr-md<\/a><br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction 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&hellip; <a class=\"more-link\" href=\"https:\/\/jeremyclark.ca\/wp\/telecom\/rtl-sdr-for-satellite-weather-on-goes16-signal-decoding\/\">Continue reading <span class=\"screen-reader-text\">RTL-SDR for Satellite Weather on GOES16 &#8211; Signal Decoding<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":4257,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,5,4],"tags":[],"class_list":["post-4231","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-elec","category-nav","category-telecom","entry"],"_links":{"self":[{"href":"https:\/\/jeremyclark.ca\/wp\/wp-json\/wp\/v2\/posts\/4231","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jeremyclark.ca\/wp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jeremyclark.ca\/wp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jeremyclark.ca\/wp\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jeremyclark.ca\/wp\/wp-json\/wp\/v2\/comments?post=4231"}],"version-history":[{"count":83,"href":"https:\/\/jeremyclark.ca\/wp\/wp-json\/wp\/v2\/posts\/4231\/revisions"}],"predecessor-version":[{"id":12763,"href":"https:\/\/jeremyclark.ca\/wp\/wp-json\/wp\/v2\/posts\/4231\/revisions\/12763"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jeremyclark.ca\/wp\/wp-json\/wp\/v2\/media\/4257"}],"wp:attachment":[{"href":"https:\/\/jeremyclark.ca\/wp\/wp-json\/wp\/v2\/media?parent=4231"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jeremyclark.ca\/wp\/wp-json\/wp\/v2\/categories?post=4231"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jeremyclark.ca\/wp\/wp-json\/wp\/v2\/tags?post=4231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}