计算MySQL中的平均意见得分(MOS)

时间:2016-03-06 06:10:42

标签: mysql sql math statistics voip

是否可以在MySQL中计算MOS,并且有人可以使用以下公式(参见下文并在perl脚本here中找到)提供一个工作示例,时间设置为30分钟?

对于运动数据,每5分钟插入一次,并且colums为:

<column>        <exampledata>
id              42
timestamp       2016-01-01 00:00:05
packets         1000
lost_perc       3
lost            30
delay_avg       35,102

id              43
timestamp       2016-01-01 00:00:10
packets         2000
lost_perc       10
lost            200
delay_avg       74,67

抖动

    Sum all delay_avg records and divide by number of delay_avg records-1

有效延迟
取平均延迟,添加抖动,但对延迟的影响加倍,然后为协议延迟增加10。

    $effective_latency = ( $delay_avg + $jitter * 2 + 10 );

R值
实施基本曲线

    if ($effective_latency < 160) {
        $r_value = 93.2 - ($effective_latency / 40);
    }
    else {
        $r_value = 93.2 - ($effective_latency - 120) / 10;
    }

每个packet_loss百分比扣除2.5 r_value

   $r_value = $r_value - ($lost_perc * 2.5);
   # Convert the r_value into an MOS value.
   $MOS = 1 + 
       (0.035) *
       $r_value +
       (0.000007) *
       $r_value *
       ($r_value - 60) *
       (100 - $r_value);    

谢谢!

2 个答案:

答案 0 :(得分:0)

MOS是一个无法衡量的主观尺度,但某些音频编解码器有已知的MOS值。

答案 1 :(得分:0)

我不认为您的抖动计算是正确的。 抖动应该表示数据包到达时间的变化。也许你可以计算它:最长的间隔减去最小的间隔。 您为抖动指定的公式只返回平均数据包延迟。

然后你应该能够使用以下因素编写一些公式: (以尽可能小的间隔计算):

  • 丢包
  • 平均延迟
  • 编解码器
  • 抖动

没有任何确切的公式(因为MOS通常是通过人体实验测试发现的),但基于这些,您可以得到一些与实际语音质量高度相关的数字。