我想执行两个音频文件(实际上是NSData
对象)的互相关。我vDSP_convD
在accelerate framework
. NSData
有一个属性bytes
,它返回一个指向空数组的指针 - 这是滤波器和信号向量的参数。
我在其他参数上苦苦挣扎。这些向量的长度或结果向量的长度是多少?
我猜:
它是滤波器和信号向量的总和。
谁能给我一个使用该vDSP_convD
功能的例子吗?
苹果对该功能的参考在这里
谢谢
我想执行两个音频文件(实际上是NSData
对象)的互相关。我vDSP_convD
在accelerate framework
. NSData
有一个属性bytes
,它返回一个指向空数组的指针 - 这是滤波器和信号向量的参数。
我在其他参数上苦苦挣扎。这些向量的长度或结果向量的长度是多少?
我猜:
它是滤波器和信号向量的总和。
谁能给我一个使用该vDSP_convD
功能的例子吗?
苹果对该功能的参考在这里
谢谢
一个电话看起来像这样:
vDSP_conv ( signal *, signalStride, filter *, filterStride, result*, resultStride, resultLenght, filterLength );
我们有:
数组需要多长时间?:
如您链接的文档中所述,我们的信号数组必须是lenResult + lenFilter - 1,这是它变得有点混乱的地方。您可以在此处找到 Apple 的演示或 SO 用户 Rasman在此处的简短回答。您必须自己对信号数组进行零填充,以便向量函数无需准备即可应用滑动窗口。
注意:您可能会考虑为此使用快速傅里叶变换,因为当您处理音频文件时,我假设您有相当多的数据,并且在使用时从某个点开始性能显着提高:
FFT -> 频域复数乘法(导致时域相关)-> 反向 FFT
在这里你可以找到一段有用的代码!
在阅读了一本书 - Learning Core Audio 之后,我做了一个演示,演示了两个音频文件之间的延迟。我使用新的 iOS 8 API 从音频文件中获取样本并进行了良好的性能优化。