我正在尝试使用 Apple 的 vDSP 在录制的音频文件上实现 FFT 计算(假设它是单声道 PCM)。
我在这里进行了研究,发现以下主题非常有用:
例如,我们为 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 个样本的帧(~ 12800 / 1024 = 13 帧),然后分别对每个帧执行 FFT,然后以某种方式将 13 个 FFT 结果平均化为结果频谱?如果假设正确,那么如何进行平均?
我真的很感激任何帮助。