Decoding Hera

Hera is an ESA mission to the Didymos binary asteroid system. It will arrive there in December 2026 to study the asteroids and the effects of the impact of DART on Dimorphos. It was launched on October 7 from Cape Canaveral, exactly one week before Europa Clipper. In the same way as for Europa Clipper, Hera’s launch trajectory allowed me to track it with the Allen Telescope Array, starting approximately 90 minutes after launch.

However, the ephemerides publicly available when the launch happened turned out to be completely wrong, as I will explain below in more detail. I needed to find the spacecraft’s signal by moving the antenna in the blind, and continue tracking it by hand by tweaking the pointing every few minutes. For this reason, the quality of the recordings I have done is not so good. The signal drops down frequently as the spacecraft moves away from where I was pointing or when I made mistakes in my pointing adjustments.

For this reason, I have prioritized decoding the Europa Clipper recordings, since I expected that decoding these low quality recordings of Hera would take more work. Nevertheless I have managed to decode a good amount of telemetry.

I have published the IQ recordings made with the ATA in the following two Zenodo datasets:

Recording set up

The set up I used to observe Hera was very similar to the one for Europa Clipper. I used antenna 1a from the Allen Telescope Array and a USRP N321 to record dual linear polarization at 6.144 Msps. For antenna pointing I used the latest SPICE kernel available at the moment of launch in the Hera SPICE repository. This was the file hera_sc_crema_2_1_LPO_241007_261202_v01.bsp, which was uploaded on 2024-06-07. It was the same file that JPL HORIZONS was using. CReMA means “Consolidated Report on Mission Analysis”, and I think that LPO means launch period open. There are are also SPICE kernels with names mentioning LPM (launch period middle) and LPC (launch period close).

Even though the launch happened exactly at the launch window opening, the launch trajectory may deviate somewhat from the trajectory used for mission analysis several months in advance. The exact trajectory is often not known until the launch date is close. As I was trying to track Hera using the CReMA ephemerides, I observed that I saw no signal even though the spacecraft had already risen above the 16.8 deg elevation mask of the antenna. Moreover, in the livestream the team was still waiting for initial signal acquisition from NASA Goldstone.

As signal acquisition happened in Goldstone, I compared the antenna pointing shown in DSN Now (which is rounded to 1 degree units) with my antenna pointing and realized that the ephemerides I was using were way off. The Allen Telescope Array is 735 km northwest of Goldstone. Parallax still plays a factor for spacecraft these close to Earth, but still the antenna pointing of both stations should be similar.

I used the pointing of Goldstone shown in DSN Now and a guesstimate of parallax to find Hera’s signal by hand with the ATA, and then continued tracking the signal manually by tweaking the pointing every few minutes to try to peak the received signal strength. The 6.1 m antennas of the ATA have a 3 dB half-beamwidth of 0.2 deg, so finding and tracking a signal by hand with this narrow beam is rather tricky.

In 2024-10-14, one week after launch, a new SPICE kernel for Hera was published: hera_fcp_000021_241007_261118_v01.bsp. This already has data from orbit determination. The figure below compares the antenna pointing for the CReMA kernel (continuous line) and this FCP kernel (dotted line). The difference between them is huge when the spacecraft is still close to Earth.

I would like to use this plot as a public request to ESA to publish ephemerides for their spacecraft in a timely manner. This is in the public interest, for space situational awareness and for the value that these deep space launches provide as tracking targets. They are routinely tracked by professionals and hobbyists alike, both in the radio and optical domains, as a means to test and improve their systems.

Clearly NASA DSN, which was supporting this mission, had better quality ephemerides available at the time of launch, or otherwise they would have not been able to track the spacecraft (they have smaller antennas for searching, but their dishes are 34 metres).

Waterfall analysis

In total I have made three recordings:

  • A very short recording at 16:24 UTC where I first found the signal and decided to stop and change the LO frequency to centre the signal better.
  • A recording from 16:25 to 16:37 UTC with the new LO frequency. At 16:37 UTC I had lost the signal and couldn’t find it, so I decided to stop recording and try to find it in a real time spectrum plot.
  • A recording from 17:06 to 17:50 UTC. At this point I managed to find the signal again and noticed that it had increased the symbol rate. I finished the recording because I was already tired of tracking by hand and the signal level was already weak, so I didn’t know if it would be decodable, but the spacecraft continued to be in view for several hours after this.

The following figure shows the waterfall of the recording at 16:25 UTC. The signal is a low symbol rate PCM/PM/bi-phase-L modulation (Manchester modulated telemetry on a residual carrier). Intermodulation products of the telemetry signal are visible at approximately 1.5 MHz away from the carrier. Perhaps these are caused by ranging tones, but it is hard to tell without more careful study.

