AudioKit 支持将音频文件标准化为给定的最大分贝级别 (dB)。
我的理解是这些是场量而不是功率量。
因此,这不应该是
/ 20.0
而不是/ 10.0
吗?
let gainFactor = Float( pow(10.0, newMaxLevel / 10.0) / pow(10.0, level / 10.0))
这不应该是
20 *
而不是 10 *
吗?
return 10 * log10(maxLev)
有问题的代码:
参考:
http://www.sengpieladio.com/calculator-db.htm
https://en.wikipedia.org/wiki/Field,_power,_and_root-power_quantities
谢谢!
这是电气工程专业学生在学习对数尺度的功率增益和电压/电流增益时常见的误解,我很惊讶你在这里遇到了它。
在我的领域中,对数刻度图最常用于表示系统在给定频率范围内的功率增益。在这种情况下,功率增加 10 分贝相当于功率增加 10 倍。然而,对于电压和电流而言,情况并非如此。如果信号的电压或电流增加 10 倍,那么信号的功率增加将不是是 10 倍,而是 100 倍。这是因为功率与电压和电流的平方成比例增加。
因此,当我们取信号功率随频率变化的方程的对数时,我们会发现这样的结果: (对于电阻器)
log(P(ω)) = log(V(ω)^2 / R) = 2log(V(ω)) - log(R)
两边乘以 10 将贝尔换算为分贝;
10log(P(ω)) = 20log(V(ω)) - 10log(R)
声波的振幅和功率之间的关系类似于电信号的振幅和功率之间的关系。分贝是根据功率定义的,因此 20 dB 的幅度增加就是将功率输出增加 100 倍的量。这个量是 10 倍,因此幅度增加 10 倍就是增加 20 dB。
附注要回答您的问题,您需要确定电平是功率单位还是幅度单位。您比我更了解该函数使用的单位,因为我对音频文件的经验非常有限,但我的直觉是音频文件是幅度的表示,在这种情况下您是正确的;转换系数需要为 20,而不是 10。