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

时间:2010-06-17 00:58:30

标签: c audio fft fftw portaudio

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:16)

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

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