Name: horusbinary
Owner: Project Horus
Description: Project Horus's Binary Telemetry Utilities
Created: 2018-04-07 10:33:16.0
Updated: 2018-04-25 11:21:44.0
Pushed: 2018-04-21 12:46:35.0
Homepage: null
Size: 280
Language: Python
GitHub Committers
User | Most Recent Commit | # Commits |
---|
Other Committers
User | Most Recent Commit | # Commits |
---|
This repository contains documentation and scripts to work with the new horus_demod
MFSK/RTTY demodulator, developed by David Rowe. Currently this demodulator provides ~2.5dB better RTTY decode performance than dl-fldigi 3.21.50, and ~0.5dB better performance than fldigi 4.0.1.
It also adds support for a binary-packet 4FSK mode, designed specifically for high-altitude balloon telemetry, and which is intended to supercede RTTY for all Project Horus launches. Preliminary testing shows it has ~6dB improved demodulation performance over RTTY at the same baud rate.
Currently we are developing the modem under Linux & OSX, with the eventual aim to produce a cross-platform GUI. For now, the demodulator is available as a command-line utility, with additional binary packet processing and uploading of data to Habitat performed by the horusbinary.py
python script.
The horus_demod
modem (located within the codec2-dev repo) is in very early development, and currently only supports:
UKHAS-standard telemetry sentences, sent via RTTY can be decoded. These take the general form:
$CALLSIGN,other,fields,here*CRC16\n
Note the use of five (5) '$' symbols at the start of the sentence. This is used as a 'unique word' for packet dection, and must be present. Other quantities of '$'s will not be detected.
Only RTTY telemetry with the following parameters are supported:
Horus Binary packets take the form:
amble><unique word><payload>
e
amble> = 0x1B1B1B1B
que word> = 0x2424
The payload consists of a 22-byte long binary packet, encoded with a Golay (23,12) code, and then interleaved and scrambled, for a total encoded length of 43 bytes. The binary packet format is available here, and the golay-encoding/interleaving/scrambling is performed by horus_l2_encode_packet.
These packets are then transmitted using 4FSK modulation, at 100 baud.
A worked example for generating encoding these packets is available in the RS41HUP repository.
We require a few dependencies to be able to use the new modem. Some can be obtained via the system package manager, others can be installed via the python package manager.
Under Ubuntu/Debian, you can install the required packages using:
do apt-get install git subversion cmake build-essential python-numpy python-pyqtgraph python-crcmod python-requests python-pip libfftw3-dev libspeexdsp-dev libsamplerate0-dev libusb-1.0-0-dev
If the python-pyqtgraph, python-crcmod and python-requests packages are not available via your package manager, you can try installing them via pip using sudo pip install pyqtgraph crcmod requests
.
We need to compile the horus_demod binary from within the codec2-dev repository. This can be accomplished by performing (within this directory):
n checkout https://svn.code.sf.net/p/freetel/code/codec2-dev
codec2-dev
dir build
build
ake ..
src
ke horus_demod
horus_demod ../../../
../../../
Note that we do not build all the binaries within codec2-dev, just the one we need!
TODO: Bring the necessary source code into this repository, to avoid needing to checkout all of codec2-dev.
The horus_demod
binary accepts 48khz 16-bit signed-integer samples via stdin, and can decode either RTTY or the MFSK (binary) packets. Successfuly decoded packets are output via stdout, and debug information is provided via stderr.
Suitable audio inputs could be from a sound card input, or from a SDR receiver application such as GQRX.
The horusbinary.py
python script will accept decoded packets from horus_demod
, and upload them to the HabHub tracker, for display on a map. Uploading to Habitat can be inhibited using the --noupload
option.
We can string these applications together in the command shell using 'pipes', as follows:
-d -r 48k -c 1 -t s16 - | ./horus_demod -m RTTY - - | python horusbinary.py --mycall YOURCALLSIGN
The above command records from the default sound device.
This assumes you have GQRX installed (sudo apt-get install gqrx
) and working, have set up a USB demodulator over the signal of interest, and have enabled the UDP output option by clicking the UDP button at the bottom-right of the GQRX window.
l -u localhost 7355 | ./horus_demod -m RTTY - - | python horusbinary.py --mycall YOURCALLSIGN
Replace RTTY
in the above command with binary
to demodulate 4FSK binary telemetry.