如何在Objective-C中重叠缓冲区

如何在Objective-C中重叠缓冲区,objective-c,buffer,signal-processing,fft,overlap,Objective C,Buffer,Signal Processing,Fft,Overlap,我试图在iPhone上进行FFT,我意识到在窗口化之前我没有重叠输入。我想知道是否有人能给我一些关于如何正确重叠输入缓冲区的见解 我想将bufferSamples重叠4倍,我知道这是使用memove函数完成的,但我不知道如何让它在重叠方面工作 enum { frameSize = 2048, overlap = 4, range = 8192, step = frameSize/overlap, }; static COMP

我试图在iPhone上进行FFT,我意识到在窗口化之前我没有重叠输入。我想知道是否有人能给我一些关于如何正确重叠输入缓冲区的见解

我想将bufferSamples重叠4倍,我知道这是使用memove函数完成的,但我不知道如何让它在重叠方面工作

enum
{
    frameSize   = 2048,
    overlap     = 4,
    range       = 8192,
    step        = frameSize/overlap,
};

static COMPLEX_SPLIT    A;

    // For each sample in buffer...
    for (int j = 0; j < audioBufferList.mNumberBuffers; j++)
    {

        // Declaring samples from audio buffer list
        SInt16 *bufferSamples = (SInt16*)audioBufferList.mBuffers[j].mData;

        // Overlapping here?

        ////////////////////////
        //// vDSP FUNCTIONS ////
        ////////////////////////

        // Creating Hann window function
        for (int i = 0; i < frameSize; i++)
        {
            double window = 0.5 * (1.0 - cos((2.0 * M_PI * i) / (frameSize -  1)));

            // Applying window to each sample
            A.realp[i] = window * bufferSamples[i];
            A.imagp[i] = 0;
        }

        // Further DSP...
enum
{
frameSize=2048,
重叠=4,
范围=8192,
步长=帧大小/重叠,
};
静态复合_分裂A;
//对于缓冲区中的每个样本。。。
对于(int j=0;j
若要获得4的重叠系数,您需要保存在加窗之前输入到上一个FFT的最后75%的数据。然后将保存的数据用作当前FFT的前75%,只有最后25%来自当前或未使用的数据。memmove可用于将数据复制到临时保存数据缓冲区,或从临时保存数据缓冲区复制数据。请重复有必要使用可用的数据。

感谢hotpaw的回复,这使它更清晰。虽然我有一些想法,我可能会把自己弄糊涂。重叠是否发生在窗口打开之前?关于对我来说有意义的实现,但从逻辑上说,我不认为它有意义。你认为进行ove吗我说的rlap在哪里有效?