如何在Objective-C中重叠缓冲区
我试图在iPhone上进行FFT,我意识到在窗口化之前我没有重叠输入。我想知道是否有人能给我一些关于如何正确重叠输入缓冲区的见解 我想将bufferSamples重叠4倍,我知道这是使用memove函数完成的,但我不知道如何让它在重叠方面工作如何在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
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在哪里有效?