May 30, 2020 | 9:50 pm
You are here:  / HOWTO / News / Work In Progress / [HOWTO] Windows / RTL Based APT/METEOR Satellite Weather Station

[HOWTO] Windows / RTL Based APT/METEOR Satellite Weather Station


I’ve never been much of a TV watcher.  I tend to get my news online and/or, wherever possible, from the original source.  I’m also a licensed HAM.  Needless to say, I like all things radio.

There are many satellites orbiting overhead, some of which are weather satellites.  Many of these take specialized equipment to receive, and when received, are generally encrypted so the owner of the satellite can sell that data to news stations, weather channels, etc.  However, a few are not encrypted and just require a small amount of effort and some minimal hardware to receive.

These satellites tend to fall into 2 main categories.  APT (Automatic Picture Transmission), and LRPT (Low Rate Picture Transmission).  APT is an analog signal and is generally the easiest to get started with.  LRPT is digital and has always been a little trickier, but with just a little extra effort, you can receive both with the same equipment.

This guide is designed for people who either already have some basic radio/antenna knowledge, but I’ll provide links to some deeper sources of information where further clarification might be needed.

Conventions in this guide:

  • Bold is a folder name.
  • Italics is a file name.
  • Grey text is for things you need to type or click on.
  • Underlined bold text is for parameters or settings
  • Red Bold for updates (Frequency changes, etc)

Theory of Operation

Note:  Meteor M2 is back online at 137.900Mhz.  Meteor M1 is currently offline and/or not broadcasting anything.

Essentially here is what we’re trying to accomplish:

For satellite reception, we want Orbitron to track the satellites and notify SDR# when this happens.  Orbitron will provide a center frequency to tune to and will keep track of the doppler offset needed to keep the satellite tuned in.  Since the satellite moves across the sky relative to our fixed position on the ground, the frequency changes a little bit depending on if it’s going towards us or away from us.  Orbitron happily does these calculations for us so we can automate the whole thing.  This connection happens over a Dynamic Data Exchange (DDE) link.

Orbiter tells SDR# to turn on and tells it which satellite is overhead as well as the doppler corrected frequency.  SDR# activates itself and tunes as requested.  Depending on weather the satellite is APT or LRPT, one of 2 things happens.  For APT, SDR# sends the audio output to WXtoIMG over a virtual audio link.  WXtoIMG takes this audio feed, decodes it, and outputs pretty pictures.  For LRPT, SDR# sends a command to open the LRPT decoding software which it then connects to over a TCP link.  The audio data is sent over this link and when the signal is locked on, the LRPT decoding software does it’s magic.  It takes the data and outputs ugly pictures.  When the decoding is done, we take the LRPT image processing software and turn those ugly pictures into pretty pictures.  After that, we pat ourselves on the back for a job well done and post these pictures all over Facebook and brag about how smart we are 🙂

In a nutshell, that’s the process from beginning to end.

Software Setup

Here’s what you’ll need do duplicate my setup:

  1. RTL-DVB-T dongle (~$12USD)
  2. QFH or Crossed-dipole antenna (DIY for ~$40USD or buy for ~$170USD)
  3. Windows 7 or 10 PC with at least 4GB RAM
  4. VB-Cable Virtual Audio Device (DONATIONWARE) [Local Mirror]
  5. Orbitron satellite tracking software (FREE) [Local Mirror]
  6. SDR# Radio software (FREE) [Local Mirror]
  7. Meteor SDR# plugin (FREE) [Local Mirror]
  8. SDR# DDE Plugin (FREE) [Local Mirror]
  9. WXtoIMG APT Decoding software (FREE, but limited features unless you register. Pro version is ~$100USD)
  10. LRPT Decoder (FREE) [Local mirror]
  11. LRPT Image Processor (FREE) [Local Mirror]

