【发布时间】:2017-07-20 00:37:33
【问题描述】:
我正在尝试找到一种方法来根据从 excel 导入的自定义用户数据调整音调。
self.changePitch(30 + (parseInt(self.infoCollection.collection[j].array[i])-200/(3600)));
上面的代码适用于最高约 5,000 的“正常值”。但是,我想将它们标准化为始终介于最小和最大频率之间。 (200 和 3800)
我尝试使用此处找到的公式:
https://stats.stackexchange.com/questions/70801/how-to-normalize-data-to-0-1-range
其中说使用(x-minval)/(maxval-minval)
但是,这并不适用于所有情况。使用非常大的数字时。 IE 5000万还是会超过最大频率的。
我正在尝试找到一种方法,将任何有理数标准化为数亿。
编辑:很抱歉给您带来了困惑。我正在制作一个根据放置在图表上的数据播放声音的应用程序。目的是让有视觉障碍的用户更好地理解数据,使用声音来获取彼此相关的值。我的问题是人类听不到某个数字以上的频率,所以如果值超过 5000 左右,应用程序将不会为该数字播放任何声音。
示例: A 公司的利润为 200 美元,B 公司的利润为 5000 万美元。用户会听到 A 公司的声音,但不会听到 B 公司的声音,因为频率超出了人类的听觉范围。
【问题讨论】:
-
你能举一个简单的比率公式不起作用的例子吗?它在数学上是准确的。
-
50,000,000/3800 > 3800
-
您需要做的是确定输入值在可能的输入范围内的位置,然后将其映射到目标域。
-
这毫无意义。输入值的实际范围是多少,实际的目标域是多少?
-
我认为你混合了公式的最后一部分。它不是所需范围的最大值和最小值,而是实际数据范围的最小值/最大值。因此,如果您的数据具有最小值(例如 200)和最大值 50,000,000,则公式以这种方式插入:(valueToNomalize - 200)/(50,000,000 - 200)。然后取该值,现在已标准化并缩放其所需范围: normValue * (maxDVal - minDVal) + minDVal