# Complex-by-Real MultiplicationComplex Math Functions

## Functions

void arm_cmplx_mult_real_f32 (float32_t *pSrcCmplx, float32_t *pSrcReal, float32_t *pCmplxDst, uint32_t numSamples)
Floating-point complex-by-real multiplication.

void arm_cmplx_mult_real_q15 (q15_t *pSrcCmplx, q15_t *pSrcReal, q15_t *pCmplxDst, uint32_t numSamples)
Q15 complex-by-real multiplication.

void arm_cmplx_mult_real_q31 (q31_t *pSrcCmplx, q31_t *pSrcReal, q31_t *pCmplxDst, uint32_t numSamples)
Q31 complex-by-real multiplication.

## Description

Multiplies a complex vector by a real 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 while the real array has a total of `numSamples` real values.

The underlying algorithm is used:

```for(n=0; n<numSamples; n++) {
pCmplxDst[(2*n)+0] = pSrcCmplx[(2*n)+0] * pSrcReal[n];
pCmplxDst[(2*n)+1] = pSrcCmplx[(2*n)+1] * pSrcReal[n];
}
```

There are separate functions for floating-point, Q15, and Q31 data types.

## Function Documentation

 void arm_cmplx_mult_real_f32 ( float32_t * `pSrcCmplx, ` float32_t * `pSrcReal, ` float32_t * `pCmplxDst, ` uint32_t `numSamples ` )
Parameters
 [in] `*pSrcCmplx` points to the complex input vector [in] `*pSrcReal` points to the real input vector [out] `*pCmplxDst` points to the complex output vector [in] `numSamples` number of samples in each vector
Returns
none.
 void arm_cmplx_mult_real_q15 ( q15_t * `pSrcCmplx, ` q15_t * `pSrcReal, ` q15_t * `pCmplxDst, ` uint32_t `numSamples ` )
Parameters
 [in] `*pSrcCmplx` points to the complex input vector [in] `*pSrcReal` points to the real input vector [out] `*pCmplxDst` points to the complex output vector [in] `numSamples` number of samples in each vector
Returns
none.

Scaling and Overflow Behavior:

The function uses saturating arithmetic. Results outside of the allowable Q15 range [0x8000 0x7FFF] will be saturated.

References __PKHBT, and __SIMD32.

 void arm_cmplx_mult_real_q31 ( q31_t * `pSrcCmplx, ` q31_t * `pSrcReal, ` q31_t * `pCmplxDst, ` uint32_t `numSamples ` )
Parameters
 [in] `*pSrcCmplx` points to the complex input vector [in] `*pSrcReal` points to the real input vector [out] `*pCmplxDst` points to the complex output vector [in] `numSamples` number of samples in each vector
Returns
none.

Scaling and Overflow Behavior:

The function uses saturating arithmetic. Results outside of the allowable Q31 range[0x80000000 0x7FFFFFFF] will be saturated.

References clip_q63_to_q31().