用于改进音乐频率分析仪的参数

时间:2011-10-20 00:10:30

标签: c++ audio fft frequency equalizer

我在音频数据上使用FFT来输出分析器,就像你在Winamp或Windows Media Player中看到的那样。但是输出看起来并不那么好。我正在使用对数刻度进行绘图,并将FFT的线性结果平均到相应的对数仓中。举个例子,我正在使用像:

这样的垃圾箱

16k,8k,4k,2k,1k,500,250,125,62,31,15 [hz]

然后我将幅度(dB)与频率[hz]进行对比。图表肯定会对音乐产生“反应”,我可以看到鼓样本或高音调的响应。但是图形在接近较低频率时非常“饱和”,并且整体看起来与您在应用程序中看到的不同,后者往往分布更均匀。我觉得显示视觉输出的应用程序倾向于对数据做不同的事情以使其看起来更好。

我可以对数据做些什么让它看起来更像典型的音乐播放器应用?

一些有用的信息: 我下采样到单通道,32kHz,并指定35ms的时间窗口。这意味着FFT得到~1100点。我将这些值改为实验(即尝试16kHz,增加/减少间隔长度)但我得到了类似的结果。

3 个答案:

答案 0 :(得分:4)

使用1100点的FFT,您可能无法以很高的频率分辨率捕获低频。

考虑一下,30 Hz对应33ms的周期,32kHz时约为1000个样本。所以你在这段时间内只能捕捉大约1个时期。

因此,您需要一个更长的FFT窗口来捕获具有高频率分辨率的低频。

您可能需要4000个样本或更多样本的时间窗口才能在低频率下获得明显更高的频率分辨率。这也没关系,因为你每秒仍然可以获得大约8-10次频谱更新。

如果你想要高频箱的快速更新但是在低频时具有良好的频率分辨率,那么一个选择是更快地更新高频箱(例如使用你当前正在使用的窗口)但是计算较低频率的频率较低(并且具有较大的窗口,以获得良好的频率分辨率。)

答案 1 :(得分:0)

我认为很多这些应用都有可变的FFT分档。

您可以做的是从非常宽的均匀间隔FFT区域开始,然后跟踪每个FFT区域中放置的元素数量。如果根本没有使用某些箱子(通常是更高的频率),那么加宽这些箱子使它们更大(因此有更多的频率条目)并且甩掉低频箱。

我参与过项目,我们只花了很多时间调整特定输入源的垃圾箱,但实时调整软件要好得多。

答案 2 :(得分:0)

典型的可视化器将使用恒定Q带通滤波器,而不是单个FFT。

您可以通过将FFT结果乘以频域中的一组常数Q滤波器响应,然后求和,来模拟一组恒定Q带通滤波器。对于低频,您应使用比最低频滤波器的有效脉冲响应更长的FFT。对于高频,您可以使用更短的FFT来获得更好的响应速度。您可以通过重叠(重复使用)数据以任何所需的更新速率滑动任何长度的FFT,或者您可以考虑插值。您可能还希望预先窗口化每个FFT以减少频带之间的“频谱泄漏”。