Automating LRPT
Home Page Up ATOVS Reader AVHRR Manager BUFR Viewer CHLO Viewer CMA Viewer DDE/SDR# add-on Defrag NPP DWDsat HRPT Viewer GeoSatSignal GOES ABI Manager GOES-15 netCDF GRIB Viewer Ground Map HDF Viewer HRPT Reader HRPT samples Kepler Updater Automating LRPT LRPT Processor LRPT signal Metop LSA Viewer Metop Manager MODIS L1 viewer MSG Data Manager NOAA HDF Viewer SatSignal Sea-Ice & SST Viewer Sentinel-2 Sentinel-3 WXtrack


Automating Meteor-M N2 reception

I recently started playing with Meteor-M N2 reception.  The lack of country boundaries was annoying, so I tried writing my own program to overlay boundaries, but it wasn't as accurate as I would like.  Then I mentioned this to Douglas Deans (@GM4VZY on Twitter) who pointed me to this site  where all is explained, including completely automated reception.  However, like others I found the information rather overwhelming at first scan, and it took a little while to get it all working.  And the day after it stopped, after I made one small change.  Arrgh!  Working now, though.  Apply the well-known advice - "If it works, leave it!".

These are my own notes, with my own errors.  Please help me to correct them!



You need an antenna, a 137 MHz SDR receiver compatible with SDR#, and a PC.  With PCs these days I suggest at least 8 GB memory and a quad-core processor.  All the below is based on Windows 10.



SDR#, the Meteor plug-in, the Tracking DDE Client plug-in, tracking software such as WXtrack (or Orbitron), LRPT Decoder, MeteorGIS.  All free (although there are extra facilities in the registered version of WXtrack).  Ensure that you can use your dongle with SDR# to receive on 137.1 MHz.   Set up the DDE plug-in according to the instructions on the HappySat site.


Processing operation - the steps involved

I found this one of the more poorly explained aspects.  It's not complicated, and perhaps I simply haven't yet found the best Web site.  Graham Hunter, VK4KGG, [GH] has kindly provided some additional notes included below in edited versions and tweaks throughout the description.

  1. WXtrack provides a DDE output which says whether the Meteor-M N2 satellite is visible or not.  You should also update your Keplers at least ever week so that the pass times are reasonably accurate.  
    Note that the Doppler-shifted frequency from the DDE is not used, just the satellite name and elevation.
    • [GH] SEND_TRACKING_FREQUENCY_ON (and itís companion OFF command) is used only by Meteor satellites when decoding LRPT signals. This does NOT change the received frequency of SDR# but provides the Doppler-corrected frequency to the Meteor Demodulator plug-in. If the tracking checkbox is checked, the plug-in now uses the corrected frequency to help the PLL lock quicker!!
    • [GH] RADIO_TRACKING_FREQUENCY_ON (and itís companion OFF command) is used for all other satellites, eg NOAA, ISS, FOX, SPROUT etc to provide doppler corrected frequency to SDR# which then changes frequency to follow the Doppler shift as the satellite passes. The two commands are mutually exclusive, use one or the other.
  2. When the DDE output from WXtrack shows that the elevation threshold (set in the Tracking DDE client plug-in) is exceeded, it starts the receive function in SDR#, and runs a command script (.BAT file) which in turn starts the MeteorGIS program, which looks for a lock indication from the Meteor Demodulator plug-in.  By now you should see the waterfall start scrolling in SDR#.
  3. As the signal level and SNR increases, eventually the Meteor Demodulator plug-in will lock, and communicate this via the TCP link to the  MeteorGIS program.
  4. Once MeteorGIS recognises that the Meteor Demodulator is locked, it will start the LRPT Decoder program, with parameters written by the MeteorGIS program.
    [GH] The MeteorGIS program has its own configuration program which contains several tabs.
    1. General relates to the basic program: your ground station location, map text, and which enhancements you require.
    2. M2_LRPT_Decoder includes settings for its path, image find and save locations, and satellite time etc.
    3. Treatment controls replacement of blank lines.
    4. Shapes controls the GIS part, mapping, shapes and parameters etc.
  5. You will then see the incoming signal decoded in real-time, as it comes in.
  6. Once lock is lost, the decoding will continue.
  7. When the satellite drops below the elevation threshold, this is communicated to the LRPT Decoder, which the saves its resulting image files.
  8. The LRPT Decoder generates a list of Ground Control Points (.gcp files), giving the predicted sub-satellite points for each image line, and for each sensor location along the scan.  To save computation time and file size, only each tenth line and tenth pixel are processed.  Somehow this information is saved, either by the LRPT Decoder program or by MeteorGIS.  It's visible as plain text in the panel there the 125 image has been created, in the Status tab.
  9. The MeteorGIS program can then combine multiple images into geo-located data such as the image at the start of this page.  You will see lots of operations in the command window, and this can take several minute.

