Meteor MN2 decoder for rpi 3B+

A good source for the settings of Meteor is and
I try to keep a list of the changes at and if I missed one please let me know or create a PR.

My setup is barely working r/n, there is some weird interference present from time to time, but the processing works (most of the time).

What I do is very hack-y and while I’m willing to give as much detail as people want, I’m not advocating for people to setup a station like this :rofl:

First off I modified the satnogs-client to let me pass the observation and satellite id via the post observation script. With hindsight your approach with passing the TLE and just getting the id from there is a lot better.

I then modified the file generated with the GRC to dump the I/Q data no matter what the global setting in satnogs is. I also modifed the paths the .s and .dat files are written to.
I write them to /data/satnogs/tmp/which is on a USB mounted ssd so that the SD card doesn’t die after a few weeks.

My post observation scipt then calls my rewritten (with nice and ionice as not to affect other observations too much). looks for the iq.dat and .s and processed them based on the satellite id.

  • Meteor-M N2 (40069):
    decodes that data directly from the .s with meteor_decode (or medet; I used meteor_decode as it created png’s directly)

  • Meteor-M N2-2 (44387):
    demodulates the iq.dat anew with meteor_demod (which does OQPSK), then decodes the data with medet and converts them to pngs. (the parameters for the demodulator still need some tweaking to get a reliable lock)

Again, do not use these files directly, they were hacked together and won’t work as is on any other setup, but I hope someone can take them and create a setup that works more generally!

Thanks for your reply!

My setup is barely working r/n, there is some weird interference present from time to time, but the processing works (most of the time).

If it works it works!!! :stuck_out_tongue:

Lots to think about, thanks!

Do we know if Meteor M2-2 has settled on a particular configuration yet? Or is it likely to change modes again?

A manual process more or less worked for me with Meteor M2-2
git pull update meteor_demod and meteor_decode

$ rtl_fm -M raw -f 137.9M -s 288k -g 28 -p 1 m2_iq.raw
$ sox -t raw -r 288k -c 2 -b 16 -e s m2_iq.raw -t wav meteor_a.wav rate 144k
$ sox meteor_a.wav meteor.wav gain -n

visit above link for 72 or 80k symbols, currently 72000. -f -b can be tweaked for best results

$ ~/src/meteor_demod/src/meteor_demod -f 64 -b 100 -s 144000 -r 72000 -m oqpsk -o meteor.oqpsk meteor.wav
$ ~/src/meteor/meteor_decoder/medet  meteor.oqpsk meteor -cd  -diff
Reading meteor.oqpsk...
 pos=94431039 ( 99.98%) ( 4,13962,49) sig= -219 rs=(-1,-1,-1,-1) EF89C21A 
Total:        92.889374
Processing:   2.498837
Correlation:  33.918762
Viterbi:      50.282986
ECC:          4.905700
Remainder:    1.283093
Packets:      2051 / 4611
Elapsed time: 00:04:59.168
$ ~/src/meteor/meteor_decoder/medet meteor.dec meteor_122 -r 65 -g 65 -b 64 -d

enjoy (after convert -rotate 180)

1 Like

There was a suggestion in DB for changing 44387 - Meteor-M 2-2 LRPT transitter from 80kbps to 72kbps SymbolRate according to this source.

I’ve accepted the change, let me know if that doesn’t make sense or if more changes should be performed for either 44387 - Meteor-M 2-2 or 40069 - METEOR-M 2.

Any chance of an updated summary of how-to decode Meteor M 2 and 2-2 on satnogs station? This thread is over a year old now and with so much information it’s a bit overwhelming :slight_smile:


Ideally if this goes to in a page would be more visible and linkable :slight_smile:


Agreed. If I manage to gather enough information and get it working, I will be happy to update wiki.


It would be great, does anyone know of satellites that send images like METEOR and NOAA but in the band UHF (430MHZ) approximately ???

PSAT-2 sends SSTV on 70cm, but it’s not as detailed as NOAA or Meteor.

1 Like

Hi all,

I just got Meteor M2 processing working again, planning on fiddling with Meteor M2-2 later. If I get everything working I might create a repo with a Makefile to get/build/install/config/patch everything necessary for the Meteors, and then create a wiki page about it. Would there be support for this from the satnogs team, as it would involve a post install satnogs-client patch or a satnogs-client fork?


It would be really helpful to have the right default transmitters selected when you schedule an observation on the Meteors:
Meteor-M 2: LRPT 1 (137.100 MHz)
Meteor-M 2-2: LRPT S-E RHCP D 72 kbps (137.900 MHz)

I’ve added two suggestion for moving from active to inactive these transmitters:
Meteor-M 2: LRPT 2 (137.900 MHz)
Meteor-M 2-2: LRPT S-E RHCP D 80 kbps (137.100 MHz)

