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.

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.

BPSK pulse radar revisited

Some months ago I published the analysis of a BPSK pulse radar waveform that Scott Tilley VE7TIL had received through the transponder of Meridian 8 at a downlink frequency of 994 MHz. Now Roland Proesch DF3LZ has analyzed the same recording that I used, finding some different signal parameters. This has made me review my analysis, and it turns out that I made a mistake in finding the symbol rate of the signal. This post is an updated analysis, correcting my mistake.

Voyager-1 single dish detection at Allen Telescope Array

This post has been delayed by several months, as some other things (like Chang’e 5) kept getting in the way. As part of the GNU Radio activities in Allen Telescope Array, on 14 November 2020 we tried to detect the X-band signal of Voyager-1, which at that time was at a distance of 151.72 au (22697 millions of km) from Earth. After analysing the recorded IQ data to carefully correct for Doppler and stack up all the signal power, I published in Twitter the news that the signal could clearly be seen in some of the recordings.

Since then, I have been intending to write a post explaining in detail the signal processing and publishing the recorded data. I must add that detecting Voyager-1 with ATA was a significant feat. Since November, we have attempted to detect Voyager-1 again on another occasion, using the same signal processing pipeline, without any luck. Since in the optimal conditions the signal is already very weak, it has to be ensured that all the equipment is working properly. Problems are difficult to debug, because any issue will typically impede successful detection, without giving an indication of what went wrong.

I have published the IQ recordings of this observation in the following datasets in Zenodo:

Emirates Mars Mission MOI burn observed in Bochum

A few days ago, Emirates Mars Mission (Hope), and Tianwen-1 performed their Mars orbit injection burn (MOI). AMSAT-DL made a livestream for each of the two events, showing the X-band signals of the spacecraft as received with the 20m antenna at Bochum.

In the case of Tianwen-1 the signal was pretty strong even while the spacecraft was on the low gain antenna, and we could clearly see the change in Doppler rate as the thrusters fired up. However, in the case of Emirates Mars Mission the signal disappeared as soon as the spacecraft switched to the low gain antenna. In fact DSN Now reported a received power of -155 dBm with the 34m DSS55. That was a large drop from the -118 dBm that it was reporting with the high gain antenna. Therefore, nothing could be seen in the livestream waterfall until the spacecraft returned to the high gain antenna, well after the manoeuvre was finished.

Nevertheless, a weak trace of the carrier was still present in the livestream audio, and it could be seen by appropriate FFT processing, for example with inspectrum. I put up a couple of tweets showing this, but at the moment I wasn’t completely sure if what I was seeing was the spacecraft’s signal or some interference. After the livestream ended, I’ve been able to analyse the audio more carefully and realize that not only this weak signal was in fact the Hope probe, but that the start of the burn was recorded in perfect conditions.

In this post I’ll show how to process the livestream audio to clearly show the change in drift rate at the start of the burn and measure the acceleration of the spacecraft.

BPSK radar received through Meridian 8

Ever since SETI Insitute published the news of a possible signal received from Proxima Centauri in some of the Parkes telescope recordings at 982 MHz, Scott Tilley VE7TIL has taken up the interest to search and catalogue the satellites that transmit on this band (specially old, forgotten and zombie satellites). His idea is to try to see if this candidate signal can be explained as interference from some satellite.

This has led him to discover some signals coming from satellites on a Molniya orbit. After examination with the Allen Telescope Array of these signals, we confirmed that they came from wideband transponders (centre frequency around 995 MHz, 13 MHz width) on some of the Meridian Russian communications satellites (in particular Meridian 4 and 8, but also others).

These transponders show all sorts of terrestrial signals that are relayed as unintended traffic through the transponder. By measuring Doppler we know that the uplink is somewhere around 700 or 800 MHz. We have found some OFDM-like signals that seem to be NB-IoT. Unfortunately we haven’t been able to do anything useful with them, maybe because there are several signals overlapping on the same frequency. We also found a wideband FM signal containing music and announcements in Turkmen, which later turned out to be the audio subcarrier of a SECAM analogue TV channel from Turkmenistan.

A few days ago, Scott detected a pulsed strong signal through the transponder of the Meridians at a downlink frequency of 994.2 MHz. He did an IQ recording of this signal on the downlink of Meridian 8. It turns out that this signal is a BPSK pulse radar. In this post I do a detailed analysis of the radar waveform using this recording.

ATA polarimetry test with GNSS satellites

This post belongs to a series about the activities of the GNU Radio community at Allen Telescope Array. For more information about these activities, see my first post.

The feeds in the ATA dishes are dual polarization linear feeds, giving two orthogonal linear polarizations that are called X and Y and (corresponding to the horizontal and vertical polarizations). In the setup we currently have, the two RF signals from a single dish are downconverted to an IF around 512 MHz using common LOs and then sampled by the two channels of a USRP N32x. Since we have two USRPs, we are able to receive dual polarization signals from two dishes simultaneously.

