音频的典型FFT看起来非常相似,大部分动作都发生在最左侧
http://www.flight404.com/blog/images/fft.jpg
他将它乘以部分正弦波使其达到最低点,但文章对此部分并不太具体.它似乎也是对数据集的"足够好"的修改,而不是基于某些属性的修改.我知道人类的听觉更适合更高的频率,因此,大多数音乐都会放大低音和衰减的高音,这样我们两个声音都具有相对相等的强度.
我的问题是需要对FFT进行哪些修改以补偿这种标准衰减?
for(i = 0; i < fft.length; i++){
fft[i] = fft[i] * Math.log(i + 1); // does, eh, ok but the high
// end is still not really "loud"
// enough
}
Run Code Online (Sandbox Code Playgroud)
编辑::
http://en.wikipedia.org/wiki/Equal-loudness_contour
我看到了这篇文章,我认为这可能是进入的方向,但仍然可能存在一些需要反击的FFT属性.
首先,您确定要这样做吗?补偿一些事情是有意义的,例如麦克风响应不平坦,但不是人类的感知。人们习惯于听到具有现实世界中声音频谱内容的声音,而不是沿着感知等响度曲线。如果您按照您建议的方式播放已修改的声音,那么听起来会很奇怪。也许有些人喜欢增强低频的音乐,但这是品味问题,而不是心理物理学问题。
或者,您可能出于其他原因进行补偿,例如,考虑到对较低频率的较差敏感度可能会增强压缩算法。这是这个想法吗?
如果您确实想通过等响曲线进行归一化,则应注意大多数曲线和方程都是以声压级 (SPL) 为单位的。SPL 是波形幅度平方的对数,因此当您使用 FFT 时,使用其平方(功率谱)可能是最简单的。(或者,当然,您可以通过其他方式进行补偿,例如在上面的等式中乘以 sqrt(log(i+1)) - 假设对数是逆等响度曲线的近似值。)