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虚部的结果从这里返回
返回
none.
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虚部的结果从这里返回
返回
none.

缩放和溢出时的行为:

函数的实现使用了一个内部的64位累加器. 1.15格式和1.15格式相乘的中间结果用的是全精度,产生2.30格式的结果. 64位累加器将结果累加位34.30格式的值. 最后,累加结果转换为8.24格式. 返回结果的 realResultimagResult 是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虚部的结果从这里返回
返回
none.

缩放和溢出时的行为:

函数的实现使用了一个内部的64位累加器. 1.31格式和1.31格式相乘的结果是64位精度,移位成16.48格式. 中间结果的实部和虚部累加用的都是16.48格式. 只要 numSamples 少于 32768, 加法就不会溢出,也就不需要饱和操作. 返回结果realResultimagResult 是16.48格式. 不需要输入向下缩放.