【问题标题】:How to use vDSP_conv to mimic MATLAB's xcorr function?如何使用 vDSP_conv 来模拟 MATLAB 的 xcorr 函数?
【发布时间】:2012-12-10 15:30:15
【问题描述】:

我目前正在将 MATLAB 算法转换为 C,以便在 iOS 应用程序中使用它。

我一直在努力使用 MATLAB 的 xcorr 函数。这是相关的MATLAB代码。

xcr = xcorr(A,A,maxlags);

这个,根据 MA​​TLAB 文档

返回滞后范围 [-maxlags:maxlags] 上的互相关序列。输出 c 的长度为 2*maxlags+1。

Apple Accelerate.Framework 提供了一个名为vDSP_conv 的卷积/相关函数,但我不知道如何使用它来产生与xcorr 相同的输出。这可能吗 ?如果是,任何人都可以帮助我。

最好的问候,

相思

【问题讨论】:

  • 也许看看 GNU Octave 的实现会有所帮助——他们实现了它octave.sourceforge.net/signal/function/xcorr.html
  • 如果Pete所指的问题没有为你解决问题,那么请贴出A[1, 2, 3]maxlags为3时MATLAB的xcorr结果,或者另一个小例子.这可能会显示有助于将其与vDSP_conv 行为匹配的函数的详细信息。
  • 你好,结果是[0,3,8,14,8,3,0]。我用 maxlags = 2 运行它并得到 [3,8,14,8,3]。我还用 A = [1,2,3,4,5,6,7] 和 maxlags = 3 进行了尝试,得到了 [60,85,112,140,​​112,85,60]。感谢您的帮助。

标签: ios matlab fft accelerate-framework cross-correlation


【解决方案1】:

要复制 MATLAB 的 xcorr 的结果,您需要在向量前后用零填充:

#include <stdio.h>

#include <Accelerate/Accelerate.h>


int main(void)
{
    #define NF  3
    #define NC  (2*NF+1)

    float A[3*NF] = {0, 0, 0, 1, 2, 3, 0, 0, 0};
    float C[NC];

    vDSP_conv(A, 1, A+NF, 1, C, 1, NC, NF);

    for (vDSP_Length i = 0; i < NC; ++i)
        printf("C[%u] = %g.\n", (unsigned) i, C[i]);

    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    相关资源
    最近更新 更多