---
title: Hilbert
description: "该函数计算复解析信号dst，该解析信号dst包含原始实信号src作为实部，计算希尔伯特变换作为虚部。Hilbert变换是根据spec规范参数执行的：样本数len和hint。输入数据将补零或截断为len的大小。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/251RC1/accel/kunpengaccel_hmpp_06_0132.html
sourcePath: /source/zh/kunpengboostkithistory/251RC1/accel/kunpengaccel_hmpp_06_0132.html
indexId: fb4db2bf884489bbda4298c2e06e42025be8f0a2ae58f6a9c9ffcffc219c56c277
---
# Hilbert

该函数计算复解析信号dst，该解析信号dst包含原始实信号src作为实部，计算希尔伯特变换作为虚部。Hilbert变换是根据spec规范参数执行的：样本数len和hint。输入数据将补零或截断为len的大小。

Hilbert函数调用流程如下：

1. 调用Init初始化HmppsHilbertPolicy_32f结构体。
2. 调用主函数。
3. 最后调用Release释放HmppsHilbertPolicy_32f函数所包含内存。

函数接口声明如下：

- 初始化操作：
  HmppResult HMPPS_HilbertInit_32f32fc(int32_t len, HmppsHilbertPolicy_32f32fc **policy);

- 主函数操作：
  HmppResult HMPPS_Hilbert_32f32fc(const float *src, Hmpp32fc *dst, int32_t len, HmppsHilbertPolicy_32f32fc *policy);

- 释放内存操作：
  HmppResult HMPPS_HilbertRelease_32f32fc(HmppsHilbertPolicy_32f32fc *policy);


#### 参数

| 参数名 | 描述 | 取值范围 | 输入/输出 |
| --- | --- | --- | --- |
| src | 源向量。 | 非空 | 输入 |
| dst | 目标向量。 | 非空 | 输出 |
| len | 向量长度。 | (0, INT\_MAX] | 输入 |
| policy （init函数中） | 双重指针，指向HmppsHilbertPolicy。 | 非空 | 输出 |
| policy （主函数中和release函数中） | 指针，指向HmppsHilbertPolicy结构体的指针。 | 非空 | 输入 |


#### 返回值

- 成功：返回HMPP_STS_NO_ERR。
- 失败：返回错误码。


#### 错误码

| 错误码 | 描述 |
| --- | --- |
| HMPP\_STS\_NO\_ERR | 表示没有错误。 |
| HMPP\_STS\_NULL\_PTR\_ERR | 当指定的任一指针为空时指示错误。 |
| HMPP\_STS\_SIZE\_ERR | 当len小于或等于0时指示错误。 |
| HMPP\_STS\_MALLOC\_FAILED | Init函数中进行算法模型所需内存申请失败。 |
| HMPP\_STS\_MISMATCH | Init函数申请内存的问题规模和主函数中实际计算的问题规模不匹配。 |


#### 注意

- 调用该接口计算之前，必须调用Init接口初始化HmppsHilbertPolicy_32f规范结构。
- HmppsHilbertPolicy_32f结构体初始化需在Init函数中进行申请的，用户无法自己进行该结构体申请定义。


#### 示例

```
void Hilbert_Example()
{
const int len = 10;
float src[len];
Hmpp32fc dst[len];
HmppsHilbertPolicy_32f32fc *policy = NULL;
for (int i = 0; i < 10; ++i){
src[i] = i / 10.0;
}
HmppResult result = HMPPS_HilbertInit_32f32fc(len, &policy);
if (result != HMPP_STS_NO_ERR) {
return;
}
result = HMPPS_Hilbert_32f32fc(src, dst, len, policy);
if (result != HMPP_STS_NO_ERR) {
return;
}
result = HMPPS_HilbertRelease_32f32fc(policy);
if (result != HMPP_STS_NO_ERR) {
return;
}
for (int i = 0; i < len; ++i) {
printf("%.2f + %.6fi ", dst[i].re, dst[i].im);
}
}
```

运行结果：

```
0 + 0.550553i, 0.1 + -0.0649839i, 0.2 + -0.0649839i, 0.3 + -0.210292i, 0.4 + -0.210292i, 0.5 + -0.210292i, 0.6 + -0.210292i, 0.7 + -0.0649839i, 0.8 + -0.0649839i, 0.9 + 0.550553i,
```
