gr-m17/examples
Wojciech Kaczmarski 1bb1770acc example readme update 2026-10-03 21:48:29 +03:00
..
2024-06-07-132848_2704x1050_scrot.png hardware demonstration 2024-06-07 13:36:30 +02:00
README.md example readme update 2026-10-03 21:48:29 +03:00
audiocoder.grc update build steps and usage notes 2026-10-03 18:22:52 +03:00
m17_loopback.grc updated flowgraphs 2026-10-03 21:46:19 +03:00
m17_loopback.png update build steps and usage notes 2026-10-03 18:22:52 +03:00
m17_loopback_noisy.grc update build steps and usage notes 2026-10-03 18:22:52 +03:00
m17_loopback_noisy.png update build steps and usage notes 2026-10-03 18:22:52 +03:00
m17_loopback_noisychannel.grc updated flowgraphs 2026-10-03 21:46:19 +03:00
m17_loopback_noisychannel.png update build steps and usage notes 2026-10-03 18:22:52 +03:00
m17_rx.grc update build steps and usage notes 2026-10-03 18:22:52 +03:00
m17_rx.png update build steps and usage notes 2026-10-03 18:22:52 +03:00
m17_tx.grc update build steps and usage notes 2026-10-03 18:22:52 +03:00
m17_tx.png update build steps and usage notes 2026-10-03 18:22:52 +03:00
receiverRTLSDR.grc update examples to match latest M17 block options including EndOfTransmission input 2025-12-24 09:00:04 +01:00
receiverRTLSDR.png update build steps and usage notes 2026-10-03 18:22:52 +03:00
transmitterPLUTOSDR.grc updated flowgraphs 2026-10-03 21:46:19 +03:00
transmitterPLUTOSDR.png update build steps and usage notes 2026-10-03 18:22:52 +03:00

README.md

gr-m17 examples

For a first test, jump to m17_loopback.grc which does not use external tools but is GNU Radio only. The two m17_rx.grc and m17_tx.grc are for debugging and validation purposes of the conversion from libm17 to GNU Radio block.

m17_rx.grc

This receiver testing example relies on ../M17_Implementations/SP5WWP/m17-coder/m17-coder-sym to broadcast a signal. Following this unit testing example, run this flowchart along with

mkfifo /tmp/fifo0
mkfifo /tmp/fifo2
python3 ../M17_Implementations/SP5WWP/grc/m17_streamer.py
../M17_Implementations/SP5WWP/m17-coder/m17-coder-sym < /tmp/fifo0 > /tmp/fifo2 &

where m17_streamer.py is generated from m17_streamer.grc (set its File Source to a local Codec2 file first). For a plain voice stream from N0CALL to @ALL, the output of python3 ./m17_rx.py should be similar to

15:12:08.338 [M17_DEC] Ready: syncword threshold 2.0, Viterbi threshold 30.0, no AES key, no scrambler seed, no public key, debug control on
15:12:08.338 [M17_DEC] RX start: N0CALL -> @ALL, TYPE 0005 (voice stream, no encryption, CAN 0), no META, e=0.0
15:12:08.355 [M17_DEC] LSF (LICH) unchanged
15:12:08.356 [M17_DEC] LSF (LICH) unchanged
...
15:12:08.356 [M17_DEC] RX end: 40 frames, max e=0.0

m17_tx.grc

This transmitter testing example relies on ../M17_Implementations/SP5WWP/m17-decoder/m17-decoder-sym to decode a signal. Following this unit testing example, run this flowchart along with

mkfifo /tmp/fifo2
../M17_Implementations/SP5WWP/m17-decoder/m17-decoder-sym -c -m -l -v < /tmp/fifo2

and with python3 ./m17_tx.py running and its Start of Transmission button pressed, the output of m17-decoder-sym should be

{LSF} DST: AB2CDE    SRC: AB1CDE    TYPE: 0005 (STREAM: VOICE, ENCR: PLAIN, CAN: 0) META: 1148656C6C6F2120202020202020 LSF_CRC_OK e=0.0
FN: 0000 PLD: 01020304050600000000000000000000 e=0.0
FN: 0001 PLD: 01020304050600000000000000000000 e=0.0
FN: 0002 PLD: 01020304050600000000000000000000 e=0.0
FN: 0003 PLD: 01020304050600000000000000000000 e=0.0
FN: 0004 PLD: 01020304050600000000000000000000 e=0.0
...

m17_loopback.grc

Loopback demo with TX and RX both in GNU Radio.

After pressing Start of Transmission, the output should be similar to (the payload position within the 16-byte vector depends on when the button is pressed; End of Transmission ends the stream)

18:46:53.637 [M17_ENC] Ready: AB1CDE -> AB2CDE, TYPE 0003 (data stream, no encryption, CAN 0), no META, debug on
18:46:53.638 [M17_DEC] Ready: syncword threshold 2.0, Viterbi threshold 30.0, no AES key, no scrambler seed, no public key, debug data on, debug control on
18:46:54.146 [M17_ENC] TX start: stream
18:46:55.318 [M17_DEC] RX start: AB1CDE -> AB2CDE, TYPE 0003 (data stream, no encryption, CAN 0), no META, e=0.0
18:46:55.330 [M17_DEC] FN 0000  00000000 00000000 00000102 03040506  e=0.0
18:46:55.331 [M17_DEC] FN 0001  00000000 00000000 00000102 03040506  e=0.0
18:46:55.331 [M17_DEC] FN 0002  00000000 00000000 00000102 03040506  e=0.0
...

m17_loopback_noisy.grc

Loopback demo with the addition of noise, no modulation/no channnel.

m17_loopback_noisychannel.grc

Loopback demo with a noisy channel, including full modulation & demodulation.

transmitterPLUTOSDR.grc

M17 transmitter with ADALM Pluto SDR or Ettus Research B210.

receiverRTLSDR.grc

M17 receiver with RTL-SDR. Automatic Frequency Correction can be enabled as an option.

Complete demonstration

Resulting demonstration of wireless communication between a B210 emitting the signal and RTL-SDR dongle as receiver.