javascript - 规范化一个数字,使其介于0和1之间

时间:2012-06-27 19:20:10

标签: math unity3d range unityscript normalize

我有一个实验,我的程序从扬声器中拾取音频(以分贝为单位)。范围通常在0到20之间。我想取该值并将其映射到0到1之间的范围,这样我就可以按照通过扬声器的音量成比例缩放项目。因此,如果音频为20分贝,则音阶为1.如果音频为0 dB,则音阶为0.我该怎么做?我正在使用Unity3D,如果这给了任何人一个帮助函数的想法。

2 个答案:

答案 0 :(得分:1)

将它除以20,如果这确实是最大值。

var scale = function(db) {
   return db/20;
}

    var scale = function(db) {
     if (db > 0)
         {

         return db/20;

         }
     else if (db < 0)
        {

        return "db is out of range"; # or do something

        }
     else 
        {
      return "something else";

        }

  }

答案 1 :(得分:0)

如果您不想按分区统一压缩分布,则可以使用适当的对数或指数。要使用对数,请移动数据以使最小值为1,然后获取日志(任何基数)并使用除法将其缩小。这将使得较低值的值更加重要,而较大值的值则会减少。

使用指数可能更适合分贝,因为它们已经是对数刻度。只需向每个值提高一些常数,然后除以最大结果。这将与对数缩放相反;大数字将扩大彼此之间的差距,而较小的数字将更加接近。