Meteor M-N2 Images

Monday 26 February 2018

Homebrew SDR HF Transceiver - DSP Concepts Audio Weaver

It's been a little while since my last post but I have been wrestling with software.

To summarise, my software stack is:

  • FreeRTOS - a real time operating system for microcontrollers that enables an easy way to prioritise tasks without having to resort to 'bare metal' handling of interrupts. FreeRTOS is free with no licence issues.
  • uGFX - initially I was planning to use STemWin as a graphics manager but, although free to use it is closed source. As I couldn't get it to work with FreeRTOS I decided to use an open source graphics manager and found uGFX. This decision has not been without its problems but after I found the bug in the uGFX code I was able to work around it.
  • DSP Concepts Audio Weaver - this software is closed source but licenced by ST for use on their microcontrollers. However, as it is fantastic it is worthwhile persevering with. You do have to register to download it but no payment is required.
So, to cut a very long story short I now have FreeRTOS, uGFX and Audio Weaver running together. I have taken NT7S's Si5351 library code that G7UVW had ported to the mbed platform and in turn I have ported it to C to work with the ST hardware abstraction layer.

I can now tune the Si5351 from the STM32F746-Discovery board using the touch screen while the DSP processing provided by the Audio Weaver library is also running. The one niggle that I have yet to resolve is that when I disconnect & reconnect power from the microcontroller the audio processing doesn't work on reboot although the rest of the program (graphics etc.) does.

For now though I'll focus on the design of the signal processing in Audio Weaver.

Audio Weaver Designer runs on Windows (I've tried it on Linux with Wine but with no success) and is used to design and build the audio processing by joining blocks together. Even better is that it is possible to deploy the process you have designed onto the microcontroller and run it while allowing you to change settings in Windows. This approach leads to a quick development time and tuning is easy. When the design is completed it is a simple operation to create the files required to incorporate them in the microcontroller code.

There is an argument that this approach is the easy one but I liken it to the discussion around using an LM386 or NE602 when discrete components could be used. It's a tool and it works so I'll use it.

The image below shows Audio Weaver Designer:

The available modules are selected from the folders on the left and dragged into the process and the connectors are then joined together and any parameters added/changed.

The images below shows annotations against each major functional block of my DSP processing:

This method of SSB demodulation is not the Weaver (or third) method as I have read elsewhere but a bit of a hybrid. I will be trying other configuration to assess which is best for my application. A good description of the different methods of SSB demodulation is here.

While testing this process through Audio Weaver Designer I am controlling the Si5351 tuning via an Arduino Uno using the sketch I put in a previous post. The Audio Weaver file in the pictures is available for download here if you want to try it yourself.

A video of reception using this process flow while it is running on the Windows machine connected to the microcontroller is below.

Next post: Bringing it all together on the STM32F746-Discovery board.


  1. Hi Simon .. Very nice work... may have missed one of your further blogs but did you get manage to flash the AudioWeaver code into the 746 disco board. I tried AW for the first time and was very impressed however it now only seems to support the STM32F407 and STM32F769 cpus and I have not figured out how to flash it to the board. ( I have a 407 disco )

  2. Hi Paul, you need to get AudioWeaver to create the AWB .c and .h files which you then compile into the program you are loading to the Disco board. Within the program you then have to execute a function to load the AWE layout contained in the files. There is probably also an AWE library that need to be included but I forget the detail now. The AWE Integration Guide is a good starting point.