Tianwen-1 attitude in Mars orbit

It has been a while since the last time I wrote an update about Tianwen-1’s attitude. In that post I showed that Tianwen-1 had changed to a sun angle of 0 degrees with respect to the spacecraft’s X axis on 2020-10-22. Since then, nothing changed, even after the spacecraft arrived to Mars orbit on February 2021, so I have been sloppy and ignored the ADCS telemetry for quite a while.

As you may have heard, the 20 metre antenna at Bochum observatory had a failure at the beginning of June due to a thunderstorm. It has been under repair until the end of August, when it became operational again. As AMSAT-DL has now returned to receive telemetry from Tianwen-1 at Bochum, I am now reviewing the new data to see if anything interesting might have happened in the last months.

I have updated my attitude study Jupyter notebook, since the previous version assumed that the spacecraft’s state vectors were heliocentric coordinates, so it didn’t work in Mars orbit, due to the change to Mars-centric coordinates.

When plotting the new data I have learned that Tianwen-1 changed attitude during the release of the lander on May 14, and has maintained this new attitude until the present day.

Decoding Voyager 1

Today is the 44th anniversary of the launch of Voyager 1, so I want to celebrate by showing how to decode the Voyager 1 telemetry signal using GNU Radio and some Python. I will use a recording that was done back in 30 December 2015 with the Green Bank Telescope in the context of the Breakthrough Listen project. Most of the data from this project is open data and can be accessed through this portal.

In contrast to other posts about deep space probes in this blog, which are of a very specialized nature, I will try to keep this post accessible to a wider audience by giving more details about the basics. Those interested in learning further can refer to the workshop “Decoding Interplanetary Spacecraft” that I gave in GRCon 2020, and also take a look at other posts in this blog.

An update about Chang’e 5 whereabouts

It’s been a while since the last time I posted about Chang’e 5, back at the end of January. Since then we have been occasionally keeping an eye on it with the Allen Telescope Array, and Scott Tilley VE7TIL has also been monitoring with its home station. Until now, the spacecraft has spent its time slowly drifting around the Sun-Earth L1 point. However, it appears that now it is on the move.

The observations I’ve done last weekend from ATA, as well as reports from Scott and other observers show that it has deviated significantly from the ephemerides made by Bill Gray using our radio observations. This is not so surprising, because we haven’t been maintaining those ephemerides with new observations through part of July and all August. What is more surprising is that now the spacecraft’s right ascension and declination is changing rather fast.

The following are the observations I took with the ATA this weekend, using the Chang’e 5 telemetry signal at 8486.3 MHz.

Timestamp (UTC)RA (h)DEC (deg)
2021-08-28 21:007.93114.73
2021-08-29 16:008.11714.05
2021-08-29 21:308.15013.80

This represents an angular movement of 3.25 deg per day, which is a lot if we compare it with the ephemerides around the end of July, which had an angular movement of 0.43 deg per day.

Still we don’t have enough data to fit a good trajectory. It is uncertain whether Chang’e 5 has manoeuvred or is simply being ejected out of the L1 point (orbits around the Langrage points are typically unstable and require station-keeping). We will keep gathering more data points to try to fit a better trajectory.

Yesterday I observed that the signal strength was really good. The figure below shows the spectrum of the signal. The two smaller spikes to the sides of the carrier are the data sidebands, which have an SNR of approximately 5 dB. The spacecraft is still transmitting at 512 baud.

Chang’e 5 signal on 2021-08-29

In comparison, this is the signal on Saturday, which is a few dB weaker.

Chang’e 5 signal on 2021-08-28

And here is the signal on 2021-07-31, which is the previous observation I made.

Chang’e 5 signal on 2021-07-31

These last two spectra are more typical of the signal strengths we’ve been seeing with the ATA (using a single 6 metre dish) since Chang’e 5 arrived the neighbourhood of the L1 point.

Since the signal was so good, I left the ATA recording IQ data in order to decode the telemetry later. Unfortunately the spacecraft movement was fast enough that it exited the beam of the dish in approximately 3 hours (I was tracking a constant right ascension and declination). Still, during these 3 hours we got very few lost frames, as shown in these figures.

The telemetry data in the different APIDs in virtual channel 1 (which is the only virtual channel in use) looks very similar to the data decoded on 2021-01-24. The only noteworthy aspect is that APID 1029 is missing in the data from 2021-08-29. As during the end of January, the data looks rather static, with some periodic changes in channels that could correspond to temperature cycles.

The full plots of the decoded data can be seen in this Jupyter notebook, and the decoded data can be found here.

Imaging Cygnus A at 8.45 GHz with ATA

Earlier this year, I published a post showing our results of the interferometric imaging of Cassiopeia A and Cygnus A at 4.9 GHz with the Allen Telescope Array. Near the end of July, I decided to perform more interferometric observations of Cygnus A at a higher frequency, in order to obtain better resolution. I chose a frequency of 8.45 GHz because it is usually a band clean of interference (since it is allocated to deep space communications), it is used by other radio observatories, so flux densities can be compared directly with previous results, and because going higher up in frequency the sensitivity of the old feeds at ATA starts to decrease.

This post is a summary of the observations and results. The code and data is included at the end of the post.

LDPC code design for my QO-100 narrowband modem

