![]() |
||
---|---|---|
SP5WWP | ||
.gitignore | ||
LICENSE | ||
README.md |
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 atstdin
, 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: