Real time Convolution Reverb (large impulse file)

Status
Not open for further replies.

pm709

New member
I posted this a while ago in an 2015 thread. If it's done already, forgive my ignorance but, I would like to call your guys attention if it's not, so I started this new thread. Tell me what you think.
There is a realtime convolution reverb solution for low power devices like this so far, I think.
If someone can implement this for a Teensy board, it will be awesome!. Is called "Partitioned Convolution", here is a white paper:

View attachment REAL-TIME PARTITIONED CONVOLUTION ALGORITHMS.pdf

Don't know much about it, but t looks like, it processes one large impulse response file, one block of samples at a time, with delays for every other block, so the whole process doesn't have to be computed in real time, only the first block.. anyway, go figure..

I am very interested since I have a project that involves convolution reverbs with medium-large impulse responses.

I am happy with the 6ms latency on this board :rolleyes:

More information about convolution here: http://www.dspguide.com/ch18/2.htm
 
Last edited:
I re-activate this old thread on partitioned convolution (so to not continue Bmiller's other thread https://forum.pjrc.com/threads/4384...t-simulation-)?p=142601&viewfull=1#post142601 on this method)

I would like to add more references
Wefers' thesis http://publications.rwth-aachen.de/record/466561/files/466561.pdf?subformat=pdfa
Another article by Wefers and Vorlaender http://pub.dega-akustik.de/AIA_DAGA_2013/data/articles/000683.pdf

I have not implemented this technique, but I can see that for very long FIR filters partitioning of FIR coefficients is the way to go, especially for real time simulation of reverberation. Obviously you need more memory as you need to store intermediate convolution results for successive time steps.

Who is willing to augment the audio library with such a function?
Or alternatively, does someone have a wav file with the impulse response of, say a large hall, mountain echo scenario, or something like this?
 
I re-activate this old thread on partitioned convolution (so to not continue Bmiller's other thread https://forum.pjrc.com/threads/4384...t-simulation-)?p=142601&viewfull=1#post142601 on this method)

I would like to add more references
Wefers' thesis http://publications.rwth-aachen.de/record/466561/files/466561.pdf?subformat=pdfa
Another article by Wefers and Vorlaender http://pub.dega-akustik.de/AIA_DAGA_2013/data/articles/000683.pdf

I have not implemented this technique, but I can see that for very long FIR filters partitioning of FIR coefficients is the way to go, especially for real time simulation of reverberation. Obviously you need more memory as you need to store intermediate convolution results for successive time steps.

Who is willing to augment the audio library with such a function?
Or alternatively, does someone have a wav file with the impulse response of, say a large hall, mountain echo scenario, or something like this?

I am one of the authors cited in that publications and yes, I have a lot of long Impulse Responses recorded in different places as churches, large halls, theatres, archaeological sites and so on.
 
I implemented, what I think a partitioned convolution could look like: example PartConv in https://github.com/WMXZ-EU/wmxzDSP

The functionality of this example is not verified yet, but the compiling and execution reveals that
- a reverb filter up to 8960 (70*128) coefficients is feasible (needs about 85 % of T3.6 RAM)
- and filtering a 44.1kHz data stream would need 83% CPU time (at 180 MHz).

Now, I have no idea if 0.2 s reverb (8960/44100) is useful or not, but that is what T3.6 can handle without further tricks, e.g getting more RAM.
experts may advice!

To be done:
- verification of indexing scheme
- proper partitioning of FIR coefficients
(so play with code but don't use/trust results)
 
Last edited:
I added an example AudioReverb that integrates the partitioned convolution into the audio framework (Link in prev post)
Again, work in progress and completely not tested (I need first do some soldering)
 
Now, I have no idea if 0.2 s reverb (8960/44100) is useful or not,

A reverberation time of 0.2 s is nothing....
Here http://www.industrial-electronics.c...hitectual-acoustics-2-SOUND-ABSORPTION-2.html you can find a picture with the optimum reverberation time regarding different kind of rooms with various volumes.
Anyway in big churches you have a bigger Reverberation Time than the optimun, also 12 seconds.

Typically a partitioned convolution is used to add a long reverberation, certainly not 0.2 s.
 
A reverberation time of 0.2 s is nothing....
Here http://www.industrial-electronics.c...hitectual-acoustics-2-SOUND-ABSORPTION-2.html you can find a picture with the optimum reverberation time regarding different kind of rooms with various volumes.
Anyway in big churches you have a bigger Reverberation Time than the optimun, also 12 seconds.

Typically a partitioned convolution is used to add a long reverberation, certainly not 0.2 s.

Thanks for comment.
I understand that, also as the papers talk about 10^6 coefficients.
So in order to have such long reverb one needs much more memory, some 4 MB for filter spectra (2 x 12*44100*4 bytes @ 50% overlap) and same amount for data spectra.

while one could store the data to external memory, but I doubt that the Teensy can do all the multiplications necessary in real time.

If realistic real time reverb simulation is not feasible, so be it.
 
Status
Not open for further replies.
Back
Top