Due to my recent acquisition of an RTL-SDR compatible radio module (Some would call it DVB-T stick) I started playing with radio transmissions. Doing so I found POCSAG (pager) transmissions which I tried to decode using multimon. Sadly multimon was very broken, after I finally managed to compile it on OS X I realized it had 64bit bugs preventing the decoding on my system. So I forked it and patched a lot. I rewrote large parts of the POCSAG decoder after reading the patent text as well as implemented the BCH forward error correction. Besides improving POCSAG my main focus was portability, it now even compiles on Windows 🙂
MultimonNG a fork of multimon. It decodes the following digital transmission modes:
POCSAG512 POCSAG1200 POCSAG2400 EAS UFSK1200 CLIPFSK AFSK1200 AFSK2400 AFSK2400_2 AFSK2400_3 HAPN4800 FSK9600 DTMF ZVEI
The following changes have been made so far:
-Fixes for x64
-Basic functionality on Mac OS X ‘Lion’ (Soundcard/OSS input is unsupported)
-‘DUMMY_AUDIO’ “backend” (Gets rid of the OSS dependency, breaks audio in doing so)
-‘ONLY_RAW’ disables the format conversion while getting rid of posix dependencies
-Option ‘NO_X11’ to disable the X11 dependency since Apple will drop Xorg soon
-Override mode for POCSAG decoding (e.g. force text decoding)
-Brute-Force BCH implementation for POCSAG forward error correction
-Verbose mode is now listed in ‘-h’
-Merged Debian patches for EAS (Emergency Alert System) decoding (untested)
-Portability is a major goal
-Compiles on Windows (MinGW or Cygwin) without format conversion
-PulseAudio support, contributed by inf_l00p_
-Windows native audio and a VisualStudio/MSVC project file, contributed by bzzt_ploink
In addition to the deprecated legacy Makefile there is also a file for qmake which is the preferred way of building MultimonNG. It’s recommended to use qmake to generate the Makefile. (‘qmake multimonNG.pro && make’)
So far multimonNG has been successfully built on OS X, Debian, Ubuntu and Windows. (On Windows using the Qt-MinGW build environment, as well as Cygwin and VisualStudio/MSVC)
Files can be easily converted into multimonNGs native raw format using ‘sox’.
e.g. “sox -t wav infile.wav -esigned-integer -b16 -r 22050 -t raw outfile.raw remix 1”
GNURadio can also generate the format using the file sink in input mode ‘short’.
Windows version: https://github.com/EliasOenal/multimon-ng/releases
(It doesn’t come with SoX and as a result can’t handle filetype conversions. Soundcard input and virtual audio cables should work fine, though.)
Some testfile converted to the native multimon format: poc1200
To decode it try “multimonNG.exe -a POCSAG1200 -t raw poc1200.raw”.
(“-i” is needed for recent versions of multimon-ng)
Superkuh wrote a bit about using multimonNG with GNURadio allowing for realtime decoding. http://superkuh.com/rtlsdr.html
Apparently you can combine multimonNG with rtl_fm to live decode POCSAG. It even seems to be lightweight enough to work on a Raspberry Pi. Thanks to Sonny_Jim from ##rtlsdr on freenode for trying!
<Sonny_Jim> Ok, so this works:
<Sonny_Jim> rtl_fm -f 153.353e6 -g 100 -s 22050 -l 310 – |multimon -t raw -a POCSAG1200 -f alpha /dev/stdin