FT8 (and now FT4) library
 
 
 
 
Go to file
Karlis Goba b9c40886ca Minor changes; more comments 2018-11-02 09:55:54 +02:00
utils More of 77 bit protocol 2018-10-26 11:43:16 +03:00
.gitignore Separated text processing functions 2018-10-24 10:35:06 +03:00
LICENSE Initial commit 2018-10-18 10:35:39 +03:00
Makefile Working towards a test tool 2018-11-01 16:21:40 +02:00
README.md Updated README with v2 info 2018-10-29 16:31:45 +02:00
debug.h Minor changes; more comments 2018-11-02 09:55:54 +02:00
encode.cpp Fixed FT8 v2.0 encoding 2018-10-29 15:28:46 +02:00
encode.h Added namespace to FT8 v2 2018-10-29 10:17:36 +02:00
encode_91.cpp Simplified encode174() routine 2018-10-29 17:58:11 +02:00
encode_91.h Added namespace to FT8 v2 2018-10-29 10:17:36 +02:00
gen_ft8.cpp Minor changes; more comments 2018-11-02 09:55:54 +02:00
pack.cpp Moved integer conversion routines 2018-10-28 10:39:39 +02:00
pack.h First draft 2018-10-18 10:42:43 +03:00
pack_77.cpp Fixed FT8 v2.0 encoding 2018-10-29 15:28:46 +02:00
pack_77.h Fixed FT8 v2.0 encoding 2018-10-29 15:28:46 +02:00
test.cpp Minor changes; more comments 2018-11-02 09:55:54 +02:00
text.cpp Moved integer conversion routines 2018-10-28 10:39:39 +02:00
text.h Moved integer conversion routines 2018-10-28 10:39:39 +02:00
unpack.cpp Minor changes; more comments 2018-11-02 09:55:54 +02:00
unpack.h Added draft versions of unpack routines 2018-10-26 15:48:27 +03:00

README.md

FT8 library

A C++ implementation of FT8 protocol, mostly intended for experimental use on microcontrollers. At the moment only encoding is implemented.

The encoding process is relatively light on resources, and an Arduino should be perfectly capable of running this code.

The intent of this library is to foster experimentation with e.g. automated beacons. FT8 already supports free-text messages and the upcoming new version will support raw telemetry data (71 bits).

Work is in progress (possibly taking forever) to explore decoding options. On a fast 32-bit microcontroller decoding might be possible, perhaps with some tradeoffs.

What works

So far only encoding is implemented. It should support the basic set of FT8 version 1 (75-bit) messages:

  • CQ {call} {grid}, e.g. CQ CA0LL GG77
  • CQ {xy} {call} {grid}, e.g. CQ JA CA0LL GG77
  • {call} {call} {report}, e.g. CA0LL OT7ER R-07
  • {call} {call} 73/RRR/RR73, e.g. OT7ER CA0LL 73
  • Free-text messages (up to 13 characters from a limited alphabet)

I am working on the revised FT8 protocol with 77-bit payload (introduced since WSJT-X version 2.0), and currently the library supports the basic message set:

  • CQ {call} {grid}, e.g. CQ CA0LL GG77
  • CQ {xy} {call} {grid}, e.g. CQ JA CA0LL GG77
  • {call} {call} {report}, e.g. CA0LL OT7ER R-07
  • {call} {call} 73/RRR/RR73, e.g. OT7ER CA0LL 73

What doesn't

  • Encoding contest mode message
  • Encoding extended range signal reports (<-30dB or >=0dB S/N)
  • Encoding compound callsigns with country prefixes and mode suffixes
  • Decoding

What to do with it

You can generate 15-second WAV files with your own messages as a proof of concept or for testing purposes. They can either be played back or opened directly from WSJT-X. To do that, run make and build gen_ft8. Then run it. Currently messages are modulated at 1000-1050 Hz.

References and credits

Thanks to Robert Morris, AB1HL, whose Python code (https://github.com/rtmrtmrtmrtm/weakmon) inspired this and helped to test various parts of the code.

This would not of course be possible without the original WSJT-X code, which is mostly written in Fortran (http://physics.princeton.edu/pulsar/K1JT/wsjtx.html). I believe that is the only 'documentation' of the FT8 protocol available, and the source code was used as such in this project.

Karlis Goba, YL3JG