1

我想执行两个音频文件(实际上是NSData对象)的互相关。我vDSP_convDaccelerate framework. NSData有一个属性bytes,它返回一个指向空数组的指针 - 这是滤波器和信号向量的参数。

我在其他参数上苦苦挣扎。这些向量的长度或结果向量的长度是多少?

我猜:

它是滤波器和信号向量的总和。

谁能给我一个使用该vDSP_convD功能的例子吗?

苹果对该功能的参考在这里

谢谢

4

2 回答 2

0

一个电话看起来像这样:

vDSP_conv ( signal *, signalStride, filter *, filterStride, result*, resultStride, resultLenght, filterLength );

我们有:

  • 信号*:指向信号数组第一个元素的指针
  • signalStride:让我们称其为“步长”通过您的信号阵列。1 是每个元素,2 是每秒...
  • 过滤器和结果数组相同
  • 结果和过滤器数组的长度

数组需要多长时间?:

如您链接的文档中所述,我们的信号数组必须是lenResult + lenFilter - 1,这是它变得有点混乱的地方。您可以在此处找到 Apple 的演示或 SO 用户 Rasman在此处的简短回答。您必须自己对信号数组进行零填充,以便向量函数无需准备即可应用滑动窗口。

注意:您可能会考虑为此使用快速傅里叶变换,因为当您处理音频文件时,我假设您有相当多的数据,并且在使用时从某个点开始性能显着提高:

FFT -> 频域复数乘法(导致时域相关)-> 反向 FFT

在这里你可以找到一段有用的代码!

于 2015-03-23T22:26:17.170 回答
0

在阅读了一本书 - Learning Core Audio 之后,我做了一个演示,演示了两个音频文件之间的延迟。我使用新的 iOS 8 API 从音频文件中获取样本并进行了良好的性能优化。

Github 项目

于 2015-06-02T08:17:17.253 回答