【问题标题】:Level out FFT graph (Processing)拉平 FFT 图(处理中)
【发布时间】:2015-03-26 21:00:54
【问题描述】:

我正在尝试在 Processing 中制作音乐可视化器,并不是说那部分非常重要,而且我正在通过 Minim 使用快速傅立叶变换。它运行良好(读取数据),但左(低音)端有一个大尖峰。解决这个问题的最佳方法是什么?
我的源代码是here,如果你想看看。

提前致谢,
-tlf

【问题讨论】:

  • 这可能是由于您的信号中存在直流偏移。尝试在仍处于时域时减去信号的平均值(即,取您计划 fft 但在执行 fft 之前的波形的原始部分,将所有值相加,除以 N,然后减去该值从波形中的每个点......然后做FFT)。
  • 嗯。什么?对不起,但我不知道那是什么意思。 XD 如果有帮助,我还编辑了我的问题以包含我的代码。
  • 仔细查看您的数据,如果大尖峰仅在最后(即零频率),则忽略它(例如,将其设置为零)。该点对应于您的数据的平均值,这可能不是您在图中所追求的。这是 FFT 数学定义的结果,但很少有人真正关心它。
  • 基本上,我有一些看起来像this 的东西,我正试图让它看起来像this。我可以忽略第一件事吗?
  • 不。我以为这只是第一点。我稍后会尝试写一个包含更多细节的答案,但现在必须退出。同时我已经把你的情节放在你的问题中(因为我猜你不能用低代表),但它的信息量很大,所以请在它周围写一些解释性文字。

标签: java processing fft visualization


【解决方案1】:

事实证明,我要做的就是将数据乘以 Math.log(i + 2) / 3 其中i 是被引用数据的索引,从左边(低音)开始为零索引。 您可以在上下文here 中看到这一点

【讨论】:

    【解决方案2】:

    您显示的频谱看起来相当典型的复杂音乐声音,其中您在较低频率处有一个复杂的部分,但也有一些从低频混乱中出现的清晰谐波。而且,实际上,这些谐波异常清晰……音乐通常很复杂。有时,例如,如果长笛演奏一个清晰的音符,它会得到一个或两个很好的峰值,但更常见的是瞬态和打击乐会导致非常复杂的频谱,尤其是在低频时。

    为了直接与视频进行比较,在我看来,视频有点奇怪。我的猜测是,他们显示的频谱要么是放大一小部分远离零的频谱,要么只是基于音乐但不对应于实际频谱的图形算法。也就是说,如果你真的想要一些看起来与这个视频非常相似的东西,你需要的不仅仅是光谱,尽管光谱可能是一个很好的起点。这里有几点需要注意:
    1)有一个突出的峰值,偶尔出现在单词anchor的“N”上方。音频中的单个主峰应该是清晰的,近似纯音。
    2)偶尔会有另一个峰值随这个峰值在时间上变化,这通常表明第二个峰值是谐波,但很多时候这个第二个峰值不存在。
    3)奇怪行为的一个很好的例子是2:26。这一次只是跟着一点激光音效,然后基本上是相当的嘶嘶声。嘶嘶声应该是没有峰值的广谱声音,通常加权到较低频率。然而,在 2:26,“N”上方只有一个大峰,没有其他任何东西。

    【讨论】:

    • 有趣...嗯,谢谢。我也觉得有些不对劲,但我对这些事情的真正运作方式知之甚少,无法确定。将此标记为说它实际上不是光谱的答案。
    • 弄清楚他们在这里实际做了什么将是一个有趣的问题。我想到的另一个选择是它们:1)翻转频谱,使较低的频率在右侧,更有趣的是,2)缩放幅度,使较高的频率获得更大的权重(例如,将 FFT 幅度乘以@987654321 @,或者像调整后的 log(f) 或 sigmoidal 之类的在大 f 处变平的东西?
    • 我试着做一个日志,但我无法让它工作。不过我可能会再试一次,因为它看起来确实应该这样做。
    • 我找到了日志! (无论如何,足够接近):D
    猜你喜欢
    • 2017-11-28
    • 2011-09-13
    • 1970-01-01
    • 2011-07-01
    • 2022-01-20
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多