实际上FFT的大小意味着什么

时间:2013-03-20 05:53:05

标签: ios audio fft accelerate-framework vdsp

  1. 在使用Apple文档中的FFT示例代码时,N,log2n,n和nOver2究竟是什么意思?
  2. N是指fft的窗口大小还是给定音频中的整个样本数,
  3. 如何从音频文件中计算N?
  4. 它们如何与音频采样率相关,即44.1kHz?
  5. 此代码中的FFT帧大小是多少?
  6. 代码:

    /* Set the size of FFT. */
    log2n = N;
    n = 1 << log2n;
    
    stride = 1;
    nOver2 = n / 2;
    
    printf("1D real FFT of length log2 ( %d ) = %d\n\n", n, log2n);
    
    /* Allocate memory for the input operands and check its availability,
     * use the vector version to get 16-byte alignment. */
    A.realp = (float *) malloc(nOver2 * sizeof(float));
    A.imagp = (float *) malloc(nOver2 * sizeof(float));
    originalReal = (float *) malloc(n * sizeof(float));
    obtainedReal = (float *) malloc(n * sizeof(float));
    

2 个答案:

答案 0 :(得分:4)

  1. N或n通常是指元素的数量。 log2n是n的基数 - 2的对数。 (32的基数为2的对数为5.)nOver2为n / 2,n除以2。
  2. 在FFT的上下文中,n是馈入FFT的样本数。
  3. n通常由各种约束决定。您需要更多样本来提供更好的质量结果,但是您不需要这么多样本,处理占用了大量的计算机时间,或者结果直到用户注意到延迟才能得到结果。通常,它不是确定大小的音频文件的长度。相反,你设计了一个用于处理的“窗口”,然后你将音频文件中的样本读入一个足以容纳窗口的缓冲区,然后处理缓冲区,然后重复文件中的更多样本。重复将继续,直到处理完整个文件。
  4. 更高的音频采样率意味着在给定的时间段内会有更多的样本。例如,如果您希望窗口保持在1/30 th 之下,那么44.1 kHz采样率将小于44.1•1000/30 = 1470个样本。更高的采样率意味着您还有更多工作要做,因此您可能需要调整窗口大小以使处理保持在限制范围内。
  5. 该代码使用N作为log2n,这是不幸的,因为它可能会让人感到困惑。否则,代码如上所述,FFT帧大小为n
  6. 当涉及实际数据和复杂数据的混合时,可能会对FFT大小或长度产生一些混淆。通常,对于实际到复数的FFT,实际元素的数量被称为长度。在进行复杂到复杂的FFT时,复杂元素的数量就是长度。

答案 1 :(得分:2)

'N'是样本数,即矢量大小。相应的,'log2N'是'N'与基数2的对数,'nOver2'是'N'的一半。

要回答其他问题,必须知道,你想用FFT做什么。 This document,即使它是以特定系统编写的,也可以作为关于(D)FFT中参数的关系和含义的调查。