---
title: ThresholdVal
description: "指定常数作为阈值，给向量中的元素做设阈操作。与threshold接口不同的是，不在阈值范围内的向量元素将被设置成指定值value。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2200/accel/kunpengaccel_hmpp_06_0103.html
sourcePath: /source/zh/kunpengboostkithistory/2200/accel/kunpengaccel_hmpp_06_0103.html
indexId: 04ea34607f48773c79b8abd785a04965743c90b655c0287042966e675b3b1bee75
---
# 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_GTVal_16s(const int16_t* src, int16_t* dst, int32_t len, int16_t level, int16_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
```
