|
void | csky_dsp_lib_mat_cx_mul_q15 (cq15_t *A, cq15_t *B, uint32 N, uint32 M, uint32 L, cq15_t *C) |
| Q15 复数矩阵乘法 更多...
|
|
void | csky_dsp_lib_mat_cx_mult_q31 (cq31_t *A, cq31_t *B, uint32 N, uint32 M, uint32 L, cq31_t *C) |
| Q31 复数矩阵乘法 更多...
|
|
复数矩阵相乘只有在第一个矩阵的列数和第二个矩阵的行数相等时才有意义。 在函数中,矩阵a格式为N*M,而矩阵b格式为M*L,因此输出矩阵的格式为N*L。 数据在这三个矩阵中的存储方式交叉式存储(实部,虚部,实部,虚部,...), 并支持Q15和Q31数据格式。
void csky_dsp_lib_mat_cx_mul_q15 |
( |
cq15_t * |
A, |
|
|
cq15_t * |
B, |
|
|
uint32 |
N, |
|
|
uint32 |
M, |
|
|
uint32 |
L, |
|
|
cq15_t * |
C |
|
) |
| |
- 参数
-
[in] | *A | 指向输入缓存a |
[in] | *B | 指向输入缓存b |
[in] | N | 输入矩阵a和输出矩阵c的行数 |
[in] | M | 输入矩阵a的列数,输入矩阵b的行数 |
[in] | L | 输入矩阵b和输出矩阵c的列数 |
[out] | *C | 指向输出缓存 |
- 返回
- none
缩放和溢出时的行为:
- 函数在整个计算过程中都用到了64位算法。当两个Q15的数相乘,会产生一个Q30的数, 然后这些Q30的数会用64位累加器进行累加。所以 这个方法提供了33个保护位,没有 溢出的风险。最后,低15位会被舍弃,然后饱和乘Q15格式的数。最后的输出结果会在 [0x8000, 0x7FFF]之间。
void csky_dsp_lib_mat_cx_mult_q31 |
( |
cq31_t * |
A, |
|
|
cq31_t * |
B, |
|
|
uint32 |
N, |
|
|
uint32 |
M, |
|
|
uint32 |
L, |
|
|
cq31_t * |
C |
|
) |
| |
- 参数
-
[in] | *A | 指向输入缓存a |
[in] | *B | 指向输入缓存b |
[in] | N | 输入矩阵a和输出矩阵c的行数 |
[in] | M | 输入矩阵a的列数,输入矩阵b的行数 |
[in] | L | 输入矩阵b和输出矩阵c的列数 |
[out] | *C | 指向输出缓存 |
- 返回
- none
缩放和溢出时的行为:
- 函数在整个计算过程中都用到了64位算法。当两个Q31的数相乘,会产生一个Q62的数, 然后这些Q62的数会用64位累加器进行累加。所以 这个方法只提供了1个保护位,会有 溢出的风险。然后,结果会右移31位,并饱和乘Q31格式数。最后的输出结果会在 [0x80000000, 0x7FFFFFFF]之间。
- 注解
- 正如前面提到的,计算中只有一个保护位,因此需要小心使用以防溢出。