Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 7 of 7

Thread: Real time Convolution Reverb (large impulse file)

  1. #1
    Junior Member
    Join Date
    Oct 2016
    Location
    Fort Lauderdale FL
    Posts
    2

    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.

  2. #2
    Senior Member
    Join Date
    Jul 2014
    Posts
    3,066
    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?

  3. #3
    Junior Member
    Join Date
    May 2017
    Posts
    5
    Quote Originally Posted by WMXZ View Post
    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.

  4. #4
    Senior Member
    Join Date
    Jul 2014
    Posts
    3,066
    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.

  5. #5
    Senior Member
    Join Date
    Jul 2014
    Posts
    3,066
    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)

  6. #6
    Junior Member
    Join Date
    May 2017
    Posts
    5
    Quote Originally Posted by WMXZ View Post
    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.

  7. #7
    Senior Member
    Join Date
    Jul 2014
    Posts
    3,066
    Quote Originally Posted by earmello View Post
    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
  •