Skip to content

michalfratczak/habdec

Repository files navigation

HABDEC - RTTY decoder for High Altitude Balloons

alt text

Habdec is a C++17 software to decode RTTY telemetry from High Altitude Balloons and upload it to UKHAS Habitat sondehub.org

Some facts:

  • builds and runs on Windows/Linux and x64/RaspberryPI/OdroixXU4 platforms
  • Uses SoapySDR to consume IQ stream from your SDR
  • runs in command line (headless)
  • provides websocket server so can be controlled from any web browser even on your phone
  • can be easily integrated into your own code
  • has example python client
  • decodes SSDV images

Original motivation for habdec was to have a portable tracking device you could take to a chasecar or into a field. Fatty laptop with dl-fldigi, full-fledged SDR app and required internet connection is not too comfortable.

Ultimatelly habdec is intended for integration into bigger app, based on OpenStreetmap and running on portable RaspberryPI or OdroidXU4 - see here, here or here

It was successfully used to track and recover several HAB payloads. Below is an altitude graph from ARY5 flight - you can see amount of valid telemetry sentences received. One receiver was a stationary antenna, the other is car roof magmount.

alt text alt text

Getting habdec

To get habdec you can download precompiled exec or build it from source.

Getting Binary:

  • Install SoapySDR binaries from here
  • Download habdec executable for your platform from here

There's also raspberryPi 3 image with ready to use binary and build env. Go to Wiki

Building from source:

To build habdec you need a C++17 compiler and CMake version 3.8.2 You also need to build or install some dependencies:

Instructions how to build habdec and it's dependencies are described in BuildInstructions.md

Usage

habdecWebsocketServer.exe --help

Command Line Interface options:
  --config arg              Last run config file. Autosaved on every
                            successful decode.

CLI opts:
  --help                    Display help message
  --device arg              SDR Device Number. -1 to list
  --sampling_rate arg (=0)  Sampling Rate, as supported by device
  --no_exit arg             Constantly retry on missing device instead of exit.
  --port arg                Command Port, example: --port 127.0.0.1:5555
  --station arg             HABHUB station callsign. Omitting this flag disables HABHUB upload.
  --latlon arg              station GPS location (decimal)
  --alt arg                 station altitude in meters
  --freq arg                frequency in MHz
  --ppm arg                 frequency correction in PPM
  --gain arg                gain
  --print arg               live print received chars, values: 0, 1
  --rtty arg                rtty: baud bits stops, example: --rtty 300 8 2
  --biast arg               biasT, values: 0, 1
  --bias_t arg              biasT, values: 0, 1
  --afc arg                 Auto Frequency Correction, values: 0, 1
  --usb_pack arg            AirSpy USB bit packing
  --dc_remove arg           DC remove
  --dec arg                 decimation: 2^dec, range: 0-8
  --lowpass arg             lowpass bandwidth in Hertz
  --lp_trans arg            lowpass transition width. (0-1)
  --sentence_cmd arg        Call external command with sentence as parameter
  --sondehub arg            (=https://api.v2.sondehub.org) sondehub API url

Examples:

Print available devices

habdecWebsocketServer.exe --device -1


Reading config from file ./habdecWebsocketServer.opts
Current options:
        device: -1
        sampling_rate: 2.048e+06
        command_host: 0.0.0.0
        command_port: 5,555
        station: habdec
        freq: 4.3435e+08
        gain: 15
        live_print: 1
        baud: 300
        rtty_ascii_bits: 8
        rtty_ascii_stops: 2
        biast: 0
Found Rafael Micro R820T tuner
[INFO] [UHD] Win32; Microsoft Visual C++ version 14.0; Boost_106700; UHD_3.13.0.2-1-g78745bda

Available devices:
0:
        device_id 0
        driver airspy
        label AIRSPY [440464c8:39627b4f]
        serial 440464c8:39627b4f
        Sampling Rates:
                2.5e+06
                1e+07

1:
        available Yes
        driver rtlsdr
        label Generic RTL2832U OEM :: 00000001
        manufacturer Realtek
        product RTL2838UHIDIR
        rtl 0
        serial 00000001
        tuner Rafael Micro R820T
Found Rafael Micro R820T tuner
        Sampling Rates:
                250,000
                1.024e+06
                1.536e+06
                1.792e+06
                1.92e+06
                2.048e+06
                2.16e+06
                2.56e+06
                2.88e+06
                3.2e+06


No SDR device specified. Select one by specifying it's NUMBER
Failed Device Setup. EXIT.

Run with AirSpy

habdecWebsocketServer.exe --device 0 --sampling_rate 2.5e6

Specify websocket address and port

habdecWebsocketServer.exe --device 0 --sampling_rate 2.5e6 -port 12.13.14.15:5555

Some more options

habdecWebsocketServer.exe   --device 0 --sampling_rate 2.5e6
                            --port 12.13.14.15:5555 --station Fred
                            --rtty 300 8 2
                            --print 1
                            --freq 434.5 --gain 20 --biast 1 --afc 1

Web Client

To control habdec parameters from your browser:

  • start browser
  • open habdec/code/webClient/index.html file from disk
  • set server field ip:port and Connect

Do not try connecting directly to http://ip:port - habdec is not an HTTP server and you will see this error:

The WebSocket handshake Connection field is missing the upgrade token

Known Limitations

  • RTTY Modes NOT supported: 5bit baudot, 1.5 bit stop
  • SSDV images are not uploaded to http://ssdv.habhub.org
  • Automatic Frequency Correction needs more work. Use consciously. dc_remove=on can help if AFC is confused by center spike.
  • Connecting from browser is not very reliable yet, sometimes you need to refresh and wait.

Reporting Problems

Use bugtracker.

Authors

  • Michał Frątczak - parts of code from - GQRX

License

This project is licensed under the GNU General Public License