如何使用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)
)