17

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

根据我所做的一些研究,我知道我需要进行 FFT。因此,我在 C 中搜索了一个库来执行此操作,并找到了 FFTW。

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

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

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

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

4

1 回答 1

19

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

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