离散数据到对数刻度
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)=0
和f(128)=128
.
确定k
和b
一个函数 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)=0
和f(128)=128
.
k
和b