and then approved them. By the way anyone can add suggestion into the DB for transmitters.

So, with these as inactive the ones in the post above are the default ones now.

Ping me here or add a suggestion in DB if anything changes. :wink:


This is great. I would be happy to test this and help with wiki as well! Count me in :slight_smile:


Ok, I have implemented a new based on the python scripts by @vk5qi and @benelsen. It takes an observation id and tle string as arguments, and then runs the right demodding/decoding tools. The only manual changes to satnogs-client that are needed are adding for LRPT observations to and as was necessary for M2 1 already. Furhtermore, you should edit to always output iq files. To use it, you should set the following value as post observation script in satnogs_setup:
/path/to/the/ --id {{ID}} --tle {{TLE}}

The script does the following:

  • Meteor M2: Use medet to generate images from the s-file generated by satnogs_lrpt_demod
  • Meteor M2 2: Use meteor_demod to generate an s-file from the iq-file from satnogs_lrpt_demod, then use medet to generate images from that s-file.

If anyone wants to test it or have a look at it, it’s on my github. You need medet and meteor_demod (devel branch) installed and you need to update the paths to these tools and to the satnogs_lrpt_demod output files in the beginning of the script to the correct ones.

Some words of warning:

  1. Thermal images are not produced yet, only a false color image and images for the separate channels, I will add this later.
  2. [edit: the following is fixed]: I have not been able to get a proper image from Meteor M2 2, even on passes where @benelsen’s station did produce images. I tried to use the same command line options for medet and meteor_demod as @benelsen did, however he used -F as argument for meteor_demod in his scripts which is not supported in the latest version of meteor_demod, so there could be something wrong there. I do get a lock on the signal in meteor_demod, medet seems to decode some packets too, but there are no images produced. It could be that M2 2 just needs a bit more SNR than my station produces. My command line options are the following, @benelsen, could you have a look to see if you are doing something differently?
    MEDET_ARGS_M2_2 = ['-q', '-S', '-r', '65', '-g', '65', '-b', '64', '-diff'] METEOR_DEMOD_ARGS_M2_2 = ['-B', '-R', '5000', '-f', '24', '-b', '300', '-s', '156250', '-r', '72000', '-m', 'oqpsk']
1 Like

Not tried this out…yet.
Having a read through I am assuming you used @BenNelsen’s changes to ‘’ to dump the .iq file prior to processing with your modified ‘’.
Also, shouldn’t your post observation script send the sat_id as well?



True, I also updated the script to always dump the iq file, but to my understanding this can also be configured in satnogs_setup.

The sat_id is extracted from the TLE data. I used a TLE data argument because that is available als a post observation script argument out of the box, no changes necessary. Instead of the full TLE you can also use the --sat_id argument to pass the sat id, which is easier when you start the script by hand.

I currently have been able to produce Meteor M2 2 images, so the complete setup seems to be working now for both Meteors. It turns out the devel branch of meteor_demod has some improvements to get a more reliable lock, one of which is the possibility to specify a frequency delta -d, which is the distance from the center frequency that the demodulator will look for a carrier. Since the observations are doppler compensated and the satellite’s frequency is quite stable this delta can be set quite tight, I have set it at 1000 Hz which works nicely for me. I have updated the script on my repo with this change.

First working observation. Has a lot of black bars, but hey, it’s something.

@Rico I see you managed to get it working!
I probably forgot to remove the -F argument, which I implemented on a fork of meteor_demod because sometimes the frequency wandered off and failed to get a lock. This is now on the devel branch as -c and -d. (I set mine to 1000 as well, but a tighter delta might work better, the signals from the 2 satellites appear pretty stable at around +200Hz for me).

I found that I get the best results with a PLL bandwidth (-b) of around 75 for M N2 (40069) and around 250-350 for M N2-2 (44387). Reducing the RRC filter order -f didn’t affect the demodulation too much for me and speeds the process up a bit on the Pi, but might depend on the RFI at your location.

I switched to use medet for both satellites as well, it’s a bit quicker and meteor_decode sometimes produced images with misaligned channel.

Here’s my current (ignore the ntfy stuff, it’s simply a push notification whenever a Meteor-M observation succeeds/fails)

Remember that with medet you need to update your script every time they change channels/AP IDs if you want all 3 channels. I try to keep updated, but usually only after an or two observation return blank images.

Hi @benelsen, thanks for your response. Ok, so our findings correspond. The max freq delta of 1 kHz helps a lot I’m also seeing better results with a loop bandwidth of 300, and lowering the RRC filter order does not seem to matter much, so I’m keeping it at 24:

BW 100, RRC 64

BW 300 RRC 64

BW 300 RRC 24

Anyone willing to experiment can try to use my, see a few posts up for instructions, I will make something to auto-install on an existing satnogs setup later.