Forum Rule: Always post complete source code & details to reproduce any issue!
-
Real time Convolution Reverb (large impulse file)
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:
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 
More information about convolution here: http://www.dspguide.com/ch18/2.htm
Last edited by pm709; 10-12-2016 at 08:43 PM.
-
I re-activate this old thread on partitioned convolution (so to not continue Bmiller's other thread https://forum.pjrc.com/threads/43847...l=1#post142601 on this method)
I would like to add more references
Wefers' thesis http://publications.rwth-aachen.de/r...subformat=pdfa
Another article by Wefers and Vorlaender http://pub.dega-akustik.de/AIA_DAGA_...les/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?
-

Originally Posted by
WMXZ
I re-activate this old thread on partitioned convolution (so to not continue Bmiller's other thread
https://forum.pjrc.com/threads/43847...l=1#post142601 on this method)
I would like to add more references
Wefers' thesis
http://publications.rwth-aachen.de/r...subformat=pdfa
Another article by Wefers and Vorlaender
http://pub.dega-akustik.de/AIA_DAGA_...les/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 by WMXZ; 05-21-2017 at 06:40 PM.
-
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)
-

Originally Posted by
WMXZ
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 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.
-

Originally Posted by
earmello
A reverberation time of 0.2 s is nothing....
Here 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.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules