如何使用C中的FFTW从PortAudio中提取样本的频率信息

我想制作一个程序,用PortAudio录制音频数据(我完成了这部分),然后显示录制音频的频率信息(现在,我想显示每组样本的平均频率)他们进来的时候)。

从我做过的一些研究中,我知道我需要进行FFT。 所以我用谷歌搜索了一个库,在C中找到了FFTW。

但是,现在我有点失落。 我应该怎么处理我记录的样本以从中提取一些频率信息? 我应该使用什么样的FFT(我假设我需要一个真实的数据1D?)?

一旦我进行了FFT,如何从它给我的数据中获取频率信息?

编辑:我现在也发现了自相关算法。 好点吗? 更简单?

非常感谢,对不起,如果这样,我绝对没有经验。 我希望它至少有点意义。

要将音频样本转换为功率谱:

  • 如果您的音频数据是整数数据,则将其转换为浮点数
  • 选择FFT大小(例如N = 1024)
  • 将窗口函数应用于数据的N个样本(例如Hanning )
  • 使用大小为N的实际到复数FFT来生成频域数据
  • 计算复频域数据的magnitude = sqrt(re^2 + im^2)magnitude = sqrt(re^2 + im^2)
  • 可选地将幅度转换为对数刻度(dB)( magnitude_dB = 20*log10(magnitude)