【问题标题】:FFT from libraries have lower levels than Web audio FFT来自库的 FFT 的级别低于 Web 音频 FFT
【发布时间】:2018-11-25 10:06:37
【问题描述】:

我正在尝试根据网络浏览器中的麦克风输入绘制 FFT。我创建了一个将 FFT 结果绘制到画布中的对象。我首先使用了网络音频分析仪 (https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode/getByteFrequencyData) 的频率数据,得到了黑色显示的图。它检测到大多数频率的相当大的水平,直到每个样本接近 0.5。第一张图是 FFT,第二张图是捕获的麦克风噪声。

后来我也做了同样的事情,这次使用的是 fft.js (https://www.npmjs.com/package/fft.js)。生成的 FFT 看起来几乎没有填充,即使我扩展了垂直轴(左上角的数字是图中的最大值)

我觉得我遗漏了一个概念,我想知道:为什么两个 FFT 的结果如此不同?我需要将输入或输出从一个比例调整为另一个比例吗?

【问题讨论】:

    标签: signal-processing fft web-audio-api


    【解决方案1】:

    您可能在这里比较苹果和橙子。根据spec for getByteFrequencyData,您得到的值是分贝刻度。

    FFT 库中的值可能是线性的。如果是这样,您需要在比较结果之前将其转换为 dB。 (或将字节频率数据转换为线性)。

    另请注意,WebAudio 在计算结果之前应用了一个窗口函数。除非您也应用相同的窗口函数,否则这可能会使其与您的 FFT 结果不同。

    【讨论】:

    • 谢谢!这正是我开始搜索所需要的。
    • 祝你好运,让我们知道问题所在。哦,顺便说一句,您可能想使用 getFloatFrequencyData 而不是 getByteFrequencyData 以便更轻松地与您的 FFT 库进行比较。
    • 我认为不同之处在于,正如你所说,规模。我怀疑跨音调对音量的声学感知也有补偿。
    • 不在分析器节点中。这是非常基本的:对信号进行窗口化,应用 FFT,获取幅度并返回它。 (好吧,随着时间的推移,FFT 的一些平均也会发生)。但没有声学感知。
    猜你喜欢
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多