habdec/README.md

191 wiersze
7.0 KiB
Markdown

# HABDEC - RTTY decoder for High Altitude Balloons
![alt text](./webClientScreenshot.png)
Habdec is a C++17 software to decode RTTY telemetry from High Altitude Balloons and upload it to ~~UKHAS Habitat~~ [sondehub.org](https://amateur.sondehub.org)
Some facts:
- builds and runs on Windows/Linux and x64/RaspberryPI/OdroixXU4 platforms
- Uses [SoapySDR](https://github.com/pothosware/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](https://www.youtube.com/watch?v=dli8FEFy5tM)
- can be easily integrated into your own code
- has example python client
- decodes [SSDV](https://ukhas.org.uk/doku.php?id=guides: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](https://www.youtube.com/watch?v=ZuoNf171e_A), [here](https://twitter.com/froszu/status/1274308780923269120) or [here](https://twitter.com/froszu/status/1271166163993661440)
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](./chart_alt_mobile.svg)
![alt text](./chart_alt_stationary.svg)
## Getting habdec
To get habdec you can download precompiled exec or build it from source.
#### Getting Binary:
- Install SoapySDR binaries from [here](https://github.com/pothosware/SoapySDR/wiki#installation)
- Download habdec executable for your platform from [here](https://github.com/ogre/habdec/wiki)
There's also raspberryPi 3 image with ready to use binary and build env. Go to [Wiki](https://github.com/ogre/habdec/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:
- basic decoder: [FFTW](http://www.fftw.org/)
- websocket server: [SoapySDR](https://github.com/pothosware/SoapySDR), [boost 1.68](https://www.boost.org/) (any version with boost-beast)
Instructions how to build habdec and it's dependencies are described in [BuildInstructions.md](./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](https://github.com/csete/gqrx)
## License
This project is licensed under the GNU General Public License