CSI-DSP  Version 1.0.0
CSI DSP Software Library
函数
复数矩阵乘法

函数

csky_status csky_mat_cmplx_mult_f32 (const csky_matrix_instance_f32 *pSrcA, const csky_matrix_instance_f32 *pSrcB, csky_matrix_instance_f32 *pDst)
 浮点复数矩阵乘法 更多...
 
csky_status csky_mat_cmplx_mult_q15 (const csky_matrix_instance_q15 *pSrcA, const csky_matrix_instance_q15 *pSrcB, csky_matrix_instance_q15 *pDst, q15_t *pScratch)
 Q15复数矩阵乘法 更多...
 
csky_status csky_mat_cmplx_mult_q31 (const csky_matrix_instance_q31 *pSrcA, const csky_matrix_instance_q31 *pSrcB, csky_matrix_instance_q31 *pDst)
 Q31复数矩阵乘法 更多...
 

简要说明

只有当第一个矩阵的列数和第二个矩阵的行数相等的时候,才可以做复数矩阵乘法。 M x N 矩阵和 N x P 矩阵相乘的结果是一个 M x P矩阵。 当使能矩阵大小检查,函数会检查: (1) pSrcApSrcB 的内部尺寸是否相等; (2) 输出向量的尺寸是否跟 pSrcApSrcB 的计算结果相等.

函数说明

csky_status csky_mat_cmplx_mult_f32 ( const csky_matrix_instance_f32 pSrcA,
const csky_matrix_instance_f32 pSrcB,
csky_matrix_instance_f32 pDst 
)
参数
[in]*pSrcA指向第一个输入的复数矩阵结构体
[in]*pSrcB指向第二个输入的复数矩阵结构体
[out]*pDst指向输出的复数矩阵结构体
返回
根据矩阵大小的检查结果返回 CSKY_MATH_SIZE_MISMATCH 或者 CSKY_MATH_SUCCESS
csky_status csky_mat_cmplx_mult_q15 ( const csky_matrix_instance_q15 pSrcA,
const csky_matrix_instance_q15 pSrcB,
csky_matrix_instance_q15 pDst,
q15_t pScratch 
)
参数
[in]*pSrcA指向第一个输入的复数矩阵结构体
[in]*pSrcB指向第二个输入的复数矩阵结构体
[out]*pDst指向输出的复数矩阵结构体
[in]*pScratch指向保存中间结果的临时数组
返回
根据矩阵大小的检查结果返回 CSKY_MATH_SIZE_MISMATCH 或者 CSKY_MATH_SUCCESS
最佳性能的条件
输入,输出,和缓存都需要32位对齐
限制
如果芯片不支持分对齐访问,则定义宏 UNALIGNED_SUPPORT_DISABLE 同时,输入,输出,临时buffer,都应该是32位对齐。

缩放和溢出行为:

函数实现使用了一个内部64位累加器。输入都是1.15格式的,乘法生成2.30结果。 2.30格式的中间结果在34.30格式的64位累加器累加。 由于有33个保护位,所以不会有溢出风险。34.30的结果丢弃低15位截断为34.15格式,然后饱和成为1.15格式的结果。
函数 csky_mat_mult_fast_q15() 是这个函数的一个快速版本,但是丢失更多的精度
csky_status csky_mat_cmplx_mult_q31 ( const csky_matrix_instance_q31 pSrcA,
const csky_matrix_instance_q31 pSrcB,
csky_matrix_instance_q31 pDst 
)
参数
[in]*pSrcA指向第一个输入的复数矩阵结构体
[in]*pSrcB指向第二个输入的复数矩阵结构体
[out]*pDst指向输出的复数矩阵结构体
返回
根据矩阵大小的检查结果返回 CSKY_MATH_SIZE_MISMATCH 或者 CSKY_MATH_SUCCESS

缩放和溢出行为:

函数实现使用了一个内部64位累加器。 累加器用2.62格式维持了中间结果的所有精度,但是只有一个保护位。 累加时候没有饱和计算,因此累加器溢出会扭曲结果,需要缩小输入信号来防止中间结果溢出。 因为最多会有numColsA个加法进位,所以需要缩小 log2(numColsA) 位来防止溢出。 2.62格式的累加器右移31位,然后饱和生成1.31格式的最终结果。