Skip to content
This repository contains the UHF specifications and example applications for demodulating and decoding the received signal.
Python
Branch: master
Clone or download
Tom Mladenov Tom Mladenov
Latest commit baa2dbb Dec 17, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
apps added try catch in case of error Dec 11, 2019
docs added CSP header description of SPP over CSP packets Dec 17, 2019
images updated screenshot Dec 5, 2019
recordings added realistic beacon recording Dec 13, 2019
LICENSE Initial commit Jul 19, 2019
README.md Updated README.md Dec 14, 2019

README.md

gr-opssat

Authors: Fischer Benjamin (benjamin.fischer@arcticspacetech.com), Tom Mladenov (tom.mladenov@esa.int)

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.

https://opssat1.esoc.esa.int/ https://opssat1.esoc.esa.int/projects/amateur-radio-information-bulletin

https://www.esa.int/Our_Activities/Operations/OPS-SAT

Overview

UHF specifications

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

Applications

  1. UHF receiver application (apps/os_uhf_rx.grc)
    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/main.py)
    1. Written in Python 3
    2. Uses a ZMQ subscriber to get data from GR flowgraph (apps/os-demod-decode.py)
    3. Parses, and views beacon content fields in engineering values

Dependencies

  1. UHF receiver application (os_uhf_rx.grc)
    1. https://github.com/wnagele/gr-gpredict-doppler
  2. OPS-SAT demodulator and decoder (os_demod_decode.grc)
    1. https://github.com/daniestevez/gr-satellites
  3. OPS-SAT UHF Desktop (apps/desktop/main.py)
    1. Python 3
    2. https://pypi.org/project/PyQt5/
    3. https://pypi.org/project/pyzmq/
    4. https://pypi.org/project/crccheck/
    5. https://pypi.org/project/numpy/

Recordings

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/main.py

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:

screenshot

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:

os_uhf_rx.grc:

  • 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:

screenshot

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'

screenshot

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.

You can’t perform that action at this time.