The video below shows my Homebrew SDR rx working with the GUI on the STM32F746-Discovery board.
However, what you might notice is the presence of image products in the waterfall. The processing of the signal suppresses all but the very strongest of these so they don't appear as audio but it is mighty confusing when they are on the waterfall but actually not there (if you see what I mean)! I am in the process of building a QSD or Tayloe Detector, which should provide better rejection of images. I have breadboarded one of these, it works but not very well. I think that this might be due to the length of leads I have on the breadboard so I am trying to use Eagle CAD to design a circuit board to overcome these problems.
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.