Skip to content


Repository files navigation

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.

For the latest information on how and why to use this library, please visit the wiki pages.

If you're looking for a way to decode telemetry from a Horus Binary (or even an old-school RTTY) High-Altitude Balloon payload, read the guides available here.


Written by:

HorusDemodLib C Library

This contains the demodulator portions of horuslib, which are written in C.


The library can be built and installed using:

$ git clone
$ cd horusdemodlib && mkdir build && cd build
$ cmake ..
$ make
$ sudo make install

Refer to the install guide for a more complete guide, including what dependencies are required.


Unit tests for the various demodulators can be run using:

$ cd build
$ ctest


In most cases, you can update this library by running:

$ git pull

and then following the build steps above from the cd horusdemodlib line.

API Reference

The main demodulator API is horus_api.h. An example of it in use in a C program is available in horus_demod.c

A Python wrapper is also available (via the horusdemodlib Python library which is also part of this repository). An example of its use is available here.

HorusDemodLib Python Library

The horusdemodlib Python library contains decoders for the different Project Horus telemetry formats, including:

  • Horus Binary v1 (Legacy 22-byte Golay-encoded format)
  • Horus Binary v2 (Golay-encoded 32-byte format)

It also contains a wrapper around the C library (mentioned above), which contains the Horus modem demodulators.

The easiest way to install horusdemodlib is via pypi:

$ pip install horusdemodlib

If you want to install directly from this repository, you can run:

$ pip install -r requirements.txt
$ pip install -e .

(Note - this has some issues relating to setuptools currently... use pip)


If you have installed horusdemodlib via pypi, then you can run (from within your venv, if you are using one):

$ pip install -U horusdemodlib

This will also install any new dependencies.

If you have installed 'directly', then you will need to run:

$ git stash 
$ git pull
$ pip install -r requirements.txt
$ pip install -e .

(Note - this has some issues relating to setuptools currently... use pip)

Further Reading

Here are some links to projects and blog posts that use this code:

  1. Horus-GUI - A cross-platform high-altitude balloon telemetry decoder.
  2. Testing HAB Telemetry, Horus binary waveform
  3. Wenet - high speed SSTV images from balloons at the edge of space.
  4. Wenet High speed SSTV images