This is a free, open-source LRPT demodulator for the Meteor-M2 Russian weather satellite series. It supports reading from a I/Q recording in .wav format, and it outputs an 8-bit soft-QPSK file, from which you can generate an image with the help of LRPTofflineDecoder or meteor_decoder.
As usual, type make
to compile the project, make install
to install the
binary to /usr/bin/
. A debug
target is available if you want to keep the debug
symbols in the executable.
Usage: meteor_demod [options] file_in
-o, --output <file> Output decoded symbols to <file>
-r, --symrate <rate> Set the symbol rate to <rate> (default: 72000)
-s, --samplerate <samp> Force the input samplerate to <samp> (default: auto)
--bps <bps> Force the input bits per sample to <bps> (default: 16)
-R, --refresh-rate <ms> Refresh the status screen every <ms> ms (default: 50ms in TUI mode, 5000ms in batch mode)
-B, --batch Do not use ncurses, write the message log to stdout instead
-q, --quiet Do not print status information
-m, --mode <mode> Specify the signal modulation scheme (default: qpsk)
Available modes: qpsk (Meteor-M 2), oqpsk (Meteor-M 2-2)
-h, --help Print this help screen
-v, --version Print version info
Advanced options:
-b, --pll-bw <bw> Set the PLL bandwidth to <bw> (default: 100)
-a, --alpha <alpha> Set the RRC filter alpha to <alpha> (default: 0.6)
-f, --fir-order <ord> Set the RRC filter order to <ord> (default: 64)
-O, --oversamp <mult> Set the interpolation factor to <mult> (default: 4)
-
Increasing the PLL bandwidth will allow the loop to lock faster to the carrier, while decreasing it will make the lock more stable.
-
Increasing the root-raised cosine filter order will slow the decoding down, but it'll make the filtering more accurate.
-
Increasing the interpolation factor enables better timing recovery, at the expense of filtering accuracy.
- Typically you'll want to increase the RRC order and the interpolation factor by the same proportion (i.e. multiply them by the same amount).
Meteor_demod
supports live decoding with the help of rtl_fm
or
rx_fm
!
Here's how to get it working:
For the purposes of this tutorial, rtl_fm
will be used, but rx_fm
can be
substituted where appropriate.
First off, you need to create a named pipe. This is simply what the name implies:
a pipe for data. You send data in from one side, and it comes out from the
other. It's going to be used to let rtl_fm
and meteor_demod
exchange samples:
mkfifo /tmp/meteor_iq
Then, you can start up meteor_demod
, telling it to read the raw samples from
this pipe. Note the -s
flag; it must be passed because the stream coming from
rtl_fm
doesn't specify a sampling rate, so you need to set it manually:
meteor_demod -s 140000 /tmp/meteor_iq
This command will seem to hang, but that's expected. The pipe doesn't open until both the sender and the receiver are connected to it.
So finally, you can start up rtl_fm
to capture the live data and send the raw IQ
stream into the named pipe. Open another terminal and type in:
rtl_fm -M raw -s 140000 -f 137.9M -E dc -g <gain> -p <ppm> /tmp/meteor_iq
At this point, meteor_demod
's ui should pop up inside the first terminal, and
the constellation diagram should stabilize within 10~15 seconds.
Once the pass is over, stop the decoding by pressing q
: rtl_fm
will terminate
as well. The named pipe can now be deleted as if it were any other regular file:
rm /tmp/meteor_iq
You can experiment with the sampling rate, as long as you make sure both rtl_fm
and meteor_demod
are using the same rate.