计算src向量(长度为srcLen)的归一化自相关,结果存储到dst向量中。归一化支持正常、有偏和无偏自相关三种模式,计算公式如下:
该函数调用流程如下:
函数接口声明如下:
HmppResult HMPPS_AutoCorrInit_32f(int32_t srcLen, int32_t dstLen, HmppAlgMode calcMode, HmppsCorrPolicy_32f **policy);
HmppResult HMPPS_AutoCorrInit_64f(int32_t srcLen, int32_t dstLen, HmppAlgMode calcMode, HmppsCorrPolicy_64f **policy);
HmppResult HMPPS_AutoCorrInit_32fc(int32_t srcLen, int32_t dstLen, HmppAlgMode calcMode, HmppsCorrPolicy_32fc **policy);
HmppResult HMPPS_AutoCorrInit_64fc(int32_t srcLen, int32_t dstLen, HmppAlgMode calcMode, HmppsCorrPolicy_64fc **policy);
HmppResult HMPPS_AutoCorrNorm_32f(const float *src, int32_t srcLen, float *dst, int32_t dstLen, HmppNormMode normMode, HmppsCorrPolicy_32f *policy);
HmppResult HMPPS_AutoCorrNorm_64f(const double *src, int32_t srcLen, double *dst, int32_t dstLen, HmppNormMode normMode, HmppsCorrPolicy_64f *policy);
HmppResult HMPPS_AutoCorrNorm_32fc(const Hmpp32fc *src, int32_t srcLen, Hmpp32fc *dst, int32_t dstLen, HmppNormMode normMode, HmppsCorrPolicy_32fc *policy);
HmppResult HMPPS_AutoCorrNorm_64fc(const Hmpp64fc *src, int32_t srcLen, Hmpp64fc *dst, int32_t dstLen, HmppNormMode normMode, HmppsCorrPolicy_64fc *policy);
HmppResult HMPPS_CorrRelease_32f(HmppsCorrPolicy_32f *policy);
HmppResult HMPPS_CorrRelease_64f(HmppsCorrPolicy_64f *policy);
HmppResult HMPPS_CorrRelease_32fc(HmppsCorrPolicy_32fc *policy);
HmppResult HMPPS_CorrRelease_64fc(HmppsCorrPolicy_64fc *policy);
参数名 |
描述 |
取值范围 |
输入/输出 |
---|---|---|---|
src |
指向源向量指针。 |
非空 |
输入 |
scrLen |
源向量长度。 |
(0, INT_MAX] |
输入 |
dst |
指向目标向量指针。 |
非空 |
输出 |
dstLen |
目标向量长度。 |
非空 |
输入 |
algMode |
计算使用的算法模型。 |
HMPP_ALG_AUTO HMPP_ALG_DEFAULT HMPP_ALG_FFT |
输入 |
normMode |
数据归一化模式。 |
HMPP_NORM_NORMAL HMPP_NORM_BIASED HMPP_NORM_UNBIASED |
输入 |
policy (init函数中) |
指向内存存储CorrPolicy的指针。 |
非空 |
输出 |
policy (主函数中和release函数中) |
指向CorrPolicy结构体的指针。 |
非空 |
输入 |
错误码 |
描述 |
---|---|
HMPP_STS_NO_ERR |
表示没有错误。 |
HMPP_STS_NULL_PTR_ERR |
当任何指定的指针为空时指示错误。 |
HMPP_STS_SIZE_ERR |
当srcLen或dstLen小于或等于0时指示错误。 |
HMPP_STS_MISMATCH |
Init函数申请内存的问题规模和主函数中实际计算的问题规模不匹配。 |
HMPP_STS_OVERFLOW_ERR |
FFT加速模型的问题规模过大。 |
HMPP_STS_MALLOC_FAILED |
Init函数中进行算法模型所需内存申请失败。 |
void AutoCorrNorm_Example() { const int len = 10; float src[len]; float dst[len]; int32_t srcLen = len; int32_t dstLen = len; for (int i = 0; i < srcLen; ++i) { src[i] = 1; } HmppsCorrPolicy_32f *policy = NULL; HmppResult result = HMPPS_AutoCorrInit_32f(srcLen, dstLen, HMPP_ALG_AUTO, &policy); if (result != HMPP_STS_NO_ERR) { printf("Init failed"); return; } result = HMPPS_AutoCorrNorm_32f(src, srcLen, dst, dstLen, HMPP_NORM_NORMAL, policy); if (result != HMPP_STS_NO_ERR) { printf("AutoCorr failed"); return; } for (int i = 0; i < dstLen; ++i) { printf("%.2f ", dst[i]); } HMPPS_CorrRelease_32f(policy); }
运行结果:
10 9 8 7 6 5 4 3 2 1