Skip to content
Mark Jessop edited this page Jul 18, 2020 · 15 revisions

Project Horus's Telemetry Demodulator Library

Horus Binary Modem FFT Above: Spectrogram of the Horus Binary 4-FSK modem signal.

What is it?

This repository contains:

  • libhorus - A C library containing a high performance 2/4-FSK-demodulator (originally developed as part of the Codec2 project by David Rowe), along with Golay and LDPC forward-error correction algorithms.
  • horus_demod - A command-line version of the FSK demodulator.
  • horusdemodlib - A Python library which wraps libhorus, and provides additional functions to decode telemetry into formats suitable for uploading to the Habhub tracker and other services.

In particular, this library provides a decoder for the 'Horus Binary' telemetry system, which is the primary tracking system used in Project Horus's High-Altitude Balloon launches.

The modem in this library can also decode the standard UKHAS RTTY telemetry used on many other high-altitude balloon flights.

Why use it?

A HAB telemetry payload transmitting Horus Binary format telemetry can provide position updates approximately every 3 seconds. Using just 10mW transmit power on the 434 MHz ISM/LIPD/70cm band, this modem can offer ~7dB improved demodulation performance compared to RTTY running at the same baud rate. There is some further information on the modem performance available here.

This means potentially longer decoding range, both in the air, and on the ground. The modem uses rate Golay(23,12) forward-error correction, so you'll have far less issues with failed packet decodes.

The ye-olde RTTY transmitters used by many high-altitude balloon flights encode telemetry as ASCII text. This is very wasteful compared to just sending data as raw binary types. RTTY also uses RS232 framing, which means even more overhead. Horus Binary uses a binary packet format, which gets the basic tracking data across in just 22 bytes. Information on the packet and framing format is available here.

The current Horus Binary modem uses ~1kHz of bandwidth, so can be received using conventional single-sideband receivers, just like you would do with a RTTY payload. Software-Defined Radio receivers can also be used.

How do I receive it?

So, you want to receive telemetry from someone's high-altitude balloon flight, or set up to receive telemetry from your own payload?

First up, you will need some kind of receiver for whatever frequency the telemetry is being transmitted on. Usually this is within the 434 MHz ISM/LIPD/70cm band, but could be different. You need a receiver capable of receiving Single-Sideband, in particular the 'upper' sideband ('USB' - no, not that USB). This could be a conventional amateur radio transceiver (think IC-7000, IC-706, FT-817, the list goes on and on...), or a scanner (Icom IC-R10, Yupiteru MVT-7100, etc...).

You can also use software-defined radio receivers, such as the ubiquitous RTL-SDR (amongst others), along with software such as SDR-Console, SDR#, or GQRX.

Windows / Linux / OSX

It's easiest to demodulate telemetry using Horus-GUI. Use this setup guide.

Raspberry Pi 'Headless' Setup

It's also possible to make a 'headless' (no screen) receiver using a RTL-SDR and a Raspberry Pi (or some other small Linux machine). Follow this guide.

General Info

There is also some general information about running the modem from the command-line available here.

How do I transmit it?

Currently the 'reference platform' for Horus Binary telemetry transmission is the Vaisala RS41 radiosonde. Using radiosonde_auto_rx we track and recover these radiosonde and reprogram them with our own open source firmware, which generates the Horus Binary modulation. These radiosondes are launched in many places around the world, so go hunting and get your own free balloon tracker!

If you are going to fly your own payload using Horus Binary, you must get a payload ID allocated for your use. This can be done by submitting an issue or a pull request to this repository, or e-mailing me at vk5qi (at) rfhead.net

You will also need to set up a Habitat Payload Document, so that the payload telemetry appears on the tracker.

There is also some older code targeting an ATMega328 + Radiometrix MTX2 available here, however this code has not been used in a long time.

I intend to produce implementations for other common transmitters, such as the RFM98W, which should also be capable of much higher order MFSK modulations, improving performance even more!

Contacts