Saturday, 22 February 2014

Arduino SDR

Here's the latest news from the bench - I have my Arduino DUE running as an SDR receiver...

You will have seen a couple of weeks ago that I had the Arduino DUE running (internally designed) programmable band-pass filters at CD sample rate. Well, I've taken that technology to use as a low-frequency "IF" and added a very computationally-efficient mix down to base-band, all inside the Arduino DUE.

I am currently using an external VFO, running on an Arduino MEGA - but I know there is enough horsepower left in the DUE to control the DDS and the user interface (as well as doing all the DSP for the radio functions), so the MEGA is just a temporary convenience.

Here's the whole shebang labelled for clarity...

RF from the antenna comes into one of my plug-in bandpass filter modules (there's a 40m filter in place in the photo), after which it goes into a rather conventional 602-based mixer. The Arduino-based VFO generates the signal which mixes the signal to the low intermediate frequency band, which is amplified in two-stages by half a quad op-amp. The remaining half of the op-amp is used to implement a 4th-order anti-aliasing filter, which has as close to Butterworth tuning as my available passives allow.

The signal is then passed to my Arduino DUE, which samples the IF at 44.1kHz with one of its internal (12-bit) ADCs. The signal is then filtered and mixed down to audio frequency, where it is output via one of the internal DACs (again 12-bit, 44.1kHz) and onward to an active speaker (actually, into my desktop PC).

Whilst the internal signal processing is conducted at high resolution (32-bit, fixed-point), I had feared that the 12-bit data converters would be such a weak link in the whole process that it wouldn't work - but I shouldn't have worried. Let's just say it is significantly surpassing expectations!

In fact, I discovered a significant flaw in the sampling process in my earlier Arduino DSP experiments which was seriously limiting dynamic range. This fault was generating a whole bunch of "ghost" and "image" signals which made themselves known when I introduced the (software) heterodyne to baseband central to this receiver. It is sorted now. I'm not ready to make any further details of the code public just yet - but will be posting more information as this project progresses (although I'm not yet sure if it will eventually be "open-source").

There is a great deal of exciting DSP potential out there for ham radio applications - I've also been playing with an STM32F407 chip on one of ST Microelectronics' amazingly cheap "Discovery" boards. This has much more "grunt" than the little SAM3X on the Arduino DUE (at under half the price) - but I've got a soft spot for the Arduino family and want to see how far I can take the DUE before succumbing to the temptations of even fancier chunks of silicon.

...-.- de m0xpd



  1. Awesome! Will be looking forward to your future postings and hoping you'll share your code! - 73 de W1VE

  2. That sounds promising. I have only the Mega but discovered that there was not enough horsepower to do the DSP functions. So I set it aside and was looking for an embedded system like the Udoo or the Arduino Tre. But haven't decided yet. Looking for the waterfall ... And hoping that you might perhaps open the curtain a little bit to see what's inside. Meanwhile I had a look at the Minima, but that's another story.

  3. Arduinos should get more interesting very shortly, got to see an Arduino Tre yesterday, very impressive and it is said to be cheaper than the beaglobone black which has become very scarce recently!

  4. @g4fre
    Did they say when it will come out and what Linux will run on it. I am already waiting and decided against the Udoo