While waiting for a pass....


Configuring the software

Nightly restarts

WXtrack must be running, and if your PC runs continuously, you need to stop and restart WXtrack and SDR# over midnight, e.g. at 01;20 UTC.  You can create a script to do this and schedule it to run at a convenient time.  For example:

REM Job to restart WXtrack and SDRsharp overnight

TaskKill /IM SDRSharp.exe
waitfor neverhappens /t 15

TaskKill /IM SDRSharp.exe
waitfor neverhappens /t 15

TaskKill /IM WXtrack.exe
waitfor neverhappens /t 10

start "Running WXtrack" /D C:\Tools\SatSignal\WXtrack\ WXtrack.exe
waitfor neverhappens /t 15

start "Running SDR#" /D C:\Tools\sdrsharp-x86-1732\ SDRSharp.exe



Set WXtrack so that has just Meteor-M 2 is in the active list, and that orbit prediction is for 7 days ahead.  Tracker set to CX6DD WiSPDDE Client, and check the DDE Uppercase and DDE always options.  I suggest Minimum pass duration be set to 150 seconds and 5 degrees elevation.

In the screen-shot below I have also included NOAA-19, as that transmits on the same 137.1 MHz as Meteor-M N2 and it is useful to know whether there might be a conflict.  As I'm using the registered version of WXtrack the auto-switch and satellite prioritising are active but not used in this application.   I've included a screen-shot while waiting for a pass.  Note the Large Text option designed for reading from a distance, the font and location are adjustable to suit your requirements, and I set the program's map origin to +90 degrees so that my region of interest is to the left of centre.  Mercator projection is used here.



DDE plug-in

Set up the DDE plug-in according to the instructions on the HappySat site.  There are two items to set, the Config which defines the DDE communication parameters, and the Options which define what satellite to expect, and what happens at start and end of the pass.  The effect of the skinning of SDR# means that the labels may be difficult to read, at least until the plug-in is updated.  Style over substance?


DDE Config

First I suggest setting the DDE source - here set to WXtrack:


DDE Options

