A wrapper around the Intel IPP FFT routines. More...
Public Member Functions | |
void | complexFFT (const float *in, float *out, int size) const |
Complex inplace FFT (input is aligned Complex<float> array, size is power of two.) | |
void | complexFFTInplace (float *data, int size) const |
Complex inplace FFT (input is aligned Complex<float> array, size is power of two.) | |
void | complexFFTInplace (double *data, int size) const |
Complex inplace FFT (input is aligned Complex<double> array, size is power of two.) | |
void | complexFFTInverse (const float *in, float *out, int size) const |
Complex inverse inplace FFT (input is aligned float array, size is power of two.) | |
void | complexFFTInverseInplace (float *data, int size) const |
Complex inverse inplace FFT (input is aligned float array, size is power of two.) | |
void | complexFFTInverseInplace (double *data, int size) const |
Complex inverse inplace FFT (input is aligned Complex<double> array, size is power of two.) | |
IppFFT (DataType typeToUse=DataType::ComplexFloat, int maxPowerOfTwo=IPP_FFT_MAX_POWER_OF_TWO, const int flagToUse=8) | |
Creates a IPP FFT object. More... | |
void | realFFT (const float *in, float *out, int size) const |
Real inplace FFT (input is aligned float array, size is power of two.) More... | |
void | realFFTInplace (float *data, int size) const |
Real inplace FFT (input is aligned float array, size is power of two.) More... | |
void | realFFTInplace (double *data, int size) const |
Real inplace FFT (input is aligned double array, size is power of two.) More... | |
void | realFFTInverse (const float *in, float *out, int size) const |
Real inplace FFT (input is aligned float array, size is power of two.) | |
void | realFFTInverseInplace (float *data, int size) const |
Real inplace FFT (input is aligned float array, size is power of two.) | |
void | realFFTInverseInplace (double *data, int size) const |
Real inplace inverse FFT (input is aligned double array, size is power of two.) | |
A wrapper around the Intel IPP FFT routines.
It uses RAII to manage all required buffers & datas. In order to use it, create an instance once and then call the routines:
IppFFT fft(IppFFT:DataType::ComplexFloat);
fft.realFFT(data, 512);
It is not templated for speed, but it throws assertions if you call it on the wrong type.
IppFFT | ( | DataType | typeToUse = DataType::ComplexFloat , |
int | maxPowerOfTwo = IPP_FFT_MAX_POWER_OF_TWO , |
||
const int | flagToUse = 8 |
||
) |
Creates a IPP FFT object.
The initialisation time is rather slow, but then it will unleash its power because it allocates all necessary buffers once.
void realFFT | ( | const float * | in, |
float * | out, | ||
int | size | ||
) | const |
Real inplace FFT (input is aligned float array, size is power of two.)
Input: d[] = re[0],re[1],..,re[size-1]. Output: d[] = re[0],re[size/2],re[1],im[1],..,re[size/2-1],im[size/2-1].
void realFFTInplace | ( | float * | data, |
int | size | ||
) | const |
Real inplace FFT (input is aligned float array, size is power of two.)
Input: d[] = re[0],re[1],..,re[size-1]. Output: d[] = re[0],re[size/2],re[1],im[1],..,re[size/2-1],im[size/2-1].
void realFFTInplace | ( | double * | data, |
int | size | ||
) | const |
Real inplace FFT (input is aligned double array, size is power of two.)
Input: data[] = re[0],re[1],..,re[size-1]. Output: data[] = re[0],re[size/2],re[1],im[1],..,re[size/2-1],im[size/2-1].