2015-10-17 118 views
1

我一直在使用p5声音进行简单的FFT实验,然后直观地绘制光谱带。(p5.js)FFT报告低频“太大”,高频“静音”?

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

因此,例如,当仅使用16个波段进行FFT时,大多数声音仅发生在前4个波段,而且似乎其他频率(较高波段)被报告为“静音”或太安静。

你可以在这个例子中看到这个例子:http://p5js.org/reference/#/p5.FFT即使在频率相对较高的情况下,频谱的右侧仍然完全停止下来,但是低频率被报告为最高甚至更强烈, /更高的音调类型的声音。

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

我错过了什么?我的意思是,我肯定错过了关于FFT如何工作以及如何报告频率的一些基本信息,但我的意思是,这是一个共同的问题,有一个共同的解决方案?

回答

1

人类听觉系统在本质上基本上是对数基-2,每个后续octave具有下一个的两倍带宽。因此,绝大多数人类可感知声音的频率含量低于1kHz,并且信号功率在更高频率的FFT频点之间传播得更细 - 这正是您的图形显示的内容。

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

另外,因为您没有特别将window function应用于用于计算FFT的样本,所以您默认获得的是rectangular window--这是远远不适合此应用的好选择。

+0

Y轴上的日志(F)和dB有趣的信息。原来p5可以选择以dB为单位获得Y值,但我看不到任何窗口选项。 也许我应该寻找一个不同的js库以获得更好的窗口,然后还学习如何使用log(F)绘制X轴。 更多信息非常感谢(: – kroe