An STRF crash course

Recently, the STRF satellite tracking toolkit for radio observations by Cees Bassa has been gaining some popularity. This toolkit allows one to process RF recordings to extract frequency measurements and perform TLE matching and optimization via Doppler curves. Unfortunately, there is not a lot of documentation for this toolkit. There are some people that want to use STRF but don’t have a clear idea of where to start.

While I have tested very briefly STRF in the past, I had never used it for doing any serious task, so I’m also a newcomer. I have decided to test this tool and learn to use it properly, writing some sort of walk-through as I learn the main functionality. Perhaps this crash course will be useful to other people that want to get started with STRF.

As I have said, I’m no expert on STRF, so there might be some mistakes or omissions in this tutorial that hopefully the experts of STRF will point out. The crash course is organized as a series of exercises that explain basic concepts and the workflow of the tools. The exercises revolve around an IQ recording that I made of the QB50 release from ISS in May 2017. That recording is interesting because it is a wide band recording of the full 70cm Amateur satellite band on an ISS pass on May 29. During a few days before this, a large number of small satellites had been released from the ISS. Therefore, this recording is representative of the TLE lottery situation that occurs after large launches, where the different satellites haven’t drifted much yet and one is trying to match each satellite to a TLE.

The IQ recording can be downloaded here (16GB). I suggest that you download it and follow the exercises on your machine. After you finish all the exercises, you can invent your own. Certainly, there is a lot that can be tried with that recording.

A number of supporting files are created during the exercises. For reference, I have created a gist with these files.

Continue reading “An STRF crash course”

Decoding Astrocast 0.1

Astrocast 0.1 is an Amateur satellite built by the Lucerne University of Applied Sciences and Arts (Hochschule Luzern). It is an in-orbit demonstrator for a future constellation of small satellites providing L-band data services for internet of things applications. The Amateur payload includes an on-board GPS receiver and a PRBS ranging signal transmitter for precise orbit determination .

This satellite was launched on December 3 on the SSO-A launch, but we only have payed attention to it recently. Its IARU coordinated frequency is 437.175MHz (actually it is a bit strange, because the IARU coordination data speaks about Astrocast 0.2, which hasn’t been launched yet). However, the satellite appears to be transmitting on 437.150MHz.

As it turns out, we had an unidentified object transmitting on 437.150MHz. This object was first thought to be RANGE-A, which was also on the SSO-A launch, as this frequency was assigned to RANGE-A. However, the RANGE-A team confirmed that this wasn’t their satellite, and I wasn’t able to identify the modem used by the mystery 437.150MHz signal.

Yesterday, Mike Rupprecht DK3WN noticed that this unidentified signal corresponded to Astrocast 0.1, and sent me some technical documentation about the protocols used by this satellite. Using that information, I confirmed that the mystery satellite at 437.150MHz was indeed Astrocast 0.1 and now I have added a decoder to gr-satellites.

Continue reading “Decoding Astrocast 0.1”

FUNcube telemetry submitter for gr-satellites

After doing a PW-Sat2 telemetry submitter, I’ve set out to add an telemetry submitter for the FUNcube telemetry server. I’ve been in contact with Dave Johnson G4DPZ, who has been kind enough to send me a Java example explaining how the submission protocol works.

The protocol is very simple. It is based on a HTTP POST request whose content is the telemetry frame in hex. To prevent spoofing, some sort of HMAC formed by an MD5 digest of the message concatenated with a user-specific authorization code is used in the POST url. The authorization code is distributed to each user when registering on the server. The Python implementation of the telemetry submitter is here.

To use the submitter in gr-satellites, you need to obtain your Site Id (or username) and the Authorization code (which is usually sent to you by email when registering). See the README for how these parameters have to be specified in the decoder.

Decoding ESEO

ESEO is an educational satellite project for university students led by ESA. It is a microsatellite based on the S-50 platform by SITAEL and indeed serves as an in-orbit validation of that platform. It carries payloads developed by students in 10 European universities, and also a FUNcube payload from AMSAT-UK. It was launched last Monday in the SSO-A launch.

The satellite transmits 9k6 GFSK telemetry in the 70cm Amateur satellite band (do not confuse this telemetry with the telemetry sent by the FUNcube payload in the 2m Amateur satellite band). Last week I wrote an open letter to the directors of the ESEO program requesting the publication of the complete specifications for this telemetry. The existing documentation is published here as two documents called attachment 1, which describes the coding of the frames, and attachment 2, which describes the structure of the telemetry frames.

The main problem motivating my open letter was that the information in attachment 2 was insufficient to produce a telemetry decoder for ESEO. However, last Tuesday an updated version of this document was published. This new version seems to include all the information we need. Apparently, this new version has been published due to my open letter and the pressure made by some people at ESA surrounding the ESEO project.

I would like to thank all the people that have expressed their opinion about the importance of having well documented protocols in the Amateur radio service, as well as all the people in ESA that have pushed for the publication of the documentation, and understood that this is an important matter.

