Complex Data Representation

Intel IPP style

In Intel IPP-style APIs, complex numbers are stored in structures. These structures consist of two numbers of the respective data type, which represent a real and imaginary part of a complex number. For example, a single precision complex number is stored in the Ipp32fc structure as follows:

typedef struct { Ipp32f re; Ipp32f im; } Ipp32fc;

The library supports the following complex data types: Ipp16sc, Ipp32sc, Ipp32fc, and Ipp64fc.

The examples of common memory usage:

  • Ipp32fc complex array:

    sizeof(Ipp32fc)*numSamples

  • Ipp32fc complex matrix data:

    sizeof(Ipp32fc)*numCols*numRows

DSP style

DSP-style APIs do not have any special types or structures for complex data. In DSP-style APIs, pointers to data in a complex array have the same type as a real or imaginary part of the complex data. Complex arrays are stored in an interleaved fashion and correspond to the following in Intel IPP style:

{d[0].re, d[0].im, d[1].re, d[1].im, ...}

The number of elements in the array is two times more that in the complex array.

The examples of common memory usage:

  • Floating-point complex array:

    2*sizeof(float32_t)*numSamples

  • Floating-point complex matrix:

    2*sizeof(float32_t)*numCols*numRows

    Each row of a complex matrix is an array of complex values.

For more complete information about compiler optimizations, see our Optimization Notice.