Как перекрыть буфер в Objective-C

Я пытаюсь выполнить БПФ на iPhone и понял, что не перекрывал свой ввод до оконного режима. Мне было интересно, может ли кто-нибудь дать мне некоторое представление о том, как правильно перекрывать мой входной буфер.

Я хочу перекрыть 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...

person jacob    schedule 21.04.2014    source источник


Ответы (1)


Чтобы получить коэффициент перекрытия, равный 4, необходимо сохранить последние 75% данных, которые перед оконным преобразованием были введены для предыдущего БПФ. Затем используйте эти сохраненные данные в качестве первых 75% текущего БПФ и только последние 25% текущих или еще не использованных данных. memmove может использоваться для копирования данных во временные буферы сохранения данных и из них. Повторяйте по мере необходимости, чтобы использовать доступные данные.

person hotpaw2    schedule 21.04.2014
comment
Спасибо за ответ hotpaw, это проясняет. Хотя у меня есть мысли, что я, возможно, запутался. Происходит ли перекрытие до создания окон? Что касается реализации, это имеет смысл для меня, но логически я не думаю, что это так. Как вы думаете, сработает ли перекрытие там, где я говорю? - person jacob; 22.04.2014