I’ve created a directory called NOAA on my hard drive and extracted all of these programs there.  For the purposes of this guide, I will call this the “NOAA folder”.  None of these programs really needs to be “installed” except for WXtoIMG.  Install WXtoIMG to your NOAA folder.  Just extract the rest to a separate folder for each inside your NOAA Folder:

A place for everything

A place for everything

VB-Cable Setup

VB Cable is a wonderful piece of software that is essentially free.  What it allows you to do is create a virtual audio connection from one piece of software to another.  In our case, we are going to use it to pipe the audio output of SDR# to WXtoIMG.

Go into the VBCABLE_Driver-Pack43 folder and right click on the VBCABLE_Setup_x64.exe file.  (If you’re using a 32 bit copy of Windows, use the VBCABLE_Setup.exe file instead.)  Select “Run as Administrator“.  When the install window opens up, select “Install Driver“.  When it’s complete, reboot your computer.  Yes, I know it’s a pain, but it really won’t work properly until after you reboot.

Welcome back.  That should be pretty much it for VB-Cable.  We’ll configure it’s options in other sections of this guide.

SDR# and its pluginsSDR Sharp M2

Go into the meteor folder and drag SDRSharp.Meteor.dll, and SDRSharp.PluginsCom.dll into the sdrsharp-x86 folder.  Go into the ddetracker folder and drag NDde.dll, SDRSharp.DDETracker.dll, and SDRSharpDriverDDE.exe into the sdrsharp-x86 folder.  In the sdrsharp-x86 folder, locate the file called Plugins.xml, and open it in your favorite text editor.  In each of the plugin folders above, you might have noticed a file called MagicLine.txt. This file contains the strings we need to put into the Plugins.xml file.  I will provide them here as well so you can simply copy/paste them:

<add key=”DDE Tracking Client” value=”SDRSharp.DDETracker.DdeTrackingPlugin,SDRSharp.DDETracker” />
<add key=”Meteor” value=”SDRSharp.Meteor.MeteorPlugin,SDRSharp.Meteor” />

The final file should look like this:

<?xml version=”1.0″ encoding=”utf-8″ ?>
<add key=”AF DNR” value=”SDRSharp.DNR.AFNoiseReductionPlugin,SDRSharp.DNR” />
<add key=”IF DNR” value=”SDRSharp.DNR.IFNoiseReductionPlugin,SDRSharp.DNR” />
<add key=”Noise Blanker” value=”SDRSharp.NoiseBlanker.NoiseBlankerPlugin,SDRSharp.NoiseBlanker” />
<add key=”Wave Recorder” value=”SDRSharp.WavRecorder.WavRecorderPlugin,SDRSharp.WavRecorder” />
<add key=”Zoom FFT” value=”SDRSharp.ZoomFFT.ZoomFFTPlugin,SDRSharp.ZoomFFT” />
<add key=”Frequency Manager” value=”SDRSharp.FrequencyManager.FrequencyManagerPlugin,SDRSharp.FrequencyManager” />
<add key=”DDE Tracking Client” value=”SDRSharp.DDETracker.DdeTrackingPlugin,SDRSharp.DDETracker” />
<add key=”Meteor” value=”SDRSharp.Meteor.MeteorPlugin,SDRSharp.Meteor” />

Save and close the Plugins.xml file.  At this point, you can go ahead and delete the ddetracker and meteor folders.plugins-editing

