如果
linearLevel := Round( 1/exp( 2.30258509299 * (abs(dB)/20) ) * 32767);
由于四舍五入,我们丢失了信息(在数学语言中,Round
函数不是 injective )。因此,给定一个linearLevel
值,就不可能找回原始的dB
值。因此,让我们考虑
linearLevel := 1/exp( 2.30258509299 * (abs(dB)/20) ) * 32767;
相反。这意味着
linearLevel / 32767 := 1/exp( 2.30258509299 * (abs(dB)/20) )
和
32767 / linearLevel := exp( 2.30258509299 * (abs(dB)/20) )
和
ln(32767 / linearLevel) := 2.30258509299 * (abs(dB)/20)
和
ln(32767 / linearLevel) / 2.30258509299 := abs(dB)/20
和
20 * ln(32767 / linearLevel) / 2.30258509299 := abs(dB).
在这里,我们再次遇到问题,因为绝对值函数不是内射的。如果abs(dB)
是7
,我们可能无法判断dB
是7
还是-7
。
但是,如果我们假设dB
是非正数,那么我们终于有了
dB = -20 * ln(32767 / linearLevel) / 2.30258509299.
简化
由于2.30258509299
是ln(10)
,因此是
dB = -20 * ln(32767 / linearLevel) / ln(10).
但是log10(x) = ln(x) / ln(10)
,所以我们可以写
dB = -20 * Log10(32767 / linearLevel)
在Log10
单元中找到Math
函数的位置。
此外,在a log(b) = log(b^a)
情况下使用法律a = -1
,我们甚至可以写作
dB = 20 * Log10(linearLevel / 32767).
本文链接:https://www.f2er.com/3112047.html