Algorithm 声谱图
我制作了一个应用程序,可以实时(从麦克风)在屏幕上绘制FFT。x轴上的时间、y轴上的频率和像素的颜色表示振幅(相当于普通的FFT频谱图) 我的问题是,即使我能从音乐中看到一种模式,也有很多噪音。我在谷歌上看到人们对振幅进行对数计算。我应该这样做吗?如果是这样的话,公式会是什么样子?(我使用的是C#,但我可以将数学转换为代码,所以任何示例都可以。)Algorithm 声谱图,algorithm,audio,Algorithm,Audio,我制作了一个应用程序,可以实时(从麦克风)在屏幕上绘制FFT。x轴上的时间、y轴上的频率和像素的颜色表示振幅(相当于普通的FFT频谱图) 我的问题是,即使我能从音乐中看到一种模式,也有很多噪音。我在谷歌上看到人们对振幅进行对数计算。我应该这样做吗?如果是这样的话,公式会是什么样子?(我使用的是C#,但我可以将数学转换为代码,所以任何示例都可以。) 我可以通过应用颜色方案来绕过这个问题,将较低的值显示为较暗的颜色。我只是不确定在没有对数计算的情况下音频是否正确表示。在对数尺度上表示振幅近似于人类听
我可以通过应用颜色方案来绕过这个问题,将较低的值显示为较暗的颜色。我只是不确定在没有对数计算的情况下音频是否正确表示。在对数尺度上表示振幅近似于人类听觉系统的灵敏度,因此与非对数尺度相比,它能更好地表示您听到的声音。从数学上讲,你所要做的就是:
Alog = 20*log10 (abs (A))
其中,A
是FFT数据的振幅,Alog
是输出。20
的系数只是一种惯例,对图像没有影响,您可能会将其缩放为颜色方案
编辑
关于20
系数的说明:dB(分贝)单位是一个对数单位,用于测量比率:它表示一个刻度,100和10之间的距离与1000和100之间的距离相同(因为它们具有相同的比率:1000/100=100/10)。如果以dB为单位进行测量,则得到:
10*log10 (1000/100) = 10*log10 (100/10) = 10
10
的系数是因为deci
意味着tenth
,这意味着1贝尔等于10分贝(比如1千克等于1000克)
由于人类听觉系统也(近似)测量比率,因此在对数尺度上测量声级是有意义的,即测量声级与某些参考值的比率。由于声级与声波的功率(以瓦特为单位)相关,因此实际上测量的是功率P/Pref的比率。此外,功率与振幅平方成正比,因此总的来说:
10*log10 (P/Pref) = 10*log10 (A^2 / Aref^2) = 20*log10 (A/Aref)
根据日志规则。这就是
20
因子的来源-记住,在计算机中,音频由声波的瞬时振幅表示 以对数方式查看频谱图确实是查看音频信号的更好方法。请记住,你需要在时间方向和频率方向上都有好的表现。如果一个或另一个箱子里的箱子太少,可能看起来很奇怪
另一个重要的观点是,在对数刻度上查看STFT并不是一种去噪技术。你所看到的“噪音”可能是真实的,也可能是类似的东西,以及其他预期会出现的东西。根据应用程序的不同,如果需要对信号进行短时分析,变换可能更适合您的需要。它消除了STFT的某些缺点,例如恒定的窗口大小。您有当前输出的屏幕截图吗?更好的是,使用对数频率轴,更接近耳朵的灵敏度,以了解差异,例如,请参阅Hanks。你能再解释一下吗?