Hilbert
该函数计算复解析信号dst,该解析信号dst包含原始实信号src作为实部,计算希尔伯特变换作为虚部。Hilbert变换是根据spec规范参数执行的:样本数len和hint。输入数据将补零或截断为len的大小。
Hilbert函数调用流程如下:
- 调用Init初始化HmppsHilbertPolicy_32f结构体。
- 调用主函数。
- 最后调用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,