-
Notifications
You must be signed in to change notification settings - Fork 27
Home
Above: Spectrogram of the Horus Binary 4-FSK modem signal.
Written by:
- Python Library - Mark Jessop [email protected]
- FSK Modem - David Rowe
- FSK Modem Python Wrapper - XSSFox
- LDPC Codes - Bill Cowley
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.
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.
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.
It's easiest to demodulate telemetry using Horus-GUI. Use this setup guide.
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.
There is also some general information about running the modem from the command-line available here.
A worked example of generating and transmitting Horus Binary telemetry on Arduino, using the RadioLib library, is available here: https://github.com/projecthorus/horusbinary_radiolib
Currently the most common 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.