为什么这个分贝计算是/10 而不是/20?

Why is this decibels calculation /10 instead of /20?

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)

有问题的代码:

https://github.com/AudioKit/AudioKit/blob/9ae8641551bc5f7b4c9b4c887aa327155fac83b5/AudioKit/Common/Internals/Audio%20File/AKAudioFile%2BProcessing.swift#L42

https://github.com/AudioKit/AudioKit/blob/9ae8641551bc5f7b4c9b4c887aa327155fac83b5/AudioKit/Common/Internals/Audio%20File/AKAudioFile.swift#L294

参考:

http://www.sengpielaudio.com/calculator-db.htm

https://en.wikipedia.org/wiki/Field,_power,_and_root-power_quantities

谢谢!

这是电气工程专业学生在学习功率增益和 voltage/current 对数刻度增益时的一个常见误解,我很惊讶你在这里遇到它。

在我的领域中,对数刻度图最常用于表示系统在给定频率范围内的功率增益。在这种情况下,功率增加 10 分贝相当于功率增加 10 倍。但是,电压和电流并非如此。如果信号的电压或电流增加 10 倍,那么信号的功率增加将 而不是 10 倍,它将是 sqrt(10) ~= 3.16。这是因为功率随着电压和电流的平方成比例增加。

因此,当我们对信号功率随频率变化的方程取对数时,我们会发现类似这样的结果; (对于电阻器)

log(P(ω)) = log(V(ω)^2 / R) = 2log(V(ω)) - log(R)

两边乘以 10 将 Bels 转换为分贝;

10log(P(ω)) = 20log(V(ω)) - 10log(R)

声波的振幅和功率之间的关系类似于电信号 AFAIK 的振幅和功率之间的关系。这就是为什么振幅增加 20 分贝对应于振幅增加 10 倍,功率增加 10 分贝对应于功率增加 10 倍。

P.S。要回答您的问题,您需要确定电平是功率单位还是振幅单位。您对函数使用的单位的了解比我多,因为我对音频文件的经验非常有限,但我的直觉是音频文件是振幅的表示,在这种情况下您是正确的;转换系数需要为 20,而不是 10。