|
CSI-DSP
Version 1.0.0
CSI DSP Software Library
|
函数 | |
| void | csky_cmplx_dot_prod_f32 (float32_t *pSrcA, float32_t *pSrcB, uint32_t numSamples, float32_t *realResult, float32_t *imagResult) |
| 浮点复数点积 更多... | |
| void | csky_cmplx_dot_prod_q15 (q15_t *pSrcA, q15_t *pSrcB, uint32_t numSamples, q31_t *realResult, q31_t *imagResult) |
| Q15复数点积 更多... | |
| void | csky_cmplx_dot_prod_q31 (q31_t *pSrcA, q31_t *pSrcB, uint32_t numSamples, q63_t *realResult, q63_t *imagResult) |
| Q31 复数点积 更多... | |
计算两个复数向量的点积. 向量的元素逐个相乘,然后累加.
pSrcA 指向第一个复数输入向量, pSrcB 指向第二个复数输入向量. numSamples 指定复数元素的个数, 复数数据是交错方式保存的 (real, imag, real, imag, ...). 每个向量一共有2*numSamples 个值.
使用的算法如下:
realResult=0;
imagResult=0;
for(n=0; n<numSamples; n++) {
realResult += pSrcA[(2*n)+0]*pSrcB[(2*n)+0] - pSrcA[(2*n)+1]*pSrcB[(2*n)+1];
imagResult += pSrcA[(2*n)+0]*pSrcB[(2*n)+1] + pSrcA[(2*n)+1]*pSrcB[(2*n)+0];
}
为浮点,Q15和Q31三种类型都提供了不同的函数.
| void csky_cmplx_dot_prod_f32 | ( | float32_t * | pSrcA, |
| float32_t * | pSrcB, | ||
| uint32_t | numSamples, | ||
| float32_t * | realResult, | ||
| float32_t * | imagResult | ||
| ) |
| *pSrcA | 指向第一个输入向量 |
| *pSrcB | 指向第二个输入向量 |
| numSamples | 向量中的复数元素数量 |
| *realResult | 实部的结果从这里返回 |
| *imagResult | 虚部的结果从这里返回 |
| void csky_cmplx_dot_prod_q15 | ( | q15_t * | pSrcA, |
| q15_t * | pSrcB, | ||
| uint32_t | numSamples, | ||
| q31_t * | realResult, | ||
| q31_t * | imagResult | ||
| ) |
| *pSrcA | 指向第一个输入向量 |
| *pSrcB | 指向第二个输入向量 |
| numSamples | 向量中的复数元素数量 |
| *realResult | 实部的结果从这里返回 |
| *imagResult | 虚部的结果从这里返回 |
缩放和溢出时的行为:
realResult 和 imagResult 是8.24格式. | void csky_cmplx_dot_prod_q31 | ( | q31_t * | pSrcA, |
| q31_t * | pSrcB, | ||
| uint32_t | numSamples, | ||
| q63_t * | realResult, | ||
| q63_t * | imagResult | ||
| ) |
| *pSrcA | 指向第一个输入向量 |
| *pSrcB | 指向第二个输入向量 |
| numSamples | 向量中的复数元素数量 |
| *realResult | 实部的结果从这里返回 |
| *imagResult | 虚部的结果从这里返回 |
缩放和溢出时的行为:
numSamples 少于 32768, 加法就不会溢出,也就不需要饱和操作. 返回结果realResult 和 imagResult 是16.48格式. 不需要输入向下缩放.