With this extended DDE plug-in there is a scheduling option which requires configuring.  I set the required elevation to 6.9 degrees as I do get a lot of interference (see the SDR# picture!) so my usable passes are shorter than might be expected.  These are commands which work.  There's nothing after the "start_program" line it's just an artefact of the scroll-box.  I haven't yet configured for Meteor-M2-2 as the satellite was in a non-operational state at the time, and it was difficult enough to get one satellite working!  I did include a M2_Decoder_ini_Line, although MeteorGIS generates or modifies the .INI file for the LRPT Decoder.  So any changes you make to the .INI file there may, or may not, get overwritten.

Note: The satellite name in the Keplers may contain a space (e.g. Meteor-M 2) but some DDE software cannot accept a satellite name containing a space, so the DDE string will have METEOR-M-2 for compatibility.  You can see that in the screenshot below.  Other software may use different substitutions!

[GH aside] The current versions of Tracking DDE Client, MeteorGIS and LRPTv56 allow some degree of AUTOMATION by setting some parameters in the Schedule config to AUTO or automatically presenting the value to the required program - for example:

The last two lines (more can be used) allow you to just change parameters in the one spot, rather than in different programs.

The settings above will start the MeteorGIS program, configured as mentioned on the HappySat web site.  You could instead start the LRPT Decoder program if you don't need all the processing offered by MeteorGIS, or even start no program if you want to process the .S files yourself.

[GH] Should you have an SDR which has a central spike, you may wish to set the radio_center_frequency away from the nominal satellite frequency.  I would set the bandwidth a little larger at 120 kHz, and set the M2_decoder_init_Line to <rgb=125> as the satellite normally produces either 123 or 125.


Meteor plug-in

Be sure that the TCP Socket box is checked, without it the decoder won't get the received data from SDR#.  You can check the File button as well if you want to save the .S files for further processing.


MeteorGIS program

There are a large number of options to the MeteorGIS program, so many that a special  MeteorGIS_Configurator.exe  program is also supplied.  No different to a Setup tab, I suppose.  There is a zipped copy of the .INI from my own working system here, and it should be renamed default.ini - ensure your Explorer is set to show file extensions, and that after download you right-click, Properties, Unblock the file before use.  Please note that the file is rewritten during use of the program.  

You will see many of the options in the two .INI files I supply are set by the configurator program.  Directory structure will obviously be different.

Aside: With an SSD system disk I would normally recommend a separate HDD data disk, however that's not possible with the system I am using.

After editing the configuration, be sure to save it, otherwise your changes will be lost!

LRPT Decoder program

The LRPT decoder .INI file is also rewritten by the MeteorGIS program, so I can supply a zipped copy of my own .INI file for guidance.  Again you will recognise the elements which can be set by the automatic running of the MeteorGIS.exe program.

Directory structure

There is nothing fixed about the directory structure, but I've tried to stick to that used on the HappySat web page.  I found the information there a little ambiguous possibly as the result of typos or changes in preferred structure which happened over time.  Remember the Tree command?  And Tree /F?  I've provided a tree listing and an edited tree /F with the files listed.  It may help when studying the .INI files.

│   └───WXtrack
│   └───2020
│       └───01
│       └───02  etc.
│   └───file_to_put_in_M2_LRPT_Decoder_folder
│   M-N2.2_cfg.jpg
│   M-N2_cfg.jpg
│   M2-2.txt
│   M2.2_tle.txt
│   M2_LRPT_Decoder.exe
│   M2_LRPT_Decoder.ini
│   M2_LRPT_Decoder.txt
│   M2_LRPT_Decoder_for_s.ini
│   M2_LRPT_Decoder_georef.ini
│   M2_LRPT_Decoder_man-m2-2.ini
│   M2_LRPT_Decoder_man-m2.ini
│   M2_LRPT_Decoder_TCP-m2-2.ini
│   M2_LRPT_Decoder_TCP-m2.ini
│   M2_LRPT_Decoder_TCP_80K-m2-2.ini
│   M2_tle.txt
│   run-geo.bat
│   run.bat
│   SGP4.dll
│   V53.jpg
│   │   comp-UTM-2020-1-19-9-49-45-771_IR.jpg
│   │   comp-UTM-2020-1-19-9-49-45-771_IR_rainfall.jpg
│   │   comp-UTM-2020-1-19-9-49-45-771_RGB.jpg
│   │   comp-UTM-2020-1-19-9-49-45-771_RGB_rainfall.jpg
│   │   comp-UTM-2020-1-19-9-49-45-771_thermal.jpg
│   │   thumb_comp-UTM-2020-1-19-9-49-45-771_IR.jpg
│   │   thumb_comp-UTM-2020-1-19-9-49-45-771_IR_rainfall.jpg
│   │   thumb_comp-UTM-2020-1-19-9-49-45-771_RGB.jpg
│   │   thumb_comp-UTM-2020-1-19-9-49-45-771_RGB_rainfall.jpg
│   │   thumb_comp-UTM-2020-1-19-9-49-45-771_thermal.jpg
│   │   thumb_UTM-2020-1-19-8-10-33-710_IR.jpg
│   │   thumb_UTM-2020-1-19-8-10-33-710_IR_rainfall.jpg
│   │   thumb_UTM-2020-1-19-8-10-33-710_RGB.jpg
│   │   thumb_UTM-2020-1-19-8-10-33-710_RGB_rainfall.jpg
│   │   thumb_UTM-2020-1-19-8-10-33-710_thermal.jpg
│   │   thumb_UTM-2020-1-19-9-49-45-771_IR.jpg
│   │   thumb_UTM-2020-1-19-9-49-45-771_IR_rainfall.jpg
│   │   thumb_UTM-2020-1-19-9-49-45-771_RGB.jpg
│   │   thumb_UTM-2020-1-19-9-49-45-771_RGB_rainfall.jpg
│   │   thumb_UTM-2020-1-19-9-49-45-771_thermal.jpg
│   │   UTM-2020-1-19-8-10-33-710_IR.jpg
│   │   UTM-2020-1-19-8-10-33-710_IR_rainfall.jpg
│   │   UTM-2020-1-19-8-10-33-710_RGB.jpg
│   │   UTM-2020-1-19-8-10-33-710_RGB_rainfall.jpg
│   │   UTM-2020-1-19-8-10-33-710_thermal.jpg
│   │   UTM-2020-1-19-9-49-45-771_IR.jpg
│   │   UTM-2020-1-19-9-49-45-771_IR_rainfall.jpg
│   │   UTM-2020-1-19-9-49-45-771_RGB.jpg
│   │   UTM-2020-1-19-9-49-45-771_RGB_rainfall.jpg
│   │   UTM-2020-1-19-9-49-45-771_thermal.jpg
│   │
│   └───2020
│       └───01
│               2020-1-19-11-30-58-134.70
│               2020-1-19-11-30-58-134.vcdu
│               2020-1-19-11-30-58-134_122.jpg
│               2020-1-19-11-30-58-134_122.jpg.gcp
│               2020-1-19-11-30-58-134_122.jpg.stat
│               2020-1-19-11-30-58-134_64.bmp
│               2020-1-19-11-30-58-134_64.stat
│               2020-1-19-11-30-58-134_65.bmp
│               2020-1-19-11-30-58-134_65.stat
│               2020-1-19-11-30-58-134_68.bmp
│               2020-1-19-11-30-58-134_68.stat
│               2020-1-19-8-10-33-710.70
│               2020-1-19-8-10-33-710.vcdu
│               2020-1-19-8-10-33-710_122.jpg
│               2020-1-19-8-10-33-710_122.jpg.gcp
│               2020-1-19-8-10-33-710_122.jpg.stat
│               2020-1-19-8-10-33-710_64.bmp
│               2020-1-19-8-10-33-710_64.stat
│               2020-1-19-8-10-33-710_65.bmp
│               2020-1-19-8-10-33-710_65.stat
│               2020-1-19-8-10-33-710_68.bmp
│               2020-1-19-8-10-33-710_68.stat
│               2020-1-19-9-49-45-771.70
│               2020-1-19-9-49-45-771.vcdu
│               2020-1-19-9-49-45-771_122.jpg
│               2020-1-19-9-49-45-771_122.jpg.gcp
│               2020-1-19-9-49-45-771_122.jpg.stat
│               2020-1-19-9-49-45-771_64.bmp
│               2020-1-19-9-49-45-771_64.stat
│               2020-1-19-9-49-45-771_65.bmp
│               2020-1-19-9-49-45-771_65.stat
│               2020-1-19-9-49-45-771_68.bmp
│               2020-1-19-9-49-45-771_68.stat
│   │   About_.s.txt
│   │   ChangeLog.txt
│   │   CLUT.png
│   │   default.ini
│   │   default.ini.bak
│   │   defaultENG_configurator.mgis
│   │   EGIS.ShapeFileLib.dll
│   │   geomutil_lib.dll
│   │   geomutil_libx64.dll
│   │   LemonMilk.otf
│   │   logs.txt
│   │   manual.ini
│   │   manual.ini.bak
│   │   Manual_M2_GIS.bat
│   │
│   │   MeteorGIS.exe
│   │   MeteorGIS_Configurator.exe
│   │   MeteorGIS_x86.exe
│   │   ne_10m_geography_regions_elevation_points.dbf
│   │   ne_10m_geography_regions_elevation_points.shp
│   │   ne_10m_geography_regions_elevation_points.shx
│   │   ne_110m_graticules_10.dbf
│   │   ne_110m_graticules_10.shp
│   │   ne_110m_graticules_10.shx
│   │   ne_50m_admin_0_boundary_lines_land.dbf
│   │   ne_50m_admin_0_boundary_lines_land.shp
│   │   ne_50m_admin_0_boundary_lines_land.shx
│   │   ne_50m_coastline.dbf
│   │   ne_50m_coastline.shp
│   │   ne_50m_coastline.shx
│   │   ne_50m_lakes.dbf
│   │   ne_50m_populated_places.dbf
│   │   ne_50m_populated_places.shp
│   │   ne_50m_populated_places.shx
│   │   ne_50m_rivers_lake_centerlines.dbf
│   │   passList.txt
│   │   RAIN.png
│   │   README.txt
│   │   thermal.ini
│   │   therm_pal.jpg
│   │   watermark.txt
│   │
│   └───file_to_put_in_M2_LRPT_Decoder_folder
│           SGP4.dll
│       2020-1-18-8-30-5-204_125.bmp
│       2020-1-18-8-30-5-204_125.bmp.stat
│       2020-1-18-8-30-5-204_64.bmp
│       2020-1-18-8-30-5-204_64.stat
│       2020-1-18-8-30-5-204_65.bmp
│       2020-1-18-8-30-5-204_65.stat
│       2020-1-18-8-30-5-204_68.bmp
│       2020-1-18-8-30-5-204_68.stat
│       2020_01_18_LRPT_08-27-01.s

[GH] I use separate folders for each program under a main level folder.

    \Wxtrack (or Orbitron)

Iíve even included WXtoImg and its sub folders so all weather satellite programs for automatic decoding are in the one main folder etc.  The advantage of this Iíve found is that with the release of a new version of program, thereís relatively little changes to be made in configurations to have the new version active, yet if it fails miserably, itís easy enough to revert back!  Caveat Emptor!

Copyright © David Taylor, Edinburgh   Last modified: 2020 Jun 17 at 15:50