Receiving M17
Receiving M17 doesn't require any exceptional or expensive hardware. This article demonstrates how to receive and decode M17 using inexpensive SDRs.
Receiving M17 texts
To receive M17 text messages, you will need:
- an SDR receiver: an RTL-SDRv3 would do great, other revisions are fine too
- a PC running Linux with installed GNU Radio
- a tiny bit of patience and will
GNU Radio installation is not covered by this article.
Fetch the required software
m17-packet-decoder from the M17_Implementations GitHub repository: here
Run
git clone --recursive
to clone the repository. Change the directory to SP5WWP/m17-packet and use make:
make && make install
At this point you should have the packet decoder and encoder ready. Should you get errors regarding missing libm17, change the directory to libm17 and run:
make && make install && sudo ldconfig
That should deal with libm17 dependency. Go one step back and retry.
Create a named pipe
Before we point our freshly compiled decoder to a stream of M17 symbols, we need to execute a GNU Radio flowgraph. Let's start with creating a named pipe:
mkfifo /tmp/fifo1
Now, we are ready to connect the decoder with the receiver through this named pipe.
Start the decoder
Start the decoder by running
cat /tmp/fifo1 | m17-packet-decoder -c
The -c argument tells the decoder to display callsigns in decoded form (instead of hexadecimal values). At this point, nothing should happen - there is no signal reaching the decoder yet.
Run the gnuradio flowgraph

The flowgraph is here. Make sure that the output from the Symbol Sync block is connected to a File Sink (/tmp/fifo1) and the other blocks connected to its output are grayed out. In case they are not, you can disable blocks by selecting them and pressing 'D'.
Execute the flowgraph by pressing the Play button.
Result

Upon valid packet reception, the terminal window should show a message similar to the one shown to the right.