指数频率轴的 FFTW

Posted

技术标签:

【中文标题】指数频率轴的 FFTW【英文标题】:FFTW for exponential frequency axis 【发布时间】:2011-03-14 18:14:27 【问题描述】:

我有一组关于 FFTW 和 Linux 上的音频分析的相关问题。

什么是 Linux/Ubuntu 中最容易使用、最全面的音频库,它允许我解码各种音频格式(MP3 等)并获取原始 16 位 PCM 值的缓冲区? gstreamer? 我打算采用该原始缓冲区并将其馈送到 FFTW 以获取频域数据(没有复杂信息或相位信息)。我想我应该使用他们的一种“r2r”方法,可能是 DHT。这是正确的吗? 似乎 FFTW 的输出频率轴以基于缓冲区长度的线性增量离散化。进一步看来,我无法在 FFTW 中更改这种离散化,因此我必须在 DHT 之后进行。我需要一个跟随2^(i/12) 的指数轴,而不是线性频率轴。我想我必须获取 DHT 输出并通过一些自定义抗锯齿功能运行它。有没有一个 Linux 库来做这种抗锯齿?如果没有,基于余弦的基本抗锯齿功能会起作用吗?

谢谢。

【问题讨论】:

这里有三个问题。把它分解成三个问题,会让你拥有三组不同的标签,吸引三组不同且更专注的人来看,让你接受三种不同的答案。 ***.com/questions/1120422/… 【参考方案1】:

这是 FFT 和音频处理的一个古老问题 - 理想情况下,我们想要音频的对数频率标度,但 DFT/FFT 具有线性标度。您将需要选择在频率范围的低端提供足够分辨率的 FFT 大小,然后在感兴趣的频率范围内累积 bin 以获得伪对数表示。还有更复杂的方案,但基本上都归结为同一件事。

【讨论】:

【参考方案2】:

我看到到处都在使用 libsndfile:

http://www.mega-nerd.com/libsndfile/

这也是 LGPL。它几乎可以读取您关心的所有开源和无损音频格式。但是,由于许可费用,它不支持 MP3。

【讨论】:

以上是关于指数频率轴的 FFTW的主要内容,如果未能解决你的问题,请参考以下文章

16 位音频的 fftw :: 峰值在 2f 处出现错误

在 aurioTouch 示例应用程序中确定对应于 x 轴的频率

如何用 FFT 进行频谱分析? [关闭]

使用 vDSP 的 FFT 频率范围

快速傅立叶变换结果:频率轴刻度?

没有足够的水平空间来显示频率