使用vDSP函数的自相关
Autocorrelations using vDSP functions
给定浮点数或双精度的1D矢量,如何使用加速框架中的vDSP库中的函数计算该矢量的自相关性?
人们可能会怀疑vDSP_acor()和vDSP_acorD()函数会执行此计算,但是文档vDSP_Library.pdf(在这里可获得)并没有很好地解释如何使用函数参数。
类似地,vDSP_conv()和vDSP_convD()函数提到了在两个向量之间执行关联和卷积的能力,但没有提供足够的解释或示例代码让我能够成功地使用它们。例如,如果使用过滤器内核对2D矩阵进行卷积,我认为需要两次调用vDSP_convD(),使用不同的signalStride值,但文档中省略了这一点。另一个遗漏是如何包装过滤器中的数据。如果填充了0,0出现在前面还是最后有关系吗?或者它们需要均匀地分布在非零项的两边吗?对过滤器长度、结果长度和输入长度有要求吗?
对一个有用示例的建议:使用vDSP_acor()和vDSP_conv()实现向量与自身的自相关。使用vDSP_fft2d_zrip()将打包为实际数据的两个频域中数组的并进乘法,这些数据将在IFT返回未标准化的答案之前用于计算自相关函数。实现一个高斯核卷积的一维和二维数组。总的来说,这是一个很棒的库(你能说快吗?!),但我发现这些特殊的函数有点难以理解,前面提到的例子可能会被广泛使用,因为它们在信号处理和图像分析中非常常见。
对vDSP_Library参考文档维护者的建议:我假设"空间域"answers"时间域"在整个文档中是等效的。如果不是,请区分一下。此外,请检查任何公式是否具有定义良好的形参,并与所讨论的函数中声明的实参名称相匹配。
脚注:这里我所指的自相关定义为:A[T] = <(X[T]-m) (X[T -T]-m)>/v,其中A[T]是滞后T处的自相关,T是信号X的指标,m是X对所有T的平均值,v是X对所有T的方差,尖括号<>表示间隔T的所有可用X对的平均值。
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的FFT例程
- 将自定义函数传递到基抽象类中以延迟执行
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题
- 将具有固定签名的自定义函数名称注入 CRTP
- c++调用opencv相关函数,并且被打包到dll中,c#无法调用它
- 每个类实例的自定义函数 (C++)
- C++,当函子不是一个选项时,我如何编写带有自定义函数调用的模板化 RAII 包装器?
- 具有自定义函数的 C++ 矢量构造函数
- 自定义函数转换错误?
- 模板中的自定义函数C++
- 如何将CString转换为使用WCHAR的Windows API和自定义函数?
- 为什么 std::find_if 和相关函数没有整个容器的重载?
- r-工作程序中对自定义函数的未定义引用(C++和RcppParallel)
- 传递自定义函数类型时的'incompatible types in assignment'
- 是什么让我的C++ ctime 相关函数表现得很奇怪
- 从状态内的自定义函数(不是操作)提升 MSM 调用process_event?
- 在C 中实现迭代自相关过程,使用for循环
- 如何使用C 代码调用MATLAB自定义函数
- glibc函数的GCC、-flto、-fno内置和自定义函数实现
- 自定义函数中断
- 使用vDSP函数的自相关