• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: vDSP distortion/buzzing
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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.


  • Follow-Ups:
    • Re: vDSP distortion/buzzing
      • From: Aristotel Digenis <email@hidden>
References: 
 >vDSP distortion/buzzing (From: Aristotel Digenis <email@hidden>)

  • Prev by Date: vDSP distortion/buzzing
  • Next by Date: Re: vDSP distortion/buzzing
  • Previous by thread: vDSP distortion/buzzing
  • Next by thread: Re: vDSP distortion/buzzing
  • Index(es):
    • Date
    • Thread