SatNOGS-collisions — A python library to tackle RF collisions during Satellite observation

Ravi Charan
5 min readSep 17, 2020

--

Over the past 3 months, I’ve been working with Libre Space Foundation developing a tool for the SatNOGS project to detect Radio Frequency collisions in a Satellite-GroundStation communication under the mentorship of Alfredos Damkalis. The SatNOGS project is a free software and open-source hardware platform aimed to create and manage a satellite ground-station network. The scope of the project is to create a full stack of open technologies based on open standards, and the construction of a full ground station as a showcase of the stack.

Overview of SatNOGS-collisions

Due to the increase in the number of deployed satellites, while reading the satellite data from the ground station, it could lead to more than one satellite transmitting to the ground station with the close frequency range. This could lead to interference in the observed results, also known as a Radio Frequency collision.

The SatNOGS-collisions library enables users to easily identify the RF collisions at a ground station or over a region on the surface of the Earth in a given time range. This library is majorly divided into 2 sub-modules.

GSS sub-module

Ground station — Satellite submodule: the primary aim of this module is to detect the collisions between multiple satellites at a single or multiple ground stations at a given time range.

Parameters to be specified:

  • Ground Station ID(s) (or) the coordinates and the elevation of the ground station
  • Satellite details — NORAD IDs of the Satellites (or) the TLE and the transmitting frequencies of each satellite.
  • time_range during which the user wishes to check for the collision.

Given the time_range specified by the user, we check if any of the mentioned satellites pass or fall under the Field of View of the Ground Station. Once we have the list of all the satellites we check all the transmitters of these satellites that fall in a close frequency range.

Effect of Doppler Shift in detecting collisions

Since the satellite revolves around the Earth with a velocity that is much faster than the rotation of the Earth, the downlink frequency of the Satellite wouldn’t be the same as the observed frequency at the ground station.

An external library PyEphem is used to compute the relative velocity of the satellite at the given point of time. We also make use of the PyEphem library to extract the dynamic meta-data of the Satellites that changes with time as it provides an implementation for SGP4 models which is used to get essential data of the Satellite given the TLE of the Satellite.

Delivered Functionalities

Users can choose to detect or compute the collisions between the Satellite at the Ground Station. The detect_collision methods return boolean values indicating if the collision is possible among the satellites in the given time range whereas, the compute_collision methods return collisions in a JSON format which include metadata of the collisions including Groundstation details, time period of the possible collision, and the transmitter frequencies of the satellites at which the collisions take place.

The use cases and the methods delivered are as follows:

  • Detect/Compute collisions between one satellite and a set of satellites over a single ground station.
  • Detect/Compute collisions between one satellite and a set of satellites over multiple ground stations.
  • Detect/Compute collisions among all the given satellites over a single ground station
  • Detect/Compute collisions among all the given satellites over multiple ground stations.

Onlysat sub-module

This is an extension module that doesn’t require the ground station to be a parameter. Instead, given the satellite details, the module finds the region on the surface of the Earth over which a possible Radio Frequency collision could take place. The result is returned in a GeoJSON format.

Parameters to be specified:

  • Satellite details — NORAD IDs of the Satellites (or) the TLE and the transmitting frequencies of each satellite.
  • time_range during which the user wishes to check for the collision.

The way in which the submodule works is that it first computes the footprints of each satellite given by the user and computes the intersection of the footprints. Once we have the intersection of footprints we check the Satellite transmitters that transmit with a close frequency over this region and we mark that as a Radio Frequency collision.

Computing the Footprint of the Satellite

Image Source: Article on satellite footprint computation

The above illustration shows a circular footprint (coverage area) of the satellite transmission. The Sub-satellite point is computed and is marked as the origin of the circular footprint that is desired. The maximum radius of the circular coverage is then computed and the data is stored in a GeoJSON format. Further technical details on the computation of the footprint of the satellite can be found here.

To preserve the computational complexity in the next steps of the workflow the footprint of the satellite is assumed to be a circular one whereas in a few cases where the satellite points away from the center of the Earth, the coverage may be elliptical as well. But the trade-off had to be made to preserve the computation time.

Since we are dealing with a circular area projected onto a sphere, there is no definitive way of storing a fixed number of points to represent the region. So the circular footprint has been approximated to an n-sided polygon and is then stored as a GeoJSON object.

Shapely library’s inbuilt Polygon.intersection method has been used to compute the intersection of the GeoJSON objects.

Delivered Functionalities

Similar to the GSS module the user can call a set of detect_collision and compute_collision methods under the `onlysat` sub-module. The compute methods here also return the region over which an RF collisions take place in the GeoJSON format as a part of the metadata returned.

The use cases and methods delivered as a part of this sub-module are as follows:

  • Detect/Compute the region over which the collisions take place between one satellite and a set of specified satellites.
  • Detect/Compute the region over which the collisions take place between one satellite and all the satellites registered in SatNOGS.
  • Detect/Compute the region over which the collisions take place among all the specified satellites.

Future Work

Future work mainly involves integrating the module to the SatNOGs project so that it could be used by the SatNOGS users as an internal tool.

Apart from that, the Onlysat sub-module needs to be tested more effectively as there the precision issues while computing the intersection between the satellites and the approximation of the circles to n-sided polygons may result in a little data loss over the corners. The number of sides of the polygon to which the circular footprint is to be approximated but a trade-off has to be made with respect to the computational complexity.

The latest updates on the work can be found on the LSF’s Gitlab repository.

Conclusion

As I wrap up my summer internship, I would like to thank my mentor, Fredy, for being extremely helpful right from the time I started drafting the proposal till the end and for helping me gain a great work/learning experience over the past weeks. It has been a wonderful experience being a part of the LSF community. I would definitely stick around for a little longer and help with the next milestones of the project. Looking forward to the coming few weeks.

--

--