Macos 基于veclib的osx频率分析

Macos 基于veclib的osx频率分析,macos,cocoa,fft,foundation,accelerate-framework,Macos,Cocoa,Fft,Foundation,Accelerate Framework,我正在寻找任何OSX上的频率分析示例。我知道我应该计算音频样本的FFT。我从苹果网站上获得了执行FFT的代码示例: 然而,我正在寻找任何解释实部和虚部如何转化为频率和振幅分量的例子。我有一个非常简单的音调,我想计算频率。在FFT之后,您需要获取每个复数输出单元的幅度: magnitude = sqrt(re[i]*re[i] + im[i]*im[i]); 频率与仓位指数有关,即: freq = i * Fs / N; 其中Fs=采样率(Hz),N=FFT大小 如果你只是在寻找一个单音,那

我正在寻找任何OSX上的频率分析示例。我知道我应该计算音频样本的FFT。我从苹果网站上获得了执行FFT的代码示例:


然而,我正在寻找任何解释实部和虚部如何转化为频率和振幅分量的例子。我有一个非常简单的音调,我想计算频率。

在FFT之后,您需要获取每个复数输出单元的幅度:

magnitude = sqrt(re[i]*re[i] + im[i]*im[i]);
频率与仓位指数有关,即:

freq = i * Fs / N;
其中Fs=采样率(Hz),N=FFT大小


如果你只是在寻找一个单音,那么找到具有最大幅度的bin索引,然后使用上述公式将该索引转换为频率。请注意,您只需要检查从1到N/2-1的单元索引。

每个FFT单元的中心频率已由Paul R回答。但是请注意,您希望分析的音频中的精确频率可能不在任何FFT单元的中心。因此,您可能会寻找一种使用FFT的频率估计算法,或者,对于包含音乐或语音的音频,一种不同于频率估计的基音检测/估计方法。

Ok,这是有意义的。至于震级,是在0到1的范围内吗?或者它会像分贝一样表达力量或压力?在这种情况下,量级并不太重要,因为你所寻找的只是一个峰值。一般来说,对于幅值为1的输入信号,FFT单元幅值的值为N,其中N是FFT的大小。当您关心实际值时,通常会按1/N的比例进行缩放,以补偿这一点。还要注意的是,您应该在FFT之前考虑应用窗口函数。