声谱图

Ted*_*sen 4 algorithm audio

我做了一个应用程序,实时绘制FFT到屏幕(从麦克风).x轴上的时间,y轴上的频率和像素的颜色表示幅度(几乎是一个vanilla FFT频谱图).

我的问题是,虽然我可以从音乐中看到一个模式,但也有很多噪音.谷歌搜索它我看到人们对振幅应用对数计算.我应该这样做吗?如果是这样,公式会是什么样子?(我正在使用C#,但我可以将数学翻译成代码,所以任何样本都可以.)

我可以通过将显示较低值的颜色方案应用为较暗的颜色来绕过此问题.我只是不确定音频是否正确表示而没有对数计算.

Ita*_*atz 8

在对数刻度上表示幅度近似于人类听觉系统的灵敏度,因此与非对数刻度相比,可以更好地表示您所听到的内容.在数学上,你所要做的就是:

Alog = 20*log10 (abs (A))
Run Code Online (Sandbox Code Playgroud)

AFFT数据的幅度在哪里,并且Alog是输出.因素20只是一种约定,对图像没有影响,你可能无论如何都要缩放到颜色方案.

编辑

关于20因子的说明:dB(分贝)单位是测量比率的对数单位:它表示100到10之间的距离与1000到100之间相同的比例(因为它们具有相同的比率:1000/100 = 100/10).如果你以dB为单位测量它,你得到:

10*log10 (1000/100) = 10*log10 (100/10) = 10
Run Code Online (Sandbox Code Playgroud)

因素10是因为deci手段tenth,意味着1贝尔是10分贝,(如1千克是1000克)

由于人类听觉系统也是(近似)测量比率,因此在对数标度上测量声级是有意义的,即测量声级与某个参考值的比率.由于声音的水平与声波的功率(以瓦特为单位)相关联,因此您实际上测量了功率P/Pref的比率.此外,功率与幅度平方成正比,所以总而言之:

10*log10 (P/Pref) = 10*log10 (A^2 / Aref^2) = 20*log10 (A/Aref)
Run Code Online (Sandbox Code Playgroud)

按日志规则.这是20因素的起源- 请记住,在计算机中,音频由声波的瞬时幅度表示.