离散数据到对数刻度

Discrete data to logarithmic scale

一个函数 returns 0 到 128 之间的离散数据。我想将该数据转换为这样的比例,即值...

0 将导致 0 128 将导致 128

中间的值应该以这种方式加权,其中较低的数字被转换 "faster" 到较高的数字,而较高的数字会增长得更慢。

背景:我想像这样在 dB 刻度(-inf 到 0dB)上做一个 VU 表(请注意距离如何随着 dB 的相同绝对变化而减小)

L ||||||||||||||||||||                |
R |||||||||||||||||||||||||||         |
-inf         -36        -18   -6   -3 0
0                                    128

例如,如何转换值以反映宽度为 255 像素的 VU 上的峰宽?

一个简单的映射就是做这样的事情

f(x) = b * (log(a + x) - log(a))

它具有 f(0)=0 的 属性,小数字比大数字变化更快。您可以调整 a 以更改它与对数曲线的接近程度(越小越接近)。一旦a确定,b可以通过求解方程f(128)=128来确定,从而得到b=128/(log(128+a)-log(a)).

这背后的想法是 f(x)=log(x)-Inf for x=0,所以你想偏移一点,比如说 f(x)=log(a+x),然后做一个线性变换确保 [0,128] 映射到 [0,128]: f(x) = k * log(a+x) + b 并通过求解线性方程f(0)=0f(128)=128.

确定kb