我制作了一个应用程序,可以将 FFT 实时绘制到屏幕上(从麦克风)。 x 轴上的时间、y 轴上的频率和像素的颜色代表幅度(几乎是一个普通的 FFT 频谱图)。
我的问题是,即使我可以从音乐中看到模式,但也有很多噪音。谷歌搜索我看到人们对振幅应用对数计算。我应该这样做吗?如果是这样,公式会是什么样子? (我使用的是 C#,但我可以将数学转换为代码,因此任何示例都可以。)
我可以通过应用将较低值显示为较暗颜色的配色方案来绕过此问题。我只是不确定音频是否在没有对数计算的情况下正确表示。
对数刻度上的振幅表示近似于人类听觉系统的灵敏度,因此与非对数刻度相比,可以更好地表示您所听到的内容。从数学上来说,你所要做的就是:
Alog = 20*log10 (abs (A))
Where A
是 FFT 数据的幅度,并且Alog
是输出。的因素20
只是一种约定,对图像没有影响,您可能无论如何都会将其缩放为颜色方案。
EDIT
关于的解释20
系数:dB(分贝)单位是测量的对数单位ratios:它表示 100 和 10 之间的距离与 1000 和 100 之间的距离相同的比例(因为它们具有相同的比率:1000/100 = 100/10)。如果以 dB 为单位进行测量,您将得到:
10*log10 (1000/100) = 10*log10 (100/10) = 10
的因素为10
是因为deci
means tenth
,这意味着 1 Bel 是 10 deciBels,(比如 1 公斤是 1000 克)
由于人类听觉系统也在(大约)测量比率,因此在对数标度上测量声级是有意义的,即测量声级与某个参考值的比率。由于声音的电平与声波的功率(以瓦特为单位)相关,因此您实际上测量的是功率比 P/Pref。此外,功率与振幅的平方成正比,因此总而言之,您会得到:
10*log10 (P/Pref) = 10*log10 (A^2 / Aref^2) = 20*log10 (A/Aref)
通过日志规则。这就是它的由来20
因素 - 请记住,在计算机中,音频是由声波的瞬时幅度表示的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)