In this post we look at the coding used by ESEO, that is, everything described in attachment 1, and how the decoder in gr-satellites is implemented.

Continue reading “Decoding ESEO”

Uploading PW-Sat2 telemetry with gr-satellites

Yesterday I spoke about decoding the telemetry of PW-Sat2 with gr-satellites. Today I have added to gr-satellites a telemetry submitter block that sends the frames to the PW-Sat2 telemetry server. All users of the PW-Sat2 decoder from gr-satellites are recommended to set this up and submit telemetry to the PW-Sat2 telemetry server, as well as to the SatNOGS database. Here are the instructions to configure the submitter.

Continue reading “Uploading PW-Sat2 telemetry with gr-satellites”

Decoding PW-Sat2 with gr-satellites

PW-Sat2 is a students satellite made by the Students Space Association at Warsaw University of Technology, in Poland. The project started in 2013 and was finally launched last Monday in the SSO-A launch. The satellite carries a sail to aid in deorbiting. This will be deployed on the 39th mission day. The deorbit is expected to happen in one year.

The satellite team has made available a lot of open-source software, such as groundstation software for Radio Amateurs, a telemetry server and even the software that runs on the on-board computer. There is also a good amount of design documentation. This is something a bit unusual and admirable for a university satellite.

PW-Sat2 transmits standard G3RUH-scrambled BPSK AX.25 frames in the 70cm Amateur Satellite band. The baudrate can be selected between 1k2, 2k4, 4k8 and 9k6 by the satellite team. The interesting thing is that there are many types of packets besides telemetry. For instance, it can list and transfer on-board files, such as the images taken by the satellite camera. These packets can be decoded by using the FramePayloadDecoder software.

Since the FramePayloadDecoder software is quite complex and it is written in Python, I have decided to make a telemetry parser for gr-satellites that simply loads this software into GNU Radio and passes the frames to the decoder. Here are the instructions to set this up.

Continue reading “Decoding PW-Sat2 with gr-satellites”

Decoding 3CAT-1

A few days ago I spoke about my Reaktor Hello World decoder in gr-satellites. Another of the satellites that were launched with Reaktor Hello World in the November 29 PSLV launch is 3CAT-1, a 1U cubesat from the NanoSat Lab in Universidad Politècnica de Catalunya. It is designed as a technology demonstrator of COTS parts, and integrates four scientific payloads.

The communications system of 3CAT-1 uses a Texas Instrument CC1101 FSK transceiver chip, which is very similar to the CC1125 used in Reaktor Hello World. It transmits a 9k6 FSK telemetry beacon in the 70cm Amateur band. An interesting thing about this beacon is that it is powered by a temperature gradient that generates naturally within the satellite. A Peltier module is used to collect energy from the gradient and power the communications module. This is called “eternal self-powered beacon demonstrator” by the designers of the satellite, since it doesn’t depend on batteries or solar cells.

I have been in contact with Juan Fran Muñoz from NanoSat Lab, who has been kind enough to send me a telemetry recording for 3CAT-1. With this, and following my implementation of the Reaktor Hello World decoder, I have added a decoder for 3CAT-1 to gr-satellites.

Continue reading “Decoding 3CAT-1”

Decoding Reaktor Hello World

Reaktor Hello World is a 2U cubesat built by the Finnish company Reaktor Space Lab as a test of their cubesat platform and demonstration of the first miniature infrared hyperspectral imager. It was launched on November 29 by a PSLV from Satish Dhawan Space Centre, together with several other cubesats. It transmits 9k6 GFSK telemetry in the 70cm Amateur satellite band.

The satellite uses a Texas Instruments CC1125 FSK transceiver chip. This is very similar to the CC1101 that I used a few years ago in my 70cm Hamnet experiments, so I already knew the coding and features of this chip quite well. The satellite team has a Github repository with a GNU Radio decoder based on the gr-cc11xx decoder block for the CC11xx series of chips. Since gr-cc11xx doesn’t seem to be maintained anymore, I wanted to implement my own CC11xx decoder in gr-satellites and use it to decode Reaktor Hello World.

Continue reading “Decoding Reaktor Hello World”

Batch processing of DSLWP-B Moonbounce: part I

In previous posts I’ve talked about how the DSLWP-B 70cm signal can sometimes be received in the Dwingeloo 25m radiotelescope via a reflection off the Moon’s surface. I’ve studied the geometry of this reflection, the cross-correlation against the direct signal, and even decoded some reflected JT4G.

However, so far the reflection has been detected by hand by looking at the recording waterfalls. We don’t have any statistics about how often it happens or which conditions favour it. I want to make some scripts to process all the Dwingeloo recordings in batch and try to extract some useful conclusions from the data.

Here I show my first script, which computes the power of the direct and reflected signals (if any). The analysis of the results will be done in a future post.

Continue reading “Batch processing of DSLWP-B Moonbounce: part I”