我试图在一个录制的音频文件上使用苹果的vDSP来实现FFT计算(让我们假设它是一个单PCM)。
我在这里做了一项研究,发现以下主题非常有用:
例如,我们配置了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个样本。
Q:,我是否需要将原始数据分割成大小为1024个样本的帧(~ 12800 / 1024 = 13帧),然后对每个帧分别执行快速傅立叶变换,然后以某种方式将平均13个FFT的结果分解成最终的频谱?如果这是正确的假设,那么如何进行平均?
我真的很感谢你的帮助。
发布于 2013-11-07 09:59:03
发布于 2013-11-07 20:57:42
另一方面,如果你的信号是平稳的,并且混合了一定数量的噪声,那么向量平均多个FFT的幅值结果就会给出Welch的方法,这可能会改善得到的平均幅值谱的信噪比。
同样,如果信号是平稳的,那么利用相移窗的FFT桶之间的相位差可以与相位声码器算法一起使用来改进频谱频率估计。如果信号在很短的时间间隔内是静止的,那么人们可能只希望对适合这些间隔的窗口这样做,也许可以通过减少窗口偏移(增加重叠)来实现。
所以,这取决于信号,以及你想从金融时报得到什么信息。
https://stackoverflow.com/questions/19832317
复制相似问题