0

我希望能够使用矢量作为包络,将 fft 均衡应用于相当大的声音块,具有不同的大小。

为了能够将频域 bin 乘以包络,包络需要具有与 fft 数据相同的分辨率,这将随着声音块的大小而变化。

所以,我需要一个函数来重新采样我的包络向量。您知道 vDSP 是否为此目的提供功能吗?我来回浏览了参考资料,但一无所获。这并不意味着那里什么都没有 - 在搜索 vDSP 参考时很容易错过一些东西......

并不是我自己无法实现某些东西,但如果有一个 vDSP 功能,它可能会比我想出的任何东西都要快得多。这是相关的,因为该项目也针对 iOS 设备。

而且没有必要重新发明轮子:)

谢谢!!

4

2 回答 2

2

如果我理解正确,您有一个一维包络值数组,您希望将其与一维频率仓数组相乘。您要解决的问题是将包络数组缩放到与 FFT 数组相同的长度。首先了解如何生成信封数组会很有帮助,您不能简单地以正确的长度生成它吗?如果是这样,问题解决了:)

如果没有,那么如何使用vDSP_vtabi从您当前拥有的值的查找表中生成包络向量?您可以使用 生成查找表输入向量vDSP_vrampA。

不过,这对我来说似乎相当复杂和昂贵,需要大量的缓冲区分配/重新分配。计算应该将多少 FFT 样本乘以每个包络值可能会更简单,然后循环使用每个包络样本vDSP_vsmul将 FFT 向量的块乘以包络值。

哪种解决方案的性能更好实际上很大程度上取决于每个向量的相对大小。了解 FFT 向量为什么大小不同以及如何首先生成包络数组以给出更准确的答案也会很有帮助。

于 2012-12-30T12:30:20.813 回答
0

我建议通过不同的方式。

因为您的输入信号以固定采样率来自硬件,并且您确切知道包络值的数量,所以只需使用以下方法进行采样率转换

AudioConverterFillComplexBuffer

它速度很快,并且在重新采样时会考虑过滤和插值。

于 2013-02-20T18:26:53.910 回答