Welcome to CSUM GS Modules’s documentation!
The scripts in this repository can be used to establish a communication link with the Robusta family of satellite missions from the Centre Spatial Universitaire Montpellier (CSUM). The scripts are provided as a set of signal and data processing blocks that encode or decode radio packets that can be sent to or received from Robusta platforms. The CSUM is developing a 1U and a 3U platform. The decoding and encoding process for each platform is explained in the sections below.
1U Decoder
Reception
The diagram below shows the set of blocks required to receive signals from the 1U satellites. A Pluto SDR is used to implement the digital to Radio-Frequency interface. The signal processing and packet decoding stages can be implemented using GNURadio. Doppler correction on the receiving signal is performed by Gpredict.

Tip
In order to use the scripts as it is the Pluto SDR needs to be plugged to a USB port of a host computer and be configured with the default dns name: pluto.local.
The script rob1u_gmsk_2400_receiver.grc in the receivers/ folder implements the filter and demodulation stages required to transform the incoming RF signals from the satellite into digital/raw binary data. The decoded packets will be printed in the terminal, but they will also be pushed to CSUM’s server using the Simple Downlink Share Convention (SiDS) protocol. Once packets are pushed to CSUM’s servers, they can be visualized on these two pages: CELESTA, MTCUBE-2.
Setup
Dependencies
Make sure to have all the following software modules before trying to launch the Gnuradio script
Enabling Doppler Correction
- Adding a new TLE to Gpredict:
You can add new TLE coordinates to GPREDICT by clicking on Edit -> Update TLE from Local Files. You can check this reference for more information about Gpredict.
Activating the frequency tracker on Gpredict:
Add a new radio interface to Gpredict. Click on Edit -> Preferences. Then in the left panel, go to Interfaces, in tab Radios click on Add new. You should see the following screen:
Define a name for your interface (ie: Radio CSUM), set Host: localhost and Port: 4532 as this will match the values in the Gnuradio Script. Click on OK to confirm.
On the right hand side of the main screen, click on the down arrow -> Radio Control. You should see the following screen:
Under Settings -> Device, select the Radio interface you just created.
Under Target, select the satellite that you want to track (the one you just added the TLE)
Set the right downlink frequency for the satellite you want to track
Click on Engage then Track. The doppler correction should be updated in your Gnuradio script.
Packet Forwarder
Packets decoded using the provided rob1u_gmsk_2400_receiver.grc script are automatically forwarded to CSUM’s server. In order for the packets to be properly stored, make sure to update your HAMRADIO callsign in the Telemetry Forwarder block. The image below indicates which block to update in the GRC flowgraph.

Using Another SDR
You can use another SDR device to decode signals from CSUM satellites. For that, you only need to replace the SDR Source block in the Gnuradio script, as shown below:

If you do so, make sure to update the sampling rate accordingly (blue circle).
Launching Procedure
In order to start the reception flow, the following steps are required:
Open GnuRadio, set the right downlink frequency (Variable default_freq)
Open one of the receiver GRC scripts inside the receivers folder
Execute the flowgraph (Start button in gnuradio companion). You should see a simple waterfall display.
Open Gpredict, click on the down arrow on the right hand side of the main screen -> Radio Control. Select the proper radio interface and set the downlink frequency. Click on Engage then Track.
Wait for the satellite to arrive
3U Decoder
Reception
The diagram below shows the set of blocks required to receive signals from the satellite. A Pluto SDR is used to implement the digital to Radio-Frequency interface. The set of scripts provided in the receivers/ folder implement the filter and demodulation techniques required to transform the incoming RF signals from the satellite into digital/raw binary data. These decoded bits are then forwarded to another processing stage through a ZMQ Interface (Port 5600). The receive_frame python scripts inside the scripts folder can be then used to subscribe to this port and build the incoming CSP packets from this raw bit stream. The decoded packets will be printed in the terminal, but they will also be pushed to another ZMQ interface (Port 5601) so that the user can build its custom application (not provided in this repo), that will be in charge of further processing the incoming data.

Tip
In order to use the scripts as it is the Pluto SDR needs to be plugged to a USB port of a host computer and be configured with the default dns name: pluto.local.
In order to start the reception flow, the following steps are required:
Open GnuRadio
Open one of the receiver GRC scripts inside the receivers folder
Execute the flowgraph (Start button in gnuradio companion). You should see a simple waterfall display.
Open a terminal in the scripts folder.
Start the receive_csp_frame.py script: python3 receive_csp_frame.py
Tip
By default, the receiver gnuradio radio scripts are configured to receive signals at 437 MHz. Verify if that is the same transmission frequency of the satellite.
Transmission
The transmission flow works in a similar way, but on the opposite direction. The packets can be built using a Custom script at the application layer (not provided in this repository). Then, these packets are pushed via ZMQ to Port 5501. The send_csp_frame.py script takes this packets, builds the proper radio packets and forward them to the ZMQ Interface (Port 5500) of the Gnuradio transmitter script, as shown in the picture below.

In order to start the reception flow, the following steps are required:
Open GnuRadio
Open one of the receiver GRC scripts inside the transmitters folder
Execute the flowgraph (Start button in gnuradio companion). You should see a simple waterfall display.
Open a terminal in the scripts folder.
Start the send_csp_frame.py script: python3 send_csp_frame.py
This script will keep listening to port ZMQ 5500 for new packets. Any data that is pushed to this port will be immediately encapsulated with a Radio Packet and dispatched to the gnuradio script and hence to the RF channel.
Tip
By default, the receiver gnuradio radio scripts are configured to receive signals at 435.8 MHz. Verify if that is the same transmission frequency of the satellite.