Complex-by-Complex Multiplication
Module: Complex Math Functions
Functions
Name | |
---|---|
void | plp_cmplx_mult_cmplx_f32_xpulpv2(const float32_t restrict pSrcA, const float32_t restrict pSrcB, float32_t *restrict pDst, uint32_t numSamples) Floating-point complex-by-complex multiplication. |
void | plp_cmplx_mult_cmplx_i16_rv32im(const int16_t restrict pSrcA, const int16_t restrict pSrcB, int16_t *restrict pDst, uint32_t numSamples) 16-bit integer complex-by-complex multiplication |
void | plp_cmplx_mult_cmplx_i16_xpulpv2(const int16_t restrict pSrcA, const int16_t restrict pSrcB, int16_t *restrict pDst, uint32_t numSamples) 16-bit integer complex-by-complex multiplication |
void | plp_cmplx_mult_cmplx_q16_rv32im(const int16_t restrict pSrcA, const int16_t restrict pSrcB, int16_t *restrict pDst, uint32_t deciPoint, uint32_t numSamples) 16-bit integer complex-by-complex multiplication |
void | plp_cmplx_mult_cmplx_q16_xpulpv2(const int16_t restrict pSrcA, const int16_t restrict pSrcB, int16_t *restrict pDst, uint32_t deciPoint, uint32_t numSamples) 16-bit integer complex-by-complex multiplication |
void | plp_cmplx_mult_cmplx_q32_rv32im(const int32_t restrict pSrcA, const int32_t restrict pSrcB, int32_t *restrict pDst, uint32_t deciPoint, uint32_t numSamples) Floating-point complex-by-complex multiplication. |
void | plp_cmplx_mult_cmplx_q32_xpulpv2(const int32_t restrict pSrcA, const int32_t restrict pSrcB, int32_t *restrict pDst, uint32_t deciPoint, uint32_t numSamples) Floating-point complex-by-complex multiplication. |
void | plp_cmplx_mult_cmplx_q8_rv32im(const int8_t restrict pSrcA, const int8_t restrict pSrcB, int8_t *restrict pDst, uint32_t deciPoint, uint32_t numSamples) 16-bit integer complex-by-complex multiplication |
void | plp_cmplx_mult_cmplx_q8_xpulpv2(const int8_t restrict pSrcA, const int8_t restrict pSrcB, int8_t *restrict pDst, uint32_t deciPoint, uint32_t numSamples) 16-bit integer complex-by-complex multiplication |
void | plp_cmplx_mult_cmplx_f32(const float32_t restrict pSrcA, const float32_t restrict pSrcB, float32_t *restrict pDst, uint32_t numSamples) Floating-point complex-by-complex multiplication. |
void | plp_cmplx_mult_cmplx_i16(const int16_t restrict pSrcA, const int16_t restrict pSrcB, int16_t *restrict pDst, uint32_t numSamples) 16-bit integer complex-by-complex multiplication. |
void | plp_cmplx_mult_cmplx_i8(const int8_t restrict pSrcA, const int8_t restrict pSrcB, int8_t *restrict pDst, uint32_t numSamples) 8-bit integer complex-by-complex multiplication. |
void | plp_cmplx_mult_cmplx_q16(const int16_t restrict pSrcA, const int16_t restrict pSrcB, int16_t *restrict pDst, uint32_t deciPoint, uint32_t numSamples) 16-bit fixed-point complex-by-complex multiplication. |
void | plp_cmplx_mult_cmplx_q32(const int32_t restrict pSrcA, const int32_t restrict pSrcB, int32_t *restrict pDst, uint32_t deciPoint, uint32_t numSamples) 32-bit fixed-point complex-by-complex multiplication. |
void | plp_cmplx_mult_cmplx_q8(const int8_t restrict pSrcA, const int8_t restrict pSrcB, int8_t *restrict pDst, uint32_t deciPoint, uint32_t numSamples) 8-bit fixed-point complex-by-complex multiplication. |
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 numSamples
represents the number of complex samples processed. The complex arrays have a total of 2*numSamples
real values. The underlying algorithm is used:
for (n = 0; n < numSamples; n++) {
pDst[(2n)+0] = pSrcA[(2n)+0] * pSrcB[(2n)+0] - pSrcA[(2n)+1] * pSrcB[(2n)+1];
pDst[(2n)+1] = pSrcA[(2n)+0] * pSrcB[(2n)+1] + pSrcA[(2n)+1] * pSrcB[(2n)+0];
}
There are separate functions for floating-point, Q15, and Q31 data types.
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 numSamples
represents the number of complex samples processed. The complex arrays have a total of 2*numSamples
real values. The underlying algorithm is used:
for (n = 0; n < numSamples; n++) {
pDst[(2n)+0] = pSrcA[(2n)+0] * pSrcB[(2n)+0] - pSrcA[(2n)+1] * pSrcB[(2n)+1];
pDst[(2n)+1] = pSrcA[(2n)+0] * pSrcB[(2n)+1] + pSrcA[(2n)+1] * pSrcB[(2n)+0];
}
There are separate functions for floating point, integer, and fixed point 32- 16- 8-bit data types.
Functions Documentation
function plp_cmplx_mult_cmplx_f32_xpulpv2
void plp_cmplx_mult_cmplx_f32_xpulpv2(
const float32_t *__restrict__ pSrcA,
const float32_t *__restrict__ pSrcB,
float32_t *__restrict__ pDst,
uint32_t numSamples
)
Floating-point complex-by-complex multiplication.
Parameters:
- pSrcA points to complex input vector
- pSrcB points to real input vector
- pDst points to complex output vector
- numSamples number of samples in each vector
Return: none
Floating-point complex multiplied by complex.
function plp_cmplx_mult_cmplx_i16_rv32im
void plp_cmplx_mult_cmplx_i16_rv32im(
const int16_t *__restrict__ pSrcA,
const int16_t *__restrict__ pSrcB,
int16_t *__restrict__ pDst,
uint32_t numSamples
)
16-bit integer complex-by-complex multiplication
Parameters:
- pSrcA points to first input vector
- pSrcB points to second input vector
- pDst points to output vector
- numSamples number of samples in each vector
Return: none
16-bit integer complex multiplied by complex.
function plp_cmplx_mult_cmplx_i16_xpulpv2
void plp_cmplx_mult_cmplx_i16_xpulpv2(
const int16_t *__restrict__ pSrcA,
const int16_t *__restrict__ pSrcB,
int16_t *__restrict__ pDst,
uint32_t numSamples
)
16-bit integer complex-by-complex multiplication
Parameters:
- pSrcA points to first input vector
- pSrcB points to second input vector
- pDst points to output vector
- numSamples number of samples in each vector
Return: none
16-bit integer complex multiplied by complex.
function plp_cmplx_mult_cmplx_q16_rv32im
void plp_cmplx_mult_cmplx_q16_rv32im(
const int16_t *__restrict__ pSrcA,
const int16_t *__restrict__ pSrcB,
int16_t *__restrict__ pDst,
uint32_t deciPoint,
uint32_t numSamples
)
16-bit integer complex-by-complex multiplication
Parameters:
- pSrcA points to first input vector
- pSrcB points to second input vector
- pDst points to output vector
- deciPoint decimal point for right shift
- numSamples number of samples in each vector
Return: none
16-bit fixed-point complex multiplied by complex.
function plp_cmplx_mult_cmplx_q16_xpulpv2
void plp_cmplx_mult_cmplx_q16_xpulpv2(
const int16_t *__restrict__ pSrcA,
const int16_t *__restrict__ pSrcB,
int16_t *__restrict__ pDst,
uint32_t deciPoint,
uint32_t numSamples
)
16-bit integer complex-by-complex multiplication
Parameters:
- pSrcA points to first input vector
- pSrcB points to second input vector
- pDst points to output vector
- deciPoint decimal point for right shift
- numSamples number of samples in each vector
Return: none
16-bit fixed-point complex multiplied by complex.
function plp_cmplx_mult_cmplx_q32_rv32im
void plp_cmplx_mult_cmplx_q32_rv32im(
const int32_t *__restrict__ pSrcA,
const int32_t *__restrict__ pSrcB,
int32_t *__restrict__ pDst,
uint32_t deciPoint,
uint32_t numSamples
)
Floating-point complex-by-complex multiplication.
Parameters:
- pSrcA points to first input vector
- pSrcB points to second input vector
- pDst points to output vector
- deciPoint decimal point for right shift
- numSamples number of samples in each vector
Return: none
32-bit fixed-point complex multiplied by complex.
function plp_cmplx_mult_cmplx_q32_xpulpv2
void plp_cmplx_mult_cmplx_q32_xpulpv2(
const int32_t *__restrict__ pSrcA,
const int32_t *__restrict__ pSrcB,
int32_t *__restrict__ pDst,
uint32_t deciPoint,
uint32_t numSamples
)
Floating-point complex-by-complex multiplication.
Parameters:
- pSrcA points to first input vector
- pSrcB points to second input vector
- pDst points to output vector
- deciPoint decimal point for right shift
- numSamples number of samples in each vector
Return: none
32-bit fixed-point complex multiplied by complex.
function plp_cmplx_mult_cmplx_q8_rv32im
void plp_cmplx_mult_cmplx_q8_rv32im(
const int8_t *__restrict__ pSrcA,
const int8_t *__restrict__ pSrcB,
int8_t *__restrict__ pDst,
uint32_t deciPoint,
uint32_t numSamples
)
16-bit integer complex-by-complex multiplication
Parameters:
- pSrcA points to first input vector
- pSrcB points to second input vector
- pDst points to output vector
- deciPoint decimal point for right shift
- numSamples number of samples in each vector
Return: none
8-bit fixed-point complex multiplied by complex.
function plp_cmplx_mult_cmplx_q8_xpulpv2
void plp_cmplx_mult_cmplx_q8_xpulpv2(
const int8_t *__restrict__ pSrcA,
const int8_t *__restrict__ pSrcB,
int8_t *__restrict__ pDst,
uint32_t deciPoint,
uint32_t numSamples
)
16-bit integer complex-by-complex multiplication
Parameters:
- pSrcA points to first input vector
- pSrcB points to second input vector
- pDst points to output vector
- deciPoint decimal point for right shift
- numSamples number of samples in each vector
Return: none
8-bit fixed-point complex multiplied by complex.
function plp_cmplx_mult_cmplx_f32
void plp_cmplx_mult_cmplx_f32(
const float32_t *__restrict__ pSrcA,
const float32_t *__restrict__ pSrcB,
float32_t *__restrict__ pDst,
uint32_t numSamples
)
Floating-point complex-by-complex multiplication.
Parameters:
- pSrcA points to first input vector
- pSrcB points to second input vector
- pDst points to output vector
- numSamples number of samples in each vector
Return: none
Glue code for complex multiplied by complex of 32-bit float vectors.
function plp_cmplx_mult_cmplx_i16
void plp_cmplx_mult_cmplx_i16(
const int16_t *__restrict__ pSrcA,
const int16_t *__restrict__ pSrcB,
int16_t *__restrict__ pDst,
uint32_t numSamples
)
16-bit integer complex-by-complex multiplication.
Parameters:
- pSrcA points to first input vector
- pSrcB points to second input vector
- pDst points to output vector
- numSamples number of samples in each vector
Return: none
Glue code for complex multiplied by complex of 16-bit integer vectors.
function plp_cmplx_mult_cmplx_i8
void plp_cmplx_mult_cmplx_i8(
const int8_t *__restrict__ pSrcA,
const int8_t *__restrict__ pSrcB,
int8_t *__restrict__ pDst,
uint32_t numSamples
)
8-bit integer complex-by-complex multiplication.
Parameters:
- pSrcA points to first input vector
- pSrcB points to second input vector
- pDst points to output vector
- numSamples number of samples in each vector
Return: none
Glue code for complex multiplied by complex of 8-bit integer vectors.
function plp_cmplx_mult_cmplx_q16
void plp_cmplx_mult_cmplx_q16(
const int16_t *__restrict__ pSrcA,
const int16_t *__restrict__ pSrcB,
int16_t *__restrict__ pDst,
uint32_t deciPoint,
uint32_t numSamples
)
16-bit fixed-point complex-by-complex multiplication.
Parameters:
- pSrcA points to first input vector
- pSrcB points to second input vector
- pDst points to output vector
- deciPoint decimal point for right shift
- numSamples number of samples in each vector
Return: none
Glue code for complex multiplied by complex of 16-bit fixed-point vectors.
function plp_cmplx_mult_cmplx_q32
void plp_cmplx_mult_cmplx_q32(
const int32_t *__restrict__ pSrcA,
const int32_t *__restrict__ pSrcB,
int32_t *__restrict__ pDst,
uint32_t deciPoint,
uint32_t numSamples
)
32-bit fixed-point complex-by-complex multiplication.
Parameters:
- pSrcA points to first input vector
- pSrcB points to second input vector
- pDst points to output vector
- deciPoint decimal point for right shift
- numSamples number of samples in each vector
Return: none
Glue code for complex multiplied by complex of 32-bit fixed-point vectors.
function plp_cmplx_mult_cmplx_q8
void plp_cmplx_mult_cmplx_q8(
const int8_t *__restrict__ pSrcA,
const int8_t *__restrict__ pSrcB,
int8_t *__restrict__ pDst,
uint32_t deciPoint,
uint32_t numSamples
)
8-bit fixed-point complex-by-complex multiplication.
Parameters:
- pSrcA points to first input vector
- pSrcB points to second input vector
- pDst points to output vector
- deciPoint decimal point for right shift
- numSamples number of samples in each vector
Return: none
Glue code for complex multiplied by complex of 8-bit fixed-point vectors.
Updated on 2023-03-01 at 16:16:32 +0000