Re: Impulse Response
Posted: Sun Jan 17, 2016 11:13 am
Hi gang,
over Christmas I did some reading to catch up on KG's
Frequency Delay Line implementation. The general idea of partitioned convolutions is to partition the IR into segments, convolve the input with each segment separately, and combine the results using an apropriate schedule. This can be done entirely in the frequency domain, reusing previous input FFT blocks for convolutions with later IR segments, and adding everything before IFFT.
For long convolutions it is best to use multiple FDLs with different FFT sizes: long-sized FFTs to efficiently
implement long convolutions, and short-sized FFT to achieve low latency. I think the original work for this insight is due to Guillermo Garcia.
So I have designed a convolution reverb demo based on these principles. In order to address the issues mentioned in my earlier post, I had to recreate the FFT/IFFT code and stuff it together with the convolutions in one ASM code block (per FDL). Many technical details there, heavy use of SIMD to speed up complex multiplies, etc. Anyway, the result so far is not so bad:
- zero latency
- fully meshed stereo
- 131k IR size (3 seconds @44.1 kHz)
- 20% CPU (Athlon II X4 640 @3 MHz)
I am supplying the fsm together with a Lexicon 480L impulse response "Large Hall" (thanks Spogg for the link!). You have to extract the IR before loading it (blame it on the 2 MB forum limit
), however you can just as well load your favorite IR. Note that audio is interrupted and the code is recompiled upon IR loading.
Give it a test and come back with feedback, please. There more explanation and further reading inside the fsm.
If you think this has potential we could join forces, make a nice GUI and release it as a Flowstone User Group Plugin on KVR.
over Christmas I did some reading to catch up on KG's
For long convolutions it is best to use multiple FDLs with different FFT sizes: long-sized FFTs to efficiently
implement long convolutions, and short-sized FFT to achieve low latency. I think the original work for this insight is due to Guillermo Garcia.
So I have designed a convolution reverb demo based on these principles. In order to address the issues mentioned in my earlier post, I had to recreate the FFT/IFFT code and stuff it together with the convolutions in one ASM code block (per FDL). Many technical details there, heavy use of SIMD to speed up complex multiplies, etc. Anyway, the result so far is not so bad:
- zero latency
- fully meshed stereo
- 131k IR size (3 seconds @44.1 kHz)
- 20% CPU (Athlon II X4 640 @3 MHz)
I am supplying the fsm together with a Lexicon 480L impulse response "Large Hall" (thanks Spogg for the link!). You have to extract the IR before loading it (blame it on the 2 MB forum limit
Give it a test and come back with feedback, please. There more explanation and further reading inside the fsm.