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

根据我所做的一些研究,我知道我需要进行 FFT。所以我在 google 上搜索了一个用 C 语言编写的库,并找到了 FFTW。

然而,现在我有点失落了。我到底应该如何处理我记录的样本以从中提取一些频率信息?我应该使用哪种 FFT(我假设我需要真实的一维数据?)?

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

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

提前非常感谢,抱歉,我对此完全没有经验。我希望它至少有一点意义。

有帮助吗?

解决方案

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

  • 如果您的音频数据是整数数据,则将其转换为浮点数据
  • 选择 FFT 大小(例如N=1024)
  • 申请一个 窗函数 N 个数据样本(例如 汉宁)
  • 使用大小为 N 的实数到复数 FFT 生成频域数据
  • 计算复杂频域数据的幅度(magnitude = sqrt(re^2 + im^2))
  • 可选择将幅度转换为对数刻度 (dB) (magnitude_dB = 20*log10(magnitude))
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top