我需要一些帮助来澄清 FFT 及其代表的含义。我有一个包含压缩音频的缓冲区。由于限制,我无法处理完整的未压缩音频,但可以一次解压缩小片段。
假设我需要 10 秒的未压缩样本,我需要将其存储在适当 PCMaudiobuffer的大小中10 * 44100 * sizeof(float),并且我会有441000样本。然后我循环遍历这些441000长度为 1024(重叠 512)的样本。
for(int i =0; i < 441000; i += 512)
{
//code to copy (i + 1024) from PCMaudiobuffer to tempbuffer. (not shown)
//perform FFT
InPlaceFFT(tempbuffer);
//copy the first 512 values of the tempbuffer across to
//a new buffer so tempbuffer can be reused in the loop
CopyArray(512, finalbuffer);
}
假设所有这些都是正确的,这就是我感到困惑的地方。我是否只将前 512 个值 (N/2) 复制到finalbuffer? (我正在使用 Accelerate 框架的 FFT 方法)。这是离线执行 FFT 的有效/正确方法吗?最后,我希望能够从finalbuffer. 为此,我只需每44100(1 秒)循环一次并计算幅度,还是 1 秒对于频谱来说通常太不准确?
我可能误解了这一切,所以请随时告诉我把所有这些都扔到窗外:) 感谢您的帮助,这很令人困惑!
编辑 关于此的 Apple 文档并不容易理解,但我使用的是vDSP_fft_zrip中概述的方法。(Apple 网站的格式有时会混淆锚点位置,因此您可能需要稍微向下滚动)。我发现这篇文章是关于如何使用它的有用指南。谢谢。