ThresholdVal
指定常数作为阈值,给向量中的元素做设阈操作。与threshold接口不同的是,不在阈值范围内的向量元素将被设置成指定值value。
比较操作分为三类,由接口函数名指定,包括:
- HMPPS_Threshold_LTVal
如果源向量src是复数序列,此时参数level必须是实数,计算公式为:
- HMPPS_Threshold_GTVal
如果源向量src是复数序列,此时参数level必须是实数,计算公式为:
- HMPPS_Threshold_LTValGTVal
该模式要求源向量的元素同时满足大于下边界和小于上边界的条件。参数levelLT是下边界,levelGT是上边界。小于levelLT的元素会被设为valueLT,大于levelGT的元素会被设为valueGT。要求levelLT必须小于或等于levelGT。计算公式如下:
函数接口声明如下:
- 整型数的操作:
HmppResult HMPPS_Threshold_LTVal_16s(const int16_t* src, int16_t* dst, int32_t len, int16_t level, int16_t value);
HmppResult HMPPS_Threshold_LTVal_32s(const int32_t* src, int32_t* dst, int32_t len, int32_t level, int32_t value);
HmppResult HMPPS_Threshold_GTVal_16s(const int16_t* src, int16_t* dst, int32_t len, int16_t level, int16_t value);
HmppResult HMPPS_Threshold_GTVal_32s(const int32_t* src, int32_t* dst, int32_t len, int32_t level, int32_t value);
HmppResult HMPPS_Threshold_LTValGTVal_16s(const int16_t* src, int16_t* dst, int32_t len, int16_t levelLT, int16_t valueLT, int16_t levelGT, int16_t valueGT);
HmppResult HMPPS_Threshold_LTValGTVal_32s(const int32_t* src, int32_t* dst, int32_t len, int32_t levelLT, int32_t valueLT, int32_t levelGT, int32_t valueGT);
- 浮点数的操作:
HmppResult HMPPS_Threshold_LTVal_32f(const float* src, float* dst, int32_t len, float level, float value);
HmppResult HMPPS_Threshold_LTVal_64f(const double* src, double* dst, int32_t len, double level, double value);
HmppResult HMPPS_Threshold_LTVal_32fc(const Hmpp32fc* src, Hmpp32fc* dst, int32_t len, float level, Hmpp32fc value);
HmppResult HMPPS_Threshold_GTVal_32f(const float* src, float* dst, int32_t len, float level, float value);
HmppResult HMPPS_Threshold_GTVal_64f(const double* src, double* dst, int32_t len, double level, double value);
HmppResult HMPPS_Threshold_GTVal_32fc(const Hmpp32fc* src, Hmpp32fc* dst, int32_t len, float level, Hmpp32fc value);
HmppResult HMPPS_Threshold_LTValGTVal_32f(const float* src, float* dst, int32_t len, float levelLT, float valueLT, float levelGT, float valueGT);
HmppResult HMPPS_Threshold_LTValGTVal_64f(const double* src, double* dst, int32_t len, double levelLT, double valueLT, double levelGT, double valueGT);
- 整型数的原址操作:
HmppResult HMPPS_Threshold_LTVal_16s_I(int16_t* srcDst, int32_t len, int16_t level, int16_t value);
HmppResult HMPPS_Threshold_GTVal_16s_I(int16_t* srcDst, int32_t len, int16_t level, int16_t value);
HmppResult HMPPS_Threshold_LTValGTVal_16s_I(int16_t* srcDst, int32_t len, int16_t levelLT, int16_t valueLT, int16_t levelGT, int16_t valueGT);
HmppResult HMPPS_Threshold_LTValGTVal_32s_I(int32_t* srcDst, int32_t len, int32_t levelLT, int32_t valueLT, int32_t levelGT, int32_t valueGT);
- 浮点数的原址操作:
HmppResult HMPPS_Threshold_LTVal_32f_I(float* srcDst, int32_t len, float level, float value);
HmppResult HMPPS_Threshold_LTVal_64f_I(double* srcDst, int32_t len, double level, double value);
HmppResult HMPPS_Threshold_LTVal_32fc_I(Hmpp32fc* srcDst, int32_t len, float level, Hmpp32fc value);
HmppResult HMPPS_Threshold_GTVal_32f_I(float* srcDst, int32_t len, float level, float value);
HmppResult HMPPS_Threshold_GTVal_64f_I(double* srcDst, int32_t len, double level, double value);
HmppResult HMPPS_Threshold_GTVal_32fc_I(Hmpp32fc* srcDst, int32_t len, float level, Hmpp32fc value);
HmppResult HMPPS_Threshold_LTValGTVal_32f_I(float* srcDst, int32_t len, float levelLT, float valueLT, float levelGT, float valueGT);
HmppResult HMPPS_Threshold_LTValGTVal_64f_I(double* srcDst, int32_t len, double levelLT, double valueLT, double levelGT, double valueGT);
参数
参数名 |
描述 |
取值范围 |
输入/输出 |
---|---|---|---|
src |
指向源向量的指针。 |
非空 |
输入 |
dst |
指向目标向量的指针。 |
非空 |
输出 |
srcDst |
指向原址操作向量的指针。 |
非空 |
输入/输出 |
len |
向量长度。 |
(0,INT_MAX] |
输入 |
level |
阈值。 |
不限,视类型而定 |
输入 |
value |
设定值。 |
不限,视类型而定 |
输入 |
levelLT |
阈值下界。 |
小于或等于levelGT |
输入 |
levelGT |
阈值上界。 |
大于levelLT |
输入 |
valueLT |
下界替换值。 |
不限,视类型而定 |
输入 |
valueGT |
上界替换值。 |
不限,视类型而定 |
输入 |
返回值
- 成功:返回HMPP_STS_NO_ERR。
- 失败:返回错误码。
错误码
错误码 |
描述 |
---|---|
HMPP_STS_NULL_PTR_ERR |
src、dst、srcDst这几个入参中存在空指针。 |
HMPP_STS_SIZE_ERR |
len小于或等于0。 |
HMPP_STS_THRESHOLD_ERR |
阈值下界大于阈值上界。 |
HMPP_STS_THRESH_NEG_LEVEL_ERR |
阈值小于0。 |
注意
在所有的复数操作中,level必须是正数。
示例
#define BUFFER_SIZE_T 20 void ThresholdValExample(void) { float src[BUFFER_SIZE_T] = {-1.63, 0.92, 6.15, 3.34, -1.28, 4.53, 8.79, 4.23, 2.18, 9.69, 5.34, 8.03, 1.90, 8.76, 4.58, 0.98, 4.30, 8.03, 11.19, 8.41}; float dst[BUFFER_SIZE_T] = {0.00}; int32_t i; HmppResult result = HMPPS_Threshold_LTVal_32f(src, dst, BUFFER_SIZE_T, 3.14, -2.71); if (result != HMPP_STS_NO_ERR) { return; } printf("Threshold1: result = %d.\ndst1 = ", result); for (i = 0; i < BUFFER_SIZE_T; i++) { printf(" %.2f ", dst[i]); } HMPPS_Zero_32f(dst, BUFFER_SIZE_T); result = HMPPS_Threshold_GTVal_32f(src, dst, BUFFER_SIZE_T, 8.51, 2.71); if (result != HMPP_STS_NO_ERR) { return; } printf("\nThreshold2: result = %d.\ndst2 = ", result); for (i = 0; i < BUFFER_SIZE_T; i++) { printf(" %.2f ", dst[i]); } HMPPS_Zero_32f(dst, BUFFER_SIZE_T); result = HMPPS_Threshold_LTValGTVal_32f(src, dst, BUFFER_SIZE_T, 3.14, 2.71, 8.51, -2.71); if (result != HMPP_STS_NO_ERR) { return; } printf("\nThreshold3: result = %d.\ndst3 = ", result); for (i = 0; i < BUFFER_SIZE_T; i++) { printf(" %.2f ", dst[i]); } }
运行结果:
Threshold1: result = 0. dst1 = -2.71 -2.71 6.15 3.34 -2.71 4.53 8.79 4.23 -2.71 9.69 5.34 8.03 -2.71 8.76 4.58 -2.71 4.30 8.03 11.19 8.41 Threshold2: result = 0. dst2 = -1.63 0.92 6.15 3.34 -1.28 4.53 2.71 4.23 2.18 2.71 5.34 8.03 1.90 2.71 4.58 0.98 4.30 8.03 2.71 8.41 Threshold3: result = 0. dst3 = 2.71 2.71 6.15 3.34 2.71 4.53 -2.71 4.23 2.71 -2.71 5.34 8.03 2.71 -2.71 4.58 2.71 4.30 8.03 -2.71 8.41