![]() |
![]() ![]() ![]() ![]() ![]()
|
next newest topic | next oldest topic |
Author | Topic: Proper Block Convolutions |
David McClain Member |
![]() ![]() ![]() Hi, I have been wondering here about how to create zero padded blocks of sound and filters so that we can do "proper" block convolution. The Kyma approach has been to use Bristow-Johnson windows on the input to help suppress the effects of the circular convolutions when doing FFT transformations. But this still produces artifacts compared to the correct form of overlap-add block convolutions. It appears that somehow I need to boost the processing rate in the FFT, Inverse FFT blocks and whatever is between them, in order to pull this off. I am completely stymied on this one with Kyma. Any suggestions? - DM IP: Logged |
David McClain Member |
![]() ![]() ![]() Hey, I think I just about have it! As soon as I do I will post it for everyone. This solution uses something akin to polyphase filtering with a pair of FFT+Inverse FFT chains. Each FFT+Inverse is applied to a signal and its delayed version by 1/4 FFT size. The two pairs of FFT chains are likewise delayed by 1/2 FFT size between them. The inputs to both FFT chains go through a modified Bristow-Johnson window that is nonzero only over the central half of the window interval. The outputs have to be delayed and added. The delay to be used on each L/R output stream is that which makes its input delay + output delay = 3/4 FFT size = the longest delay in the system. Right now I have tons of spurs being generated at only about 35 dB down from the oscillator peak signal. But I'm pretty sure I can find that bug... This is a real hungry beast, and I can only run up to 512 element FFT's without Kyma complaining about too many ocillators. Looks like it's using about 8 DSP's for the 512 element FFT's. I just knew there had to be a way to do this on Kyma. What an incredible system! - DM IP: Logged |
pete Member |
![]() ![]() ![]() Hi David I (for one) am waiting eagerly. Regards Pete IP: Logged |
David McClain Member |
![]() ![]() ![]() Hi Pete, I find that the maximum length allowed by Kyma for the FFT processing is 512 elements. Beyond that it complains that I ran out of static RAM on the Capybara. (Not sure why this should be -- I have lots of sounds with much more complexity than this running here...) At any rate, with this blocksize limitation, at 22 KHz sample rate that means the processing is limited to impulses shorter than 256 elements = 11.6 ms. This is insufficient for some large reverb convolutions but probably plenty for many other delay based effects. Did this answer your question? [Of course, you can do longer convolutions using the existing 2-phase algorithm provided by SSC, if you don't care about the artifacts produced by edge effects in circular convolutions. This might be acceptable to you depending on the nature of the filter and the length of the FFT. Doing this would allow longer FFT lengths and hence longer impulse files. I have been unable to run the FFT's beyond 1024 elements though. But at 22 KHz sample rate that would allow you to use impulses that last 46.4 ms = 1/20 sec.] - DM [This message has been edited by David McClain (edited 01 June 2001).] IP: Logged |
All times are CT (US) | next newest topic | next oldest topic |
![]() ![]() |
This forum is provided solely for the support and edification of the customers of Symbolic Sound Corporation.