On Tue, 29 Nov 2005, Stefan Turner wrote:
I think the standard way of convolution - or at least the one I use - which gives ok results, is to have one 'carrier' signal, which is filtered by the 'modulator' signal. (I think that's what they're called.) Basically, first get the magnitude of the modulator: sqrt(real^2 + imag^2). Then: output real = carrier real * modulator magnitude output imag = carrier imag * modulator magnitude
This is not a plain convolution by the modulator signal, though it's close. It's a convolution by the phase-removed modulator signal, because all phase information is removed. A general convolution allows for phase shifts. For example, taking the derivative of a signal using [rzero~] (where dt = 1 sample duration) you get an approximately 90-degree phase advance (in addition to getting incredible trebles-boosting). A derivative performed numerically is a kind of convolution (used extensively in GridFlow in order to e.g. fake reflections and refractions on water).
A general convolution uses complex multiplications, one of which requires four real multiplications in cartesian repr, one real multiplication in polar repr, and no multiplication in log repr.
Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju Freelance Digital Arts Engineer, Montréal QC Canada