【问题标题】:Parameters to improve a music frequency analyzer改善音乐频率分析仪的参数
【发布时间】:2011-12-11 09:32:24
【问题描述】:

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

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

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

我可以对数据执行哪些操作以使其看起来更像典型的音乐播放器应用?

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

【问题讨论】:

  • 我认为你在正确的轨道上(双关语?)。最高频率将是谐波,因此您会期望它们的幅度较低。确保您显示的是 db(日志)而不是 FFT(线性)的输出。
  • 您个人 FFT 的时间窗口是什么样的?
  • @Mark R:我正在显示 dB。 @ Chris A。我正在使用一个为我包装 FFT 的工具,只是给我填充了幅度和相位的线性箱,所以我不知道我是否能回答这个问题。不过我已经更新了帖子中的信息。

标签: c++ audio fft frequency equalizer


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    想想看,30 Hz 对应 33ms 的周期,在 32kHz 时大约是 1000 个样本。因此,您在这段时间内只能捕获大约 1 个周期。

    因此,您需要更长的 FFT 窗口来捕捉那些具有清晰频率分辨率的低频。

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

    如果您想要非常快速地更新高频区间但在低频处具有良好的频率分辨率,还有一个选择是更快地更新高频区间(例如使用您当前使用的窗口)但计算低频箱的频率较低(并且需要较大的窗口才能获得良好的频率分辨率。)

    【讨论】:

      【解决方案3】:

      我认为很多这些应用程序都有可变的 FFT 箱。

      您可以做的是从非常宽且均匀间隔的 FFT 箱开始,然后跟踪放置在每个 FFT 箱中的元素数量。如果某些 bin 根本没有被大量使用(通常是较高的频率),则将这些 bin 加宽以使其更大(因此有更多的频率条目)并切碎低频 bin。

      我参与过一些项目,我们只是花费大量时间为特定输入源调整 bin,但让软件实时调整会更好。

      【讨论】:

      • 由于高端频率是如此之宽(即我的最后一个 bin 是 8kHz-16kHz),我已经有很多点了。不过,我不确定缩小或扩大垃圾箱会做什么——我在合并垃圾箱时会取平均值。
      猜你喜欢
      • 1970-01-01
      • 2019-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 2011-06-01
      • 2013-08-20
      相关资源
      最近更新 更多