Open SDR# by clicking on the SDRSharp.exe file.    On the left side there is a sidebar which contains all of your options, including the plugins we installed above.  Now we’ll configure a few options:

  • Source Section:  Select RTL-SDR (USB)
  • Radio Section:  Uncheck “Snap to Grid” if it is checked
  • Audio Section:
    • Samplerate should be 96000
    • Input should be [MME] Microsoft Sound Sampler (this really doesn’t matter)
    • Output should be [MME] Cable Input (VB-Audio)
  • AGC and FFT Display you can leave as default
  • Audio Noise Reduction:  Enabled should be unchecked
  • IF Noise Reduction:  Enabled should be unchecked
  • Noise Blanker:  Enabled should be unchecked
  • Recording, Zoom FFT, and Frequency Manager you can leave as default
  • Tracking DDE Client v1.0
    • Scheduler is checked
    • Minimal elevation:  Set to 0.0 to start with and adjust depending on local conditions
    • We’ll cover the Config button below
    • Click Options
      • DDE Options:  Orbitron
      • Application Name:  Orbitron
      • Link Topic:  Tracking
      • Link Item:  TrackingData
  • Meteor Demodulator
    • Demodulator:  Unchecked
    • Modulation Type:  QPSK
    • SymbolRate:  72000
    • Tracking:  Checked
    • Output:  TCP socket
    • Diagram:  Out is checked and Constell is selected below the black box.
    • Click Configure
      • PLL Bandwidth:  Mine’s set to 120.0
      • Recorder.  (optional) Select a folder for recording audio.  Files are only saved when you manually record  I use F:\NOAA\Recordings\

Ok, now about that Config button in the Tracking DDE Client section.  What this allows you to do is set tasks that will be performed when certain conditions are met.  Basically, we’re going to use it to trigger SDR# to change settings and/or launch software depending on what satellite is overhead as instructed by Orbitron.  There are 2 parts to each script.  The first part “AOS” (Acquisition Of Signal) is run when the pass starts.  The second part “LOS” (Loss Of Signal) is run when the pass finishes.  These will be mentioned below when putting in the scripts.

First off, the interface for adding scripts takes a little getting used to.  There is no “save” button, so basically what you do is click the “Add new satellite” button.  Then select “New Satellite” in the list of satellites in the Satellite section.  From now on, all changes made will be saved automatically.  So, create some new satellites and name them the following:

  • METEOR-M_1
  • METEOR-M_2
  • NOAA_15
  • NOAA_18
  • NOAA_19

These aren’t just names I’ve pulled out of the air.  These are the names as they will be reported by Orbitron to SDR#.  If the name doesn’t match, then the events won’t be triggered.

I’ll just paste the “AOS” scripts I have below and then explain each part that needs to be changed by you and why.  Meteor M1 and M2 basically use the same “AOS” script:


The difference between M1 and M2 is primarily the frequency.  The M2 frequency just changed recently so instead of 137100000, it needs to be 137900000.  [M2 has changed back to 13790000] Both radio_center_frequency_Hz and radio_frequency_Hz need to be set correctly for each satellite.  It will take a little playing to figure out what exactly these values should be.  I’ve put the “defaults” in above, but in actually, my M1 frequency is set to 137093500 since that’s what it takes to “lock on” to the signal at my location.

Another difference between the 2, and this is just something I’ve done so I can keep images for each satellite in their own directory, is the start_programm_Path parameter.  M1 starts run1.bat and M2 starts run2.bat.  This will be explained in the AMIGOS section below.

The “LOS” script for M1 and M2 is the same:


NOAA 15, 18, and 19 also use the same “AOS” script:


Frequencies for these satellites are as follows:

  • NOAA_15:  137620000
  • NOAA_18:  137912500
  • NOAA_19:  137100000

You may notice that there is no start_programm_path in here.  That is because WXtoIMG will already be running.  If you try to start WXtoIMG using this script, you will open a new instance of it for each pass.  Soon you will have multiple copies of WXtoIMG running and you’ll run out of memory and your computer will crash.

The “LOS” for all 3 of these satellites are the same thing:


Note:  I don’t track NOAA_15.  This is mostly because NOAA_15 and NOAA_18 sometimes overlap and this causes things to go a little haywire.  Orbitron doesn’t notify based on which satellite has the stronger signal, or highest pass.  It just says “Satellite’s overhead” and SDR# dutifully switches frequencies.  Even if it’s right in the middle of a pass.  Sometimes this is unavoidable but I’ve found just disabling either NOAA_15 or 18 will fix this.  Also, sometimes an M1/M2 pass will overlap with NOAA 15 or 18.  Can’t be helped.