The next plot shows only the region of the spectrum occupied by the main signal.

In the average power spectral density we can see that the carrier suppression is quite high. This plot has a frequency resolution of 93.75 Hz, so the power of the residual carrier is many times less than the power of the telemetry modulation.

The next figure shows the waterfall of the recording at 17:06 UTC, which contains the higher symbol rate signal. The modulation is still PCM/PM/bi-phase-L. The signal appears weaker, both because the spacecraft is further way and because the higher symbol rate spreads the power over a larger frequency range.

In the power spectral density plot we can see that this modulation uses less carrier suppression. The residual carrier has much better SNR than before.

Modulation and coding

The only difference between the two modulations shown above is the symbol rate (and the carrier suppression). The modulation is PCM/PM/bi-phase-L. I have measured the baudrate to be 60.2375 kbaud and 322.56 kbaud respectively. This is the observed baudrate in the recording, which includes the Doppler effect. There doesn’t seem to be an integer factor relating these baudrates. Their quotient is approximately 5.355. Coding is CCSDS r=1/4 Turbo code with 1115 byte frames.

GNU Radio decoder

The flowgraph I have used to decode the low-rate telemetry is shown in the following figure.

Hera low-rate telemetry GNU Radio decoder

This flowgraph is adjusted to perform well at low SNR, which is important given the low quality of the recording due to antenna pointing errors. First, the Doppler Correction block from gr-satellites is used to remove Doppler. This is necessary because a low loop bandwidth will be used for residual carrier tracking.

Experimentally I have determined that the spacecraft was probably locked coherently to a constant-frequency uplink transmitted from Goldstone, as this gives good results for Doppler correction. I have used a Python script horizons_three_way_doppler_correction.py that fetches the ephemerides from HORIZONS and computes the three-way Doppler for a transmitter->spacecraft->receiver path assuming that the spacecraft locks its downlink to the uplink frequency using frequency multiplication, which makes the uplink frequency irrelevant in the calculation. I have run this script as follows.

horizons_three_way_doppler_correction.py \
--downlink-carrier-frequency 8435.75 --spacecraft HERA \
--start-epoch 2024-10-07T16:24:00 --duration 5300 \
--time-step 1 \
--receiver "Hat Creek" --transmitter "DSS-24" \
--add-offset 359e3 --output-file hera_doppler.txt --plot

After Doppler correction, the two linear polarizations are automatically combined in the gr-satellites Auto-polarization block. Then a PLL with a loop bandwidth of 10 Hz locks to the residual carrier. To be able to lock, the PLL requires that the initial frequency error is small. I have used File Sinks to write a decimated version of the signal to disk and look at the frequency error and check if the PLL stays locked when the signal is weak, and if it locks correctly when the signal reappears after a fade.

A straightforward PCM/PM/bi-phase-L demodulator downconverts and filters the telemetry sidelobe and uses a Symbol Sync block for symbol time synchronization and a Costas loop subcarrier tracking. Finally, the Turbo decoder block from gr-dslwp is used to perform Turbo decoding, and the CRC-16 of the decoded frames is checked.

The following plot shows the GUI of the flowgraph running in the part of the recording where the signal is stronger. In this case the SNR is quite good.

Hera low-rate telemetry GNU Radio decoder GUI

The following figure shows the flowgraph I have used for the high-rate signal. It is very similar to the previous one, but it has some adjustments to account for the higher symbol rate.

Hera high-rate telemetry GNU Radio decoder

This shows the flowgraph GUI running on one of the best parts of the recording. The SNR is not very good, so the constellation plot looks bad. Nevertheless, the Turbo decoder is still able to decode most frames in these conditions.

Hera high-rate telemetry GNU Radio decoder GUI

Telemetry frames

The telemetry frames are CCSDS TM Space Data Link frames using spacecraft ID 0xb5, which is registered to Hera in the SANA registry. There are three virtual channels in use: virtual channel 1, which contains real time telemetry, virtual channel 3, which is only present on the high-rate signal and transmits a replay of recorded telemetry, and virtual channel 7, which is the only idle data virtual channel. Virtual channels 1 and 3 carry CCSDS Space Packets that conform to the ECSS PUS version 2 (ECSS-E-ST-70-41C). In this sense, the telemetry is similar to that of JUICE and Euclid, which are other recent ESA missions. I will do a detailed analysis of the telemetry frames in a future post.

Code and data

The materials used for antenna tracking and waterfall analysis are in this repository. The GNU Radio decoder flowgraphs and the files containing the decoded telemetry frames are in this repository. The IQ recordings in SigMF format are linked at the beginning of the post.

4 comments

Leave a comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.