Gr-leo: A GNU Radio space channel simulator


Hello everyone,

The last three months I’ve been working on gr-leo, a GNU Radio project that aims to provide blocks for the simulation of the telecommunication channel between an orbiting satellite and a ground station.
More specifically, using gr-leo, one is able to:

  • Define a satellite given its operating characteristics (i.e RX/TX frequencies, antenna types) and a valid TLE.
  • Define a tracker by providing its coordinates, operating frequencies, antenna types and an observation timeframe.
  • Define the communication channel model using the appropriate GNU Radio block. Currently, only the LEO model is supported and provides the option of enabling different types of impairments such as Doppler shift, free-space path loss, antenna pointing loss and attenuation due to atmospheric gases and rainfall.

Then the gr-leo channel model block will attenuate the input signal according to the defined channel model and the orbit of the satellite described by the TLE.

You are more than welcome to test the project, report bugs and provide feedback and suggestions for future development.

You can clone the project from the dev branch For more information you can visit the wiki and the documentation



Just to add some interesting use cases of this module and why is worth trying!

  • Mission planning
  • TX/RX simulation
  • Characterize the performance of decoders
  • TLE or/and frequency drift validation (received versus simulated frequency)


Any performance data regarding the maximum allowed sample rate for a specific HW?
We would like to test it with a LIMESDR and a 2MSPS BPSK modulated signal.
Congrats again.


That’s a good question! I just made a measurement and the Channel Model block can handle an input signal at about 21 MSPS at my i7-2600K.


Hello @booth!

It’s great that you want to use gr-leo. Please don’t forget to report back your results and provide feedback.
As regards to your question, I haven’t yet any performance related results, but I’m sure you can trust @surligas reply.

Also, take into consideration the “time resolution” parameter in the tracker variable block. It refers to the interval between each calculation, so it will surely affect the performance of your simulation.