FFT Implementation differences

Hi everybody,

I’m currently toying around with the juce FFT and its different sub implementations and I noticed a difference between the fallback FFT and the IPP FFT where the IPP real only FFT creates weird bursts at the end of the buffers. I’ve narrowed it down to the data format of the IPP which appears to be CCS, but should rather be Perm (at least according to my blackbox testing). According to the intel docs the CCS format stores some values beyond the N*2 index, so this might explain why something behaves funky.

Can anyone confirm that this is the case? So instead of

ippsFFTFwd_RToCCS_32f_I (inoutData, real.specPtr, real.workBuf.get());

I’m using

ippsFFTFwd_RToPerm_32f_I (inoutData, real.specPtr, real.workBuf.get());

(and the same change in the inverse FFT). I have no idea why this hasn’t been mentioned yet as it seems such a basic problem, so probably I’m doing something stupid, but I’d like to know the rationale behind choosing the CCS format here.