如何在C ++中使用fft生成音频频谱?

时间:2011-01-13 00:05:11

标签: c++ audio fft spectrum

我想生成mp3音频文件的音频频谱(如this video所示)。基本上这个问题需要计算音频信号的fft。如何在C / C ++中编程?

我查看了几个开源库,例如FFTW,我真的不知道如何将这些用于我的问题。任何帮助将不胜感激。提前谢谢!

1 个答案:

答案 0 :(得分:52)

在SO上已经有很多相似/相关的问题值得一读,因为答案中包含了大量有用的信息和建议,但实质上你需要这样做:

  • 将音频数据转换为FFT所需的格式(例如int - > float,单独的L / R通道)
  • 申请合适的window function(例如Hann aka Hanning window
  • 应用FFT(注意:如果使用典型的复数到复数FFT,则将输入数组的虚部设置为零)
  • 计算前N / 2个FFT输出区间的大小(sqrt(re*re + im*im)
  • 可选择将幅度转换为dB(log)比例(20 * log10(magnitude)
  • 绘制N / 2(对数)幅度值

请注意,尽管FFTW是一个非常好且非常快的FFT,但对于初学者来说可能有点压倒性 - 如果你想将它作为商业产品的一部分包含它也会非常昂贵 - 我建议从{{3}开始而不是。