重新缩放对数 dB 值刻度
Rescale logarithmic dB value scale
我目前正在实施峰值计,需要重新调整对数 dB 值。
搜索现有函数我发现了这个:
它几乎可以满足我的需要。
我不了解这些函数的数学背景。
希望有人能解释一下。
function sigLog(n) {
return Math.log(Math.abs(n) + 1) / Math.log(10) * sig(n);
}
function sig(n) {
return n == 0 ? 0 : Math.abs(n) / n;
}
function sigExp(n) {
return (Math.pow(10, Math.abs(n)) - 1) * sig(n);
}
首先,logarithmic scale 只是其中一种可能的数值尺度,线性只是另一种。例如,摄氏或华氏温标。您可能对 "Celsius" 或 "Fahrenheit" 一无所知,但您可以简单地使用公式:
[°C] = ([°F] - 32) × 5/9
[°F] = [°C] × 9/5 + 32
... 并且什么都别想(因为这些尺度是严格定义的)
至于对数和线性标度,您应该考虑一下,因为您应该知道您当前使用的是哪种标度:例如,您有一些 "logarithmic" 值,但限制是多少你的目标线性比例?从 0 到 32768,或者可能是从 0 到 1?此外,标准使用的对数底数是 10,但也可以是另一个。
我用来将对数音量参数转换为线性比系数(从"log"到[0, 1]线性比例),在c++中:
float db_to_linear_ratio(float db_val)
{
return pow(10.0, db_val/10.0);
}
See: Why is a logarithmic scale used to measure sound?
编辑。至于峰值表,我从未见过真正的线性刻度。在声音编辑器中,峰值表仅以统一的比例显示对数值(-72、-30、-1、0、...):
因此,我看到了一个解决方案,不将 dB 值转换为线性标度,而是以统一的标度显示它们。
我目前正在实施峰值计,需要重新调整对数 dB 值。
搜索现有函数我发现了这个:
它几乎可以满足我的需要。 我不了解这些函数的数学背景。
希望有人能解释一下。
function sigLog(n) {
return Math.log(Math.abs(n) + 1) / Math.log(10) * sig(n);
}
function sig(n) {
return n == 0 ? 0 : Math.abs(n) / n;
}
function sigExp(n) {
return (Math.pow(10, Math.abs(n)) - 1) * sig(n);
}
首先,logarithmic scale 只是其中一种可能的数值尺度,线性只是另一种。例如,摄氏或华氏温标。您可能对 "Celsius" 或 "Fahrenheit" 一无所知,但您可以简单地使用公式:
[°C] = ([°F] - 32) × 5/9
[°F] = [°C] × 9/5 + 32
... 并且什么都别想(因为这些尺度是严格定义的)
至于对数和线性标度,您应该考虑一下,因为您应该知道您当前使用的是哪种标度:例如,您有一些 "logarithmic" 值,但限制是多少你的目标线性比例?从 0 到 32768,或者可能是从 0 到 1?此外,标准使用的对数底数是 10,但也可以是另一个。
我用来将对数音量参数转换为线性比系数(从"log"到[0, 1]线性比例),在c++中:
float db_to_linear_ratio(float db_val)
{
return pow(10.0, db_val/10.0);
}
See: Why is a logarithmic scale used to measure sound?
编辑。至于峰值表,我从未见过真正的线性刻度。在声音编辑器中,峰值表仅以统一的比例显示对数值(-72、-30、-1、0、...):
因此,我看到了一个解决方案,不将 dB 值转换为线性标度,而是以统一的标度显示它们。