LIBML  Version 3.2.4
LIBML DSP Software Library
Functions
Complex-by-Complex Multiplication
Collaboration diagram for Complex-by-Complex Multiplication:

Functions

void tpt_cmplx_mult_cmplx_f32 (f32_t *__restrict aOutData, const f32_t *__restrict aInDataA, const f32_t *__restrict aInDataB, uint32_t aCount)
 Floating-point complex-by-complex multiplication. More...
 
void tpt_cmplx_mult_cmplx_f64 (f64_t *__restrict aOutData, const f64_t *__restrict aInDataA, const f64_t *__restrict aInDataB, uint32_t aCount)
 Floating-point complex-by-complex multiplication. More...
 
void tpt_cmplx_mult_cmplx_q15 (q1_14_t *__restrict aOutData, const q15_t *__restrict aInDataA, const q15_t *__restrict aInDataB, uint32_t aCount)
 Q15 complex-by-complex multiplication. More...
 
void tpt_cmplx_mult_cmplx_q31 (q1_30_t *__restrict aOutData, const q31_t *__restrict aInDataA, const q31_t *__restrict aInDataB, uint32_t aCount)
 Q31 complex-by-complex multiplication. More...
 

Detailed Description

Multiplies a complex vector by another complex vector and generates a complex result. The data in the complex arrays is stored in an interleaved fashion (real, imag, real, imag, ...). The parameter aCount represents the number of complex samples processed. The complex arrays have a total of 2 * aCount real values.

The underlying algorithm is used:

    for (n = 0; n < aCount; n++)
    {
      aOutData[2 * n + 0] = aInDataA[2 * n + 0] * aInDataB[2 * n + 0]
  There are separate functions for floating-point, Q15, and Q31 data types. 

Function Documentation

◆ tpt_cmplx_mult_cmplx_f32()

void tpt_cmplx_mult_cmplx_f32 ( f32_t *__restrict  aOutData,
const f32_t *__restrict  aInDataA,
const f32_t *__restrict  aInDataB,
uint32_t  aCount 
)

Floating-point complex-by-complex multiplication.

Parameters
[out]aOutDatapoints to output vector.
[in]aInDataApoints to first input vector.
[in]aInDataBpoints to second input vector.
[in]aCountnumber of samples in each vector
Returns
none

◆ tpt_cmplx_mult_cmplx_f64()

void tpt_cmplx_mult_cmplx_f64 ( f64_t *__restrict  aOutData,
const f64_t *__restrict  aInDataA,
const f64_t *__restrict  aInDataB,
uint32_t  aCount 
)

Floating-point complex-by-complex multiplication.

Parameters
[out]aOutDatapoints to output vector.
[in]aInDataApoints to first input vector.
[in]aInDataBpoints to second input vector.
[in]aCountnumber of samples in each vector
Returns
none

◆ tpt_cmplx_mult_cmplx_q15()

void tpt_cmplx_mult_cmplx_q15 ( q1_14_t *__restrict  aOutData,
const q15_t *__restrict  aInDataA,
const q15_t *__restrict  aInDataB,
uint32_t  aCount 
)

Q15 complex-by-complex multiplication.

Parameters
[out]aOutDatapoints to output vector.
[in]aInDataApoints to first input vector.
[in]aInDataBpoints to second input vector.
[in]aCountnumber of samples in each vector
Returns
none
Scaling and Overflow Behavior
The function implements 1.15 by 1.15 multiplications and finally output is converted into 2.14 format.

◆ tpt_cmplx_mult_cmplx_q31()

void tpt_cmplx_mult_cmplx_q31 ( q1_30_t *__restrict  aOutData,
const q31_t *__restrict  aInDataA,
const q31_t *__restrict  aInDataB,
uint32_t  aCount 
)

Q31 complex-by-complex multiplication.

Parameters
[out]aOutDatapoints to output vector.
[in]aInDataApoints to first input vector.
[in]aInDataBpoints to second input vector.
[in]aCountnumber of samples in each vector
Returns
none
Scaling and Overflow Behavior
The function implements 1.31 by 1.31 multiplications and finally output is converted into 2.30 format. Input down scaling is not required.