[sdiy] Quality reverb on STM32's?

rsdio at audiobanshee.com rsdio at audiobanshee.com
Sat Apr 14 21:23:47 CEST 2018


On Apr 14, 2018, at 12:56 AM, Richie Burnett <rburnett at richieburnett.co.uk> wrote:
> The FV-1's instruction set is *highly* optimised for generating reverb though. It is not a general purpose DSP or microcontroller.
> 
> It's not really fair to benchmark algorithms in MHz alone on such a specific hardware architecture. You need more instructions to do the same stuff on general purpose DSP /Microcontroller hardware. 

The FV-1 has a DSP at its core. It seems entirely unlikely that it has an instruction set that is any more optimized for reverb than other modern DSP options. You’d be amazed at how much has been learned in the TMS320 DSP family alone, when comparing the TMS32010 from 1983 with something like the TMS320VC5506 from modern times: it’s truly *highly* optimized. The key to the FV-1 is that it has the other pieces like ADC and DAC and peripherals for reading parameter pots, along with code in ROM that you don’t need to write for yourself - not so much that its DSP instruction set is unique. Then again, modern DSP has just about everything except the converters and specialized code.

I also object to the phrase, “general purpose DSP,” because DSP is already quite special purpose. General Purpose CPU, MPU, or SOC is appropriate.

I wholeheartedly agree that comparing MHz alone is completely unfair. When I first started learning DSP chips in the 80’s, the Motorola 56000 was about 400 times more efficient than the Motorola 68000, at least for the kinds of computations that are needed in DSP.


On Apr 14, 2018, at 2:53 AM, Richie Burnett <rburnett at richieburnett.co.uk> wrote:
> Wanna try reverb on dsPIC sometime, using DMA to move pages of external SPI SRAM in and out of local memory. Should mitigate some of the pin count and latency issues of using external RAM. Especially since one block of memory can be being processed whilst another is being "paged in/out" via DMA.

I’m very curious about how the dsPIC compares to leading DSP chips like SHARC and TMS320. I’ve programmed the PIC, but that’s another story. When it comes to an optimized instruction set, I seriously doubt that anyone can come close to what Analog Devices or Texas Instruments have done, so I haven’t bothered to give dsPIC the research time that it might deserve.

> Would still be quite a grainy reverb with just 16-bit processing though.

This is another aspect where a 16-bit DSP far outperforms a 16-bit CPU or even a 32-bit CPU. Typical DSPs like the C5000 with 16-bit fixed point architecture has 40-bit accumulators inside the processor. With 40-bit accumulators, you have 48 dB of headroom above normal levels and an additional 96 dB of noise floor extension below the typical 16-bit performance. You can then dither the 40-bit value (after saturating, as necessary) to 16-bits before storing the result in 16-bit memory for the DAC to output. I doubt that anyone could hear the difference between properly-dither 16-bit DAC versus 24-bit. The key is having the intermediate calculations at much higher precision. Some 16-bit DSP can even fully support a 24-bit DAC, like the DSI Evolver as one example based on the affordable SHARC chips.

Granted, a 32-bit ARM chip could manage 24-bit performance in float or even 32-bit performance in fixed point, but neither of those options come close to having 40 bits of precision in the intermediate values.

40-bit precision is just for the less-expensive, low-power DSP options. SHARC has 80-bit precision in its flagship products. You’re not going to touch that with ARM.

Bottom line: my point in writing this long email is that if you’re looking for “quality” reverb, I’d recommend using some sort of DSP. Whether it’s  an FV-1 with 99% of the work done for you, or another DSP where you get to piece together the code yourself, either of those options will be much higher quality than what’s possible on a generic ARM chip.

Brian Willoughby
Sound Consulting





More information about the Synth-diy mailing list