Using Ekahau Pro + WLANPI to Derive MOS for VoWIFI

At WLPC Phoenix 2020 I presented a TEN Talk on this topic.  For those that haven’t seen the video, you can view it here.

For the record, ten minutes goes by REALLY FAST when you are having fun, which is why I seem a bit rushed starting from about the middle of the video.  After the presentation I was asked by a couple of conference-goers to add a little more detail and context so here goes.

To avoid repetition, this situation came from a request by a client of Airopath’s (, the company I work for, and if you really want a bit more background I encourage you to watch the video.  That said, let’s move on.

There are three factors that affect VoIP calls: jitter, latency, and packet loss.  Any one of these at a significant enough value can affect the quality of the call – jitter being the most important.  For more detail I recommend reading Panos’ blog post since everything I explain here came right from that document.

MOS stands for Mean Opinion Score and is a numerical value used to assess the user experience for VoIP calling.  There are a few ways to calculate this number but the most common way is the E-model.  If you are interested in the full dissertation on the E-model, go here. Suffice it to say I needed a way to collect the data on jitter, latency, and packet loss and be able to compile and present the information to my client in a meaningful way.  For this task, I used Ekahau Pro‘s Active Survey and the WLANPI as the endpoint on the client’s network.

The Active Survey has a couple of options – either Ping or Throughput – but you have to choose one or the other.  Therefore, I decided to use the Throughput option since it would provide a visualization for Jitter, which is weighted in the calculations I “borrowed” from Panos.  Using the Ping option through Ekahau limits me to just pinging the Default Gateway which I did not want for the reason I will explain in a moment.

For the packet loss and latency measurements, I used hrping for Windows so I could pipe the output into a timestamped file for later analysis and pointing at my WLANPI unit.  Using ping to a busy network resource such as a router or switch may have affected to data due to introduced latency on a busy device so using my WLANPI alleviates that issue to a manageable point.  Now that I have my endpoint and data gathering devices, on to actually getting the data.

While using Continuous Surveying is the preferred method for gathering Passive data, it might not be what you want when gathering Active data; however, since I was evaluating a VoWIFI network here, I decided to use Continuous since people often move while on phone calls.  To gather the data actively, I would start hrping and then start my Continuous survey walk.  I broke up the multi-story project into floors and performed a separate walk per floor with each having its own set of data.  This way, I could present the data in the report in a more manageable way.

After getting the data and ensuring I had everything I needed, I then went back to Panos’ blog post and started the calculations to derive the MOS.  I put all the steps he outlined into an Excel spreadsheet to derive a range for each floor and provide a low, median, and high value per floor.  I then provided the Latency visualization from Ekahau for each floor as well.  The nice side benefit to doing so was that the calculations I used for the high, median, and low MOS generally lined up with the Jitter visualization showing the areas where jitter was an issue.  This made it pretty easy for my client to find a general geographic location where they could expect a bad user experience on a call.

Ultimately this allowed me to learn about VoIP MOS and provide me with a method to produce meaningful information that could be relayed to a non-technical audience in a visual manner.  I haven’t used this method since then but if I was ever asked to do so, I’d likely pull this out of my archives.  It may need to be improved upon and I welcome anyone to test it out and see if there is a way to improve it, but for now I just wanted to share how I was given a challenge and found a solution.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s