The two USRPs are synchronized with the 10MHz and PPS signals from the observatory, but even in these conditions there will be random phase offsets between the different channels. These offsets are caused by fractional-N PLL states and other factors, and change with every device reset. To solve this problem, it is possible to distribute the LO from the first channel of a USRP N321 into its second channel and both channels of a second USRP N320. In fact, it is possible to daisy chain several USRPs to achieve a massive MIMO configuration. By sharing the LO between all the channels, we achieve repeatable phase offsets in every run.

During the first weekends of experiments at ATA we didn’t use LO sharing, and we finally set it up and tested it last weekend. After verifying that phase offsets were in fact repeatable between all the channels, I did some polarimetric observations of GNSS satellites to calibrate the phase offsets. The results are summarised in this post. The data has been published in Zenodo as “Allen Telescope Array polarimetric observation of GNSS satellites.

GNSS interferometry at Allen Telescope Array

Since the beginning of October, together with a group of people from the GNU Radio community, we are doing some experiments and tests remotely at Allen Telescope Array (ATA). This amazing opportunity forms part of the recent collaboration agreement between SETI Institute and GNU Radio. We are taking advantage of the fact that the ATA hardware is relatively unused on weekends, and putting it to good use for our experiments. One of the goal of these activities is to put in contact GNU Radio people and radio astronomy people, to learn from each other and discover what features of GNU Radio could benefit radio astronomy and SETI, particularly at the ATA.

I’m very grateful to Wael Farah, Alex Pollak, Steve Croft and Ellie White from ATA and SETI Institute for their support of this project and the very interesting conversations we’ve had, to Derek Kozel, who is Principal Investigator for GNU Radio at SETI, for organizing and supporting all this, and to the rest of my GNU Radio teammates for what’s being an excellent collaboration of ideas and sharing of resources.

From the work I’ve been doing at ATA, I already have several recordings and data, and also some studies and material that I’ll be publishing in the near future. Hopefully this post will be the first in a series of many.

Here I will speak about one of the first experiments I did at ATA, which is a recording of one Galileo GNSS satellite using two of the dishes from the array. This kind of recording can be used to perform interferometry. GNSS satellites are good test targets because they have strong wideband signals and their location is known precisely. The IQ recording described in this post is published as the dataset “Allen Telescope Array Galileo E31 RF recording with 2 antennas and 2 polarizations” in Zenodo.

Coherence and QO-100

My tweet about the AMSAT-BR QO-100 FT8 QRPp experiment has spawned a very interesting discussion with Phil Karn KA9Q, Marcus Müller and others about weak signal modes specifically designed for the QO-100 communications channel, which is AWGN albeit with some frequency drift (mainly due to the imperfect reference clocks used in the typical groundstations).

Roughly speaking, the conversation shifted from noting that FT8 is not so efficient in terms of EbN0 to the idea of using something like coherent BPSK with \(r=1/6\) CCSDS Turbo code, then to observing that maybe there was not enough SNR for a Costas loop to work, so a residual carrier should be used, and eventually to asking whether a residual carrier would work at all.

There are several different problems that can be framed in this context. For me, the most interesting and difficult one is how to transmit some data with the least CN0 possible. In an ideal world, you can always manage to transmit a weaker signal just by transmitting slower (thus maintaining the Eb/N0 constant). In the real world, however, there are some time-varying physical parameters of the signal that the receiver needs to track (be it phase, frequency, clock synchronization, etc.). In order to detect and track these parameters, some minimum signal power is needed at the receiver.

This means that, in practice, depending on the physical channel in question, there is a lower CN0 limit at which communication on that channel can be achieved. In many situations, designing a system that tries to approach to that limit is a hard and interesting question.

Another problem that can be posed is how to transmit some data with the least Eb/N0 possible, thus approaching the Shannon capacity of the channel. However, the people doing DVB-S2 over the wideband transponder are not doing it so bad at all in this respect. Indeed, by transmitting faster (and increasing power, to keep the Eb/N0 reasonable), the frequency drift problems become completely manageable.

In any case, if we’re going to discuss about these questions, it is important to characterize the typical frequency drift of signals through the QO-100 transponder. This post contains some brief experiments about this.

Simulating the TED gain for a polyphase matched filter

Trying to improve the performance of the demodulators in gr-satellites, I am switching to the Symbol Sync GNU Radio block, which was introduced by Andy Walls in GRCon17. This block covers the functionality of all the other clock synchronization blocks, such as Polyphase Clock Sync and Clock Recovery MM, while fixing many bugs.

One of the new features of the Symbol Sync block is the ability to specify the gain of the timing error detector (TED) used in the clock recovery feedback loop. All the other blocks assumed unity gain, which simply causes the loop filter taps to be wrong. However, the TED gain needs to be calculated beforehand either by analysis or simulation, as it depends on the choice of TED, samples per symbol, pulse shaping, SNR and other.

While Andy shows how to use the Symbol Sync block as a direct replacement for the Polyphase Clock Sync block in his slides, he leaves the TED gain as one, since that is what the Polyphase Clock Sync block uses. In replacing the Polyphase Clock Sync block by Symbol Sync in gr-satellites, I wanted to use the correct TED gain, but I didn’t found anyone having computed it before. This post shows my approach at simulating the TED gain for polyphase matched filter with maximum likelyhood detector.