Orbitron Setup

Orbitron 1Lucky for us, Orbitron isn’t too tough to set up.  Open it up and click on the “Main” tab at the bottom.

Mode needs to be “Real time” and Time needs to be “Local”.  There is a little button that looks like a wrench and a hammer crossed over each other.  Click that (or press ALT+F5) to open the setup window.

On the General tab, check all 4 boxes in the Behavior section.  Set local time to “Autodetect” and set the date formats however you like.

On the TLE updater tab,  I select “ -All” for the Group.  Click on the little icon that looks like a globe with a lightning bolt on it.  This will download the latest TLEs from online.  It’s important to keep these up to date because it contains the orbital elements.  This tells Orbiter what the orbits are for each satellite.  In the real world, nothing is perfect so sometimes the orbits change a little bit.  Atmospheric drag, station keeping thrusters, collision with other debris, weather it’s a grass or earth pokemon type, etc..  Basically, the orbits sometimes change and if these are out of date, you won’t get your pictures.  Set the TLE expiry date to something like 7 days.  Also check the boxes next to “TLE expiry date” and “Mark this group for autoupdate”.

Time synch tab.  Very important.  Computer clocks aren’t perfect.  They drift.  The time is how Orbitron figures out if the satellite is overhead or not.  Pick an NTP server, closer to you is better, and then click the globe with a lightning bolt icon to update your system time.  Even if your time is off by only a couple seconds, at orbital velocities that can be a huge distance.  Keep this up to date.  Check the box that says “Synchronize PC clock when Orbitron starts”

Extra Tab.  Check “Automatic ‘sat on track’ position”, “Autostart Rotor/Radio driver” and “AOS Notification:  Make satellite active”  The Autostart rotor one is important since that is how Orbitron will notify SDR# when the satellite is overhead.

Click on Apply, then OK.

Back in the main screen, switch to the Location tab.  Hard to tell if a satellite is overhead if Orbitron doesn’t know where your head is at.  Best way to get these figures is to use a GPS receiver which is right next to the antenna position.  Not everyone has one, so next best way is to use something like Google Maps to find your current LAT/LONG and altitude.  I can’t really help you on this one.  With any luck, your city name is in the list to the right there and you can just find it.

On the right hand side of the screen, next to the world map, there is a white box which may or may not contain a list of satellites.  Click the “Load TLE” button under this box and select “weather.txt“.  Click on “Open” and you’ll see a list of satellites appear.  Check the boxes next to the satellites you want to monitor.  Notice these names are the same as we used in our scripts above.  I’ve got METEOR-M 1, METEOR-M 2, NOAA 18, and NOAA 19 checked.

Now, go back down to the bottom and click the Rotor/Radio tab.  The settings in here need to be updated for each satellite you want to monitor.  So, we’ll be switching back and forth between the list of satellites and this Rotor/Radio tab.

Double Click Meteor-M1.  Make sure the Dnlink/Mhz box says 137.100000.  Dnlink Mode is FM-W.  Driver should be SDRSharp.  Object should be Satellite.

Repeat this for each satellite you’re planning on tracking, using the frequencies mentioned in the earlier part of this guide.  After you’ve finished, close Orbitron.  It will save its settings and exit.

AMIGOS (LRPT Decoder) Setup

LRPT AnalyserIn the AMIGOS folder, there are a couple of files we’re going to copy and edit.

First, right click on the run.bat file and select copy.  Then hit the CTRL and V keys at the same time.  This will paste a copy of the file in the same folder.  Rename run.bat to run1.bat.  Rename Copy of run.bat to run2.bat.

In the same manner, make a copy of the M2_LRPT_Decoder.ini file and rename the copy as M1_LRPT_Decoder.ini.

Now, open run1.bat in your favorite text editor and modify it as follows:

START M2_LRPT_Decoder.exe M1_LRPT_Decoder.ini

Open run2.bat and make it look like this:

