1

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.sengpieaudio.com/calculator-db.htm

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

谢谢!

4

1 回答 1

2

这是电气工程专业学生在学习对数刻度上的功率增益和电压/电流增益时常见的误解,我很惊讶您在这里遇到了它。

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

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

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

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

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

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

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

于 2017-10-12T03:30:42.087 回答