Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Authors: Fischer Benjamin (, Tom Mladenov (

This repository contains documentation, and applications for receiving, demodulating, and decoding the UHF signal transmitted by the ESA OPS-SAT mission. It also contains a full graphical application for viewing and parsing the beacon frames transmitted by OPS-SAT.


UHF specifications

Can be found in docs/os-uhf-specs.pdf


  1. UHF receiver application (apps/os_uhf_rx.grc for GNU Radio 3.7 || apps/os_uhf_rx_gnu38.grc for GNU Radio 3.8)
    1. Offset sampling
    2. Doppler compensation (with GPredict)
    3. Frequency shifting to baseband and downsampling
    4. Noise suppressor (Squelch)
    5. ZMQ sink
  2. OPS-SAT demodulator and decoder (apps/os_demod_decode.grc)
    1. ZMQ source
    2. GMSK demodulator
    3. Decoder
    4. Output: Payload frame
  3. OPS-SAT UHF Desktop (apps/desktop/
    1. Written in Python 3
    2. Uses a ZMQ subscriber to get data from GR flowgraph (apps/
    3. Parses, and views beacon content fields in engineering values


  1. UHF receiver application (os_uhf_rx.grc)
    1. (GNU Radio 3.7) (GNU Radio 3.8)
  2. OPS-SAT demodulator and decoder (os_demod_decode.grc)
  3. OPS-SAT UHF Desktop (apps/desktop/
    1. Python 3


Two recordings are included in the repository in the /recordings directory:

  • A strong beacon recording at 200ksps
  • A realistic beacon recording at 250ksps

Getting started

Install all dependencies for the grc flowgraphs and the GUI Desktop application. For initial testing purposes, you can unzip the beacon recordings in the folder 'recordings' and make the file source block in os_uhf_rx.grc point to the unzipped .cf32 file. The samplerate of the strong and weak beacon recordings are 200 ksps and 250ksps respectively so make sure in os_uhf_rx.grc this is the set samp_rate if using the recordings to feed the flowgraph. Regenerate the python code from gnuradio-companion.

Open the flowgraphs apps/os_uhf_rx.grc and apps/os_demod_decode.grc and run them from GNURadio Companion. You should now see PDU's being printed in the terminal of the demodulator application every 10 seconds.

To parse and view the beacon contents, the OPS-SAT desktop application can be started with:

python3 apps/desktop/

It receives the RS decoded CSP packet + 4 byte CRC32-C over a ZMQ socket on localhost port 38211 to which it is subscribed. You should now see beacon frames being parsed and displayed:


The raw packet history shows the received packets, CRC check status and CSP header information.

This application writes to 3 logfiles in apps/desktop/log:

  • One log contains the raw received hex data (raw.log)
  • The second log contains the parsed beacon telemetry (parsed_beacon.log)
  • The third log contains timestamped events generated by the application (gui_event.log)

The GUI desktop application does not need to be running for the system to operate, i.e. the receiver application and demodulator application can operatate standalone. The GUI desktop is merely meant for parsing and viewing AX100 beacon contents.

Operational usage with live reception

For operational usage, the device source blocks should be used instead of a file source block.

For usage with an RTL-SDR for example the following adaptions must be performed:


  • disable the file source block
  • enable the RTL-SDR source block
  • bypass the throttle block
  • set samp_rate to 250k (resulted in best performance)

With higher samplerates/other SDRs it might be necessary to decrease the lowpass filter taps (increase the transition width) to avoid flowgraph congestion.

Make sure the ppm offset of your SDR are set correctly and that your system UTC time is correct.

Next configure the doppler correction in Gpredict:

  • Gpredict preferences -> interfaces -> add a 'Radio' interface with RX only settings and localhost port 4532.

When using the drop-down arrow in the main gpredict tracking interface and selecting 'Radio Control' you should see the following interface:


Upon starting the GNURadio flowgraphs:

  • Set Downlink frequency to 437200000
  • Under 'Target' select OPSSAT and click 'Track'
  • Under 'Settings' select Device no 1 as the configured RX interface and click 'Engage'


Once it is known which of the pre-assigned NORAD IDs of Arianespace launch VS23 belongs to OPS-SAT, the currently disabled telemetry forwarder block in os-demod-decode.grc can be used to forward telemetry to various servers such as SatnogsDB.


This repository contains the UHF specifications and example applications for demodulating and decoding the received signal.







No releases published


No packages published