【问题标题】:( p5.js ) FFT report lower frequencies "too loud" and higher frequencies "mute"?( p5.js ) FFT 报告较低频率“太大声”和较高频率“静音”?
【发布时间】:2016-01-15 21:13:14
【问题描述】:

我一直在尝试使用 p5 声音进行简单的 FFT,然后直观地绘制频谱波段。

我注意到的一件事是,几乎所有曲目中的低频都显得非常高,而高频似乎是静音的。

因此,例如,仅对 16 个频段进行 FFT 时,大部分声音仅发生在前 4 个频段上,而其他频率(较高的频率)似乎被报告为“静音”或太安静了。

您可以在此示例中看到这一点,例如:http://p5js.org/reference/#/p5.FFT 其中即使频率相对较高,频谱的右侧也完全保持向下,据报道较低的频率是最高的,即使您在这里更难中/高音的声音。

似乎必须对 FFT 结果进行某种转换才能获得与我们听到的更好匹配的视觉表示?

我错过了什么吗?我的意思是,我肯定遗漏了一些关于 FFT 工作原理和频率报告方式的基本信息,但我的意思是,这是一个有共同解决方案的常见问题吗?

【问题讨论】:

    标签: audio fft p5.js


    【解决方案1】:

    人类的听觉系统本质上是以 2 为底的对数 - 每个后续的 octave 的带宽是下一个的两倍。因此,人类可感知声音的绝大多数频率内容都低于1kHz,并且信号功率在较高频率的 FFT 箱之间分布得更薄 - 这正是您的图表所显示的。

    Spectrograms - 这是我怀疑您希望在这里看到的 - 在 x 轴上用log(F) 绘制,在 Y 轴上用 dB 为单位的信号功率绘制。您的代码绘制了两个轴均为线性的图形。

    此外,由于您没有专门将 window function 应用于用于计算 FFT 的样本,因此默认情况下您得到的是 rectangular window - 在此应用程序中远非一个好的选择。

    【讨论】:

    • 日志(F)和 Y 轴上的 dB 的有趣信息。原来 p5 可以选择以 dB 为单位获取 Y 值,但我看不到任何窗口选项。也许我应该寻找一个不同的 js 库以获得更好的窗口,然后还学习如何使用 log(F) 绘制 X 轴。非常感谢您提供更多信息(:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多