0

我目前正在实施一个峰值计,需要重新调整对数 dB 值。搜索现有函数我发现了这个:如何计算 VU 米刻度的对数标签?

它几乎可以满足我的需要。我不了解这些函数的数学背景。

我希望有人能解释一下。

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);
}
4

1 回答 1

1

首先,对数刻度只是可能的数字刻度之一,线性只是另一种。例如,摄氏或华氏温标。您可能对“摄氏度”或“华氏度”一无所知,但您可以简单地使用以下公式:

[°C] = ([°F] - 32) × 5/9  
[°F] = [°C] × 9/5 + 32

...并且不要考虑任何事情(因为这些尺度是严格定义的)。

至于对数和线性刻度,您应该考虑一下,因为您应该知道当前使用的是哪种刻度:例如,您有一些“对数”值,但是目标线性刻度的限制是多少?从 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);    
}

请参阅:为什么使用对数刻度来测量声音?

编辑。至于峰值计,我从未在真正的线性刻度中见过它。在声音编辑器中,峰值表只以统一的比例显示对数值(-72、-30、-1、0、...):

在此处输入图像描述

因此,我看到了一个解决方案,不将 dB 值转换为线性比例,而只是以统一比例显示它们

于 2017-04-20T11:30:01.727 回答