A couple months ago I presented my work-in-progress design for a data modem intended to be used through the QO-100 NB transponder. The main design goal for this modem is to give the maximum data rate possible in a 2.7 kHz channel at 50 dB·Hz CN0. For the physical layer I settled on an RRC-filtered single-carrier modulation with 32APSK data symbols and an interleaved BPSK pilot sequence for synchronization. Simulation and over-the-air tests of this modulation showed good performance. The next step was designing an appropriate FEC.

Owing to the properties of the synchronization sequence, a natural size for the FEC codewords of this modem is 7595 bits (transmitted in 1519 data symbols). The modem uses a baudrate of 2570 baud, so at 50 dB·Hz CN0 the Es/N0 is 15.90 dB. In my previous post I considered using an LDPC code with a rate of 8/9 or 9/10 for FEC, taking as a reference the target Es/N0 performance of the DVB-S2 MODCODs. After some performing some simulations, it turns out that 9/10 is a bit too high with 7595 bit codewords (the DVB-S2 normal FECFRAMEs are 64800 bits long, giving a lower LDPC decoding threshold). Therefore, I’ve settled on trying to design a good rate 8/9 FEC. At this rate, the Eb/N0 is 9.42 dB.

Solution to the EU GNU Radio Days challenge

For the European GNU Radio Days 2021, Jean-Michel Friedt, as part of the organizing team set up a signal decoding challenge based on GPS signals. The price to the two best solutions was two USRP B205mini‘s kindly provided by NI Ettus, who sponsored the conference.

I managed to solve this challenge shortly after it was published, and sent Jean-Michel a Jupyter notebook explaining my solution. Jean-Michel liked this approach and invited me to present my solution today at the conference. This presentation can be watched in the recording of the conference livestream.

I have now published a repository with all the material of my solution. Thanks to Jean-Michel for putting together this interesting and enjoyable challenge and to NI for providing a prize to make the challenge more attractive.

Rain backscatter on 10 GHz

Yesterday we had a strong storm in Madrid at around 16:30 UTC. The storm was rather short but intense. Seeing the heavy rain, it occurred to me that I might be able to receive the 10 GHz beacon ED4YAE at Alto del León using my QO-100 groundstation (without moving the antenna).

The 10 GHz beacon is 39.4 km away and the direct path to my station is obstructed by some hill in the middle, as shown in the link profile.

Link profile ED4YAE -> EA4GPZ (from HeyWhatsThat.com)

In the countryside just outside town it is possible to receive the beacon, probably because it diffracts on the hills. However, it is impossible for me to receive it directly from home, as there are too many tall buildings in the way.

In fact, when I fired up my receiver as the storm raged, I was able to see the beacon signal, with a huge Doppler spread of some 700 Hz (20 m/s). The CW ID of the beacon was easy to copy.

ED4YAE -> EA4GPZ at 10 GHz via rain backscatter

Then I started recording the signal. As the rain got weaker, it started disappearing, until it faded away completely. This post is a short analysis of the scatter geometry and the recording.

GPS spectrometry at Allen Telescope Array

Over the last few weeks I have been helping the Allen Telescope Array by calibrating the pointing of some of the recently upgraded antennas using the GNU Radio backend, which consists of two USRP N32x devices that are connected to the IF output of the RFCB downconverter. For this calibration, GPS satellites are used, since they are very bright, cover most of the sky, and have precise ephemerides.

The calibration procedure is described in this memo. Essentially, it involves pointing at a few points that describe a cross in elevation and cross-elevation coordinates and which is centred at the position of the GPS satellite. Power measurements are taken at each of these points and a Gaussian is fitted to compute the pointing error.

The script I am using is based on this script for the CASPER SNAP boards, with a few modifications to use my GNU Radio polarimetric correlator, which uses the USRPs and a software FX correlator that computes the crosscorrelations and autocorrelations of the two polarizations of two antennas. For the pointing calibration, only the autocorrelations are used to measure Stokes I, but all the correlations are saved to disk, which allows later analysis.

In this post I analyse the single-dish polarimetric spectra of the GPS satellites we have observed during some of these calibrations.

Tianwen-1 landing

Yesterday, May 14th, at around 23:18 UTC the Tianwen-1 rover Zhurong safely landed on the Utopia Planitia region of Mars. To follow this event, AMSAT-DL made a 7 hour livestream of the orbiter signals as received by the 20m antenna in Bochum observatory. In this livestream we could see the signal losses caused by the manoeuvres of the deorbit burn and collision avoidance burn. Analysis of the telemetry decoded at Bochum shows more details about these manoeuvres. This post is a detailed report of the landing.

32APSK narrowband modem for QO-100

Some time ago I did a few experiments about pushing 2kbaud 8PSK and differential 8PSK through the QO-100 NB transponder. I didn’t develop these experiments further into a complete modem, but in part they served as inspiration to Kurt Moraw DJ0ABR, who has now made a QO-100 Highspeed Multimedia Modem application that uses up to 2.4 kbaud 8PSK to send image, files and digital voice. Motivated by this, I have decided to pick up these experiments again and try to up the game by cramming as much bits per second as possible into a 2.7 kHz SSB channel.

Now I have a definition for the modem waveform, and an implementation in GNU Radio of the modulation, synchronization and demodulation that is working quite well both on simulation and in over-the-air tests on the QO-100 NB transponder. The next step would be to choose or design an appropriate FEC for error-free copy.

In this post I give an overview of the design choices for the modem, and present the GNU Radio implementation, which is available in gr-qo100_modem.