首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用vDSP函数的自相关

使用vDSP函数的自相关
EN

Stack Overflow用户
提问于 2011-04-05 12:26:04
回答 1查看 2.6K关注 0票数 5

给定一个浮点数或双精度数的一维向量,如何使用加速框架中vDSP库中的函数来计算该向量的自相关性?

人们可能会怀疑vDSP_acor()和vDSP_acorD()函数会执行此计算,但是文档vDSP_Library.pdf (可用here)并没有很好地解释函数参数是如何使用的。

类似地,vDSP_conv()和vDSP_convD()函数提到了在两个向量之间执行相关和卷积的能力,但是没有提供足够的解释或示例代码来使我能够成功地使用它们。例如,如果使用过滤器内核对2D矩阵进行卷积,我想可能需要使用不同的signalStride值两次调用vDSP_convD(),但文档中省略了这一点。另一个遗漏是过滤器中的数据必须如何打包。如果用零填充,那么零是在前面还是最后,或者它们需要均匀地分布在非零条目的两边吗?对滤波器长度、结果长度和输入长度有要求吗?

建议使用一个有用的示例:同时使用vDSP_acor()和vDSP_conv()实现向量与自身的自相关。两个数组在频域中的并进相乘,这两个数组被打包为实数数据,已使用vDSP_fft2d_zrip()进行前向快速傅立叶变换,在IFT返回非标准化答案之前,该实数组将用于计算自相关函数。高斯核卷积在一维和二维阵列上的实现。一般来说,这是一个很棒的库(你能说快吗?!),但我发现这些特殊的函数有点难以理解,前面提到的例子可能会被广泛使用,因为它们在信号处理和图像分析中非常常见。

对vDSP_Library参考文档的维护者的建议:我假设“空间域”和“时间域”在整个文档中是等价的。如果不是,请做出这样的区分。此外,请检查是否有任何公式具有定义良好的参数,这些参数与所讨论的函数中的参数声明名称相匹配。

脚注:在这里,我所指的自相关定义为: AT = <(Xt-m)(Xt- T -m)>/v,其中AT是滞后t处的自相关,t是信号X的索引,m是X在所有t上的平均值,v是X在所有t上的方差,尖括号<>表示所有可用的相隔T的X对的平均值。

EN

回答 1

Stack Overflow用户

发布于 2011-04-05 14:56:55

对我来说,vDSP_acorD的文档看起来相当清楚,尽管有一点稀疏,但参数描述中确实出现了一个拼写错误。

代码语言:javascript
复制
void vDSP_acorD (double * A,
    double * C, int N, int M);

A是输入信号,C是自相关输出,NA中的样本数,MC中需要的输出值的数量(即C将保存从0M - 1的滞后值)。

如果vDSP_acorD不可用,则可以使用vDSP_conv,因为卷积与与其中一个输入信号相反的相关操作相同。

或者,您可以利用自相关等同于功率谱的逆FFT的事实来滚动您自己的快速自相关,因此:

代码语言:javascript
复制
auto_correlation = IFFT(MAG(FFT(x)))

哪里

代码语言:javascript
复制
FFT = forward FFT
IFFT = inverse FFT
MAG = magnitude of complex spectrum (sqrt(re * re + im * im))

然后使用vDSP的快速傅立叶变换例程。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5547191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档