CrossCorrNorm

计算src1向量(长度为src1Len)和src2向量(长度为src2Len)的归一化互相关,结果存储到dst向量中。归一化支持正常、有偏和无偏自相关三种模式,计算公式如下:

该函数调用流程如下:

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

函数接口声明如下:

参数

参数名

描述

取值范围

输入/输出

src1

指向第一个源向量的指针。

非空

输入

src1Len

第一个源向量长度。

(0, INT_MAX]

输入

scr2

指向第二个源向量的指针。

非空

输入

src2Len

第二个源向量长度。

(0, INT_MAX]

输入

dst

指向目的向量的指针。

非空

输出

dstLen

目标向量长度。

(0, INT_MAX]

输入

lowLag

互相关最小滞后。

[INT_MIN,INT_MAX]

输入

algMode

计算使用的算法模型,可能的值是:HMPP_ALG_AUTO、HMPP_ALG_DEFAULT、HMPP_ALG_FFT。

HMPP_ALG_AUTO

HMPP_ALG_DEFAULT

HMPP_ALG_FFT

输入

normMode

数据归一化模式,可能的值是:HMPP_NORM_NORMAL、HMPP_NORM_BIASED、HMPP_NORM_UNBIASED。

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

当src1Len、src2Len或dstLen ≤ 0时指示错误。

HMPP_STS_MISMATCH

Init函数申请内存的问题规模和主函数中实际计算的问题规模不匹配。

HMPP_STS_OVERFLOW_ERR

FFT加速模型的问题规模过大。

HMPP_STS_MALLOC_FAILED

Init函数中进行算法模型所需内存申请失败。

注意

示例

void CrossCorrNorm_Example()
{
    const int src1Len = 10;
    const int src2Len = 5;
    const int dstLen = 10;
    float src1[src1Len];
    float src2[src2Len];
    float dst[dstLen];

    HmppsCorrPolicy_32f *policy = NULL;
    for (int i = 0; i < src1Len; ++i) src1[i] = 1;
    for (int i = 0; i < src2Len; ++i) src2[i] = 1;
    int lowLag = -1;

    HmppResult result = HMPPS_CrossCorrInit_32f(src1Len, src2Len, dstLen, lowLag, HMPP_ALG_AUTO, &policy);
    if (result != HMPP_STS_NO_ERR) {
        printf("Init failed");
        return;
    }
    result = HMPPS_CrossCorrNorm_32f(src1, src1Len, src2, src2Len, dst, dstLen, lowLag, HMPP_NORM_NORMAL, policy);
    if (result != HMPP_STS_NO_ERR) {
        printf("CrossCorr failed");
        return;
    }
    for (int i = 0; i < dstLen; ++i) {
        printf("%.2f ", dst[i]);
    }
    HMPPS_CorrRelease_32f(policy);

}

运行结果:

5 5 4 3 2 1 0 0 0 0