An Alternative NOAA Weather Satellite Tutorial using RTL_FM and WxToImg

The RTL-SDR software defined radio is often used to receive signals from NOAA APT weather satellites. Once decoded these signals produce a freshly captured image of the earth over your current location. We have a simple tutorial on setting this up here.

However, recently Marco Johansson wrote into to explain an alternative method to the one described in our tutorial. His method uses rtl_fm as the receiver instead of the GUI based software SDR# and uses several other pieces of software to automate the whole process. Marco believes that his method may be useful for some people and his tutorial is presented below. Also, if you are interested Marco has a WxtoImg generated webpage which shows all his recently received images here

A composite weather satellite image received from the NOAA-18 satellite by Marco
A composited weather satellite image made up of several images received from NOAA satellites by Marco Johansson

Note that the following tutorial is written by Marco Johansson.

Marco’s NOAA APT Decoding Tutorial

As a Windows user I had some serious problems using an RTL-Dongle as a receiver for WxtoImg. Signal drops, CPU load, and no receiver control. I had to use 5 different pieces of software to get automatic reception to work and every day one of the programs had some weird problems causing the whole system to stop working. I read several forum posts about similar problems. A huge bit of help came from WxtoImg’s own forum where a user told how he was able to use rtl_fm as a receiver. His system was Linux based, so I was not able to use his scripts, but it gave me enough information to find a Windows based solution.

I stumbled on to a software program that solves my problem totally. It is originally made to control Windows MCE (Media Center), but since it’s release it has been enhanced to work as a universal remote control for the Windows system.


1) Install WxtoImg normally
2) Install VB Cable Virtual Audio Cable software to be able to pipe audio from receiver to WxtoImg (
3) Install virtual COM port BRIDGE(!) for COM-communication between programs (I tested with:
4) Install rtl_fm for windows (
5) Install SoX for Windows (
6) Install MCE Control to act as a command-shell between WxtoImg and MCE Controll (

In WxtoImg I selected “Baykal” receiver, port COM1 and 2400baud. The protocol for remote control is very easy to understand and after every command WxtoImg sends CR/LF to receiver, which is mandatory to get commands to work.

Control commands are handled with MCE controller. It listens to COM2 (bridged with COM1) and when it hears a valid command string (A Magic ‘word’) it activates a task. Tasks are .bat files, one for every satellite and a “kill” to stop receiver after the satellite pass.

When satellite is coming (one minute before it is over head) WxtoImg sends a command “MUA” that triggers “kill.bat”. Then WxtoImg sends a command “RF0xxxxxxx” where xxxxxxx is the frequency of the satellite, “1371000” for NOAA19 – this triggers “rec-noaa19.bat”. When the pass is over, Wxtoimg sends again “MUA” to kill the receiver program.

Now I can control recordings directly from WxtoImg without any other software (Orbitron, SDR#, DDE client etc).

.bat files and other configurations are provided below for others to use. I ended up to have separate .bat to start the tasks as in that way I can set the system start and stop recording in the background without a command prompt popping around my desktop every 90 mins 🙂

My system is Windows 8.1, I have not tested this in 7, 8 or 10 but I believe it should work without any modification. The HW ID of the RTL-Dongle I use for wx_rtl_fm.exe is “3” (‘-d 3’ in script). If you have only one RTL-Dongle, then this should be set to “0”. I use the bandwidth of 55 kHz that seems to be enough for good APT reception including doppler error as in this method the doppler error is not corrected in the receiver at all (no AFC).

NOTE! I have copied the original ‘rtl_fm.exe’ to ‘wx_rtl_fm.exe’ to be able to start other rtl_fm.exe instances without the risk that WxtoImg kills my other receiver accidentaly. And of course, remember that these are from my system and the correct path used in scripts will be different for you 🙂 Also, the original ‘sox.exe’ is copied to ‘play.exe’ as instructed in the SoX’s manual for Windows user. And because I’m lazy, I copied rtl_fm and SoX binaries to same directory so that I do not have to put so long path strings into my .bat scripts 🙂

Final words:

.bat’s used in this are very dirty hacks and there are lot’s of improvement available for sure – but it works! Also, the remote protocol for Baykal receiver actually sends two more commands, one is used for telling the modulation of the transmission (RM NFM) and second to do something I do not know (MUF).

The whole communication in my system goes like this:

1) “MUA” => Kill all wx_rtl_fm.exe processes currently running (if any). This happens one minute before satellite pass starts.

2) “RF0xxxxxxx” => Start wx_rtl_fm & SoX, xxxxxxx=frequency of the satellite and is used to select correct .bat for different satellites (see MCE Control XML-file for details). This happes when satellite pass starts.

3) “RM NFM” => Not used in my system. Could trigger something fun if needed :). This happens right after ‘RF0xxxxxxx’ command.

4) “MUF” => Not used in my system. Could trigger something fun if needed :). This happens right after ‘RM NFM’ command.

5) “MUA” => Kill all wx_rtl_fm.exe processes currently running. This happes right after satellite pass.

