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

hou*_*oft 15 c audio fft portaudio fftw

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

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

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

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

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

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

Pau*_*l R 16

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

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

  • 如果采样率,Fs = 44.1 kHz和FFT大小,N = 1024,则频谱的分辨率将为Fs/N = 44100/1024 = 43.1 Hz.换句话说,功率谱的每个"bin"大约为43 Hz.因此,440 Hz组件将主要显示在bin 10中.如果您需要更高的分辨率,则必须增加N. (4认同)