A more detailed article is available on our website: Measuring VoIP Quality with MOS Score (Mean Opinion Score) Blog Post by Alyssa Lamberti.

Mean Opinion Score (MOS)

The Mean Opinion Score (MOS) has been a commonly-used metric to measure the overall voice call quality for decades. The MOS score is a rating from 1 to 5 of the perceived quality of a voice call, 1 being the lowest score and 5 the highest for excellent quality. It has been standardized by the International Telecommunications Union ITU-T.

The MOS has been originally developed for traditional voice calls but has been adapted to Voice over IP (VoIP) in the ITU-T PESQ P.862. The standard defines how to calculate a MOS score for VoIP calls based on multiple factors such as the specific codec used for the VoIP call. Each VoIP codec (ex: G.711, G.722, G.723.1, G.729) behaves differently. Some codecs such as G.711 are uncompressed for higher quality but are using more bandwidth than compressed codecs such as the G.729. 

The MOS score we measure is the G.711 codec which is by far the mostly used codec for VoIP calls. The maximum MOS score for a G.711 call is 4.4.

MOS Score vs Call Quality

We select the Call Quality in the App based on the MOS Score. The following table list the different qualities and the lower MOS limit for each of them. The limit values are from the ITU-T G.107 and ITU-T G.109 standards.


MOS Calculation from Network Performance Measurements

The standard ITU-T G.107 defines the algorithm we use to calculate the G.711 MOS score based on the Network Performance metrics (latency, jitter and packet loss). The exact algorithm is available below in pseudo-code.

# VoIP Codec Processing Delay in milliseconds (ms)

codec_delay = 10.0

# Effective Latency is the Average Latency plus the doubled
# Average Jitter plus the VoIP Codec Delays

effective_latency = average_latency + 2* average_jitter + codec_delay

# Calculate the R-Value (Transmission Rating Factor R) based on
# Effective Latency. The voice quality drops more significantly
# over 160ms so the R-Value is penalized more.

if effective_latency < 160:
    r = 93.2 - (effective_latency / 40)

    r = 93.2 - ((effective_latency - 120)/ 10)

# Reduce R-Value 2.5 times the Packet Loss percentage

r = r - 2.5 * packet_loss

# Based on ITU-T G.107

if r < 0:
    mos = 1.0

    mos = 1 + 0.035*r + 0.000007*r*(r-60)*(100-r)
Did this answer your question?