Haifuraiya Vocabulary and Links

Open Research Institute is working on implementations for a digital satellite (or terrestrial repeater) system using modern technology on microwave frequency bands to provide very high-quality voice capabilities alongside transparent text chat and medium-low speed data. This page attempts to gather all the special names we’ve given to components of these implementations and supporting tooling, and links to source code repositories for them all.

Opulent Voice and Haifuraiya

The key vocabulary word is Opulent Voice. The name was originally coined to point at the very high voice quality we achieve by using the Opus vocoder as the signature service provided in the voice-first digital amateur radio mode we were then just beginning to design. Since then, the term Opulent Voice has expanded to include everything pertaining to the protocol we developed, including such things as the modulation, the frame format, the randomization, the forward error correction, the interleaved, etc.

The name Haifuraiya was coined when we were exploring the possibility of starting a geostationary satellite project in cooperation with Japanese radio amateurs. The equivalent term in English is “High Flyer”, and they sort of sound alike, in their respective linguistic heritages. Either way, the term refers to the entire system architecture, not just the high-flying spacecraft part.

Ground Station Implementations

The three existing implementations are sometimes called Alpha. Bravo, and Charlie.

Alpha ground station

The Alpha ground station was originally intended for the ADALM Pluto platform, with the entire modem implemented in the FPGA fabric of the Zynq 7010 device. However, the modem outgrew the resources of the Zynq 7010, so Alpha now requires the Pluto clone commonly called LibreSDR, which is based on a Zynq 7020 and has some extra features, including a SD card slot and gigabit Ethernet. These devices have generally been available from AliExpress vendor OpenSourceSDRLab Store.

  • Interlocutor is a portable Python program that interacts with the user through screen, keyboard, and mouse as well as speaker and microphone for voice. It exchanges Opulent Voice frames over a network connection with any of several modem implementations. Interlocutor is also part of Bravo and Charlie, and can be used with debug versions of the satellite transponder that output encapsulated frames.
    Interlocutor is a real word meaning a participant in a conversation, especially one who is interposed between two others and intervenes or translates between the two. Notionally, we have a conversation between the user and the communications system, and Interlocutor sits between and translates.
  • Dialogus is a C program that runs under Linux on the embedded dual-core ARM Cortex-A9 processor within the Zynq 7020. It exchanges encapsulated Opulent Voice frames with an external computer running the user-interface program Interlocutor. Internally, it manages simultaneous transmit and receive timelines, passing frames received over the network to the transmit side of the FPGA-based modem, and frames received over the air from the modem to the network.
    Dialogus should probably be part of pluto_msk, and probably will be after the design settles down.
  • pluto_msk is the top layer of a complete full-duplex modem implementation written in HDL for the LibreSDR target. It is based on the PlutoSDR reference model from Analog Devices, which they call simply hdl as it supports a wide variety of Analog Devices targets. We have retained the IIO-compatible interfaces using both DMA and direct register access, and added a number of registers of our own. We’ve repurposed the DMA interfaces that are generally used for streaming I/Q samples, using them instead to stream frames of bits. It implements the modem functions using a number of submodules, including msk_modulator, msk_demodulator, nco, pi_controller, prbs, power_detector, and lowpass_ema.
    We have also called the modem part of this design “Locutus”, after Locutus of Borg, who was a draftee forced to serve as speaker for the Borg in Star Trek TNG. The name “Dialogus” was a riff on “Locutus”.

Bravo ground station

The Bravo ground station (which actually predates Alpha) targets the ADALM Pluto platform, using it with the unmodified PlutoSDR firmware supplied standard from Analog Devices.

  • opv-cxx-demod (so called for historical reasons, also called OPV Modem) is a C++ program that implements the entire Opulent Voice modem in software, using the Pluto as a source and sink of I/Q samples. It talks with the Pluto using IIO. It supports the same encapsulated frame interfaces (transmit and receive) as Alpha, so it is typically used with Interlocutor. This repository can also be built as a library or submodule for incorporation into other projects, or in conjunction with the channelizer in the Haifuraiya satellite payload. It is intended to be modifiable to support other protocols using MSK.

Charlie ground station

The Charlie ground station is a variant hosting of the ground station under OpenCPI, a framework for portably developing and running software components on heterogeneous embedded systems. See below in the section on OpenCPI-based Implementations by KI5BAB.

Satellite Transponder Implementations

There are two somewhat-independent implementations of the satellite transponder, one implemented under OpenCPI (see below in the section on OpenCPI-based Implementations by KI5BAB), and the other using PetaLinux/Yocto to build in a more traditional way.

Both implementations have converged, for now, on the Xilinx ZCU102 development board as the most suitable target for a 64-uplink-channel system. This is a rather expensive board based on a Zynq UltraScale+ MPSoC device, which includes a powerful quad-core ARM Cortex-A53 processor, plenty of memory, and a large FPGA fabric. It also has many fancy features and peripherals that are not used on this project, such as SFP+ and a GPU.

The ZCU102 in the ORI Remote Lab is equipped with a fancy ADRV9002 radio board. The ZCU102 used for OpenCPI development has a more modest AD9361 radio, like the radios in the ADALM Pluto and LibreSDR. These radios are not interchangeable, but they are pretty similar for our purposes, especially since we control them through the IIO library.

  • Mode-Dynamic-Transponder contains the polyphase channelizer in VHDL, and all the other stuff necessary to run it.
  • dogu (tools) is a collection of support code in Yocto recipes to run on the ARM processor, including ADRV9002 radio initialization, and takes on the same sort of role in the ZCU102 transponder as Dialogus does in the Alpha ground station.

See also the next section for

OpenCPI-based Implementations by KI5BAB

  • Opulent Voice – OpenCPI project containing opulent voice (Charlie) implementation as well as channelizer and demod and decoding workers
  • Haifuraiya – OpenCPI project containing DVB-S2 encoder and build for building satellite bitstream
  • opv-udp-bridge – Bridge between Interlocutor and OpenCPI MSK modulator. Handles transmission of encapsulated frames received from Interlocutor.
  • rx-dashboard – Dashboard that combines BATC minitiouner status + display RX from satellites perspective + channel selector to interface with Interlocutor.
  • opv-generator – Generate IQ files containing valid opv frames testing x64 channelizer

Utilities

See also the previous section.

  • opv-wireshark-plugin is a plug-in for the Wireshark packet analyzer that helps understand the contents of UDP-encapsulated Opulent Voice frames. At present, it only decodes the frame header (station id, authentication token, and reserved byes). Making it decode the payload portion of the frame will require integrating with Wireshark’s mechanism for encapsulated protocols, for which the documentation could be better.
  • Bouro (hiding in the Mode-Dynamic-Transponder repository with the other ORI Yocto layers) is a web-based dashboard displaying information published on MQTT. Access with http://<address of the ZCU102>:9001/bouro.html, e.g., http://10.73.1.16:9001/bouro.html

Miscellaneous Naming Conventions

We often need to name a series of things of the same sort, just to keep them separate. These might be separate directories in which small variations of the same repository are built and tested, and are specifically chosen to be distinct and yet recognizable as members of the same class, without implying anything about hierarchy or relative strength: {vanilla, chocolate, strawberry, …} or {blue, red, indigo, white, puce, …}. These sets are usually of transient use and don’t have any lasting meaning.

Leave a Reply

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