我试图执行FFT计算,使用苹果的VDSP,在录制的音频文件(假设它是一个单声道PCM)。
我已经在这里做了一个研究,我发现以下主题非常有用:
- 使用苹果FFT和加速框架
- 使用帧之间的相位变化从FFT单元中提取精确的频率
- 有扩展音频文件服务读取音频(ExtAudioFileRead)
例如,我们配置FFT与frame_size N = 1024个样本,log2n = 10:
m_setupReal = vDSP_create_fftsetup(LOG_2N, FFT_RADIX2);
// allocate space for a hamming window
m_hammingWindow = (float *) malloc(sizeof(float) * N);
// generate the window values and store them in the hamming window buffer
vDSP_hamm_window(m_hammingWindow, N, vDSP_HANN_NORM);
某处的代码:
vDSP_vmul(dataFrame, 1, m_hammingWindow, 1, dataFrame, 1, N);
vDSP_ctoz((COMPLEX *)dataFrame, 2, &(m_splitComplex), 1, nOver2);
// Do real->complex forward FFT
vDSP_fft_zrip(m_setupReal, &(m_splitComplex), 1, LOG_2N, kFFTDirection_Forward);
什么我错过了现在,在我的FFT使用的理解,是如何得到一个大的音频文件的整个光谱,让我们假设总共12800个样本。
问:我需要原始数据分裂成多个帧大小为1024个样本(〜1024分之12800= 13帧),然后分别然后,以某种方式对每个帧进行FFT,平均13点的FFT结果到结果频谱? 如果这是正确的假设,那么如何执行平均?
我真的很感谢所有帮助。