Re: vDSP distortion/buzzing
Re: vDSP distortion/buzzing
- Subject: Re: vDSP distortion/buzzing
- From: Urs Heckmann <email@hidden>
- Date: Sat, 17 Jul 2004 09:06:30 +0200
Aristotel Digenis:
In ProcessBufferLists() incoming data is stored into an array[size
512]. Once 512 samples have been stored on the temporary buffer, they
are converted to the frequency domain in the same manner the HRTF
samples were. The 512 frequency domain samples of the incoming audio
signal are multiplied with the 512 frequency domain samples. The
results are converted back to the time domain, back to normal array
from Double Complex Split. Lastly the results are assigned to the
output stream.
Hiya Aristotel,
I think the buzzing problem is fundamental thing...
What you actually try to do is convolution in the time domain by
multiplication in the frequency domain.
When convolving two buffers of sizes N and M in the time domain, you
get a result of length N+M-1. The result has a tail, so to say. In FFT
- Multiply - iFFT convolution you have 2 identically sized buffers, and
a same sized output, but not an output of double length. What happens
here is, the tail from the time domain representation doesn't disappear
magically, it actually "wraps around" and populates the same buffer.
IIRC this is called frequency aliasing.
What you have to do to avoid this phenomenon is called Overlap-Add
Method (if you google for Overlap Add, you get a lot of useful hits
about the problem...).
Basically, instead of two 512 sized buffers, you would use two 1024
sized ones, with the additional samples set to 0.0 (aka "zero
padding"). Then, after the convolution, you have the "immediate" signal
in the first 512 samples of the output and another chunk of 512 (in
fact only 511 samples, but don't worry about that) containing the tail,
which has to be added to the next buffer (after convolution, of
course).
I think the easiest way to do this is setting up 2 input/output buffers
that you compute alternatively, and then output the first 512 samples
of your current output buffer with the second 512 samples of your
alternative buffer added. Dunno.
I hope this helps and that my lack of coffee (8:30am here) doesn't make
me confuse things...
Cheers,
;) Urs
urs heckmann
email@hidden
www.u-he.com
_______________________________________________
coreaudio-api mailing list | email@hidden
Help/Unsubscribe/Archives:
http://www.lists.apple.com/mailman/listinfo/coreaudio-api
Do not post admin requests to the list. They will be ignored.