START M2_LRPT_Decoder.exe M2_LRPT_Decoder.ini

Notice that the name of the ini file changed so that depending on which batch file is run, you use a different config (.ini) file.

Now, open up M1_LRPT_Decoder.ini in a text editor.  There is only one change that needs to be made:

In the [OUT] section, change the “path=E:\” line to point to where you want your M1 images saved.  Save the file and open M2_LRPT_Decoder.ini and make the same change, only set the path to where you want your M2 images saved.

I use F:\NOAA\IMAGES\M1\ and F:\NOAA\IMAGES\M2\ for mine.

Close and save the files.

WXtoIMG Setupwxtoimg-decoding

WXtoIMG has a lot of options.  I’m using the Pro version so if I mention a setting and you don’t see it or it’s not something you can change, it should be safe to ignore.  I’m only going to cover the absolute essentials so you can start decoding APT.

At the top, go to Options.  Select “Ground Station Location”.  Enter the same data you did when setting up Orbitron for lat/long/altitude.  Click on OK

Go to File, and click on “Update Keplers”.

Under Options, select “Active APT Satellites”.  Check the boxes for the satellites you want to track.  If, like me, you’re not going to be tracking NOAA 15, uncheck the box next to it and uncheck the box at the bottom that says “Update this table when updating Keplers”.  If that box is checked, next time Keplers are updated, it will try to record passes for the unchecked satellite.  Make sure the frequencies are good and click on OK when you’re finished.

Back under Options, go down to “Recording Options”.

Select “Record only when active APT satellites are overhead.  For the maximum elevations, you’ll have to figure that out based on your antenna position and such.  Set them both to 0:0 for now and you can adjust later.

  • Receiver type:  None.
  • Soundcard:  Cable Output (VB-Audio Virtual)
  • Sample bits:  16
  • Receiver port:  none
  • Antenna type:  Your closest match.
  • Receiver baud rate:  Receiver default.

WXtoIMG has the ability to control a radio and rotors by itself without all the mucking about with Orbitron or SDR#, but that only works on “real” radios, not the SDR radios like the RTL dongle.  If you have something that is listed in the “receivers” dropdown, you can connect it via serial cable and that’s it.  WXtoIMG does it all.  Too bad we can’t use that.  So, click on OK.

Go to Options and select “Save Options”.

At this point, we should be almost complete.

Can’t we all work together?

Ok, we’re in the home stretch.  Here’s what you need to do to get this all working together.

  1. Start up SDR#
  2. Start up WXtoIMG
  3. Start up Orbitron

Last thing to do is to go to Orbitron and click on the “Rotator/Radio” tab.  Make sure it says “SDRSharp” for the driver and click the little button to the right of the driver drop down box.  That should start the DDE connection.

If you open up SDR# and go down to the Tracking DDE Client plugin on the left side, it should say the name of the satellite you have active in Orbitron.  Want to test it?  Go to Orbitron and double click on a different satellite.  Go look at SDR# and the name should be changed to the new one.  The Downlink, Azimuth, and Elevation should also be updating about once per second in SDR#.  If it does, you should be good.

In Conclusion

Yes, it is a pain to get it all set up.  Yes, you will have problems.  Yes, you will get better at doing this with practice.

Ask questions, play with settings, and don’t be afraid to mess it all up.  Once you are finished with this guide, Zip up that NOAA folder and keep a copy somewhere.  If you mess up your settings or can’t make it work anymore, just delete your NOAA folder and unzip the original one from the backup.

If you see any errors with this guide, please feel free to drop me a line at



  • 3 Dec, 2015 – Changed M2 Frequency back from 137900000 to 137100000
  • 4 Dec, 2015 – Resized some images to prevent stretching
  • 4 Dec, 2015 – Various formatting changes
  • 4 Dec, 2015 – Added screenshot of script window for DDE plugin
  • 4 Dec, 2015 – Updated DDE Plugin download link and local mirror to version 1.2 vs 1.0