Decoding the Falcon-9 upper stage

This is hardly news any longer. Since a few weeks ago, some people have been decoding the S-band telemetry from the Falcon-9 upper stage, which includes live video of the exterior of the spacecraft and the liquid oxygen tanks interior. This started with the work of, @aang254 and others, who around the second week of March managed to decode video from the telemetry for the first time. has published some information about the telemetry, @aang254 has added a decoder to SatDump, and Alexandre Rouma is adding a decoder to SDR++. In fact, the whole exercise of decoding the video has become quite popular, and more and more people are contributing to decode the latest launches.

On 2021-03-24 there was a launch of 60 Starlink satellites from Cape Canaveral, and Iban Cardona EB3FRN sent me the IQ recording he did on the first orbit, some 18 minutes after the launch. I decided to make a GNU Radio decoder flowgraph for this, since even though there are already several software decoders, I haven’t seen anyone using GNU Radio. I figured out that I could easily put together a flowgraph using some blocks from gr-satellites. This would make a useful and interesting example of using GNU Radio to decode digital signals.

Chang’e 5 telemetry from the lunar surface received by Bochum

A few days ago, Achim Vollhardt DH2VA shared with me some recordings of the lander+ascender combo of Chang’e 5 with the 20m antenna at Bochum observatory, which is operated by AMSAT-DL. The recordings were made on 2020-12-02, while the lander+ascender combo was still on the lunar surface collecting samples (see this tweet by Scott Tilley VE7TIL for the detailed mission timeline). The successful reception of Chang’e 5 by Bochum was announced by AMSAT-DL in Twitter.

The recordings that Achim made are the following:

  • Recording of the low data rate telemetry at 8463.7 MHz for some 15 minutes at 6:00 UTC. This frequency was in ground-lock at that time, as shown by the telecommand loopback at +/-8kHz from the main carrier (there are several telecommand packets being transmitted, plus the usual idle telecommand subcarrier)
  • Five recordings of a high-speed signal at 8495 MHz. The recording was done at 21:10 UTC, has a length of 5 minutes, and is split in five files due to a constraint of 2GB in the size of the recorded files.

In this post I look at the telemetry decoded from these recordings.

Chang’e 5 LOI-2 observed with Allen Telescope Array

If you follow me on Twitter you’ll probably have seem that lately I’m quite busy with the Chang’e 5 mission, doing observations with Allen Telescope Array as part of the GNU Radio activities there and also following what other people such as Scott Tilley VE7TIL, Paul Marsh M0EYT,, Edgar Kaiser DF2MZ, USA Satcom, and even AMSAT-DL at Bochum are doing with their own observations. I have now a considerable backlog of posts to write, recordings to share and data to process. Hopefully I’ll be able to keep a steady stream of information coming out.

In this post I study the observation I did with Allen Telescope Array last Sunday 2019-11-29. During the observation, I was tweeting live the most interesting events. The observation is approximately 3 hours long and contains the LOI-2 (lunar orbit injection) manoeuvre near its end. LOI-2 was a burn that circularized the elliptical lunar orbit into an orbit with a height of approximately 207km over the lunar surface.

A look at Chang’e 5 telemetry

Chang’e 5 is a Chinese lunar sample return mission. It was launched a few days ago on 2020-11-23 from Wenchang and is estimated to perform lunar orbit injection on Saturday. Since then, a number of Amateurs such as USA Satcom, Paul Marsh M0EYT, Scott Tilley VE7TIL, Fer IW1DTU and others have been receiving the X-band signals from the spacecraft and posting reports over on Twitter. Meanwhile, has been working in decoding the frames, which has led him to the amazing achievement of being able to retrieve a short video from the signal.

In this post I will look at some of the frames demodulated by USA Satcom and Paul during the first couple of days of the mission. The frame structure has many similarities with Tianwen-1, which I have described in several posts, such as here and here. However, there are some interesting differences.

Tianwen-1 virtual channel usage

A few days ago, Paul Marsh M0EYT told me that he had seen something interesting in his recording of Tianwen-1‘s signal during the previous night. Paul usually does some nice videos of the signal waterfall by doing screen captures of Spectrum Lab. These clearly show events such as frequency jumps due to groundstation locking, and any high-speed data transmissions. You can see some of these in his Twitter feed.

