Giter VIP home page Giter VIP logo

vladstoyanovadp / space_challenges_2021_ground_station Goto Github PK

View Code? Open in Web Editor NEW

This project forked from vkabadzhova/spacechallenges2021-groundstation

1.0 0.0 1.0 4.81 MB

This repository goes in-depth on the methodologies used to capture, demodulate, and de-frame satellite data. It also includes the results and our presentation at the end of the Space Challenges Bootcamp 2021.

Python 13.19% C++ 65.96% CSS 20.84%

space_challenges_2021_ground_station's Introduction

Introduction

While at Space Challenges Bootcamp 2021 our team of 8 was assigned the task to build a ground station.

The project would have been considered successful if we successfully captured, demodulated and deframed telemetry data from one of EnduroSat's educational cubesats - QMR-KWT.

While our design documents describes everything on the technical side (including mission, system, subsystem requirements, design, implementation and evaluation), in this repository I will go over the step-by-step methodology used for the signal processing (which I and Dimitar were responsible for, but not limited to).

That would include even more detailed steps, than those presented in the design document, how we tested the systems, and problems faced, including the ways we overcame them.

Additionally I will also post here our results from the project altogether and our presentation which we held in front of most of EnduroSat's team and a special guest on the bootcamp - Pete Worden, former NASA Ames Research center director, and current Chairman of the Breakthrough Prize Foundation.

Signal Processing

To successfully process the signals, we run a GNU Radio flow that appreciates 3 main consecutive steps: Receive and Save, Demodulate and Deframe, Output.

Prerequisites

To be able to process the signal one would need to download Miniconda (download from here and turn off antivirus while downloading and installing) and then follow the steps from here to then download gnu radio companion and gr-satellites. If you did those successfully you will have GNU Radio version 3.9.2 with gr-satellites as an additional library. Additional to that, you will also have to install one additional library called gr-osmosdr (this is necessary to be able to receive RF signals live). After this is all set up, one can move to the steps below.

Flowgraph

First, one would start with assembling the flow. This calls the GNU Radio (essentially, a python script) to initiate the flow.

flowgraph

QT GUI Range - All those blocks are variables fed to the flow Osmocom Source - your live RF receiver (the antenna)
Complex to Float - converts the format of the information received so that it could be saved to a wav file and demodulated
QT GUI Sink - visualization of the data (not necessary, but very useful if one is testing with a graphical interface, rather than only on Raspberry Pi without a monitor. Also this is how the waterfalls you can see on the pictures lower are visualized)
Wav File Sink - Saves the raw data to a wav file, in case we want that for further analysis
FSK Demodulator - demodulates the data live AX.25 Deframer - Deframes the data by the AX.25 protocol live Message Debug - Used to print out the data as it's getting received

In the following paragraphs I will go in more detail on how each block corresponds with the rest of the flow

Receiving + Saving + Waterfall Visualizing

Receiving_Saving_Visualizing

The block responsible for receiving is Osmocom Source. The main thing we should keep in mind here are the following variables:

  • Sample rate - Anything lower than 1k will hinder the signal and we will lose important data;
  • Frequency - The frequency at which the cubesat transmits data. It should be set prior to the cubesat pass;
  • Bandwidth - 10k is the optimal bandwidth for receiving telemetry data from QMR-KWT. This was corresponded directly with the CTO of EnduroSat;
  • RF gain - We amplify the signal so that we can process it later on;

The block responsible for visualizing the waterfall is QT GUI Sink

Not much to say here, except that the values should be identical with those on the Osmocom source to ensure data integrity. We have saved many waterfalls of different satellites which you can see in the waterfalls folder.

The block responsible for formatting the raw data from the cubesat is the Complex to Float block

The block responsible for saving the raw data is WAV File Sink

This block ensures that the raw data is saved in case we need it for further analysis

Demodulating + Deframing

Demodulate_Deframe

The block responsible for demodulating the data is the FSK demodulator.

There are many different modulations, and the cubesat manufactures decides what the modulation of the signal will be. Modulation is the process of converting data into electrical signals and is useful for optimizing transmission.

The block responsible for deframing the signal is AX.25 deframer.

Similar to the demodulation, the communication protocol is determined by the cubesat manufacturer. This protects the signal from being decoded by anyone. Communication protocols that are open-source are usually used for educational purposes.

Output

PDU_Packet_Output

Finally we output the data into PDU packets.

This happens directly in GNU Radio and some sample telemetry data can be seen in the folder decoded_data.

Results

Our presentation can be found here

Waterfall from QMR-KWT:

QMR_KWT_waterfall

Additional waterfalls from different cubesats can be found in the waterfalls folder

PDU packet from QMR-KWT:

QMR_KWT

The Ground Station in action:

Video.Made.with.Clipchamp.mp4

Acknowledgements

  • The whole EnduroSat team for sponsoring this bootcamp
  • Daniel Estevez for creating some vital libraries used within the GNU radio flow

space_challenges_2021_ground_station's People

Contributors

vladstoyanovadp avatar antonatananasov avatar silverlined avatar vkabadzhova avatar

Stargazers

dimitar avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.