M17 4FSK Modulator & Demodulator in C++ (GPL)
 
 
 
 
 
Go to file
Jakob Ketterl 215b54458d add basic cmake build 2020-11-22 14:23:49 +01:00
.gitignore add basic cmake build 2020-11-22 14:23:49 +01:00
CMakeLists.txt add basic cmake build 2020-11-22 14:23:49 +01:00
CRC16.h Initial commit. 2020-11-19 21:57:02 -06:00
CarrierDetect.h Initial commit. 2020-11-19 21:57:02 -06:00
DeviationError.h Initial commit. 2020-11-19 21:57:02 -06:00
Filter.h Initial commit. 2020-11-19 21:57:02 -06:00
FirFilter.h Initial commit. 2020-11-19 21:57:02 -06:00
Fsk4Demod.h Initial commit. 2020-11-19 21:57:02 -06:00
IirFilter.h Initial commit. 2020-11-19 21:57:02 -06:00
LICENSE
LinkSetupFrame.h include stdexcept to be able to throw invalid_argument 2020-11-22 13:24:48 +01:00
M17Convolution.h Initial commit. 2020-11-19 21:57:02 -06:00
M17FrameDecoder.h Remove some diagnostic output. 2020-11-19 22:11:52 -06:00
M17Framer.h Initial commit. 2020-11-19 21:57:02 -06:00
M17Randomizer.h Initial commit. 2020-11-19 21:57:02 -06:00
M17Synchronizer.h Initial commit. 2020-11-19 21:57:02 -06:00
PhaseEstimator.h Initial commit. 2020-11-19 21:57:02 -06:00
PolynomialInterleaver.h Initial commit. 2020-11-19 21:57:02 -06:00
README.md Remove some diagnostic output. 2020-11-19 22:11:52 -06:00
SymbolEvm.h Initial commit. 2020-11-19 21:57:02 -06:00
Util.h Initial commit. 2020-11-19 21:57:02 -06:00
m17-demod.cpp Initial commit. 2020-11-19 21:57:02 -06:00
m17-demod.h Initial commit. 2020-11-19 21:57:02 -06:00

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.

make CXXFLAGS="-std=gnu++17 -O3 $(pkg-config --libs codec2)" m17-demod

Running

This program was designed to be used with RTL-SDR, specifically rtl-fm.

rtl_fm -f 144.91M -s 48k -C | ./m17-demod | play -b 16 -r 8000 -c1 -t s16 -

Note that the rtl-fm -C option may be required in order for the demodulate the baseband signal if the receiver is not closely tuned to the transmit frequency. The oscillators on the PlutoSDR and on most RTL-SDR dongles are rather inaccurate.

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.

Thanks to Jonathan Naylor, G4KLX, for the convolutional encoder/decoder.