SoX is a very powerfull tool for audio manipulation. There are options that could greatly improve the audio quality of the received signal – denoice, better dynamics etc. I am not that keen to try everything SoX could do as the results are already very good in my system, but if there are someone who knows better ways to handle SoX then please do not hesitate to comment!

Used .bat Files

“Kill the receiver”:

kill.bat is triggered by MCE control and calls kill-wx_rtl_fm.bat to do the actual killing.


cd C:\Users\Mac Radio\ownCloud\SDR\rtl_fm_sox
start /min kill-wx_rtl_fm.bat ^& exit

This triggers;


taskkill /IM wx_rtl_fm.exe /F

“Start recording”:

Recording is started after MCE Control gets the correct ‘word’ from WxtoImg. For every satellite there are separate ‘words’ and separate .bat files.


cd C:\Users\Mac Radio\ownCloud\SDR\rtl_fm_sox
start /min noaa15.bat ^& exit

This triggers;


cd C:\Users\Mac Radio\ownCloud\SDR\rtl_fm_sox
play -r 55k -t raw -e s -b 16 -c 1 "|wx_rtl_fm -d 3 -M fm -f 137.62M -s 55k -l 0" -t waveaudio


cd C:\Users\Mac Radio\ownCloud\SDR\rtl_fm_sox
start /min noaa18.bat ^& exit

This triggers;


cd C:\Users\Mac Radio\ownCloud\SDR\rtl_fm_sox
play -r 55k -t raw -e s -b 16 -c 1 "|wx_rtl_fm -d 3 -M fm -f 137.9125M -s 55k -l 0" -t waveaudio


cd C:\Users\Mac Radio\ownCloud\SDR\rtl_fm_sox
start /min noaa19.bat ^& exit

This triggers;


cd C:\Users\Mac Radio\ownCloud\SDR\rtl_fm_sox
play -r 55k -t raw -e s -b 16 -c 1 "|wx_rtl_fm -d 3 -M fm -f 137.1M -s 55k -l 0" -t waveaudio

And finally, the MCE Control magic ‘words’. By default, MCE Control understands over 200 separate commands originally meant to remote control Windows MCE (Media Center). Fortunately, one can create their own commands and get MCE Control to do much more – control Wx-system!

MCE Control uses an XML configuration file for these extra commands. The file is located in the same directory where the main executable is located. My system uses following XML file to be able to control ‘wx_rtl_fm.exe’:

<?xml version="1.0" encoding="utf-8"?>
<MCEController xmlns:xsd="" xmlns:xsi="">
<Commands xmlns="">
<!-- Place command definitions here -->
StartProcess Commands
File: The full path to the executable you want to start.
<StartProcess Cmd="RF01376200" File="C:\Users\Mac Radio\ownCloud\SDR\rtl_fm_sox\rec-noaa15.bat"/>
<StartProcess Cmd="RF01379125" File="C:\Users\Mac Radio\ownCloud\SDR\rtl_fm_sox\rec-noaa18.bat"/>
<StartProcess Cmd="RF01371000" File="C:\Users\Mac Radio\ownCloud\SDR\rtl_fm_sox\rec-noaa19.bat"/>
<StartProcess Cmd="MUA" File="C:\Users\Mac Radio\ownCloud\SDR\rtl_fm_sox\kill.bat"/>


    • Somedude

      You need to have a registered version, try this:

      WXtoImg v2.10.11 serial (Standard edition)
      Released on 12/08/2014

      Name: Carl Rakotondrainibe
      email: [email protected]
      key: EA5M-N3VZ-R6HZ-CFF9-7FC2

  1. Alexx Green

    Hi! Thank you for this tutorial! It’s great work. I’m using Windows and had the same problems with using an RTL-Dongle as a receiver for WxtoImg. But after this tutorial all is going well.
    As well I chose other software for emulation virtual COM-port – Serial Port Emulator (, because it’s seems to me with comfortable interface and allowes more options for setting the data.

  2. Alexx Green

    Hi! Thank you for this tutorial! It’s great to work. I’m using Windows and had the same problems with using an RTL-Dongle as a receiver for WxtoImg. But after this tutorial all is going well.
    As well I chose other software for emulation virtual COM-port – Serial Port Emulator (, because it seems to me with comfortable interface and allows more options for setting the data.

  3. Mac

    Hi Andrzej!

    I indeed selected every available receiver that WxtoImg supports and watched the output from COM port WxtoImg was using to see what kind of command WxtoImg actually sends and in what format.

    Baykal commands where way the easiest to implement, as they where clear human readable strings with very clear meaning and the most importat was that after every command WxtoImg sent CR/LF to receiver – mandatory to get MCE Controll to notice that “Hey, there was a Magic Word!”.

    COM Bridge and MCE Controll can be (easily?) replaced if one can program a simple software to do the same (Receive commands WxtoImg sends to COM-port and launch individual tasks based on them). I used ready made solution as I do not have such programming skills 🙂

  4. Andrzej

    That’s a amazing tutorial! Nice cache finding out about Baykal in WXtoImg. Did you try other protocols? Also, COM bridge and MCE Control can probably be replaced by some custom piece of software…

Post a comment

You may use the following HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>