M17 Various implementations
 
 
 
Go to file
Wojciech Kaczmarski 3d165dff89
printf format fix
2023-09-10 19:10:25 +02:00
SP5WWP printf format fix 2023-09-10 19:10:25 +02:00
.gitignore Ignore generated files 2023-01-13 18:53:55 -05:00
LICENSE Initial commit 2021-08-21 19:51:22 +02:00
README.md Update README.md 2023-09-08 19:17:09 +02:00

README.md

M17_Implementations

Various implementations

Woj's implementation (/SP5WWP)

Overview

Written in C, it has all the components described by the protocol's specification of the stream mode:

  • convolutional encoder with soft Viterbi decoder (utilizing fixed point arithmetic),
  • Golay encoder with soft decoder (fixed point),
  • bit interleaver and randomizer,
  • cyclic redundancy check (CRC) validation,
  • callsign decoder

It also supports packet mode (TX only for now).

There's no support for any encryption yet.

Building

Simply cd to the directory of interest and make

Capabilities

Two executables are available:

  • m17-coder-sym is used to convert a raw binary data bitstream to symbols. Symbol stream has to be filtered with an appropriate filter before transmission, see the specification document for details.
  • m17-decoder-sym decodes a stream of floats at stdin, one sample per symbol. After a valid syncword is detected, decoding process starts. The program expects a stream of synchronized symbols at the input. See the /grc/symbol_recovery.grc file for details.
  • m17-packet-encode is a handy tool for generating baseband (or a symbol stream, if needed) for M17 packets. The program expects a limited stream of raw data at the stdin. The number of bytes is set with the -n parameter, range 1 to 798.

Testing

Both the encoder and the decoder can be tested simultaneously. The test setup should look as follows:
GRC flowgraph -> fifo1 -> m17-coder-sym -> fifo2 -> m17-decoder-sym -> stdout
To perform a simple test, GNURadio 3.10 is required.

Run the following commands:

mkfifo fifo1
mkfifo fifo2

This should create 2 named pipes: fifo1 and fifo2. The first one is used for the "transmitted" raw bitstream from GNURadio. The other one is used for the "receiver" part - the symbol stream.

Start gnuradio-companion, open the .grc file included in this repo (/grc/m17_streamer.grc) and change the name of the named pipe to fifo1 (at the File Sink block - the rightmost one). Change the location of it if needed.

Open up 2 consoles and run:
Console 1:

cat fifo1 | ./m17-coder-sym > fifo2

Console 2:

cat fifo2 | ./m17-decoder-sym

Hit the Execte the flow graph button in GNURadio and watch it roll.

Console 2 should show similar results, with the Frame Number advancing each frame: image