|
|
||
|---|---|---|
| tests | ||
| .gitignore | ||
| CMakeLists.txt | ||
| CRC16.h | ||
| CarrierDetect.h | ||
| Convolution.h | ||
| DeviationError.h | ||
| ESG-upload.py | ||
| Filter.h | ||
| FirFilter.h | ||
| FrequencyError.h | ||
| Fsk4Demod.h | ||
| Golay24.h | ||
| IirFilter.h | ||
| LICENSE | ||
| LinkSetupFrame.h | ||
| M17FrameDecoder.h | ||
| M17Framer.h | ||
| M17Randomizer.h | ||
| M17Synchronizer.h | ||
| PhaseEstimator.h | ||
| PolynomialInterleaver.h | ||
| README.md | ||
| SymbolEvm.h | ||
| Trellis.h | ||
| Util.h | ||
| Viterbi.h | ||
| m17-demod.cpp | ||
| m17-demod.h | ||
README.md
m17-cxx-demod
M17 Demodulator in C++ (GPL)
This program reads a 48K SPS 16-bit, little-endian, single channel, M17 4-FSK baseband input stream from STDIN and writes a demodulated/decoded 8K SPS 16-bit, single channel audio stream to STDOUT.
Some diagnostic information is written to STDERR while the demodulator is running.
Build
This code requires the codec2-devel package be installed.
mkdir build
cd build
cmake ..
make
sudo make install
Running
This program was designed to be used with RTL-SDR, specifically rtl-fm.
rtl_fm -E offset -f 144.91M -s 48k | m17-demod | play -b 16 -r 8000 -c1 -t s16 -
Note that the oscillators on the PlutoSDR and on most RTL-SDR dongles are rather inaccurate. You will need to have both tuned to the same frequency, correcting for clock inaccuracies on one or both devices.
Also note that I need to use -E offset to decode the data well, even though
I see this in the rtl_fm output:
WARNING: Failed to set offset tuning.
This was tested using the m17-gnuradio GNU Radio block feeding an Analog Devices ADALM Pluto SDR, modulating the m17.bin file from the m17-demodulator repo.
Notes
As of now, this is using the older versions of the sync word and LICH encoding. It is out of date with the current M17 spec.
Thanks
Thanks to the M17 team to for the great work on the spec.