/amaranth_twstft

Software Defined Radio implementation of a Two Way Satellite Time and Frequency Transfer signal

Primary LanguageMATLABGNU General Public License v3.0GPL-3.0

Using Amaranth to implement TWSTFT Signal generation

Two Way Satellite Time and Frequency Transfer (TWSTFT) is a procedure that uses satellite communication to share a time and a frequency information in the form of a microwave phase-modulated carrier. As described in this seminar, spectrum spreading using a pseudo random sequence phase-modulating the carrier is used for spreading the spectrum and allows for recovering both time (and possibly frequency) on the receiver side. The input reference signals are assumed to be 10MHz and the rising edge of a 1-Pulse Per Second (1-PPS), the chip rate to be 2.5Mb/s and the output intermediate frequency 70 MHz.

The goal here is to implement the whole radiofrequency synthesis chain on an FPGA board.

To implement such communication, we will here make use a Python library Amaranth. This python package allows to describe an FPGA architecture with python idioms that make the task much easier than with other languages like Verilog or VHDL. This library gives us the possibility to manage signals and registers in a quite intuitive way. It also abstracts a lot of FPGA programming concepts that are not that interesting for us in the context of TWSTFT.

While the practical implementation focuses on the Zeboard fitted with a Zynq7020 System on Chip, using Amaranth should make the system portable and aims at avoiding proprietary synthesis tools (Vivado for the Xilinx parts).

You may find additonal tutorials about the use of Amaranth in this playlist and their associated slides here In this documentation, explanations behind the amaranth implementation of TWSTFT and the Amaranth source code associated are given :

  1. Installation guide for amaranth and cie: if you never programmed on FPGA boards before, this may be useful for becoming familiar with the opensource toolchain used in this project.

  2. Amaranth TWSTFT usage: How to synthese code for an FPGA with parameters configurations.

  3. PRN generation: Pseudo Random Noise (PRN) generation for spreading the spectrum as needed for accurate timing and differentiating the emitters (CDMA)

  4. Synchronizing PRN with a 1-PPS signal: making the noise repeat exactly every second to create our 1 Pulse Per Second (1-PPS) signal

  5. Carrier signal generation: creating the electromagnetic signal that will carry the information (intermediate frequency to be upconverted for a satellite link)

  6. Mixing Signals: mixing the carrier with our 1-PPS to share the frequency information. This is the point where an actual physical signal is generated: this documentation includes the pinout for connecting the input 20 MHz reference clock, input 1-PPS and getting the modulated output 70 MHz.

  7. Next level, QPSK modulation: stepping up the PSK modulation to transmit twice as much information

  8. Demodulating the N-PSK modulated signal using GNU Radio: steps needed to demodulate the phase-modulated signal using GNU Radio or GNU/Octave

  9. Merging the Amaranth generated Verilog code with the Ettus Research B210 software

  10. Merging the Amaranth generated Verilog code with the Ettus Research X310 software

  11. Acquistion and signal processing with GNUradio

  12. Quick description of the current version

A similar proprietary development unrelated to this work is under way as described at http://www.eltvor.cz/elttt21.html as part of the ESA contract https://navisp.esa.int/project/details/108/show