For a project I am currently working on, I need to monitor a VHF radio frequency (RF) channel, using a software-defined radio (SDR) that is connected to a Raspberry Pi 3B.

I have successfully implemented the receiver, using terminal commands provided by the rtl_fm tool. In addition to this, I would like to perform digital signal processing (DSP) in the form of FIR and IIR filters, to improve the signal quality, however I am unsure of how to proceed, and how to implement these (what tools to use) as the Pi has limited resources.

I would like to also save these received RF signals as audio files, for listening later.

Hoping you all can offer some advice on DSP tools to use for digital filtering on low resource systems like the Pi.

  • \$\begingroup\$ I'm voting to close this question as off-topic because it is a pure software task with no electrical engineering component, because even on Stackoverflow where that would be on topic, it is still far "too board" for the Stack Exchange mission, and because it is a prohibited request for recommendations of tools or libraries. \$\endgroup\$ Commented Nov 14, 2019 at 2:56
  • \$\begingroup\$ FFT on raspberry pi: aholme.co.uk/GPU_FFT/Main.htm \$\endgroup\$
    – Oldfart
    Commented Nov 14, 2019 at 3:24

2 Answers 2


So, first of all, I'm biased. I maintain the GNU Radio source code.

So, what you want to do is pretty much perfectly fulfilled by GNU Radio

  • For flexible connection of signal processing steps, you'd use the "signal processing flowgraph composed of existing signal processing blocks" paradigm of GNU Radio, together with the excellent FIR filter blocks (maybe the gr_filter_design tool?) to ... filter stuff, the File Sink Block to save to file etc.
  • For real-time processing of high-bandwidth data (that means > 10 MS/s on a RPi3) you'd need CPU-optimized code: The current versions of GNU Radio use VOLK's optimized kernels; and thanks to Albin Stigö, these include optimized versions for the Pi's processor.

So, in my humble opinion, since you already seem to know what a FIR filter is: dive right into the GNU Radio guided tutorials; start with the "0th" chapter on why you'd want GNU Radio and work your way up.

If you run Ubuntu or Debian in a current release on the Pi (not so much: Raspbian), you can easily install a very recent version of GNU Radio on that simply through an installation by apt.

Go wild! It's often a good idea to record and prototype your signal processing on a PC before moving everything to the Pi. GNU Radio makes that easy.


I wouldn't call the Rpi "low-resource". You can do quite a lot of number crunching fairly quickly. Where you might start to see the bottle neck is in the real-time performance of any processing you apply, which is more an artifact of the OS used as opposed to the hardware of the Rpi itself. I would start by looking in to a solution based on the python SciPy and Numpy packages. You can prototype most of your system on your normal machine and try it on the Pi later. I am not very familiar with Software defined radio, but I imagine the data you will be receiving will be something akin to a stream of radio spectrum data at a sample rate of a few hundred hertz? A python implementation should handle that fine with the interpreter overhead so long as your data rate is low. Now where the real problem may be is in your communication latency with the SDR dongle, but testing is really the only way to find that out. hope this helps


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.