Tagged: ARM

ARM Radio Code Ported to Free Toolchain

Several years ago in 2015 we posted about the "ARM Radio" by Alberto I2PHD which is a minimalist SDR implementation based on the ARM processor on the STM32F429 discovery board. It was implemented with nothing more than a basic low pass front end, a reconstruction filter for the audio output and some DSP code. With it's low cost ADC it's only able to tune from 8 kHz to 900 kHz, but this is enough to get broadcast AM signals and NDBs. While it may not have the best specs, it's an excellent learning project for SDR DSP and microcontroller programming, and the code is completely open source, although a non-free toolchain is required.

Recently Alberto Garlassi wrote in and wanted to share a re-implementation of the code on a free toolchain. He writes:

Unfortunately the author used the Keil MDK toolchain, this means that it is not possible to change the code without paying for a license. The free version is limited to 32K and this is not enough.

I ported it to the free (don't know how much, certainly GCC + Eclipse) System Workbench, now it is easy for everybody to start where I2PHD left.

I did this several years ago and in the meantime ST and ARM changed many things in their tools and libraries, but it still works ok, I checked.

The complete project is on Github, it should be a matter of downloading the IDE, the libraries and press the debug icon. I'm in touch with Alberto Di Bene I2PHD, he has no objections and told me he's happy about this.

ExaGear x86 Emulator for ARM To be Discontinued

ExaGear is an x86 emulator for ARM computing devices. In the past we posted about ExaGear as together with WINE, it was an affordable solution that allowed Windows SDR apps to run on ARM devices like the Raspberry Pi 3. With ExaGear and WINE we were able to get Windows only SDR programs like Unitrunker, WinSTD C, DSD+, MultiPSK, PC-HFDL, Orbitron and Sondemonitor to run smoothly. In another previous post, DE8MSH was also able to use ExaGear to get Speclab running on his Raspberry Pi 3.

Unfortunately it appears that ExaGear is to be discontinued from February 28 onwards although they note that all previously purchased licences will continue to work. No reason has been given other than noting that it is their business decision. For now the downloads and ability to purchase licences is still active until February 28, so if ExaGear was a product you were interested in, you have just over a week to obtain it.

ExaGear to be discontinued
ExaGear to be discontinued

Running Windows & x86 SDR Decoding Apps on the Raspberry Pi 3: Unitrunker, WinSTD-C, WXtoIMG, DSDPlus and more

There is a great advantage to running SDR decoder apps on a single board PC like a Raspberry Pi 3. For example instead of committing a whole PC to become a dedicated decoder, a cheap Pi 3 can be used instead. However, unfortunately many decoder apps are written for the x86 CPU architecture and/or Windows, making them impossible to run on ARM and/or primarily Linux devices like the Raspberry Pi 3.

That is unless you use an emulator combination like Eltechs Exagear and Wine. Exagear is an emulator that emulates an x86 environment on a device like a Raspberry Pi 3 which uses an ARM CPU. Wine is a Windows compatibility layer that allows you to run x86 Windows apps on an x86 Linux installation. So by combining Exagear together with Wine it is possible to run Windows apps on ARM Linux devices.

Exagear is not free (although there is a free trial). It currently costs $22.95 USD for a Pi 3 licence, and $16.95 USD for a Pi 2 licence and $11.45 for a Pi 1/Zero licence. They also have versions for Odroid, Cubieboard, BananaPi, Jetson and many other ARMv7 and ARMv8 devices like the super cheap and powerful Orange Pi’s. There are free alternatives out there like QEMU, however when we tested QEMU it was far too slow on the Pi 3 to even run notepad responsively, let alone a decoder. Exagear on the other hand seems to run apps at near native speeds, without much lag at all. So in this respect the price seems to be worth it.

We decided to test the Exagear + Wine combination on a Pi 3 and were successful in running a number of apps including Unitrunker, WinSTD-C, WXtoImg, DSDPlus, PC-HFDL, MultiPSK, Orbitron and Sondemonitor.

Trunking setup with Unitrunker on a Raspberry Pi 3

With Unitrunker we were able to set up a full trunk tracking system using two RTL-SDR dongles, rtl_fm, rtl_udp and a custom script to control rtl_udp.

Unitrunker running on a Raspberry Pi 3
Unitrunker running on a Raspberry Pi 3

In the future we may put up a full double checked tutorial with images, but for now a roughly written tutorial is presented below. The tutorial is fairly involved and assumes decent Linux experience. The tutorial starts from a fresh install of Raspbian.

The basic idea of operation is based around the fact that the RTL-SDR cannot be used directly within Wine (or so it seems). So the control signal audio is routed from rtl_fm running on one dongle into Unitrunker on Wine using alsa loopback. Then we use the old Unitrunker remote.dll method to generate a sdrsharptrunking.log file which is a text file that contains the current frequency that the voice receiver should tune to. A simple shell script continuously reads this file and extracts the frequency, and then commands an instance of rtl_udp running with the second dongle to tune to that frequency.

Continue reading

Demonstrating the ARM Radio

Back in November 2015 we posted about the ARM Radio, a minimalist direct sampling software defined radio that runs almost entirely on an ARM processor on a STM32F429 discovery board. It can tune from about 8 kHz up to 900 kHz, which covers the VLF, LF and some of the MF bands. 

Now over on YouTube amateur radio hobbyist W9RAN has uploaded a video where he demonstrates an ARM Radio that he built. He shows the radio in operation with it clearly receiving some NDB’s and some AM broadcast stations.

ARM Radio demo BY W9RAN

ARM Radio: A Cheap SDR built out of an ARM Processor and not much more

A software defined radio can theoretically be made out of little more than a microprocessor with an onboard ADC and some DSP code. This is exactly what Alberto di Bene (I2PHD) achieved by connecting an antenna directly to the on board 12-bit ADC on a STM32F429 Discovery board.

To make it actually work as an SDR he also wrote some code to utilize the development board’s ARM processor which processes the ADC input into a radio signal, demodulates it and then turns it into audio via the boards DAC and speaker. The radio can tune from 8 kHz up to about 900 kHz.

The only real extra hardware in Alberto’s system is a low pass filter for anti-aliasing and impedance transformation, and a reconstruction filter to get sound to the speakers from the DAC. He also used the boards LCD screen to implement a full GUI tuning system.

A PDF document detailing his work can be downloaded here.

ARM Radio and its GUI interface.
ARM Radio and its GUI interface.
The ARM Radio with the low pass filter and reconstruction filter shown.
The ARM Radio with the low pass filter and reconstruction filter shown.