[sdiy] IR Reverb

Richie Burnett rburnett at richieburnett.co.uk
Fri Feb 16 21:36:41 CET 2018


Algorithmic (synthetic) reverb can definitely be split into early reflections, late reflections and LF room resonances, so that different algorithms can be optimised to generate each of the independent components. Although the different components are usually combined digitally then feed to a single CODEC.

BTW, your FFT Convolution reverb flow should be:

1. FFT to convert time domain audio into the frequency domain.
2. Multiply by the *SPECTRUM* of the room's impulse response, (or impulse responses for two stereo channels.)
3. IFFT to convert the result from frequency domain back to the time domain.

As others have said FFT is cyclic so you also need to zero-pad, overlap-add or overlap-save to join up the blocks if you are processing audio in small chunks.

-Richie,

Sent from my Xperia SP on O2

---- Tim Ressel wrote ----

>Thanks for the tip!
>
>I wonder if it would be possible to do a parallel processor scheme where 
>one proc handles the early stuff and another to handle the longer time 
>stuff. each proc would output via a codec and those outputs would get 
>summed. Hmm...
>
>--Tim (certifiable) Ressel
>
>
>On 2/16/2018 11:38 AM, Eric Brombaugh wrote:
>> I suspect that STM32 doesn't have the horsepower you'll need to do a 
>> useful IR reverb. There are several fairly efficient FFT in the CMSIS 
>> libraries from ARM but even using those the best you can do is about a 
>> 4096 FFT running at less than 48kHz with long latency and large overlaps.
>>
>> You might want to study the various FFT easter-egg modes in the source 
>> code for the MI Clouds module to learn more:
>>
>> https://github.com/pichenettes/eurorack/tree/master/clouds/dsp
>>
>> Eric
>>
>> On 02/16/2018 12:24 PM, Tim Ressel wrote:
>>> Still, even with all that jigery-pokery, we're going to need a bigger 
>>> boat, er, processor. I'd like to avoid processor choices that needs 
>>> pricey tools. STM32 would be nice. Of course some good ol' fashion 
>>> assembly code, highly optimized, would help things. Its been a while 
>>> since I went down that rabbit hole. I wonder if someone has an 
>>> optimozed FFT library for Cortex Mn...
>>>
>>> --timbo
>>>
>>>
>>> On 2/16/2018 11:00 AM, Eric Brombaugh wrote:
>>>> That's correct - window, FFT, multiply, IFFT, overlap & add.
>>>>
>>>> Now do that multiple times at different window sizes and time 
>>>> offsets, sum up all the results. Amazingly enough, despite all the 
>>>> hokey-pokey it ends up being fewer operations than a straight FIR.
>>>>
>>>> Eric
>>>>
>>>> On 02/16/2018 11:48 AM, Tim Ressel wrote:
>>>>> Ah, okay. But you have to also do inverse FFTs, yes? So the FFT 
>>>>> gets the input into the frequency domain which gets multiplied by 
>>>>> the IR, then an iFFT gets you back to time domain. Overlap reduces 
>>>>> congruity issues. Am I getting that right?
>>>>>
>>>>> --tim
>>>>>
>>>>>
>>>>> On 2/16/2018 10:11 AM, Eric Brombaugh wrote:
>>>>>> Yes - a brute force requires 100k MACs / sample.
>>>>>>
>>>>>> An FFT approach reduces the the total number of multiply / add 
>>>>>> operations required to do a convolution due to the optimization of 
>>>>>> the "fast" algorithm. FFTs reduce the N^2 operations of a DFT to 
>>>>>> N*log(N), so the larger the transform you can get by with, the 
>>>>>> more advantage you'll see. The downside is that FFTs introduce a 
>>>>>> lot of latency, so to get around this transform-based convolution 
>>>>>> engines will typically subdivide the process into a small & fast 
>>>>>> FIR to handle the early results, followed by gradually larger and 
>>>>>> larger FFTs to handle the later results.
>>>>>>
>>>>>> Eric
>>>>>>
>>>>>> On 02/16/2018 10:53 AM, Tim Ressel wrote:
>>>>>>> Thanks for all the replies!  So the concept sounds simple enough. 
>>>>>>> I get the sense the issue is going to be processing time. Am I 
>>>>>>> wrong, or would a brute-force approach to a 2-second reverb time 
>>>>>>> require 100K MAC cycles per sample? I found some open-source 
>>>>>>> packages that use FFTs to do this. I was under the impression 
>>>>>>> FFTs would be less fast than other methods.
>>>>>>>
>>>>>>> Ever get the feeling you're opening Pandora's Box only to find a 
>>>>>>> can of worms inside?
>>>>>> _______________________________________________
>>>>>> Synth-diy mailing list
>>>>>> Synth-diy at synth-diy.org
>>>>>> http://synth-diy.org/mailman/listinfo/synth-diy
>>>>>
>>>>
>>>> _______________________________________________
>>>> Synth-diy mailing list
>>>> Synth-diy at synth-diy.org
>>>> http://synth-diy.org/mailman/listinfo/synth-diy
>>>
>>
>> _______________________________________________
>> Synth-diy mailing list
>> Synth-diy at synth-diy.org
>> http://synth-diy.org/mailman/listinfo/synth-diy
>
>-- 
>--Tim Ressel
>Circuit Abbey
>timr at circuitabbey.com
>
>_______________________________________________
>Synth-diy mailing list
>Synth-diy at synth-diy.org
>http://synth-diy.org/mailman/listinfo/synth-diy



More information about the Synth-diy mailing list