将一个数字频谱转换为另一个

1 algorithm math

我正在尝试提出一个将一个数字频谱转换为另一个数字频谱的公式.例如:

0 - 800-1 - 1

其中0 = -1,200 = -0.5,400 = 0,600 = 0.5,800 = 1,等.

对我来说困难的部分似乎是负面的范围.

DSM*_*DSM 5

如果你的范围a0, a1b0, b1,那么你想x进入

((x-a0)/(a1-a0)) * (b1-b0) + b0
Run Code Online (Sandbox Code Playgroud)

基本上,(x-a0)你是从第一个范围的下边多远,并(x-a0)/(a1-a0)除以范围的宽度,所以数字现在归一化为[0, 1].之后,我们将乘以(b1-b0)将范围扩展到新的比例,并添加b0以将其移位.

例如:

>>> a0, a1 = 0.0, 800.0
>>> b0, b1 = -1.0, 1.0
>>> 
>>> x = 400 # should go to 0
>>> x-a0
400.0
>>> (x-a0)/(a1-a0)
0.5
>>> (x-a0)/(a1-a0) * (b1-b0)
1.0
>>> (x-a0)/(a1-a0) * (b1-b0) + b0
0.0
>>> x = 0 # should go to -1
>>> (x-a0)/(a1-a0) * (b1-b0) + b0
-1.0
>>> x = 800 # should go to 1
>>> (x-a0)/(a1-a0) * (b1-b0) + b0
1.0
Run Code Online (Sandbox Code Playgroud)