First tests of a narrowband data modem for QO-100

Since a while ago, I have had the idea to design a data modem for the NB transponder of QO-100 (Es’hail 2). The main design criteria of this modem is that it should fit in a bandwidth of 2.7kHz and be able to work at a signal power equal to that of the transponder BPSK beacon, since these are the bandwidth and power constraints when using the NB transponder.

Currently, the following modes are used for medium speed data (understood as a few kbps) on the NB transponder. First, there are the FreeDV modes, whose use has been covered in this Lime microsystems community post. Most of these modes use OFDM or multi-carrier modems and are designed having HF fading channels in mind. These don’t give good performance over the QO-100 transponder, since the frequency instabilities of the transmitters and receivers give problems with OFDM modems. A single carrier modem is much better. David Rowe VK5DGR has made some modifications to the FreeDV 2020 modem to improve performance over QO-100, and it certainly works quite well, but better results can be obtained with a single carrier modem.

There are some people using DRM for DSSTV. This is also an OFDM modem intended for HF, and the symbol time is quite long, so the frequency instabilities can give problems. Finally, there is KG-STV, which was relatively unpopular before QO-100 but it is seeing a lot of use due to its good performance. It uses a single carrier MSK modem. This is probably the most popular medium speed mode on the NB transponder, but it is only 1200bps.

One important characteristic of the NB transponder is that there is a lot of SNR available. The rule is that no signal should be stronger than the beacons, but the BPSK beacon has a CN0 of around 54dB as received in my station. It is also not difficult (in terms of uplink EIRP) to achieve the same power as the beacon. Therefore, it is a reasonable assumption that stations interested in using a medium speed data modem will adjust their uplink power to be as strong as the BPSK beacon. I already hinted at what is possible with such a strong signal in this post.

I have decided to do some preliminary tests to check the performance of a 2kbaud 8PSK signal over the NB transponder. This post summarizes my results. The material for the post can be found in the qo100-modem Github repository.

First I should explain why 2kbaud 8PSK seems the most natural choice of waveform for these experiments. Using a usual RRC filter with a roll-off of 0.35, a 2kbaud PSK signal gives a bandwidth of 2.7kHz, which is exactly the maximum bandwidth we are designing for. Since we are designing for a relatively high SNR, 8PSK is a good choice, as it will probably work well and it is easy to work with. It might be possible to push for a higher order modulation such as 16APSK, but this makes phase recovery more difficult. Also, 8PSK is a good choice because at 2kbaud it gives 6000bps, which is much more than the current medium speed modems in use, so it shows that there is a lot of room for improvement.

In order to cope with possible frequency instabilities that might cause slips in a Costas loop, I have decided to use differential 8PSK. However, the performance of the modem as a coherent non-differential 8PSK modem is also evaluated. Generating differential Gray-coded 8PSK modulation in GNU Radio is not so straightforward. It can be done as follows.

First, a Gray code table can be generated with digital.utils.gray_code.gray_code(8). This gives the value, from 0 to 7, of each Gray-coded 8PSK symbol, and is used when decoding. For encoding we need the inverse transform, which can be computed with the function digital.utils.mod_codes.invert_code().

The complete modulator can be seen in the figure below. The GLFSR Source is just used as a reproducible source of random bits for testing BER.

Differential Gray-coded 8PSK modulator

The demodulation is also tricky. After symbol clock recovery, the Differential Phasor multiplies each symbol by the complex conjugate of the previous symbol (see here), which performs differential decoding. The result of this are symbols centred on the points \(e^{\frac{2\pi i n}{8}}\), \(n = 0,\ldots,7\), but the constellation decoder expects symbols at \(e^{\frac{2\pi i (2n+1)}{16}}\), so a Multiply Const block is used to multiply by \(e^{\frac{2\pi i}{16}}\). Finally, the Map block decodes Gray coding.

Differential Gray-coded 8PSK demodulator

Besides comparing the received bits after differential and Gray decoding with the GLFSR output to compute the BER, the performance of the 8PSK modulation as a non-differential modem is evaluated. A Costas loop is used for carrier recovery (with an ambiguity which is an integer multiply of \(e^{\frac{2\pi i}{8}}\)), and the symbols at the output of the Costas loop are compared with the transmitted 8PSK symbols in order to detect any possible phase slips and to compute the BER.

An over the air test was done on 2019-12-16. The 8PSK signal generated by the GLFSR was transmitted and recorded on the downlink for approximately 3 minutes. The power of the transmitter was adjusted so that the downlink signal had the same power as the BPSK beacon. The ota.grc GNU Radio companion flowgraph together with the tools in the qo100-groundstation repository were used for performing the over the air test. The postprocessing of this recording is done with postprocessing.grc and this Jupyter notebook.

The spectrum of the recorded downlink signal can be seen in the figure below. The vertical gray lines mark 2.7kHz of bandwidth.

The suppressed carrier was recovered with a Costas loop without any phase slips. The constellation for the coherently demodulated 8PSK signal and for the differential 8PSK signal can be seen below.

As expected, the differential 8PSK constellation is more noisy. Indeed, the MER for 8PSK is 18.7dB, while for differential 8PSK is 16.6dB. The CN0 of the signal is 54dB, which gives an Es/N0 of 21dB. An ideal n-PSK signal at this Es/N0 would have a MER of 21dB, so it seems we have 2.3dB of implementation losses somewhere.

The BER for the coherent 8PSK signal is \(3.5\cdot 10^{-5}\), while the BER for the differential 8PSK signal is \(1.5\cdot 10^{-4}\). However note that the number of bits transmitted in this test is only around \(10^5\), so these BER measures are not very accurate. In any case, they show that the BER is really low, so it might make sense to try to go to 16APSK to push more data.

Regarding frequency stability, I should mention that this over the air test has been done using the Vectron MD-011 GPSDO that I described in this post. While this gives very good stability, the modem should work correctly for less stable stations. Therefore, I should perform an over the air test using my DF9NP TCXO-based GPSDO to see if there are any phase slips in the Costas loop. This will indicate if it is necessary to use differential decoding or not in practice.

Leave a Reply

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.