给定一个浮点数或双精度数的一维向量,如何使用加速框架中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对的平均值。
发布于 2011-04-05 14:56:55
对我来说,vDSP_acorD的文档看起来相当清楚,尽管有一点稀疏,但参数描述中确实出现了一个拼写错误。
void vDSP_acorD (double * A,
double * C, int N, int M);A是输入信号,C是自相关输出,N是A中的样本数,M是C中需要的输出值的数量(即C将保存从0到M - 1的滞后值)。
如果vDSP_acorD不可用,则可以使用vDSP_conv,因为卷积与与其中一个输入信号相反的相关操作相同。
或者,您可以利用自相关等同于功率谱的逆FFT的事实来滚动您自己的快速自相关,因此:
auto_correlation = IFFT(MAG(FFT(x)))哪里
FFT = forward FFT
IFFT = inverse FFT
MAG = magnitude of complex spectrum (sqrt(re * re + im * im))然后使用vDSP的快速傅立叶变换例程。
https://stackoverflow.com/questions/5547191
复制相似问题