bl_mcu_sdk/examples/dsp/ComplexMathFunctions/cmplx_mult_real.c

40 lines
1.3 KiB
C

#include "ref.h"
void ref_cmplx_mult_real_f32(float32_t *pSrcCmplx, float32_t *pSrcReal,
float32_t *pCmplxDst, uint32_t numSamples)
{
uint32_t i;
for (i = 0; i < numSamples; i++) {
pCmplxDst[2 * i + 0] = pSrcCmplx[2 * i + 0] * pSrcReal[i];
pCmplxDst[2 * i + 1] = pSrcCmplx[2 * i + 1] * pSrcReal[i];
}
}
void ref_cmplx_mult_real_q31(q31_t *pSrcCmplx, q31_t *pSrcReal,
q31_t *pCmplxDst, uint32_t numSamples)
{
uint32_t i;
q31_t tempR, tempI;
for (i = 0; i < numSamples; i++) {
tempR = ((q63_t)pSrcCmplx[2 * i + 0] * pSrcReal[i]) >> 32;
tempI = ((q63_t)pSrcCmplx[2 * i + 1] * pSrcReal[i]) >> 32;
pCmplxDst[2 * i + 0] = ref_sat_n(tempR, 31) << 1;
pCmplxDst[2 * i + 1] = ref_sat_n(tempI, 31) << 1;
}
}
void ref_cmplx_mult_real_q15(q15_t *pSrcCmplx, q15_t *pSrcReal,
q15_t *pCmplxDst, uint32_t numSamples)
{
uint32_t i;
q31_t tempR, tempI;
for (i = 0; i < numSamples; i++) {
tempR = ((q31_t)pSrcCmplx[2 * i + 0] * pSrcReal[i]) >> 15;
tempI = ((q31_t)pSrcCmplx[2 * i + 1] * pSrcReal[i]) >> 15;
pCmplxDst[2 * i + 0] = ref_sat_q15(tempR);
pCmplxDst[2 * i + 1] = ref_sat_q15(tempI);
}
}