-
Notifications
You must be signed in to change notification settings - Fork 205
Open
Labels
futureFuture improvementsFuture improvements
Description
Summary
Add a function to compute a dot product between a real input vector and complex coefficient vector, returning a complex result.
This is useful for FIR filtering with complex taps and real input (e.g., frequency-translating FIR filters on real data), or filtering complex input with real taps.
Current API gap
CMSIS-DSP currently provides:
| Function | Operation | Input types | Output |
|---|---|---|---|
arm_dot_prod_* |
Real dot product | real × real | real |
arm_cmplx_dot_prod_* |
Complex dot product | complex × complex | complex |
arm_cmplx_mult_real_* |
Element-wise multiply | complex × real | complex |
However, there is no function for real × complex → complex in dot-product form.
Proposed API
Following the existing naming and prototype conventions:
void arm_cmplx_dot_prod_real_f16(const float16_t *pSrcReal,
const float16_t *pSrcCmplx,
uint32_t numSamples,
float16_t *realResult,
float16_t *imagResult);
void arm_cmplx_dot_prod_real_f32(const float32_t *pSrcReal,
const float32_t *pSrcCmplx,
uint32_t numSamples,
float32_t *realResult,
float32_t *imagResult);
void arm_cmplx_dot_prod_real_q15(const q15_t *pSrcReal,
const q15_t *pSrcCmplx,
uint32_t numSamples,
q31_t *realResult,
q31_t *imagResult);
void arm_cmplx_dot_prod_real_q31(const q31_t *pSrcReal,
const q31_t *pSrcCmplx,
uint32_t numSamples,
q63_t *realResult,
q63_t *imagResult);`Semantics:
Implementation notes
- Could internally reuse the complex-by-real multiplication kernels (
arm_cmplx_mult_real_*) with accumulation.
Example use case
Frequency-translating FIR filter:
// x: real input, h: complex bandpass taps
arm_cmplx_dot_prod_real_f32(x, h, numTaps, &accReal, &accImag);This avoids manually separating real/imag taps or converting x[n] to complex.
Metadata
Metadata
Assignees
Labels
futureFuture improvementsFuture improvements