The waterfall that Paul talked me about can be seen in this video. It corresponds to the night between September 20 and 21. Note that the data sidebands show some horizontal stripes. For a while they disappear altogether, and at other times their density changes. This is what caught Paul’s eye.

Tianwen-1 waterfall between 2020-09-20 and 2020-09-21 by Paul Marsh M0EYT

Paul was convinced that when the stripes disappeared, more data was being transmitted in the signal. I was a bit sceptical about it, but clearly there was something changing in the signal. I thought about the “dancing” related to the subcarrier and data clocks sliding. However, after analysing the signal, I saw that Paul was completely right, as I will explain here. After knowing exactly what happens, I’m still quite amazed that this shows up in the Spectrum Lab waterfall.

Measuring Tianwen-1’s modulation

This is a post I had announced since I first described Tianwen-1’s modulation. Since we have very high SNR recordings of the Tianwen-1 low rate rate telemetry signal made with the 20m dish in Bochum observatory, it is interesting to make detailed measurements of the modulation parameters. In fact, there is something curious about the way the modulation is implemented in the spacecraft’s transmitter. This analysis will show it clearly, but I will reserve the details for later in the post.

Here I will be using a recording that already appeared in a previous post. It was made on 2020-07-26 07:47:20 UTC in Bochum shortly after the switch to the high gain antenna, so the SNR is fantastic. The recording was done at 2.5Msps, and the spectrum can be seen below. The asymmetry (especially around +1MHz) might be due to the receive chain.

The signal is residual carrier phase modulation, with 16348 baud BPSK data on a 65536Hz square wave subcarrier. There is also a 500kHz ranging tone.

Decoding Mars 2020

Mars 2020, NASA’s latest mission to Mars, was launched a couple weeks ago. However, with all the Tianwen-1 work down the pipeline, until now I haven’t had time to dedicate an appropriate post to this mission (though I showed some sneak peek on Twitter). This mission consists of a rover and helicopter (a real novelty in space exploration). Both were launched with the cruise stage and the entry, descent and landing system on July 30 from Cape Canaveral, an are currently on their transfer orbit to Mars, as Tianwen-1 and Emirates Mars Mission.

In this post I will be working with some recordings made by AMSAT-DL using the 20m radio telescope at Bochum’s observatory. These feature the low rate safe mode telemetry, which was very strong and caused some anecdotes as it saturated some NASA DSN receivers, and the nominal 10kbps telemetry signal that was switched on later. Here I will describe the modulation and coding, giving GNU Radio decoders, and also take a look at the data. has also written a post where he shows similar information.

Tianwen-1 high speed data signal

In a previous post I talked about how the high data rate signal of Tianwen-1 can be used to replay recorded telemetry. I did an analysis of the telemetry transmitted over the high speed data signal on 2020-07-30 and showed how to interpret the ADCS data, but left the detailed description of the modulation and coding for a future post.

Here I will talk about the modulation and coding, and how the signal switches from the ordinary low rate telemetry to the high speed signal. I also give GNU Radio decoder flowgraphs, tianwen1_hsd.grc, which works with the 8192 bit frames, and tianwen1_hsd_shortframes.grc, which works with the 2048 bit short frames.

Tianwen-1 telemetry: framing and data

This is a follow-up to my previous post, where I explained the modulation and coding of Tianwen-1’s telemetry. In this post I will explain the framing structures and the data contained in the telemetry (though we only understand a few of the telemetry channels). Most of what I’m going to explain here was found first by and is already presented in his Tianwen-1 page. In this post I’ll try to give a bit more detail (especially for those not so familiar with the CCSDS protocols) and some Python code for those interested in digging into the data.

Tianwen-1 telemetry: modulation and coding

As promised in this post, I will now speak about how to demodulate the Tianwen-1 telemetry signal. This post will deal with demodulation and FEC decoding. The structure of the frames will be explained in the next post. In this post I also give a fully working GNU Radio decoder that can store frames in the format used by the orbit state vector extraction Python script.