Complex 16-bit Vector API
headroom_t vect_complex_s16_add()
将一个复合16位向量与另一个相加。
a_real[] 和 a_imag[] 共同表示复合16位输出尾数向量 aˉ。其中 Re{ak} 是 a_real[k],Im{ak} 是 a_imag[k]。
b_real[] 和 b_imag[] 共同表示复合16位输入尾数向量 bˉ。其中 Re{bk} 是 b_real[k],Im{bk} 是 b_imag[k]。
c_real[] 和 c_imag[] 共同表示复合16位输入尾数向量 cˉ。其中 Re{ck} 是 c_real[k],Im{ck} 是 c_imag[k]。
每个输入向量必须从字对齐的地址开始。该操作可以在输入 b_real[]、b_imag[]、c_real[] 和 c_imag[] 上安全地原地执行。
length 是每个向量中的元素数量。
b_shr 和 c_shr 是应用于 bˉ 和 cˉ 的有符号算术右移。
操作:
bk′←sat16(⌊bk⋅2−b_shr⌋)ck′←sat16(⌊ck⋅2−c_shr⌋)Re{ak}←Re{bk′}+Re{ck′}Im{ak}←Im{bk′}+Im{ck′} for k∈0 ... (length−1)
块浮点数:
如果 bˉ 和 cˉ 是BFP向量 bˉ⋅2b_exp 和 cˉ⋅2c_exp 的复合16位尾数,则结果向量 aˉ 是BFP向量 aˉ⋅2a_exp 的复合16位尾数。
在这种情况下,必须选择 bshr 和 cshr,使得 a_exp=b_exp+b_shr=c_exp+c_shr。只有当尾数与相同的指数关联时,才有意义地相加或相减。
函数 vect_complex_s16_add_prepare() 可以根据输入指数 b_exp 和 c_exp 以及输入头空间 b_hr 和 c_hr 来获取 a_exp、b_shr 和 c_shr 的值。
参数:
-
int16_t a_real[] – [out] 复合输出向量 aˉ 的实部
-
int16_t a_imag[] – [out] 复合输出向量 aˉ 的虚部
-
const int16_t b_real[] – [in] 复合输入向量 bˉ 的实部
-
const int16_t b_imag[] – [in] 复合输入向量 bˉ 的虚部
-
const int16_t c_real[] – [in] 复合输入向量 cˉ 的实部
-
const int16_t c_imag[] – [in] 复合输入向量 cˉ 的虚部
-
const unsigned length – [in] 向量 aˉ、bˉ 和 cˉ 中的元素数量
-
const right_shift_t b_shr – [in] 应用于 bˉ 的右移量
-
const right_shift_t c_shr – [in] 应用于 cˉ 的右移量
返回值:
输出向量 aˉ 的头空间。
异常:
如果 a_real、a_imag、b_real、b_imag、c_real 或 c_imag 不是字对齐的,则引发 ET_LOAD_STORE 异常(参见 笔记:向量对齐)。
另 请参阅:
vect_complex_s16_add_prepare()
参考性能:

headroom_t vect_complex_s16_add_scalar()
将一个标量添加到复数16位向量中。
a[]和b[]分别表示复数16位尾数向量 aˉ 和 bˉ。每个向量必须从字对齐的地址开始。该操作可以在b[]上安全地原地执行。
c是要添加到 bˉ 的每个元素的复数标量 c。
length是每个向量中的元素数量。
b_shr是应用于 bˉ 的带符号算术右移位数。
该操作可以描述如下:
bk′←sat16(⌊bk⋅2−b_shr⌋)Re{ak}←Re{bk′}+Re{c}Im{ak}←Im{bk′}+Im{c} 其中 k∈0 ... (length−1)
块浮点数:
如果 bˉ 的元素是BFP向量 bˉ⋅2b_exp 的复数尾数,并且 c 是浮点数 c⋅2c_exp 的尾数,则结果向量 aˉ 是BFP向量 aˉ⋅2a_exp 的尾数。
在这种情况下,必须选择 b_shr 和 c_shr 使得 a_exp=b_exp+b_shr=c_exp+c_shr。只有当尾数与相同的指数相关联时,加法或减法才有意义。
函数 vect_complex_s16_add_scalar_prepare() 可以根据输入的指数 b_exp 和 c_exp 以及输入的头空间 b_hr 和 c_hr 来获取 a_exp、b_shr 和 c_shr 的值。
注意,c_shr 是 vect_complex_s16_add_scalar_prepare() 的输出,但它不是此函数的参数。由 vect_complex_s16_add_scalar_prepare() 产生的 c_shr 应由用户应用,并将结果作为输入 c 传递。
参数:
-
int16_t a_real[] – [out] 复数输出向量 aˉ 的实部
-
int16_t a_imag[] – [out] 复数输出向量 aˉ 的虚部
-
const int16_t b_real[] – [in] 复数输入向量 bˉ 的实部
-
const int16_t b_imag[] – [in] 复数输入向量 bˉ 的虚部
-
const complex_s16_t c – [in] 复数输入标量 c
-
const unsigned length – [in] 向量 aˉ 和 bˉ 中的元素数量
-
const right_shift_t b_shr – [in] 应用于 bˉ 的右移位数
返回值:
异常:
ET_LOAD_STORE 如果 a 或 b 不是字对齐的(参见 笔记:向量对齐)
参见:
vect_complex_s16_add_scalar_prepare()
参考性能:

headroom_t vect_complex_s16_conj_mul()
逐元素将一个复数16位向量与另一个的共轭相乘。
a_real[] 和 a_imag[] 一起表示复数16位输出尾数向量 aˉ。每个 Re{ak} 是 a_real[k],每个 Im{ak} 是 a_imag[k]。
b_real[] 和 b_imag[] 一起表示复数16位输入尾数向量 bˉ。每个 Re{bk} 是 b_real[k],每个 Im{bk} 是 b_imag[k]。
c_real[] 和 c_imag[] 一起表示复数16位输入尾数向量 cˉ。每个 Re{ck} 是 c_real[k],每个 Im{ck} 是 c_imag[k]。
每个输入向量必须从字对齐的地址开始。该操作可以在输入 b_real[]、b_imag[]、c_real[] 和 c_imag[] 上安全地原地执行。
length 是向量中的元素数量。
a_shr 是应用于保存倒数第二个结果的32位累加器的无符号算术右移。
操作:
vk=←Re{bk}⋅Re{ck}+Im{bk}⋅Im{ck}sk=←Im{bk}⋅Re{ck}−Re{bk}⋅Im{ck}Re{ak}←round(sat16(vk