A Multichannel FM Demodulator

A few days ago programmer Phil V wrote in and wanted to let us know about his tsl-sdr MultiFM software for the RTL-SDR. This is a Python based command line program which is somewhat similar to rtl_fm, but the difference is that MultiFM allows for multiple FM audio streams to be demodulated simultaneously. Phil writes:

This is supposed to be of interest to people who might want to demodulate multiple channels to feed different parts of a monitoring workflow. This is fed by an rtlsdr in my “production” configuration, so I figure it’s relevant to your blog.

While this is something that can be done with GNUradio, there are a few things that make this unique:

1) All the calculations are done using fixed point arithmetic. This means the application runs efficiently even in low-resource systems. The intensive calculations are optimized using NEON for ARM, since my target platform is ARM-based.

2) The external dependencies are very minimal. libjansson (a JSON parser) is the only run-time dependency. ConcurrencyKit and Python are all you need to build it. This makes it fit nicely into embedded systems.

3) The behavior of the application can be set and modified based on configuration parameters only. Filter kernels, sampling requirements, and channels are all set using this configuration file, which is easy-to-understand JSON.

I’m using this as a part of a larger project that monitors multiple frequencies in a narrow 1 MHz then feeds the data into an analysis system in the cloud.

The code is also intended to be easy to understand and follow, so anyone who is trying to learn DSP and how to build these things should be able to pick it up.

The software looks quite useful especially as we have not seen many lightweight command line multichannel decoders for the RTL-SDR yet. The closest thing we’d seen previously was RTL-Airband which is designed for monitoring up to eight AM airband channels and streaming them to the internet as an MP3, but can also be used for NFM.

Phil has indicated that he may write more tutorials on MultiFM’s use in the future, for example showing how to monitor multiple 4FSK channels.

Post a comment

You may use the following HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>