Monday, October 17, 2016

網路品質量測問題 --- mean opinion score

公司的 NQM (network quality measurement) 小組,做的系統是網路品質量測系統。該系統的目標是要評估兩地的連線品質,例如:中國的某兩個相鄰省分的連線品質。測量的方式,就是在公司的主機上,送出大量 ping 封包,透過取得 ping 封包的往返時間 round trip time 和 掉包率 packet loss rate,以及往返時間的變化量 jitter 來做品質的客觀評估。

同事很快就把量測系統、資料庫、前端的介面都做好了。最後一個關卡,變成是使用者與介面的問題。於是問題出現了:「我們的軟體可以呈現這些透過 ping 量測出來的數據,但是,怎樣子的數值叫做好?怎樣子的數值叫做不好?」

一開始我的想法很單純,就做統計吧。有一整天的資料,很容易就可以算出,此時此刻的網路品質相對於一整天來講,是偏好、還是偏不好,是在一個標準差之外、還是兩個標準差之外?但是,後來想一想這個邏輯完全不通。因為使用者,也就是運維人員,他們需要的資料,並不是此時此刻網路品質相對於該兩點的一天的平均品質而言有多好。而是對於客戶來講,客戶真實的感受。比方說:客戶傳輸音訊、傳輸 http ,傳輸影片,是否會覺得不順暢?

後來,才發現這個「如何定義傳輸品質好壞」問題已經有人研究過了。有一個詞彙叫「平均意見分數」mean opinion value。也就是說,有做過實驗,讓許多不同的人在透過網路傳輸語音,讓一群人對不同的品質打出分數,於是這個 mean opinion value 就定義成了人對於聲音傳輸品質的主觀感受平均分數。MOS 的數值是從 5 分到 1 分, 5 分是完美。 1 分是無法通訊。

有了 mean opinion value (MOS) 之後,研究人員後來又發展了換算方式,可以先把量測出來的數值:round trip time, packet loss rate, jitter,透過公式算出 R factor ,再算出 mean opinion value 。我查到的計算公式如下:

' Take the average latency, add jitter, but double the impact to latency
' then add 10 for protocol latencies
EffectiveLatency = ( AverageLatency + Jitter * 2 + 10 )

' Implement a basic curve - deduct 4 for the R value at 160ms of latency
' (round trip).  Anything over that gets a much more aggressive deduction
if EffectiveLatency < 160 then
   R = 93.2 - (EffectiveLatency / 40)
else
   R = 93.2 - (EffectiveLatency - 120) / 10

' Now, let's deduct 2.5 R values per percentage of packet loss
R = R - (PacketLoss * 2.5)

' Convert the R into an MOS value.(this is a known formula)
MOS = 1 + (0.035) * R + (.000007) * R * (R-60) * (100-R)