Sie sind auf Seite 1von 174

AZQ USER GUIDE

AZENQOS On-line User Guide and Reference Manual

Latest/Live document available at:


https://docs.google.com/document/d/18GZAgcs3jRFdWqfvAqmQicvYlXRk6D0WktqWmd5
iwwo

For more AZENQOS/AZQ Product info please visit:


www.azenqos.com
Table of contents

Getting Started

PART 1 - Testing on the phone

Installation on Android

Script Creation (your test plan)


Navigation and the importance of loop
Importance of loop
Incorrect statement placing in loop:
Script control statements (loops and waits)
Loop statement
Wait statement
Script test statements (voice dial, ftp, http etc)
Network mode statement
Voice Dial statement (MOC)
Answer statement (MTC)
FTP Download statement
FTP Upload statement
HTTP Download statement
Browse statement
SMS statement
MMS statement
Data Enable statement
Ping statement
OOKLA speedtest statement
Youtube & Youtube Iframe statement
Pause statement
WIFI Enable statement
Connect WIFI statement
Disconnect WIFI statement
Other Test Script Items
Doing POLQA MOS voice quality tests
Generic test setup
Theory of operation
Guide for troubleshooting BAD MOS due to Volume level
Set APN

1
Time Sync - ideal for benchmarks (wait until next time cycle in clock)
Email Test
iPerf Test (TCP/UDP)
Unit Suffix Symbols
iPerf2
Supported options
Sample Script
Sample Result
iPerf3
Supported options
Sample Script
Sample Result
AZQ LINE Call test Instructions
AZQ Facebook Test
Adding new test users
Setting up Facebook account in AZQ

GPS accuracy improvement guidelines

Scanners: Using with PCTel Seegull IBFLex

Using with BEC Technologies ODCPE (LTE Router)


AZQ Remote Device Access
Using “_dbstart” flag in script to remove data from Processed AZM

Using/showing Cell-files on phone


From server/dashboard
Putting cell file directly from your PC to handset via USB
Important points to know about cell file:

PART 2 - Post-Processing

Searching for logs uploaded from phone, generating Excel Reports

Showing/Using Cell-files in server-generated Excel reports (from AZENQOS Web Dashboard)


Import cell file to server
Correct Cell file format

GRID Creation on QGIS

AZQ test log file types

AZQ Excel template customization

Theme management and <GENERIC_PARAM>

2
Transfer Theme from android server to gnu0 (or any linux server)

Advanced Script & Template Design Guide


Notes and variables in script
set variable[sector]
Note[‘info’,’detail’]
Custom Template and ‘where’ Function
‘Where with note’
‘Where with note start-end’
‘Get sector where’
Per Sector Plot

Introduction to VoLTE with AZQ


Generic VoLTE message flows (SIP + RRC)
VoLTE Registration message flow
VoLTE outgoing voice call message flow
Further info on SIP, RTP and RTCP
SRVCC message flow
How to know the RTP ‘PORT’
Common VoLTE call issues

Individual RTP packet data in logs

AZQ Server Reports KPI Definition and calculation formulas


Voice Call Events KPI
Call block (Setup fail) or Call Drop determination.
Main Data Report KPI and Parameters Definitions
Others KPI Definition List

Cosmetic Settings Guide


Shows_legend: Show/hide legend in plot
Use_white_background: Replace street map with plain white background.
Use_satellite_map: Replace street map with satellite map background.
continous_plot_resample_element_list: Resample elements in plots to fill gaps
Example of Creating a report with small cell size/blank space for each cell

Mobile Log (.azm) SQLite3 Database access and data reference


Parameter List and Sqlite Database structure
Data Access via SQL queries
A note on derived tables created on server (in _processed.azm files).
SQL Query simple examples
Using QGIS to plot parameters on a map or to export data (CSV, MIF, TAB, KML) from
the azm file’s ‘azqdata.db’
3
Adjusting the QGIS plot
Exporting table data to Mapinfo or Google Earth
Indoor logs - getting marking position (x,y) on indoor maps
Example R (R programming language) program source code accessing and generating
RSRP, RSRQ plots from db

AZENQOS Web-Dashboard Server Software


Requirements
Hardware
Software
Server firewall config: ports requirement
Installation process

PART 3 - Miscellaneous HOWTOs


Using a Tablet to control multiple AZQ Phones over internet/MQTT - (AZQ BOSS)
Using the AZQ PC Replay tool
Doing Social Media Tests
Using polygon to “exclude” some data (for re-drive purposes)
How to collect QMDL files for detailed analysis with QCAT/QXDM (for RTP/RTCP, TTI-level
analysis, etc)
How to collect Android logcat (debug logs)
iPerf3 Server Setup
Docker
Ubuntu / Debian
Windows (Clone from Ubuntu/Debian above)
Windows Firewall Settings
Run the server
Auto start after boot
How to let users sync processed_azms from AZQ Servers to their own GNU/Linux server
Azenqos Application Screen Description

4
Getting Started
After you have the app successfully installed and working with a valid trial/full license, please go
through below videos to get an idea of the general usage:

AZQ Usage and screen explanation video part 1:


https://www.youtube.com/watch?list=UUbtUYeOM7VDDDmTrMROhYvQ&v=NuZqqH-tYic

AZQ Usage and screen explanation video part 2:


https://www.youtube.com/watch?v=6dKO100bY9k&index=10&list=UUbtUYeOM7VDDDmTrMR
OhYvQ

AZQ Usage and screen explanation video part 3:


https://www.youtube.com/watch?v=G9Dcs9Q5sUY&index=9&list=UUbtUYeOM7VDDDmTrMRO
hYvQ

Then, please also go through each of the presentations below:

AZQ Starter Guide


https://docs.google.com/presentation/d/1IDXIYefdpvcSxPXVv1GROFlZFPcGTZtJRnofbOWVIIc/
edit?usp=sharing

Report generation guide


https://docs.google.com/presentation/d/1EMNK6zwHg8I75ulHp5tpuw3bXToVgYQII3wj05pi5X4/
edit?usp=sharing

Report check guide


for those that want to check for possible issues, mainly about checking for user error before
sending to AZQ to check.
https://docs.google.com/presentation/d/1Hiunbgv9pe9UEE2txznIY8csEHsElLjE5tdONLrgp1A/e
dit?usp=sharing

Indoor Map usage


https://docs.google.com/presentation/d/1Le2aDOnTglmeg4S1cVE7m5llA_nvdlpeq-e7ccd_6to/edit?usp=s
haring

Make sure that you can do some indoor and outdoor netmon logs, upload to server and
generate some excel reports from your logs. Then please continue to the next section with more
details on creating/editing scripts.

5
6
PART 1 - Testing on the phone

7
Installation on Android
Please refer to below spreadsheet link for the installation guide of each supported phone model:
https://docs.google.com/spreadsheets/d/1Sskzx9MC5dwFfCuxWWuYU-FqnXhjcCqkCt2CCoBR
2qQ/edit?usp=sharing

In general, the installation procedure is similar to below (but can be different on some)
1. Check model number and build number (in Settings > About)
2. Unlock and install custom recovery (TWRP)
3. Install AZQ custom firmware updater zip package if available for your model, otherwise
root the phone..
4. Download and Instal ‘AZENQOS Mobile Network Test App APK’ from
http://www.azenqos.com/beta/
5. If you don’t have a license for your phone’s IMEI yet, please write an email with subject
'TRIAL IMEI' providing your device's IMEI (First SIM slot only, press *#06# in phone
dailer) and send to support@azenqos.com using your corporate email address if you
have one.
6. After license confirmation reply via email. open AZENQOS app, and choose ‘Activate
Online’.

8
Script Creation (your test plan)
 
Scripts allow users to setup and execute a sequence of pre-determined statements such as 
Voice call, FTP download and FTP upload on the phone. Once a script has been created you can 
initiate it via “Start Script” on the main menu. 
 
To create a script, go to AZQ main menu and enter “New Script” 
 

 
 

Navigation and the importance of loop


 

Once you enter “New Script” You will be able to add a new statement by tapping the ​ icon, 

scripts can be saved by tapping the  


 

 
 
You can also edit an existing statement by tapping on that statement to bring up the edit menu. 
In this example, Voice Dial is tapped and the edit menu is displayed 
 

 
 
Pressing ​ Will move the current statement down and make Voice Dial happens after Wait, 
as shown in the next image 
 

9
 
 
Likewise, tapping ​ will move the current statement up and make Voice Dial happen before 
the wait statement as in the original script as shown in the next image 

 
 
Tapping ​ will allow the user to edit the Voice Dial script 
 

Tapping ​ will save the changes made to the script  


 

Tapping ​ will delete the statement from the script 


 
 

Importance of loop
 
Loop allows a statement within the loop to be repeated automatically, this generally means that 
the user need to start the script only once during a drive. However, incorrectly setting the loop 
means that script will only execute a statement once before ending, thus requiring the user to 
start script again. It can be very tiring so we better get this right the first time 
 
Below is an example of an incorrect loop setup 
 

 
 

10
Starting this script means that the Voice Dial will happen once, followed by 45 seconds idle 
time, then the script will end. This is because the Voice Dial and Wait are not in the loop! To 
setup a correct loop, please follow these steps 
 
● Tap on Voice Dial to bring up the edit menu 
 

 
 
● Tap ​ to move Voice Dial into the loop, notice that voice dial is now moved to the right 
and into the loop, if this script is started now, Voice Dial will be repeated 10,000 times 
 

 
 
● Repeat the procedure with the Wait Statement 
 

 
 
The loop is now setup correctly and starting it will make the phone execute Voice Dial followed 
by wait for 10,000 times or until the user ends the test 
   

11
Incorrect statement placing in loop:

 
Above is example of incorrect loop placement, please make sure each statement in loop is 
indented as picture below. 
 

 
 
 
   

12
Script control statements (loops and waits)
Loop statement

 
 
Loop count:​ The number of times a script will repeat itself before ending, please keep in mind 
the importance of keeping statements in the loop 
 

Wait statement
 

 
 
Wait will make the phone enters into idle mode, log will still be recorded during this time and the 
user can execute actions such as calls or use applications manually. Ideal for collecting 
coverage information 
 
Report Status to Server:​ Enabling this will allow the phone to send its status (Location, Battery 
level, Type of test being done) back to the server when wait is being executed 
 
Duration:​ The duration of the idle time 
 
13
 

Script test statements (voice dial, ftp, http etc)


Network mode statement
 
Use this for RAT force/locks. App will try force modem to a certain technology before executing 
the next statement, please note that this function is not supported on all phones.  
 

 
 
Wait after force:​ Azenqos will wait for a specified amount​ ​of time before going to next 
statement. This is to make sure that the device is properly locked to this network mode. 

Voice Dial statement (MOC)


 

 
 
14
Voice Dial will make the phone initiate calls to the target number 
 
Tel Number:​ The target number the phone will call to. 
 
Duration:​ The duration of the conversation after the call has been picked up on the receiving 
side. 
 
Setup timeout:​ The duration of time (in seconds) the phone will wait for the call to ring after it 
has been initiated on the caller side 
 
Answer timeout:​ The duration of time (in seconds) the phone will wait for the call to be picked 
up after ringing has started 
 
Record ring-back tone​: This will record any sound transmitted to this device during call session. 
 
Use video call​: The phone will use video call if available. 
 
Hangup after SRVCC​: In case of VoLTE, if SRVCC event occurs the phone will automatically 
hangup 
 
Ask for redo if call setup time is higher than threshold​: This option allows Azenqos to 
automatically ask tester to redo voice call if call setup time is higher than threshold value (set by 
user). This can save time so that if KPI is not passed then tester will not need to run the whole 
script again. 

 
 
Ask for redo if call failed: ​Same as above but with call failed instead of call setup time. 
 
   

15
Answer statement (MTC)
 

 
 
Answer will make the phone picks up incoming calls, if the answer statement is not active then 
incoming calls will be ignored unless the user manually picks up the call 
 
Custom volume percent: I​ n case of MOS test, if MOS results warns that speech level is too high 
or too low you can adjust this value accordingly. 
 
Duration:​ The duration of the conversation after call has been picked up in seconds 
 
Incoming Number:​ Specify the number of the incoming call that the phone will pick up. If left 
blank the phone will pick up calls from any number 
 
Use Full-Duplex MOS:​ Allows user to force Full-Duplex if available. 
 
Use narrow band: ​Allows user to force voice session to use narrowband (This can affect MOS 
score) 
 
Wait time:​ The duration of time the phone will wait for calls in idle mode before executing the 
next statement. 
   

16
FTP Download statement
 
FTP download will download a file from the target server, please note that the target file name 
must exist on the server for the download to be started  
 

 
 
 
File name:​ Specify the file name to download, p​ lease make sure that it must follow the exact 
same convention (Capital letters, spacing) as the file name on the server  
 
Timeout:​ Specify the download time before the FTP download is considered as failed 
 
Inactivity Timeout:​ Specify the period of no data activity before the FTP download is considered 
as fail   
 
IP:​ IP of the FTP server 
 
Username:​ Username for the FTP server 
 
Password:​ Password of the FTP server 
 
Number of sessions:​ ‘n’ session means downloading ‘n’ files at the same time (i.e. if 
downloading 100MB file with 10 sessions, you’ll download total of 1000MB). 
 
Ask for redo if average throughput is lower than threshold: T ​ his option allows Azenqos to 
automatically ask tester for redo if average throughput of this session is lower than specified 
threshold. This can save time so that if KPI is not passed then tester will not need to run the 
whole script again. 
 
Ask for redo if max throughput is lower than threshold:​ Same as above but with max 
throughput instead of average. 

17
FTP Upload statement
 
FTP upload will upload a randomly generated text string of the specified size to the target
server.

 
 
Target directory: ​Directory which the file will be uploaded to (If any) 
 
File size:​ Specify the size of the file to upload, p
​ lease use lower case letter without spacing​ to 
specify the file size 
 
IP:​ IP of the FTP server 
 
Username:​ User name for the FTP server 
 
Password:​ Password of the FTP server 
 
Timeout:​ Specify the download time before the FTP download is considered as failed 
 
Inactivity Timeout:​ Specify the period of no data activity before the FTP download is considered 
as fail   
 
Number of sessions:​ ‘n’ session means uploading ‘n’ files at the same time (i.e. if downloading 
100MB file with 10 sessions, you’ll upload total of 1000MB). 
 
Ask for redo if average throughput is lower than threshold: T ​ his option allows Azenqos to 
automatically ask tester for redo if average throughput of this session is lower than specified 
threshold. This can save time so that if KPI is not passed then tester will not need to run the 
whole script again. 
 
Ask for redo if max throughput is lower than threshold:​ Same as above but with max 
throughput instead of average. 
18
HTTP Download statement
 
HTTP Download will download the target URL; this is not the same as browsing a web page
 

 
 
URL:​ The URL of the target web page  
 
Timeout:​ Specify the download time before the FTP download is considered as failed 
 
Inactivity Timeout:​ Specify the period of no data activity before the FTP download is considered 
as fail   
 
Number of sessions:​ ‘n’ session means downloading ‘n’ files at the same time (i.e. if 
downloading 100MB file with 10 sessions, you’ll download total of 1000MB. 
 
Ask for redo if average throughput is lower than threshold: T ​ his option allows Azenqos to 
automatically ask tester for redo if average throughput of this session is lower than specified 
threshold. This can save time so that if KPI is not passed then tester will not need to run the 
whole script again. 
 
Ask for redo if max throughput is lower than threshold:​ Same as above but with max 
throughput instead of average. 
 
   

19
Browse statement
 
Browse will use the Android web browsing API to open a webpage and download the page’s
resources.
 

 
 
Collect Tcp Dump: T ​ cp Dump(PCAP) will be collected in log files. 
 
Enable JavaScript: C ​ hoose to enable or disable JavaScript during browsing session. 
 
Request desktop site: ​Browser will request desktop site if available 
 
Timeout:​ Specify the download time before the browse is considered as failed 
 
URL:​ The URL of the target web page to open 2 
 
   

20
SMS statement
 
Android will send SMS to the specified number
 

 
 
Phone Number:​ The SMS receiver’s number 
 
Message:​ The SMS message body (maximum 160 characters) 
 
Send Timeout:​ Specify the period the application will wait for the sms send ack from the 
phone’s API 
 
Delivery Timeout:​ Specify the time period the application will wait for the delivery report to be 
returned before considering the test a failure 
 
SMSC:​ Allows users to specify a short message service center they wish to use. 
 
Ask for redo if send failed: T
​ his option allows Azenqos to automatically ask tester for redo if 
SMS session is considered as failed according to send timeout. This can save time so that if 
KPI is not passed then tester will not need to run the whole script again. 
 
Ask for redo if delivery failed:​ Same as above but with delivery instead of send. 
 
 
   

21
MMS statement
 
Android will send MMS to the specified number, MMS can be sent in image only, animations and 
VDOs MMS are not allowed 
 

 
 
Phone Number:​ The MMS receiver’s number 
 
Message:​ The MMS message body (maximum 160 characters) 
 
UploadTimeout:​ Specify the time period the application will wait for the MMS upload to be 
finished  
 
Image:​ Choose from a pre-defined image or image from the photo gallery 
 
 

Data Enable statement


 
Android will enable/disable data service, check to enable and uncheck to disable  

 
 
 
   

22
Ping statement
 
Android will ping to the target IP
 

 
 
Use IPv6 ping:​ Force phone to use IPv6 instead of IPv4 (Depends on Phone model) 
 
Server Address:​ The IP of the address to be pinged 
 
Repeat Count:​ The number of times ping will be executed before moving to the next statement.  
 
Timeout:​ Specify the time period the application will wait for the Ping response 
 
Packet size:​ The Ping packet size in bytes (This is not including 8 bytes header) 
 
Interval: ​Time between each ping attempt. 
 
Take screenshot when done: T ​ his option (and any subsequent take screenshot option) is better 
replaced by “Auto-screenshot plugin” details in link to separated guide available below: 
https://docs.google.com/presentation/d/1nbX4qeFUVMIXMKZX72KIuPkcXCpDSMeTC3Te5prX
E3U/edit?usp=sharing 
 
 
   

23
OOKLA speedtest statement
 
Android will open OOKLA and conduct speedtest for the purpose of collecting radio parameter 
information, OOKLA speedtest must be installed on the phone and no other activities can be 
done while the test is underway 
 

 
 
Enter server ID: I​ f enabled, user will need to enter ID for specific server. If disabled, user can 
select server from dropdown option below. 
 
Server:​ The Speedtest server to use for the test (defaulted to auto) 
 
Take screenshot​: This is NOT automatic, user still have to take screenshot by hand in AZQ app, 
and it’s not screenshot of OOKLA interface, it is a summary in AZQ app. 
 
Timeout:​ Specify the time period the application will wait for the Speedtest to complete 
   

24
Youtube & Youtube Iframe statement
 
AZQ will use the Youtube API to open a streaming video from Youtube while collecting radio 
parameters, data throughput and buffering statistics. Youtube must be installed on the phone 
with user account registered. No other activities can be done while the video is playing.  

 
 
Video ID:​ Specify the streaming video to play, VDO ID can be found by opening the target 
Youtube video on a browser 

 
 
1. VDO ID is the string behind /watch?v= 
2. For this VDO, the ID is T6DJcgm3wNY 
3. VDO ID is case sensitive 
 
Timeout(s):​ Specify the duration before the download is considered as failed. 
 
Timeout Before Playing (s):​ Specify the duration before the download is considered as failed. 
 
High Quality:​ AZQ will play the VDO in high definition if the “High Quality” box is checked 
 
Youtube Iframe quality option allows user to specify video quality, please note that not every 
device support all quality.
 
   

25
Pause statement
 
AZQ will pause the script from continuing to the next statement, user can click Un pause at any 
time to release the pause.  

 
 
Pause Recording: C ​ hoose whether to pause recording of parameters into log file or not during 
pause. 
 
Text: U
​ ser can input text for specific instruction during pause for testers 
 
Timeout(s):​ Specify the pause period duration, at the end of the timeout the next statement will 
be started even if un-pause hasn’t been clicked. 
 
You can also pause the script during testing by pressing option select “Pause recording” 

WIFI Enable statement


 

 
 
Android will enable/disable WIFI connection, check to enable and uncheck to disable. The 
phone’s WIFI connection must be enabled for the WIFI connect/disconnect statement can be 
used.   
26
Connect WIFI statement

 
Android will connect to a WIFI access point 
 
Security:​ The security type of the Wireless Network (WEP/WPA_WPA2/EAP/Manual) If manual 
is selected testers will need to connect to WIFI themselves. 
 
Operator​: Specify network operator (not necessary) 
 
SSID:​ The name of the Wireless Network the Android will connect to 
 
Password:​ The password to the wireless network (Only if WEP/WPA is selected) 
 
EAP method: ​SIM/AKA/AKA’ (Only if EAP) 
 
Timeout: ​If device is not connected by a specified amount of time Azenqos will stop trying to 
connect to WIFI. 

Disconnect WIFI statement


 

 
Android will disconnect from the current WIFI access point

Public Wifi (Show web logout):​ In case a public hotspot is being connected to, this must be 
checked to open the logout page on the browser

27
Other Test Script Items

Please make sure you study the main script editor and test-script items, their explanation in the
previous ‘General Usage’ topic videos first.
Please refer to this table for short description for each statement. 
Online sheet: ​Statement List 
Note: Some of these may not be visible to you depending on your edition of Azenqos License 
 
 
Statement Description
Repeat all statement inside for specified number of loop
Loop (identified by indent)
Conditional Loop Repeat all statement inside with specific condition
Wait Wait for specified amount of seconds
Answer Automatically pick up incoming call
Voice Dial Call specified number
Call specified number and record playback sound for MOS
Voice Dial (MOS) calculation
FTP Download Download specified file from FTP server
FTP Upload Upload specified amount of data to FTP server
HTTP Download Download specified file from HTTP server
HTTP Upload Upload specified amount of data to HTTP server
Browse Browse specified webpage
SMS Send SMS to specified number
MMS Send MMS to specified number
Data Enable/Disable Enable or disable mobile data service
Network Mode Force lock technology mode
Ping Perform ping test to specified address
Traceroute Perform traceroute to specified address
Ookla Speedtest Perform Ookla speed test (Need to install Ookla application)
Please see guide:
https://docs.google.com/document/d/1VZM0lazYulTR2iSn8MSpfo
Dropbox Download YRfxitQbxJ8VMHSYB92GY/edit?usp=sharing
Please see guide:
https://docs.google.com/document/d/1VZM0lazYulTR2iSn8MSpfo
Dropbox Upload YRfxitQbxJ8VMHSYB92GY/edit?usp=sharing

28
Old method YouTube play video, not recommended. Only used
YouTube with old report system. Please use 'YouTube Iframe'
Wait for up to specified amount of seconds, can end the wait early
Pause by tapping 'unpause' on screen
WiFi Enable/Disable Enable or disable WiFi connection
WiFi Scan Enable/Disable Enable or disable available WiFi scan
WiFi Clear Remembered AP Clear any existing WiFi access points
WiFi Connect Connect to WiFi with specified SSID
WiFi Disconnect Disconnect from current WiFi
Wait until this time to start test, can specify cycle duration. Used
for making sure all test starts at the same time with the same
Time Sync cycle.
AIS Indoor Tag Format Specific use for certain customer only, please ignore
GPS Enable/Disable Enable or disable GPS location service
Perform voice call and FTP Download at the same time (Made
Voice + FTP Download redundant by Multi-RAB statement)
Perform voice call and FTP Upload at the same time (Made
Voice + FTP Upload redundant by Multi-RAB statement)
Perform ping and FTP Download at the same time (Made
FTP Download +Ping redundant by Multi-RAB statement)
Perform ping and FTP Upload at the same time (Made redundant
FTP Upload + Ping by Multi-RAB statement)
Set APN Set specific parameter for an APN
Activate airplane mode for a specified amount of seconds, script
will wait 20s more after airplane mode was turned off regardless
Temporary Airplane Mode of setting
Set Tag Name Deprecated statement, please use 'Add note'
Tcpdump Record Starts/Stop collect TCP Dump (PCAP)
Send specified message on LINE (Please refer to Social test guide
LINE Send for more info)
Send ID text on LINE (Please refer to ​Social test guide​ for more
LINE Send Identifier Text info)
Open LINE and read incoming message (Please refer to ​Social test
LINE Receive guide​ for more info)
Post status on Facebook timeline (Please refer to ​Social test guide
Facebook (Post Status Update) for more info)
Post photo on Facebook timeline (Please refer to ​Social test guide
Facebook (Post Photo) for more info)

29
Download last photo on Facebook timeline (Please refer to ​Social
Facebook (Download Photo) test guide​ for more info)
Download specified Instagram photo (Please refer to ​Social test
Instagram (Download Photo) guide​ for more info)
Restart phone (will not restart azenqos unless using unattended
Reboot Phone mode)
LTE PCI Lock Lock to specific PCI, only available in some models of phone
Stop locking to specific PCI, only available in some models of
LTE PCI Lock Disable phone
Firewall Enable/Disable Enable or disable Firewall
GSM/WCDMA Band Lock Lock to specific 2G/3G band(s)
Lock to specific 3G frequency channel, only available in some
WCDMA UARFCN Lock models of phone
Stop locking to specific 3G frequency channel, only available in
WCDMA UARFCN Lock Disable some models of phone
R99 Lock Enable/Disable Force R99 3G data mode, only available in some models of phone
GPRS Lock Enable/Disable Force GPRS 2G data mode, only available in some models of phone
LTE Band Lock Lock to specific 4G band(s)
Youtube Iframe Play YouTube
Deprecated, do not use. Please refer to 'Sector script' guide for
New Sector Tag new method
Send Email Send email to specified address
Switch to Indoor/Outdoor Switch from indoor/outdoor/rooftop mode
Enable or disable VoLTE (some models do not allow this and has to
VoLTE Enable/Disable be done by hand)
Add specified note, to be used to customized template (please
Add note refer to template guide)
Chipset specific command, do not use unless recommended by
Quectel Diagnostic Config Azenqos team
Chipset specific command, do not use unless recommended by
Quectel APN Set up Azenqos team
Chipset specific command, do not use unless recommended by
Quectel HTTP Download Azenqos team
Chipset specific command, do not use unless recommended by
Quectel FTP Download Azenqos team
Chipset specific command, do not use unless recommended by
LongSung Diagnostic Config Azenqos team
LongSung Network Select Chipset specific command, do not use unless recommended by

30
Azenqos team
Chipset specific command, do not use unless recommended by
LongSung Network Attach Azenqos team
Chipset specific command, do not use unless recommended by
LongSung Network Detach Azenqos team
Chipset specific command, do not use unless recommended by
LongSung APN Setup Azenqos team
Chipset specific command, do not use unless recommended by
LongSung Ping Azenqos team
Chipset specific command, do not use unless recommended by
LongSung UDP Push Azenqos team
Chipset specific command, do not use unless recommended by
LongSung PCI/EARFCN lock Azenqos team
Chipset specific command, do not use unless recommended by
LongSung Power Saving Mode Azenqos team
Chipset specific command, do not use unless recommended by
LongSung HTTP GET Azenqos team
Chipset specific command, do not use unless recommended by
LongSung FTP Download Azenqos team
Chipset specific command, do not use unless recommended by
LongSung FTP Upload Azenqos team
Set certain variable in 'Note'. Please refer to 'Sector script' guide
Set Variable for more information
Send message on Whatsapp (Please refer to ​Social test guide​ for
Whatsapp send Message more info)
Lock to specific 4G frequency channel, only available in some
LTE EARFCN Lock models of phone
Stop locking to specific 4G frequency channel, only available in
LTE EARFCN Lock Disable some models of phone
Start multiple statement at the same time (defined by indents),
Multi RAB can perform multi-RAB but not strictly required to be multi-RAB
SFTP Download Download specified file from SFTP server
Upload photos on instagram (Please refer to ​Social test guide​ for
Instagram post photo more info)
YouTube (Upload Video) Upload video on YouTube
Download latest feed(s) on Facebook timeline (Please refer to
Facebook (Download Feed) Social test guide​ for more info)
   

31
Doing POLQA MOS voice quality tests

Generic test setup

When doing MOS tests, you need two AZENQOS installed phones to test:

1. Answering side (MT) - run a script similar to below:


- Loop 99999
- Answer: Duration 600000, Wait Time 600000, Incoming Number set as blank.
- Make sure you turned off notification of all apps, especially IM apps, as the notification
sounds will get into uplink stream when AZENQOS .
- Start the above script in MT's AZENQOS app, wait for radio params to show up.

2. Caller side (MO) - run a script as below


- Get the phone number of the MT phone's SIM, call it manually (no need to use AZQ yet) -
check that automatically picks up the call and plays the sound similar to: 'the shaky barn fell with
a loud crash, clothes and lodging are free to new men'. Then hangup the call, this confirms that
the answer side is working normally and your number is correct.
- run as script similar to below:
- Loop 99999
- VoiceDialMos: enter the MT's phone number - call duration must be at least 45 seconds
(120 seconds recommended)
- Wait: 40 seconds
- Run the above script, ensure that it calls the MT and the MT is answering automatically, do a
drive or indoor walk normally, save the log and upload to server as usual. Once the processing
is done on server, you can see POLQA MOS scores for each log via the web/server dashboard
excel reports (and database).

Guide:​https://docs.google.com/presentation/d/1tMG_bjvZ9ZfVxuJS4ubrwigBSdHvFnbtIOs_huyI9ag/edit?
usp=sharing

32
MOS Test - Theory of operation
Below is a summary of the steps used in the voice MOS solution:

1. The MT side would auto answer and continuously play the reference sound to uplink with a
specific space between each play.

2. The MO side would call and record the whole call as a (continuous recording) '.wav.' file into
the azm log.

3. MO side's log is uploaded to the server, the azm log would contain the 'whole call recording'
of each call as played from the MT side, each recorded _cont.wav contains multiple (loops) of:
'voice samples' (8 secs including its own spacing) + guard spaces (5 secs) = total 13 seconds
per loop.
3.1​ The server would then 'split' each continuous wav into 'samples'. Experience from a few
customers’ test logs have shown that the MO call established time is not always ‘exactly’ the
same as the MT call established (and therefore playback start) time - so we cannot simply split
every ‘13 second loop’ as mentioned above from the start of the recording otherwise we’d see
shifts in the actual sound start offset and even have cut samples where the playback starts in
the middle of the sample (‘clothes and lodging…’). To handle these cases, we have developed
our own tried-and-true algorithm to detect the most appropriate ‘split start achor/offset’ that can
also handle both partially or whole silent samples, assuming there will be some pairs of valid
samples in the recording - this roughly described below:

3.1.1​ In each continuous recorded wav, detect all starting of 'long enough spaces' - this is the
initially detected 'tails' of samples.

​Example 3.1.1.1:​ consider below ‘normal’ wav recording when open in ‘audacity’:

33
When we check the engine’s ‘log import debug trace’ for this azm - we can see we got tails from
the debug line - essentially showing silences with at least a minimum ‘guard spaces’ length start
points (tail points) detected:
silent_start_ts_array: [ 8.32175 21.335875 34.32152083 47.31058333]

We can roughly check to confirm this by manually checking the ‘tail’ ends in ‘audacity’ by
clicking on the end of each tail and looking at the bottom ‘Selection Start:’ time as in
screenshots below:

34
However, sometimes some parts of the ending voice at the tail (or even whole samples) might
be lost due to bad voice quality at that instant as in below wav in example 3.1.1.2.

Example 3.1.1.2​: Below is a real continuous wav sample where the first sample’s tail voice
was slightly lost (this is from an older app version where the volume (amplitude) was too high
but it demonstrates the lost tail issue nonetheless) - you can see that the leftmost (first)
sample’s tail is a bit trimmed compared to others:

35
Tail points detected:
silent_start_ts_array: [ 6.35583333 20.66891667 33.61675 46.684 59.67295833
72.68289583 85.6911875 98.73377083 111.7018125 ]
Ok, let’s manually check the first two (after zoom in) - just for demonstration purposes:

36
Example 3.1.1.3​: Below is a simulated ‘totally silent’ two first samples continuous wav file:

Tail points detected:


silent_start_ts_array: [ 34.10585417 47.10952083]
Ok, let’s manually roughly check the two tails in audacity:

37
3.1.2​ Considering cases like ​Example 3.1.1.2,​ if we split staticly for every loop (13 secs)
​ ecause the first tail
starting (anchor) at the first detected ‘tail' then all samples would be ​shifted b
was slightly incomplete. ​Therefore, ​we want to find the 'most complete tail' as an 'achor'
point, then ‘staticly’ split (as per the actual sample+wait duration from MT: which is 13
seconds) both backward and forward from that anchor.

To choose this 'most complete tail', we compare the 'distance' between each 'tail pair' and
choose the tail of the pair that has the closest duration to the real 'sample+wait duration from
MT'.
Therefore, for the examples above we can consider the next lines in their import debug logs
where it checks the distance between each tail pair subtracted by the actual loop distance (13
secs) then absoluted, t​hen choosing the index (starting at 0) of the tail of the pair that is
nearest to the real distance as the ​anchor​ as below​:

38
In continuation to Example 3.1.1.1 wav above:
silent_start_ts_array: [ 8.32175 21.335875 34.32152083 47.31058333]
recheck tail diffs: [ 0.014125 0.01435417 0.0109375 ]
got min_index: 2 diffs[min_index]: 0.0109375
● In this example, the third pair was selected as the anchor.

In continuation to Example 3.1.1.2 wav above:


silent_start_ts_array: [ 6.35583333 20.66891667 33.61675 46.684 59.67295833
72.68289583 85.6911875 98.73377083 111.7018125 ]
​ .31308333​ 0.05216667 0.06725 0.01104167 0.0099375 0.00829167
recheck tail diffs: [ 1
0.04258333 0.03195833]
got min_index: 5 diffs[min_index]: 0.00829166666666
● You can see that in this example, since the first tail was cut, the first pair had
much longer distance and therefore wasn’t selected as the anchor. If we just used
the first tail, then all other samples would be wrongly shifted too.

In continuation to Example 3.1.1.3 wav above:


silent_start_ts_array: [ 34.10585417 47.10952083]
WARNING: silent_start_ts_array len is 2 - only one couple to diff - might not be accurate
recheck tail diffs: [ 0.00366667]
got min_index: 0 diffs[min_index]: 0.00366666666667
● In this example, first two samples were totally silent, but ​the engine can still correctly
detect and use the anchor from the last pair​ - it will gave a warning though that there
was only 1 pair to check and might not be accurate (therefore, we mentioned further
above that the call duration of a voice dial mos test script statement must be at least 45
seconds to hold at least 3 samples (13x3 = 39) and at least two pairs to check - and
therefore the longer duration (recommended is 120 seconds), the more rebust shall the
splitting engine be against tail or whole sample loss/silence.

3.1.3 ​For too short call cases like ‘36 seconds continuous wav recordings’, although the last
sample was complete, earlier splitting engines would ignore the last sample’s tail in the ‘tail pair’
comparison checks (to avoid cases where trailing silences were too less), however we have
now improved the engine to also safely check with the last tail even though the trailing silence
was a bit too short by simulating silence into the end only ‘in memory’ (not in the real wav) for
best tail anchor checks only - this does not tamper with the original wav nor the splitted wav in
anyway.

​3.1.4​ If there were no valid 'tail pairs' found (either none or the ‘best’ pair’s tail distance were
too far beyond a threshold than the actual loop distance), that continuous call recording would
be considered invalid (and saved as a '*.invalid_wav' file in the 'processed' azm log, the text
reason would be stored in the '*.invalid_wav_reason' file with the same name). This can filter out
calls that didnt reach the MT side but reached voice-mail-boxes instead.

39
​ .1.5​ For each 'spliited sample' wav, check that it has at least some leading a trailing space -
3
if it does not then that sample would be considered invalid. (and saved as a
'*.invalid_splitted_wav' file in the 'processed' azm log, the text reason would be stored in the
'*.invalid_splitted_wav_reason' file with the same name). This can filter out (some but not all)
cases where notifications from other apps on MT side were not disabled and disrupted the
sample, and also some rare cases (not always) of recording stutter on older phones (like
Samsung S5 - a factory reset is recommended annually or if recording issues become more
prevalent).

​3.2​ For the splitted samples from step 3.1, the server would run the officially licensed POLQA
calculation engine to generate a score from the splitted wav from step 3.1 - comparing the
'reference wav' against the 'degraded wav' and giving a POLQA MOS score report (saved into
the 'polqa_mos' table in both the 'processed' azm and the server's central database, and also
polqa_mos.csv in the ‘processed’ azm).

Guide for troubleshooting BAD MOS due to Volume level


https://docs.google.com/presentation/d/1s5ub8L5U6wS3rQKk7x-D6Bc5qjhkSePedzKQ_LJQ1o
M/edit?usp=sharing

40
Set APN

Use this statement to set/change the current Internet Access Point used for phone’s packet data
access.

Usage
In the script editor choose the ‘Set APN’ statement.

Operations of this statement


- Check version of azq settings engine (requires restart after install) and restarts if required
- Turn off radio (similar to enter airplane mode)
- Wait 2 seconds (for prev operation)
- Turn off WIFI
- Enable Mobile Data
- Try in a loop (until max attempts as set in script)
- enable data
- turn off radio
- wait 2 seconds
- command APN change to settings engine
- wait 2 seconds
- turn on radio
- wait for L3 indicating the correct APN to be requested to nw (not completed) (L3s like: “SM
Activate PDP context request” or “ESM Information Response”) (wait up to 60 Seconds - reset
android phone process at halfway of max wait, re-disable wifi if reached 10 seconds).

Changes from older versions:


- new apn detects and doesnt set set apn as 'secondary' bearer (while first can still be open especially on
newer models)
- new apn checks and matches apn name VS L3 NAS message actually sent to NW before allowing to
complete
- new apn has more smart recovery methods like the after 1 minute it would try set 'gid' and also does
some extra android telephony kill - not only airplane - if results still not matches after a few retries.
- new apn can set max retry 'attempts' - 1 attempt is around 1 minute (but actually within the 1 minute
there are many individual/actual pragrammatic retries')

41
Time Sync - ideal for benchmarks (wait until next time cycle in clock)
This script item is normally used in benchmark tests, for example, you have a 4 minute long
voice call (or ftp download with a timeout set as 3 minutes) and you want to make sure they all
start at the same time across 3 phones, you can enter the ‘Time Sync’ statement wait until the
next ​‘every 5 minutes starting from the start of the hour’ (for example: 10:00, 10:05, 10:10,
10:15) ​like below - this means take the starting point as the next ‘any hour’, 0 seconds clock
time + multiple of 300 seconds (5 minutes).

So when you run the script - and it is 5:39 as below, it would wait until 5:40 to continue as
below:

42
This means for 3 minutes Call cycle, You can use
Loop
Timesync [0:00:00](195)
Voice Dial (180)
No need to put wait statement here since after 180 seconds of call end, there will be a wait of 15
seconds until the next call

43
Email Test

Use this statement to test email sending via Simple Mail Transfer Protocol (SMTP). Gmail is the
best recommended service provider; however, it required to unlock less security app to login
option following below steps in link.
https://drive.google.com/file/d/1g8X8IsVgpdM1M9pxAyNpC0x6rVtHg5el/view?usp=sharing

Usage

In script editor page, choose “Add” or “ + ” for open script list

Choose “Send Email” item

44
Email Test require nine parameter. The detail will show below.
SMTP host : It is URL of SMTP server for example of SMTP host of gmail, this
parameter should be “smtp.gmail.com”.
SMTP SSL trust : It is URL of SSL trust certificate for example of SMTP host of gmail,
this parameter should be “smtp.gmail.com”; however, this parameter can emtpy if your SMTP
server does not require.
SMTP port : It is number that represent port number of SMTP server for example of
SMTP port of gmail, this parameter should be “587”.

timeout(s.) : It is number that represent waiting time for send email steps.
Sender Email : It is email of sender. This parameter require only user of SMTP server. If
sender’s email is “​test.suthat@gmail.com​”. This parameter should be “test.suthat”.
Password : It is password of sender’s email.
Receiver Email : It is receiver email. The example is “test.suthat@gmail.com”.
Email Subject : It is email subject.
Email Message : It is email message or body of email.
Attachment size(ex. 5mb) : It is attachment file size. User can fill in kb and mb units.

45
Choose “Save” item. Email test script will show in script editor page.

Operation
This color is start/end sending email step

46
This color is prepare steps
This color is execution steps

1. Sending Email start


2. Set SMTP server properties start
3. Set SMTP server host start
4. Set SMTP server host success
5. Set sender user start
6. Set sender user success
7. Set sender password start
8. Set sender password success
9. Set SMTP server port start
10. Set SMTP server port success
11. Set SMTP ssl trust start
12. Set SMTP ssl trust success
13. Set timeout start
14. Set timeout success
15. Set SMTP server properties success
16. Create sending session start
17. Create sending session success
18. Create email message start
19. Create email message success
20. Lookup SMTP server's IP start
21. Lookup SMTP server's IP success
22. Create receiver IP object start
23. Create receiver IP object success
24. Transfer IP object to IP address start
25. Transfer IP object to IP address success
26. Send message start
27. create file start
28. Create File Success
29. Send message success
30. Sending Email finished

47
iPerf Test (TCP/UDP)
Due to iPerf2 and iPerf3 are completely incompatible, Azenqos provide both iPerf 2 and iPerf 3
statements as detailed below.

Unit Suffix Symbols


You will see a symbol like #KMG in some option, that symbol indicate that you have to enter a
number and may add character K or M or G as suffix.
- K stands for kilo (1,000)
- M stands for Mega (1,000,000)
- G stands for Giga (1,000,000,000)

iPerf2

To use iPerf2 you have to find a public iPerf2 server or host iPerf2 server yourself
* Please not that not every iPerf2 server support both TCP and UDP
** for public server we recommended you to use ​iperf.volia.net​ this server support both UDP
and TCP

Supported options

- Host - the server address


- Port - the server port (default is 5001)
- Use UDP - iPerf2 statement will use TCP by default you can check this to use UDP
- Use IPv6 - Use IPv6 for connection (both client and server must support IPV6)
- Interval - seconds between periodic bandwidth reports
- Bandwidth - (UDP ONLY) target limit bandwidth in bits/sec
- Buffer length - length of buffer to read or write
- Parallel - number of parallel client streams to run
- End condition
- Time limit - test duration (after n second, test will stop)
- Bytes limit - number of bytes to transmit (after transferred n bytes, test will stop)

48
Sample Script

Sample Result

49
iPerf3

To use iPerf3 you have to find a public iPerf3 server or host iPerf3 server yourself
* Please not that not every iPerf3 server support both TCP and UDP
** Please note that iPerf3 does ​not support​ multiple client connections at the same time by
default
*** for public server we recommended you to find from ​https://iperf.cc/

Supported options
- Host - the server address
- Port - the server port (default is 5201)
- Use UDP - iPerf3 statement will use TCP by default you can check this to use UDP
- Reverse mode - run in reverse mode (server sends, client receives)
- Use IPv6 - Use IPv6 for connection (both client and server must support IPV6)
- Interval - seconds between periodic bandwidth reports
- Bandwidth - target limit bandwidth in bits/sec
- Buffer length - length of buffer to read or write
- Parallel - number of parallel client streams to run
- End condition
- Time limit - test duration (after n second, test will stop)
- Bytes limit - number of bytes to transmit (after transferred n bytes, test will stop)
- Blocks limit - number of blocks (packets) to transmit (after transferred n packets,
test will stop)

50
Sample Script

Sample Result

51
AZQ LINE Call test Instructions
In order to use Line Call, your device must be at least Xperia X Performance or later with Line
version 6.6.2. You can download this particular line version by going to AZQ - Settings - MISC

Repeatedly click on the small dot 7 times

Go back to main AZQ menu then re-enter settings - MISC, then download LINE services
component

52
- Make sure you have created Line account for both caller and receiver device
- Make one successful send chat message from the caller to receiver
- Make sure Phone settings - Security - App with usage access is enabled for AZQ
- On caller side - Create script Line Call
- On receiver side - Create Script Line Answer
- Start Script

53
AZQ Facebook Test

Login to facebook from AZQ Settings, make sure that the account used is a facebook test
account and not an actual user account

After logging in, click upload photo to create the default picture for facebook post/download
photo. Now you can use Facebook test script and check the result in the “Facebook Report” tab
in the generated excel report.

Adding new test users


1. Go to ​https://developers.facebook.com/apps/288486231340736/dashboard/
2. Log in to Facebook using the following account
Username: ​azqfacebook@gmail.com​ Password: qazwsx123

3. At the left side menu, choose “Roles” -> “Test Users”

54
4. You will see test users on this page, Click on “Add” button

5. Set the new test user as below, don’t forget to add the following login permissions:
publish_actions​ ​and​ ​user_photos​ ​then click “Create Test Users”

55
6. After you have created the new test users, you can change the display name or password by
clicking “Edit” at the right side.

56
Setting up Facebook account in AZQ
1. From AZQ main menu, choose Settings -> In “General” tab choose “Login with
Facebook”

57
2. Click “Log in with Facebook” and enter ​test user​ email & password.

3. If you entered email & password correctly, the name & email will shown in AZQ.

58
4. Go back to AZQ main menu and create a facebook script.

59
GPS accuracy improvement guidelines
In some areas, the Android phone’s internal A-GPS might have issues getting a stable
first/continuous GPS lock or the position might swing/swerve out of the road and also consume
a considerable amount of phone battery power. Below are some solutions to help avoid these
issues:

1. Option 1 - Using ‘Bluetooth GPS Receiver’ devices


We tested ‘HOLUX’ Bluetooth GPS (1 connection at a time, medium accuracy apx 2.x
meters), ​EcoDroidGPS Bluetooth GPS​ (up to 6 simultaneous connections, higher
accuracy apx 1.4 meters) and a customer is also using a Trimble Bluetooth GPS
(depending on model, some support 3 simultaneous connections, highest accuracy).
Using a Bluetooth GPS Receiver would bring accurate GPS location data from real
professional-grade GPS hardware (​like USB GPS devices used in most professional
PC-based test kits or mapping kits)​ to your Android via Bluetooth:
1.1. To configure, please open ‘Google Play’ on the Android phone and search/install
your preferred ‘Bluetooth GPS’ app. As of now, we tested and prefer the

‘Bluetooth GPS’ app by ‘GG MobLab’:


1.2. Follow it’s on screen instructions, after you already set it as ‘Mock locations
provider’ in ‘Developer Options’ which it would open for you, paired and
connected to the Bluetooth GPS device, make sure in the ‘Main’ tab: ‘Lat/Lon’
shows and the ‘Date/time’ is constantly updating and in the ‘Status’ tab, the
‘Accuracy’ should be preferably less than ‘5m’ - before starting your AZENQOS
app test script.
1.3. Also make sure you go to this app’s ‘settings’ in the three-dot options menu and
check/enable ‘Reconnect’.

2. Option 2 - Using the phone’s internal A-GPS (default)


Although it’s not as powerful as real dedicated GPS devices, in most cases it is ‘good
enough’, especially if we do some pre-test checks below:
60
2.1. Firstly, make sure the ​phone has good view of the sky.​ If in a car, possible
open car windows otherwise put phone on the dashboard near the front
windshield. Some automotive window film/tints block GPS signals.
2.2. Make sure your mobile internet/data plan is working (try searching google or play
a youtube video etc) - this is required for AGPS to download ‘XTRA’ data files in
the background to work quickly/correctly.
2.3. Make sure you already got a GPS lock/fix once ​shortly before​ starting the
AZENQOS test script/netmon:
2.3.1. Open ‘Google Play’, search and install GPS status apps - we tested and
prefer the “GPS Status & Toolbox’ app by ‘MobiWIA - EclipSim’:

2.3.1.1. When you open the app, allow it to access the device location.
2.3.1.2. It would show ‘Looking for GPS location...’ - wait up to 5 minutes
or until it completes and shows the ​‘Latitude’​ and ​‘Longitude’
and the ​‘Last fix’​ is constantly updating. Then go the AZENQOS
and start your test script normally.
2.3.1.3. In the rare case that after 5-10 minutes with open sky view but you
still don’t get a GPS fix, try swipe your finger from the left screen
edge to right to open the options panel - tap on ​‘Manage A-GPS
state’ ​then press ‘Download’ then wait and see if it gets a fix as in
previous step before you start the AZENQOS test script. ​If you
still don’t get a good fix or the it losts (no update in ‘Last fix’)
the connection too often - the only solution would be to use a
real ‘Bluetooth GPS’ device​ as in point further 1 above.

61
2.3.2. If you don’t want to install the ‘GPS status’ apps above, you can do this by
opening ‘Google Maps’ and wait until you see the circle has become very
small around the position blue dot when you press the ‘my location’ icon.
Then go the AZENQOS and start your test script normally.

62
Scanners: Using with PCTel Seegull IBFLex
Setup Instructions

- Make sure your IBFlex scanner supports Bluetooth and is turned on.
- Go to phone’s Setting > Bluetooth and scan and pair with the IBFlex.
- Go to AZENQOS app > Settings - scroll down to almost the bottom - you’ll find the
‘Scanner’ heading - enable/check the ‘Show Scanner Tabs’ checkbox:

- Reboot phone, enter AZENQOS app, when Main menu shows - wait about 1 minute then
press - home to go back to Android home screen, go to apps list - make sure that the
“SeeGull Connect” app now shows in the list (no need to open it - it will immediately
close) - this means the PCTel engine app is ready for AZENQOS to use like the the
bottom-right of below screenshot:

Test Instructions
- Make sure Bluetooth is turned-on

63
- In AZENQOS app - start a test-script (or ‘Network Monitor’) - and go to the ‘SCANNER’
tab (nearly right-most tab) then you’d see below screen:

- Press the ‘CONNECT’ button. It would ask you to allow to turn on Bluetooth if Bluetooth
is off, then it’d scan and connect to the nearby PCTel IBFlex Scanner automatically. First
AZENQOS needs to ‘read the available supported bands’ from the scanner first so we’d
go to the next tab the see the ‘Device Status’ - when it is ‘ConfigScan’ you can then
press DSICONNECT as now the supported band list is read.
- Press the ‘+’ button and add the scan types/channels you want. (normally ‘LTE ETopN’
to scan all cells for specified list of EARFCNs, use ‘RSSI scan’ for showing in the last
‘SPECTRUM’ tab.)
- Press CONNECT now to start the real scan based on your configs.
- See the next tabs for your configured scan results.

64
Using with BEC Technologies ODCPE (LTE Router)
In this mode we want the AZQ app to read the measurements/messages from the ODCPE
instead of its own modem. Since Android phones don’t have an ethernet port and the ODCPE
only has ethernet - we need to use a Ethernet-to-WIFI Access Point (we tested/recommend
“Zyxel WAP3205 v3”) to connect the ODCPE to the AZQ Android phone. Below is a brief
connection diagram:

Instructions:
- Insert your SIM into the ODCPE.
- Power the ‘power over ethernet adapter’.

65
- Connect an ethernet cable (normally the longer one) between the ODCPE and the
‘power over ethernet adapter’ (the port that provides power - you’ll see indicator lights
near the SIM area of the ODCPE when correct)
- Connect the other ethernet cable between the ‘power over ethernet adapter’ and the
‘WIFI Access Point’.
- Power the WIFI Access Point.
- Connect the AZQ Android phone to the WIFI Access Point. The name and password is
printed under it for the Zyxel WAP 3205 v3 - as in below photo:

- Make sure WIFI is connected - the WIFI connected icon should show on top of phone
screen - and internet from ODCPE is working on this Android (browser – open/refresh
google, youtube etc.). If internet is not working - you can open the browser to the
ODCPE’s admin page to check the apn, status and values: ​http://192.168.1.254​ (login:
admin password: admin) until you get internet working correctly from the ODCPE.
- Open the AZENQOS app - try START SCRIPT > 'odcpe_idle' script to test if the LTE
parameters and messages are working correctly. If there’s no script named ‘odcpe_idle’
then you can quickly make a new idle script (lopp >> wait) BUT insert 'BEC Router
Connect' Script item ON TOP (first item) of script.
- If params show up correctly from the ODCPE, try START SCRIPT >
'odcpe_th_ftp_100mb' script – check the 'LTE DATA' tab params if they’re showing

66
correctly (L1 DL Throughput, modulation etc).
- If all is working well then make a new ftp script using your own ftp server – BUT insert
'BEC Router Connect' Script item ON TOP (first item) of script.

AZQ Remote Device Access

To enable the remote function, first sign-in to Google playstore and update Google Play
Services to the latest version

Then on AZQ, go to settings - MISC and click on the “.” continuously until a “hidden menu
enabled” is shown

67
Go back to AZQ menu then enter it again, this time in the MISC tab you will be able to install
remote component. Take care not to install other modules if you don’t need it!

68
Using “_dbstart” flag in script to remove data from Processed
AZM
First, to get processed AZM, the process is the same as for “normal AZM” but select the option
for “Processed mobile log” instead

For any logs with note “_dbstart” in them. We’ll remove any data in the log prior to this note. This
function is developed in order to remove data before band/RAT lock took affect, but other use
case might apply too.

***This note will not affect data from normal AZM log, it will only affect
“Processed AZM” and as a result, reports will be affected, but not AZL (Replay)
file.

How to add a note in script,


1. Search for “Add note” statement in script

2. Put “_dbstart” without quote, in Info

3. Make sure to put this where is was needed (eg. after band lock) and Done!

69
Sample of script with “_dbstart” note:

Sample of AZM and processed AZM from log with this note:
In this log, test started at 13:29:05 and note “_dbstart” is at 13:30:49.
In AZM log, everything is as normal, but in Processed AZM all data before note “_dbstart” is
removed.

70
Using/showing Cell-files on phone
You can put cell file to be used on phone, there are 2 ways to put cell file in your handset

From server/dashboard
1.On your dashboard, go to Managephone > Upload CELL&MIF

Choose your cellfile, select your handset (from IMEI) click upload.

2.On your handset, go to setting in Azenqos app (General tab) and click on “Download Cell/MIF
file”

71
3.Click on import Cell (depending on your technology) and select your cell file, you can select
multiple cell file, but if there is too much data when loading map, the app may crash.

4.During test, you can go to Outdoor Map and open map to see cell file.

72
Putting cell file directly from your PC to handset via USB
You can connect your handset to your PC then go to folder “azq.cellfile” then put the file there.

Then click on import Cell (depending on your technology) and select your cell file, you can
select multiple cell file, but if there is too much data when loading map, the app may crash.

73
Important points to know about cell file:
- Cellfile name must not contain space “ ”, use underscore “_” instead
- Cell file on your handset must not have empty data fields to display properly (on
dashboard/server is ok)

You can also delete the data that was not necessary on handset instead of filling every
fields

74
PART 2 - Post-Processing

75
Searching for logs uploaded from phone, generating
Excel Reports
Below guides cover how to search and generate excel reports:

AZQ Starter Guide


https://docs.google.com/presentation/d/1IDXIYefdpvcSxPXVv1GROFlZFPcGTZtJRnofbOWVIIc/
edit?usp=sharing

Report generation guide


https://docs.google.com/presentation/d/1EMNK6zwHg8I75ulHp5tpuw3bXToVgYQII3wj05pi5X4/
edit?usp=sharing

76
Showing/Using Cell-files in server-generated Excel
reports (from AZENQOS Web Dashboard)
To integrate cell files into automatic report, first go to Administrator -> Cell Information

Then click add “new cell”

Choose cell type, for circle simply add “all”

Facing log uploading issue form some handsets for particular


type of log

Replay tool Map Issue

77
Import cell file to server
You can upload cell file to report server, this allows you to select and use this cellfile in report
generation:
1. Go to Manage Phone > Manage Template and Theme

2. Click ‘Add’ on your corresponding cell file technology

78
3. Choose the file from your computer or use Google sheet of cell file in ‘URL’

4. Submit, If any error shows please read on correct cell file format below before reporting
any issue to our team.

Correct Cell file format

Please refer to ​sample cellfiles​ for correct format. And ​DO NOT change column name​.
If you want to add more columns to the cellfile, please feel free to do so, but do not make it
duplicates with other column
.
Points to remember while creating cell file for Azenqos
1. Name of cell files should only contain A-Z, a-z, 0-9 and “_”, do not use space “ ” or “-”
2. Duplicity of Cells is not allowed.
3. Special Characters are not allowed in cell file except “-” and “_”.
4. All the values except SYSTEM, SITE, CELL_NAME, BSIC should be Numeric.
5. BSIC in GSM needs to be in TEXT format as 1-7, 2-3, 3-5, including the dash. Make
sure to NOT save this value as number or 'Date' otherwise excel will break it, please
check with notepad.
6. Send Cell file as .txt format to AZQ team.
7. Same Cellfile can be used on Handset in .txt format (read next topic for more details)
8. Site name should not be more than 60 Characters
9. Blanks are not allowed (except in your own added column) - They should be replaced
with 0
10. DO NOT change column name from the given format​.

79
GRID Creation on QGIS
For creating Grid file to use on plot (Sample below) please refer to this Guide:
https://docs.google.com/presentation/d/1HHd3AC6tHSlV9MCUnv25dtuVjWM7kb3-op9XynKuyC
A/edit?usp=sharing

80
AZQ test log file types
There are two azq log file types:
1. .azm file
On the phone, AZQ test log files have the ‘azm’ extension. They are stored in <internal
storage> / diag_logs folder for logs that haven’t been uploaded, uploaded logs are
moved further to the ‘uploaded’ folder. This file is basically a renamed zip file so it can be
opened for access using a zip manager like 7zip or Winzip with a few files in them -
notable/useful files are:
- azqdata.db - This is the sqlite3/spatialite database containing all params and L3 for the
log as described under the topic ‘Log database access and data reference’ of this
document.
- map.jpg - this is the indoor map user has selected for indoor walk plots.
- *.pcap - these are tcpdump pcap files (if tcpdump enable was used in the script) and
can be viewed/analyzed using Wireshark on PC.
2. .azl file
This is the log format for AZQ Replay PC software. The azl files get converted from the
azm files via either the AZQ Server or the AZQ PC Replay > ‘Import Logs’ feature.
The ‘AZQ Server’ can also be configured to generates excel reports, kml, csv, mif and
also insert certain data into its MySQL database for use with its PHP ‘AZQ Web
Dashboard’ server web interface.

81
AZQ Excel template customization
We allow users to customize their own Excel report templates based on AZQ default
report and benchmark report templates on google sheets. There are two kinds of cells, text
messages to display and special marks for calculation. Special marks cells will start with
“GET_PYPROCESS_OUTPUT” and text messages can be any text for explain your calculation
values. Both kind of cells support basic formatting i.e. font color, font size, cell color and etc.
except merge cell. Example of calculation cells are showing below this instruction.
Instruction to add user customized template
● Go to google drive and create new google sheets

● When user finished to create template, user must change permission of google because
default permission allow only owner to access that, please go to share button

82
● Go to advanced option

● Change sharing settings, go to change

83
● Choose “On – Anyone with the link” and save

● Click done to finish google sheets permission settings

84
● Login to AZQ dashboard go to “Manage Phone” - > “Manage Template & Theme”

● Click “Add” button in Template column

85
● Check URL button

● Fill Label (template name) and template URL, please note template URL not include “#”
sign if template URL is
“​https://docs.google.com/spreadsheets/d/1mANNQQpQ9TsttRuZ2esWLjTNAmdbwrrOjr
gmNCdeNnU/edit#gid=1591549316​”
please push
“​https://docs.google.com/spreadsheets/d/1mANNQQpQ9TsttRuZ2esWLjTNAmdbwrrOjr
gmNCdeNnU/edit​” to this input filed , then click “Submit”

86
● The system will pop-up message “Add successful.” to inform user that template added,
click OK

● click cross sign to close add template frame or add other template to system

Example of Calculation cells


AZQ default template for single log :
https://docs.google.com/spreadsheets/d/17RiVH36FKBtuNeaGxLQhfp3AC67zUFobYiqERcwE
OCg/
AZQ benchmark template :
https://docs.google.com/spreadsheets/d/1mANNQQpQ9TsttRuZ2esWLjTNAmdbwrrOjrgmNCde
NnU/

87
Theme management and <GENERIC_PARAM>
In addition to making custom template, Azenqos allow users to manage their own theme
(Legend) for their parameters. In some template (Usually default template) there’s a sheet
named <GENERIC_PARAM>, as the name suggests, this will generate any generic parameters
you have in your theme as a Distribution histogram and Geographical plot

To create or edit Themes please follow these steps


● Go to Manage phone > Manage Theme

88
● On the left side of this screen you can do 4 things
“New” - Create new Theme,
“From file” - Open existing theme on server,
“Open” - import theme from you .xml file,
“Save as” - Save your theme as .xml file.
● New theme by default will already have multiple parameters, this will also affect
<GENERIC_PARAM> sheets in your template if it has one. You can add or remove any
parameters you want in your report. For any parameters that have their own template
sheets, this will affect their legend (range color).

You can do the following to manage these parameters:


● Add new parameters (Click on the Add button)
○ Choose System and Element(Parameter)

89
○ For some parameter you will need to choose arguments, in most case argument
“1” is OK. In case of Neighboring cells parameters arguments 1, 2, 3, ... means
the parameters of the first, second, third, etc. neighbors, you can add multiple of
these with different argument to show both first and second neighbor.
Note​: For the arguments, if it is for normal parameters ​without​ being specified as neighbor, it
would mean parameters for the first, second, third, … carrier
○ Reverse Cumulative Line Option will allow you to choose between Bad to
Good(Disabled) and Good to Bad(Enabled) distribution in your histogram
○ Use Azenqos default setting, if enabled will use default legend (color) for you
parameters. If disabled, you can choose your own legend

● If you want to change the setting for any existing parameters, click on Edit, the setting is
the same as adding new parameters.

90
● After you finished managing your theme, you need to assign it to your user. Input name
for your theme and select your username then click “Assign”

● In your dashboard if you select your log file and generate report from theme (Single log)
or Combine report (Multiple logs) you’ll be able to choose your theme.

91
Tips:​ If you already have a plot you need but don’t know which parameters to select in theme,
you can look at the plot name and compare them with parameters in this link:
https://docs.google.com/spreadsheets/d/1ddl-g_qyoMYLF8PMkjrYPrpXusdinTZxsWLQOzJ6xu8
/edit?usp=sharing

For example: RSRP plot

In Table:

In Theme:

92
Transfer Theme from android server to gnu0 (or any linux
server)

For theme you can export from android.azenqos.com then import to gnu0 as guide
below.
1. Go to manage theme on android server and choose your theme based on your IMEI.

93
2. Cick on "Save As" And choose file name (anything is fine), file will download to your
PC.

94
3. Go to manage Template & theme on gnu0 server.

4. Choose add and choose the xml file you save from android server.

95
Advanced Script & Template Design Guide
This part will describe common method used in our custom script and template for report
automation.

Notes and variables in script


Let’s take a look at the script part. Below is a sample from static script. (​Sample file​)

set variable[sector]
First part that we see here is ‘set variable’

96
If we look at the setting inside this statement.

Here, we have set:


- Variable type: NUMBER, meaning only number(not TEXT) is accepted.
- Variable Name: sector, This will be used later in “Notes”
- Default Value: Blank, this is not needed since we use the next option
- Ask user: This will enable on screen popup to ask user to input value for the variable, in
this case we’re talking about ‘sector number’ (1, 2, 3, …).
- Min/Max Length: We set both to ‘1’ meaning that user can only input 1 digit number.
This is what it will look like when user starts the script then it asked for sector number:

If user put “1” (without quotes) in here, the script will recognize variable sector in this log as “1”
we will then proceed to take advantage of this and use this number as sector number identifier
in other notes, to do that we need to set ‘suffix variable’ as ‘sector’ (more on this in the next part)

97
Note[‘info’,’detail’]
The next part is ‘Note’. Notes are used extensively in customized script, we use them to tell the
the report template ‘This log has what test’. (But these notes are useless without customized
template)

98
For example, we put Note[4G] in the script then we will know that this log is supposed to be for
4G testing.

The setting inside the statement looks like this:

Only info is specified, the rest is left blank. This type of note is enough for telling that this log
should be used for which KPI/Plot.
But the whole log will be used for that KPI/Plot.

99
What if we test many things in the same log, like Voice call and then FTP Download? If we used
whole log for analysis of throughput, and the value while we were doing voice calls will not be
useful.
This problem is addressed by using ‘Details’
To filter specific parts of each log, we put Note[dl,start] and Note[dl,end] to tell the system that
‘We will use data from start to end of this note for this KPI’

The setting inside will need info as ‘dl’ and detail as ‘start’ or ‘end’

Put the ‘start’ where you want to begin filtering the data and ‘end’ where you want to stop.
Optional: you can put ‘Info suffix’ as ‘sector’ (or any variable name), then whatever value you
put in ‘set variable’ will be added to the note, for example note will become ‘dl1’ if you put
variable as ‘1’
This is normally used in filtering sector specific data.

100
Finally, we have a special type of note: Note[sector,start] and Note[sector,end] this type is used
only in static test script, and is capable of easily filtering several KPIs and value in sector-wise
format.

ONLY notes with Info ‘sector’ followed by single digit number (sector1, sector2, sector3, ...) are
taken into calculation/filter of this sector-wise value. To achieve this dynamically (variable sector
number) we will set the note with setting as picture below:

- Info is ‘sector’: This is the actual note name.


- Info suffix is ‘sector’: This is what you’ve chosen as ‘variable name’ in the ‘set variable’
- Details is ‘start’ or ‘end’: This is the same as other start-end notes
With this setup, when user run the script and put sector variable as ‘1’ then this note will
automatically become ‘sector1’

101
Custom Template and ‘where’ Function
A custom template will almost always contain several plot/KPIs from several logs such as voice
KPI from voice log then Throughput KPI from FTP DL log, or even sector-wise KPI.
If you tried to generate a report with all the logs and did not use customized template, the
plot/KPIs will get mixed up.
To make the report generation possible with multiple KPIs from many different logs, we used a
function to filter the logs by the notes inside them (Please read the previous section on ​notes​).

In the following sections we will be using this ​sample ‘sector1’ static log​ as reference, this log
was tested with the same script as used in previous section on notes
This log contains notes as follows:

‘Note Added’ events tells you that there is a note in script and the ‘info’ and ‘detail’ will give you
the required information for separating the logs.

102
We used these notes in template as ‘where’ function, this function consists of 3 main types:

‘Where with note’


Filters for log where the note with this ‘info’ exist in the log.
In the given sample log, we could choose the note ‘4G’ or ‘dl1’ and achieve the same results

This is usually used when getting plot from specific mobility log.
Example of codes being used in template:
PY_EVAL voice_cssr.process_cell(dbcon, '', mode='cssr' ,side='mo', 
where=sql_helpers.get_where_log_hash_with_note(dbcon, '​4G​', get_all_log_hash=True)​) 
Sample above will gives you ​“CSSR” of all log with note ‘4G’

103
‘Where with note start-end’
Filters for specific period in the log(s) this will only consider the part of log with specified ‘info’
and with detail as ‘start’ to ‘end’.
In the given sample log, if we chose ‘4G’ then nothing will show because there’s no ‘start’, if we
chose ‘dl1’ then we will get data from 16:44:04 to 16:45:11

This is usually used when getting Throughput KPI from specific part of log (FTP part only).
Example of codes being used in template:
PY_EVAL voice_cssr.process_cell(dbcon, '', mode='cssr' ,side='mo', 
where=sql_helpers.get_where_from_note_start_end(dbcon, '​voice1​')​) 
Sample above will give you ​“CSSR” of log from ‘voice1,start’ to ‘voice1,end’

104
‘Get sector where’
This is sector specific function, it will filter for logs with note ‘sector(number)’ and detail ‘start’ or
‘end’. In the given sample log we can specify ‘number’ as ‘1’ and we will get the data from this
log, it will not show data for number 2 or 3

This used in getting sector-wise KPIs.


Example of codes being used in template:
PY_EVAL voice_cssr.process_cell(dbcon, '', mode='cssr' ,side='mo', 
where=sql_helpers.get_sector_where(dbcon,​ 1​, only_log_hash=False)​) 
Sample above will give you ​“CSSR” of log with note ‘sector1,start’ to ‘sector1,end’

From the 3 samples above please take note of the different types of ‘where’ used in code (​red
text​) and the notes it reads ​(red highlight)​. Then you can select the type of where and change
the ‘note’ to match your requirement.
Please note that with the exception of ‘sector where’ you can use any combination of characters
and numbers for ‘note’ and that ​it is case sensitive.

Below is a sample of various ‘where’ being used on the sample to give some perspective.

105
Per Sector Plot
With the use of special ‘sector’ note, we can enable more customization in the template such as
‘sector wise plot’
For example, GSM RxLevel Sub plot, per sector

This plot will take RxlevSub plot from mobility log, and filter for only the plot that matched CGI of
each sector, this CGI is taken from static log with ‘sector’ note.
To describe the process during actual test:
- User perform static test at sector 1, this log contain CGI ‘A’ at the start of ‘sector’ note.
- User perform static test at sector 2, this log contain CGI ‘B’ at the start of ‘sector’ note.
- User perform mobility test around site, getting coverage from both sector 1 and 2.
- User generate report with sector 1, sector 2 and mobility log
- Report will take value from mobility log, finds coverage which serving cell has CGI = A
then plot that coverage for sector 1 plot
- Report will take value from mobility log, finds coverage which serving cell has CGI = B
then plot that coverage for sector 2 plot
Important point to note:
- During the test, user must make sure that phone is camping on correct sector before
beginning sector test, most static script will have ‘Pause’ statement during this stage so
user can move to a better location if needed.
- For 3G/4G, the process is the same, but with PSC/PCI instead CGI

Sample code for GSM sector wise plot:


GET_PYPROCESS_OUTPUT py_eval ​cgi_wise_plot​.process_cell(dbcon,
'gsm_rxlev_sub_dbm', ​filt_gsm_cgi=[exec_sql.process_cell(dbcon, "select gsm_cgi from
gsm_cell_meas where gsm_cgi is not null order by time limit 1",
where=sql_helpers.​get_sector_where(dbcon, 1, only_log_hash=False)​)]​,
where=sql_helpers.get_where_log_hash_with_note(dbcon, MOBILITY, get_all_log_hash=True)​)

Meaning from sample above, ​Orange text is the cgi wise plot command, ​Red text is the part for
identifying which CGI to use,​ ​Blue text tells that it should get value for Red part from ‘sector 1’,
Green text is for telling which log should be used as ‘mobility’ plot.
106
Introduction to VoLTE with AZQ
Most newer phones support VoLTE and AZQ can capture the SIP signalling messages and
RTP/RTCP params (RTP/RTCP params support depends on phone model).

In the FCM.01 document by GSM Association (available at


https://www.gsma.com/futurenetworks/wp-content/uploads/2014/10/FCM.01-VoLTE-Service-De
scription-and-Implementation-Guidelines-Version-2.0.pdf
) - it very well describes VoLTE in its Introduction > Overview as:
“Voice over LTE, or VoLTE is a GSMA profile of the standards definition for the delivery of
services currently provided via Circuit Switch networks - mainly voice and SMS - over the
Packet Switched only network of LTE, leveraging the core network IP Multimedia SubSystem
(IMS). ”

We might say that VoLTE is ‘internet’ voice calls without the ‘lag’ (jitter) you mostly see when
using internet calls - and at a cost as normal calls. It is a little related (at least in the ‘SIP’
protocol sence) to VoWIFI. Therefore, if you use internet voice call apps/services (like Skype,
WhatsApp, LINE etc) on LTE and observe voice lags - that is because the ‘voice’ in those apps
is traveling in the same ‘bearer’ as normal LTE internet so it doesnt have special ‘priority’. Now,
when you use VoLTE, a new special bearer with highest priority (QCI 1) would be use to
send/receive the ‘voice’ (not the normal ‘internet’ bearer which has lower priority) and therefore
practically no noticeable ‘lag’ in the voice - same as GSM or WCDMA voice and in many cases
even better voice/sound and also known to use less ‘radio’ resouces - so more users would be
able to make voice calls concurrently on the same site - in theory ;-).

Below link shows an example VoLTE voice call SIP message flow as captured live on an AZQ
phone:
https://www.youtube.com/watch?v=DgnB8lAQwyw

The video above demonstrates the VoLTE SIP message flow for both Registration and a mobile
originated VoLTE voice call. Always check the ‘CSeq’ when looking at the ‘OK’ to know what is
that ‘OK’ responding to as there are multiple ‘OK’s in a session.

107
Generic VoLTE message flows (SIP + RRC)

VoLTE Registration message flow


Please see (and zoom) the diagram in ‘Figure 3: VoLTE UE Attachment and IMS Registration
message sequence’ at ​page 28​ - especially the lower half - in the spec at:
https://www.gsma.com/futurenetworks/wp-content/uploads/2014/10/FCM.01-VoLTE-Service-De
scription-and-Implementation-Guidelines-Version-2.0.pdf

VoLTE outgoing voice call message flow


Please see (and zoom) the diagram in ‘Figure 5: Basic VoLTE UE to VoLTE UE Voice Call
Establishment - Originating Side message sequence’ - at ​page 36​ in the spec at:
https://www.gsma.com/futurenetworks/wp-content/uploads/2014/10/FCM.01-VoLTE-Service-De
scription-and-Implementation-Guidelines-Version-2.0.pdf

Further info on SIP, RTP and RTCP


For more details on the SIP protocol (SIP is used in normal Internet calls too), please refer to
the spec and especially ‘Alice and Bob’ SIP call flow examples at:
https://www.ietf.org/rfc/rfc3261.txt

If you used to look at GSM/WCDMA CC protocols then some similarities we relate are below:
- SIP INVITE is similar to CC SETUP
- SIP TRYING is similar to CC CALL PROCEEDING
- SIP RINGING is similar to CC ALERTING
- SIP OK which has the CSeq INVITE) is like CC CONNECT
- SIP BYE is like CC DISCONNECT

SIP manages only the ‘session’. The voice in VoLTE is transferred over the ‘RTP’ protocol and
most measurements like RTT and packet loss rate are observed from ‘RTCP’ protocol
messages. Further info on RTP and RTCP protocols are available at:
https://tools.ietf.org/html/rfc3550

SRVCC message flow


Mainly, the network/eNB would the RRCMobilityFromEURACommand message to the UE to
‘handover’ the ongoing VoLTE call over to continue the call in (normally) WCDMA or GSM etc.
Please see Figure 51: PS-CS SRVCC Message Flow at ​page 171​ in the spec at:
https://www.gsma.com/futurenetworks/wp-content/uploads/2014/10/FCM.01-VoLTE-Service-De
scription-and-Implementation-Guidelines-Version-2.0.pdf

108
How to know the RTP ‘PORT’
The IP port for the RTP is given in the SDP part of some SIP messages.

The port (of that/each party) is specified after the ‘m=audio ‘ text in the messages: ‘SIP INVITE’
or ‘OK with CSeq INVITE’ or ‘Session Progress with CSeq INVITE. ’.
For example, if the case of the MO VoLTE call as shown in video:
https://www.youtube.com/watch?v=DgnB8lAQwyw

Pause and go to the time 1:38 and you’d see the SIP OK message (CSeq INVITE), you can
see:

In the middle of the screen - it shows:


m=audio 15172 RTP/AVP 116 111

This means the RTP port of the downlink voice is ​15172​. Since this is the ‘OK’ with direction
down (to our outgoing INVITE with direction up) then this is the port of the remote server that
the voice (RTP) would travel. (through the dedicated bearer).

109
In some cases, if a ringtone was used, the SDP part showing this v=0 etc with m=audio …
would come in the SIP 183 response ‘Session Progress’ instead of the ‘OK’ since the voice flow
started at the ringtone before the other side answered the call.

Similarly, the RTP port of the uplink voice (since it is a MO call) is in the INVITE (which is sent to
nw) - just scroll down and look for the ‘m=audio ‘ text similar to above.

Common VoLTE call issues


There are many common issues but below are a few we have observed so far:
- Call Drop - Call ending without SIP BYE:​ After a successful call setup/establishment,
If the radio link got cut (normally after a few LTE RADIO LINK FAILURE events) then the
connection might end (AZQ detects a ‘call end’ event from modem) without a normal SIP
BYE.
- Call Drop - Call ending with SIP BYE from phone (or network) even though
user/app didn’t end the call: ​ In these cases, look at the ‘Reason: ‘ text in the SIP BYE
message. Normally, AZQ would extract this ‘Reason:’ into the Call Drop or Call Block
events’ text too (so they would be there in the voice report sheet in the excel reports
too).
- SIP message flows normally but RRC dedicated bearer failed to setup: ​In these
cases the signalling for SIP was fine but the ‘voice’ RTP bearer didn’t succeed so no
voice could flow - there might be a ‘> 400 coded SIP message’ (like Request Terminated
etc) too.
- SIP BYE sent but no OK (with CSeq BYE) received from network: ​In the early
VoLTE phones/networks/labs - some cases we see SIP BYE sent from phone but no
response was received from network (IMS) so phone kept on sending BYEs again for
quite a long time and during that time it can’t make new VoLTE calls.
- MT side dismisses incoming call - “Request Terminated” instead of “Busy Here”:
This is not a problem, but just to note that some networks/setups (probably especially
when MT is not in VoLTE) dont send the normal ‘SIP response’ “Busy Here” response to
the INVITE, instead we observed the MO side receives “SIP response code: 487
Request Terminated” with “Reason: Q.850;cause=31;text="normal",SIP;cause=487” - so
this was a normal call rejection from MT side - not a problem.

Individual RTP packet data in logs


AZENQOS app versions 3.0.941 onwards now stores each RTP packets’ main RTP info like
sequence id, ssrc, payload byte length and RTP timestamp in the ‘lte_volte_rtp_msg’ table in
the ‘azqdata.db’ file inside the azm (zip) file. Also, modem timestamp is provided in the ‘time’
110
column as with all radio params and signalling are now using modem timestamp in this version
for more accurate rtp stats calculation by thirdparties or customers who want to verify - as we
have always used modem timestamps internally for making RTP stats params like rtp delay
during handovers etc inside our engine too but the db had the ‘os_timestamp’ so it was harder
for customers/thirdparties to verify). An example log is provided at:
https://github.com/freewillfx-azenqos/azm_db_merge/blob/master/example_logs/865184036227
805%2020_6_2018%209.7.52.azm

Below is an example screenshot showing this table from the above log:

Below are the main columns:


lte_volte_codec_type_rx
lte_volte_codec_type_tx
lte_volte_frame_type_rx
lte_volte_frame_type_tx
lte_volte_rtp_timestamp_rx
lte_volte_rtp_timestamp_tx
lte_volte_rtp_source_ssrc
lte_volte_rtp_sequence_number
lte_volte_rtp_direction
lte_volte_rtp_timestamp
lte_volte_rtp_payload_size

111
AZQ Server Reports KPI Definition and calculation
formulas

Voice Call Events KPI


Default Voice Call KPI and sessions in our reports are derived from ‘modem call state event’s
which closely represents the real user experience. Although our reports also have ‘modules’ that
can be chosen in our templates to exclusively use Layer-3 and/or SIP signalling for Voice KPIs,
but in this topic we’ll focus on the call events as shown on the phone AZQ app which is mainly
derived from modem events + some signalling as shall be described below.

Firstly, please open below table link explaining the Voice KPIs below:
https://docs.google.com/spreadsheets/d/18akfEhTxSDukrwK_dr8AGEBY67aRWiDEvahlvrmU4
qw/edit?usp=sharing

Also the ‘algorithm’ view as detailed on our webpage:


http://www.azenqos.com/resources/azq_call_event_determine/

Call block (Setup fail) or Call Drop determination.


Determined with “Call Ended” Event with the following condition:
1. If chipset event tells that this was commanded by the local user - represented by [Event]
“Call End: User ended call”.(Not Call Blocked or Dropped)
2. If we DID NOT received a L3 CC Disconnect - then this would result in a FAILURE (“Call
Drop” - if we already got a L3 CC Alerting OR “Call Block” otherwise) - comes from the 2
cases below
a. The Access Stratum (RR or RRC) commanded us to release the channel (RR
Channel Release or RRC_Connection_Release) from some internal
communication/settings problem OR that the base station did not receive our
communication for a while/timeout (like Measurement reports did not reach it) -
for example 3GPP TS 44.018: 3.4.13.2.2 - or various other cases.
b. We encountered a RADIO_LINK_FAILURE or the like that the chip lost the radio
connection to the network
3. If we received a L3 CC Disconnect message - check if its cause tells an error/problem or
if it’s a normal release, or from the user on the other side
List of L3 CC causes determined as failures in AZQ:
http://www.azenqos.com/resources/azq_l3_cc_cause_determination/

112
Main Data Report KPI and Parameters Definitions
Please refer to below google sheets document:

English version:
https://docs.google.com/spreadsheets/d/1CPxRx6Q7Wy6ZefIkxH3l1czIp7fkyYOD2Pw-DjM
VxNs/edit?usp=sharing

Original version:
https://docs.google.com/spreadsheets/d/1ZDoNCErBaTMSk75G7KMsG-6NLk0wxK4Ya2B
Xbym2tSI/edit?usp=sharing

Others KPI Definition List


As for the formula of most other KPIs - please open below google sheets template link of our
default benchmark template:
https://docs.google.com/spreadsheets/d/1mANNQQpQ9TsttRuZ2esWLjTNAmdbwrrOjrgmNCde
NnU/edit?usp=sharing
- Please see ‘​Calculation Formula’ ​column in first sheet (KPI Summary)
- Also in the ‘​Calculation Formula’ ​of the ‘VoLTE KPI’ sheet

113
Cosmetic Settings Guide
Cosmetic Settings can be found under Manage Phone -> Manage Map Plot

Here user can choose to load old settings from file (1) or Add (2)

114
The Explanation for each setting are found below

Scatter_Point_Size : Size of the plot for each parameter

Example : Scatter Size : 25 (Default)

Example : Scatter Size : 200 (Maximum)

Grid_Color : Assigning color to grid

Full_grid_on_fig : If true, will cover the entire canvas with grid

115
figsize_max : The size of the coverage image
This doesn’t affect the size of the plot, only the coverage image size. Unit is in 100pixels
Example : figsize_max : 16 (Default)

Example : figsize_max : 50 (Maximum)

fig_h, fig_w: Specify height and width dimension of the plot


You need to specify both height and width for this to work, Unit is in 100pixels

116
force_ant_bw : Force the cell bandwidth to a predefined degree
To use the value from the cell file, do not include this in the configuration or hit spacebar once

Example : force_ant_bw : 90 (Maximum)

Example : force_ant_bw : Use from cell file (Default) : Note the space bar

117
cell_arm_length : Define the size of each sector
This is used to make smaller cell files for cluster drive and bigger cell files for single site drive

Example : cell_arm_length : 70 (Default)

Example : cell_arm_length : 300 (Maximum)

Cell_custom_label_format : Customize the info to display on the PCI/PSC/ARFCN Cell

Not included : Uses PCI/PSC/ARFCN Number

1 Spacebar: Blank

#XXX : Where X is the exact match of column in cell file

118
Site_detail_label_format : Customize the info to display on the Site
Not included : Uses PCI/PSC/ARFCN Number
1 Spacebar : Blank
#XXX : Where X is the exact match of column in site file

Sequential plot : Plot most recent value on top


If false, will plot the best value on top if it occupies the same position

Left is “best on top (false)”, right is “sequential (true)”.

Shows_legend: Show/hide legend in plot

Example:

119
Use_white_background: Replace street map with plain white background.

Example

Use_satellite_map: Replace street map with satellite map background.

Example

120
continous_plot_resample_element_list: Resample elements in plots to fill gaps
Used for the case where GPS signal is not missing in some part or for some parameter which
only plot as points (Ex. LTE eNB ID).

Example: Left is with resample, right is no resample

Tips​: you can take note of the “Plot name” you want to resample and put those into “value”

121
Example of Creating a report with small cell size/blank space for
each cell
Site_detail_alvel_format : 1 spacebar
Cell_custom_label_format : 1 spacebar
Cell_Arm_length : 15

122
Mobile Log (.azm) SQLite3/Spatialite Database
access and data reference
NOTE​:
- To get from the web dashboard: In the AZQ web dashboard, choose a log > Download mobile log
(azm file). Or for multiple azm file downloads, you can ‘tick’ on multiple logs and then in the bottom of
the screen, choose ‘mobile log’. Once downloaded, use 7zip or and zip manager software to open the
‘azm’ file, you will find .db file
- To get the ‘azm’ file - you can get from the phone’s internal storage (connect phone to
PC via USB) > ‘diag_logs’ folder (for logs that haven’t been uploaded) and in the
‘uploaded’ folder (inside ‘diag_logs’ folder) for uploaded logs. Sometimes the USB MTP
method doesn’t show newly saved files - in that case you can install an Android file
browser app then go to then go to same mentioned folder above and send to your PC
via Bluetooth/email/etc.

NOTE​: Please also take a look at the ‘azm_db_merge’ open-source project to merge/import all
data from multiple .azm files into a central PostgreSQL database, or a Sqlite3 database file or
other supported dbms systems at:
https://github.com/freewillfx-azenqos/azm_db_merge/

AZQ Android logs on phone are of the .azm (Azenqos Mobile file) extension. This is actually a
zip file so you can open it in Zip managers like 7Zip or WinZip then extract Sqlite database file
named ‘azqdata.db’ - you can open this with any Sqlite3 database viewer/editor application ​to
extract/query whatever data you want. It also has fully decoded RRC messages text inside the
database in the ‘signalling’ table and events in the ‘events’ table.

When the mobile app uploads logs to server it is uploading these .azm files. The server merges
the contents of ​azqdata.dat ​and ​diag_log_1.qmdl_.azqml (​ explained below) and adds some of
its own calculation/decoding into a .azl file. However, all these are sequential undocumented
and and non-standard storage file formats. Nowadays the Android phones have much more
processing power and are quite fast enough to merge the data itself (in producer/consumer
queues) into a SQLite3 database on phone in real time during the tests. This makes log data
access much easier for post-processing by customers, 3rd party tool vendors and also
ourselves at AZQ!

Contents of the .azm zip file:


- azqdata.db ​- This is the Sqlite3 database file that essentially contains all the data from
the test. It is intended to be an open and more easily accessible all-in-one alternative to
the legacy/proprietary ​azqdata.dat a​ nd ​diag_log_1.qmdl_.azqml f​ iles. In summary this
azqdata.db has all the data from both of the files already combined, sequenced and
categorized into tables.

123
- azqdata.dat ​- This is a text-based format matching time and element/event/message of
data coming from the Android app - like Lat, Lon and various other events (like FTP
Attempt, First Byte Received, etc.) from the app (mostly non-radio).
- diag_log_1.qmdl_.azqml​ - this is the ‘azqml’ - which is ‘AZENQOS meta-data log’ - it is
a binary format keeping most radio params from the lower-level azenqos radio engine.
- map.jpg ​- if the log was an indoor test (user loaded an indoor map) then this file would
appear inside the azm - it is used by server as a background image to plot on - more info
further below in the ‘Indoor logs’ topic.
- Other files ​- Screenshots, photo tags, downlink voice record for POLQA MOS tests or
tcpdump .pcap files can appear based on user commands or script items of that log.

You can also get the azm from the AZQ Web dashboard. Browse to your desired log, choose
the Download icon and right click on ‘report’ then choose ‘copy link address’ and then open a
new browser tab, paste and replace all (two) occurrences of the extension from ‘xlsx’ to azm
and hit enter.

Below are some example screenshots of reading the db file in Ubuntu GNU/Linux -
Sqlitebrowser:

124
125
Parameter List and Sqlite Database structure
Our logs contains 3 types of data: “​Elements​” (measurement parameters like RSRP, RSRQ
etc), “​Events​” (like ‘Call Initiation’, ‘Call Drop’), and “​Messages​” (like L3 LTE RRC Messages,
SIP Messages).

Elements:
Most useful measurements are Elements and these are stored in various db tables - please
refer to below google sheets document listing all ‘elements’:
https://docs.google.com/spreadsheets/d/1ddl-g_qyoMYLF8PMkjrYPrpXusdinTZxsWLQOz
J6xu8/edit?usp=sharing
The ‘db_table’ column is the table name and the ‘var_name’ is the column name.

You’d observe that the actual column name in the db file would always have a suffix of the
‘index’ number.

The index is a number (starting from 1) in case the parameter might have multiple values (an
array - like one GSM ARFCN for each cell - _1 is serving and _2, _3, _4 are neighbors).

In case of LTE tables, unless they are specified as _neigh_ to mean each neighbor, they are
mostly the index of the ‘carrier’ - the lte_earfcn_1 meas the earfcn of the first frequency/carrier
(PCC) and ..._2 meas the earfcn for SCC0 and _3 means the earfcn for the third carrier (SCC1).

For example:
- lte_inst_rsrp_rx0_1 would mean the RSRP that phone got for first antenna (rx0) and first
carrier (PCC as shown by _1 index) .
- lte_inst_rsrp_rx1_1 would mean the RSRP that phone got for second antenna (rx1) and first
carrier (PCC as shown by _1 index) .
- lte_inst_rsrp_1 would mean the RSRP of the best antenna for PCC.

The screenshot below shows an example log > the lte_cell_meas table before phone uses
LTE-CA - so there are normally only ..._1 columns showing:

But when phone starts using LTE-CA (two carriers at the same time) then you’d see
lte_earfcn_2 (and lte_inst_rsrp_2) show up at the same time:

126
In every table you’d find columns named ‘seqid’ and ‘posid’:
- The ‘seqid’ is the sequence number of each data row - used for determining the sequence:
comparing it among tables to know which was before/after without comparing timestamps that
could be the same among a few rows and might also take more processing power/time.
- ​The 'posid' would match with the 'location' table for matching lat/lon of a measurement.

Events:

Events are in the ‘events’ table (below screenshot is from an older version where the name was
‘event’ without the ‘s’) - they would contain various text/string events like FTP Download Attempt
etc:

127
The ftp session shown in in above screenshot ends in the ‘FTP Download Last Byte Received’
event of below screenshot:

The list of events can be referenced from:


http://www.azenqos.com/ref/EventIDEnum.txt

Please also check the statement_sum_* tables - it might help you get the sessions of events
generated by a test script item easier - per row (but doesnt work with concurrent sessions).

Below is a list of common event naming strings (in “”):


https://docs.google.com/document/d/1Vz2lQOTsVsE15Wzu4H2AApA02765p7g66YOX-t1oW-Y/
edit?usp=sharing

Messages

The messages are in the ‘signalling’ table. These would include all L3 messages and VoLTE
SIP messages. The decoded contents are in the detail_str column as in below example.

128
The ‘message_id’ is simply an easy to use ‘ID’ for matching messages - it can be referenced
from:
http://www.azenqos.com/ref/MessageIDEnum.txt

The ‘detail_hex’ column is holds a hex string of the message. (the screenshot below came from
older versions so they don’t show it and the table name was ‘l3’ instead of ‘signalling’ too - but
logs form AZENQOS v579 or newer already have this ‘detail_hex’ column popolulated).

Alternatively, the ‘HexDump:’ line in the ‘detail_str’ column might be used for raw message
access too.

Most LTE RRC, WCDMA RRC messages are fully decoded to text into the ‘detail_str’ column.
However, some NAS messages’ content parts are not fully decoded at the moment and added
case by case as per customer/user request.

129
Data Access via SQL queries
Please go through some notable excerpts and notes below describing how the tables are
structured:

● The data is structured into "tables" - to know which parameter is in which table - simply
open the link below and search for your parameter in the "var_name" column, its table is
in the "db_table"
column:​https://docs.google.com/spreadsheets/d/1ddl-g_qyoMYLF8PMkjrYPrpXusdinTZx
sWLQOzJ6xu8/edit?usp=sharing
● The Layer-3 messages and other signalling like 'SIP' are in their own 'signalling' table.
● The events are in the "events" table.
● The list of all imported logs are in the "logs" table. (the individual sqlit3 db inside each
azm also has this table - with normally only one row because it is from one azm log).
This table would tell you the log's original ".azm" filename, the log start_time, end_time,
app version, tag name (log_tag) etc.
● The table structure of the sqlite3 database and the "merged" target database is
essentially the same.
● All tables have the "log_hash" column - this tells you "from which log did this row in this
table come from" - you can use it to query the "logs" table for the row that has the same
"log_hash" to get further info about the log.
● All tables have the "time" column - this is the Operating System’s timestamp of that row.
● All tables have the ‘modem_time’ column - (from AZENQOS Android app versions
3.0.984​ onwards - you can check the version of the app that produced a log from the
‘log’ table: ‘​log_app_version​’ column.) Older versions we used the same 'time' column for
modem timestamp in
radio tables (like signalling, lte_cell_meas) and OS timestamp in
non-radio tables (like location or android_info_1sec). But since this modem_timestamp in
some rarer cases are wrong (many
months/years in the past or jumping back in the middle of the log so
it won't match/sync with non-radio tables which uses OS time - so we
separated into its own column 'modem_time' while the 'time' column
would always be the OS timestamp which won't jump and always be in
sync between tables. So for very precise intervals like 'rtp' (where modem_time would be
mostly very precisely apx 20ms apart during active speech) or
'signalling' for handover duration - it is good to use 'modem_time'
but for generic matching - it is better to use 'time'. As for
non-modem tables - modem_time would be null.
● All tables have the "geom" column - this is the "geometry POINT" data blob - simply the
Latitude (Y) and Longitude (X) combined in a form that can be queried "spatially" and
also direcly usable/plottable by tools like QGIS.

130
● All tables have the "posid" column (position id) - this coulumn can be used together with
the "log_hash" to do "joins" of your target table with the "location" table to get the
"positioning_lat" and "positioning_lon" of each row (in case you prefer not to use or not
to import the spatial "geom" using azm_db_merge.py's option:
--import_geom_column_in_location_table_only).
● All tables have the "seqid" column (sequence id) - this can be used to easily compare
between rows regarding which came before/after/between especially in (rare) cases
where a few rows have the same timestamp.
● To know the 'span' (start time/seqid, end time/seqid) of a particular script test item (or
"session") - you can use the rows of the tables whose names start with 'statement_sum_'
- these tables would contain the 'time' and 'seqid' of all the main 'events' that can come
from these script test item. For example the table named 'statement_sum_ftp_download'
would have the rows of each 'session' that the ftp_download script ran so you can use it
to query things like 'lte_l1_dl_throughput_all_carriers' between its column of
'event_20704_ftp_download_first_byte_received_time' and
'event_20705_ftp_download_last_byte_received_time' (or seqid).

A note on derived tables created on server (in _processed.azm files).

The AZQ Server can and does add some new ‘derived’ tables in the ‘_processed azm’ that it
derives/calculates at server - For example the ‘​polqa_mos​’ table.

These derived tables are different in that they don’t have all the seqid/posid columns like above
- they only have ‘log_hash’ and ‘time’.

We removed those 'normal' (non-derived table) columns that would only have null values
anyway in the past since it is the server that added these mos values but doesn't keep
re-match/fill those columns anyway in older versions so the db user
would not 'expect' data in those columns.

So, for our own reports, for plotting of these derived tables
('polqa_mos') - we use 'log_hash' and 'time' to match them to the
location table (pandas merge_asof in our case)

131
SQL Query simple examples

Now, you can use you preferred SQL browser or programming language to do some queries on
the data as described above. Below are some simple examples:

Note: Below are very simple easy-to-write examples tested on PostgreSQL via 'pgAdmin III' -
not considering efficiency or any advanced SQL techniques.

Let's say we want to get the average of the "LTE RSRP" param (in dBm) - first we need to know
which table it resides in, so we open:
https://docs.google.com/spreadsheets/d/1ddl-g_qyoMYLF8PMkjrYPrpXusdinTZxsWLQOzJ6xu8
/edit?usp=sharing​ And we search for "rsrp", we can see the row with "var_name" (parameter
name) 'lte_inst_rsrp' and its "db_table" column shows that it is in the table 'lte_cell_meas'.
Having understood about the "index" we now know that the actual column name would need to
have a '_1' suffix if we want to show the PCC (first index) measurements for RSRP - so we can
now simply query the database with the SQL below:

select avg(lte_inst_rsrp_1) from lte_cell_meas

And we'd get our result shown almost instantly.

Then, let's say we want to know the 'max' RSRP - we can do the following query:

select max(lte_inst_rsrp_1) from lte_cell_meas

Suppose we got "-50.6875" as the max RSRP, then, let's say we want to know 'from which log
did this 'max' RSRP come from?' - we can then simply query below to get the full row it came
from:

select * from lte_cell_meas where lte_inst_rsrp_1 = -50.6875

We'd get a row (or a few) then we can see the 'log_hash' of the log. In our case the 'log_hash' is
'264179501379092216' - so now we can simply query below to get the log's original file name
(log_ori_file_name column), tag (log_tag column) of the log that has this max RSRP:

select * from logs where log_hash = 264179501379092216

We now found the log that has is the champion of RSRP! Congratulations!

Some more examples can be checked from the (very simple) example R programming language
example project - although this project uses the old/obsolete table and column names and
queries the unmerged sqlite3 database, it can still provide an idea of how to find/get and

132
process some radio parameters and Layer-3 messages in the database - it produces some
charts below:

● RSRP plot on map


● RSRP distribution histogram
● A histogram showing the distribution of 'e1' WCDMA L3 RRC MeasurementReport's
measurement events (e1a, e1b, e1c, etc)
● You can view the example plots and get the source code
at:​https://docs.google.com/document/d/18GZAgcs3jRFdWqfvAqmQicvYlXRk6D0WktqW
md5iwwo/edit#heading=h.nnww3d7qok2v

Using QGIS to plot parameters on a map or to export data (CSV, MIF, TAB,
KML) from the azm file’s ‘azqdata.db’

NOTE​: ​To get the ‘azm’ file - you can get from the phone’s internal storage (connect phone to
PC via USB) > ‘diag_logs’ folder (for logs that haven’t been uploaded) and in the ‘uploaded’
folder (inside ‘diag_logs’ folder) for uploaded logs. Sometimes the USB MTP method doesn’t
show newly saved files - in that case you can install an Android file browser app then go to then
go to same mentioned folder above and send to your PC via Bluetooth/email/etc.

I​nstall QGIS in your Windows or Ubuntu machine and open the azqdata.db file (which you extracted from
the azm file or you’ve merged using
https://github.com/freewillfx-azenqos/azm_db_merge#sqlite-example​). In QGIS’s left panel - select
Spatialite > new connection

133

Choose the extracted azqdata.db and you will see a table list of various parameters


Double click on the desired table, for example, we wish to view RSRP in this case so we choose the table
named “lte_cell_meas” - If you wish to see where which tables each parameter belong to, please search
in the google sheets linkded below:
https://docs.google.com/spreadsheets/d/1ddl-g_qyoMYLF8PMkjrYPrpXusdinTZxsWLQOzJ6xu8/edit?usp
=sharing

134
Adjusting the QGIS plot

Double click on lte_cell_meas in layers and change the style to "graduated" choose (or type) the column
to lte_inst_rsrp_1

135
Click "classify" and you will get an automatic range (and of course, you can manually set your custom
range here too).

136
Click on the button ( Change...), click on "simple marker" on the left then change ‘Border’ to transparent,
then click ok

The color plot will now appear!

137
To insert the background map, go to Plugins > Manage and install pluges > search: OpenLayers and
install OpenLayers plugin, then choose the desired plugin from Web > OpenLayers as in below example:

Try moving the map a bit, Once downloaded the layer might be on top of the existing plot

138
To fix this, simply go to ‘layers’ (bottom left panel) and drag layer lte_cell_meas to the top/first and you will
see the plot on the map!

- Finally, press the “Create Print Composer” button:

- Then add its name:

139
- Then when the window comes up, choose Layout > Add Map

- Then draw on the canvas, then choose Layout > Add Legend, then draw on the canvas:

140
- Then to add the sample count, uncheck the ‘Auto update’ button when you select the legend, in
the right panel:

- Then click on ‘lte_cell_meas’ (or your layer name) to select it then click on the ‘zigma’ icon to add
the sample count:

141
Exporting table data to Mapinfo or Google Earth
Right click on ‘lte_cell_meas’ in the layers screen and choose save as and you will see the screen below

Choose CSV format, though you can also export to Mapinfo (mif, TAB) and also KML for google earth.
Choose browse to enter the file name and press ok. You will see a CSV file that can be immediately used

142
143
Indoor logs - getting marking position (x,y) on indoor maps

The x,y coordinates of each indoor marking from indoor logs ​are in the same table 'location' as
outdoors that normally contain Lat/Lon - but the indoor marking point rows would be different as
below:

1. The rows would have ‘positioning_lat' and 'positioning_lon' but won't contain 'positioning
altitude' (and won't' contain 'positioning_speed').

2. The bottom-left (like in normal x,y graphs 1st quadrant graphs) of the indoor map (map.jpg file
in *.azm log file) is the (0,0) coordinate, then:
- 'Positioning_Lat' is the 'y' going up vertically - unit is in 'ratio of picture height' (so it would be
from 0.0 to less than 1.0). Example: if picture is 1000 pixels high and the 'Positioning_Lat' is 0.3
so the y of the mark is 300 pixels high from the bottom.
- 'Positioning_Lon' is the 'x' going right horizontally - unit is 'ratio of picture width' (same as Lat).
Example: if picture is 1000 pixels wide and the 'Positioning_Lon' is 0.3 so the x of the mark is
300 pixels right from the left.

Real log example below:


- User marked 4 points:
- 1. Near top, left. (Lat - y - almost 1, Lon - x - almost 0)
- 2. Near bottom left. (Lat - y - almost 0, Lon - x - almost 0)
- 3. Near bottom right. (Lat - y - almost 0, Lon - x - almost 1)
- 4. Near top right. (Lat - y - almost 1, Lon - x - almost 1)
The azqdata.db > location table contains rows showing the 4 marks as below:

144
Example R (R programming language) program source code accessing
and generating RSRP, RSRQ plots from db

Note1:​ this example R program uses the old/obsolete table/column field names. For the latest
azqdata.db example - please see the ‘example_logs’ folder (unzip the .azm file to get the
azqdata.db) at ​https://github.com/freewillfx-azenqos/azm_db_merge
Note2​: Our reports from our servers are not generated by R code, at the moment, we prefer and
use Python + Pandas and some Numpy, some Numba.

We made an example program using the ‘R programming language’ - you can get the source
code of this simple example project from link below:

http://www.azenqos.com/db_examples/azq_db_report_gen_R_v0.1.zip

The code above was used to make RSRP, RSRQ plots and distribution graphs and also a
distribution of the number of WCDMA measurement events count (e1a, e1b, etc) as shown
below:

145
146
147
AZENQOS Web-Dashboard Server Software
The main purpose of the server is to receive logs uploaded from the AZENQOS Android app
then merge/convert/import all data into a PostgreSQL database, then users can use the
web-dashboard to generate Excel/spreadsheet reports (custom template/module based) or
export data to Spatialite db for QGIS, MapInfo TAB, Mapinfo MIF, CSV or Google Earth KML -
from multiple logs at once.

This is the second generation, redesigned and rewritten server back-end software for large
GNU/Linux based servers that effectively improves on and replaces our first generation server
software based on Windows/.NET - used earlier and has now reached various architectural
limitations in scaling for most new customers’ reporting and data access requirements.

We recommend Cloud (Google Compute Engine, etc) based servers (or VMs) if you are to host
it yourself, as it is easier to backup and expand/scale both storage, CPU and RAM in the same
server as your usage expands. Backup on non-cloud servers with large (> 8TB) but slow hard
disks are practically too slow and mostly fail to complete.

Requirements

Hardware

- Network connection:​ At least 1Gbps bandwidth ethernet connection. Usage may cause up to
4 TB traffic or more per month (ingress, egress) for 1,000 phones. Normally we use Google
Cloud Platform’s ‘Premium Network Tier’ for best network performance
(​https://cloud.google.com/network-tiers/​).

- ​RAM​ - at least 16GB. Linear requirement to number of concurrent log imports and live report
generation. For 1,000 plus active phones: 120GB.

- ​Processor​ - at least 8 cores (2.x Ghz or above). For 1,000 plus active phones: 32 cores. (Both
log import and report generation is CPU intensive. POLQA MOS calculation and the wav
split/check process for it is very CPU intensive.)

- ​Storage​:
- At least 300GB SSD storage for OS.
- At least 2TB main storage. (apx 200GB would be used for temporary files). For apx 1,000
active phones (apx 8,000 smaller logs per day): at least 16TB for apx 4 months data.
Storage usage is almost linear to number (hours) of logs. Much more for MOS tests, some 5
hour MOS tests can get to apx 500MB log size. Some rough estimates: A frequently tested

148
500-phone country village drive project in Thailand (No MOS) took apx 7 TB of storage for apx 3
months of testing, while another in India with some doing MOS took about 11 TB (but more
phones too but not clear how many active phones).

Software

- Please install 'Debian 9' (preferred) - or if customer admin prefers


'Ubuntu 16.04' - we have servers on both and don't see any issues of
these specific OSs yet.

Server firewall config: ports requirement

- Server itself must be able to bind to any port (some services deny this)
- The network must allow below incoming tcp ports to server:
- 20 - ssh
- 80 http
- 443 https

Installation process

1. Server must have good/fast internet access. Offline installs or


operation are not possible.
2. Once server is ready with specs and initial OS, ports config as above, customer server admin
must provides below details for 'ssh' login:
- Public static IP of server
- Initial ssh login username
- Initial ssh login password
(Alternatively, we can provide our ssh public key if required)
3. Our team would login via ssh to do some initial disk configs then auto install the whole
system via Ansible. (All initial ssh logins would be removed)
4. Our team would then do some post-install configs, basic tests.
5. If POLQA MOS is required, we need to purchase and install/config
test POLQA MOS calculation on the server too.

149
PART 3 - Miscellaneous HOWTOs

150
Using a Tablet to control multiple AZQ Phones over
internet/MQTT - (AZQ BOSS)
Guideline in PPT slides format:
https://docs.google.com/presentation/d/1dUyP4XdCsKyVyKUWL1fiAgHNISo6PEXOomkIkKm-H
Nw/edit?usp=sharing
More detailed, document format:
https://docs.google.com/document/d/1NTQeuNfMSx_ErbqjXieZZ568xsEAcAzbEY57N02I40k/ed
it?usp=sharing

Using the AZQ PC Replay tool


Please see below guide:
https://docs.google.com/presentation/d/1D9_08HUbd1YkIFSK_HILWLCv_IW06LUQEteCZMZy
QAM/edit?usp=sharing

Doing Social Media Tests


Please see below guide:
https://docs.google.com/presentation/d/1fMvtXT4DXA59bNiLK34LCt9ZOKNjPI85tIhCDUnKrrk/e
dit?usp=sharing

Using polygon to “exclude” some data (for re-drive purposes)


Please see below video:
https://youtu.be/d9I4q8TrcP0    

151
How to collect QMDL files for detailed analysis with QCAT/QXDM
(for RTP/RTCP, TTI-level analysis, etc)
The AZENQOS app can collect QMDL files for further/deeper analysis via QCAT (part of the
QXDM tool suite which you can purchase from Qualcomm - more info at
https://www.qualcomm.com/documents/qxdm-professional-qualcomm-extensible-diagnostic-mo
nitor​ ) which can in turn convert the file to an ISF that can be further analyzed in QXDM too.
Although we capture and use RTP/RTCP packets for various calculations, we do not normally
store all them in the log file to reduce the log file size. (Update: azq app versions 3.0.941
onwards does store each RTP packet timestamp and main info like sequence id, ssrc, payload
byte length and RTP timestamp. See next topic on Individual RTP packets in logs)
Instructions:
- Enter ‘Network Monitor’ from the AZQ app main menu (or start your script), wait for the
parameters to flow on top of screen then wait for about 20 seconds to make sure the
bottom locking button is not showing please wait etc.
- Quickly press the top left ‘Hamburger’ icon (that shows left panel) continuously until a pop-up
shows ‘QMDL Menu Enabled’.
- Then press the menu button (the 3 dots on bottom right) and choose the "Start QMDL
Rec" menu as below:

152

Then, check the "EVENTS" tab, it should show the location and filename of the new qmdl file (in
device storage - you can open a file browser app on phone to check/confirm this too) as below
screenshot - 13:03:14 showing "Start QMDL" with info:

153

- Then do your testing/logging normally. QMDL file in specified location will grow
continuosly.

- The QMDL file can get VERY large (like 2GB for an hour of LTE VoLTE testing) so when
you want it to stop recording during a test - choose the menu button > "Stop QMDL Rec"
and you'd see the confirmation in the EVENTS tab as in bottom of screenshot below:

154

- Then, finally, you can copy the qmdl file to pc (using USB cable via MTP - but USB MTP
can be buggy in updating/refresh - or Bluetooth from an Android file browser app) from
the /sdcard/azq_qmdl/ folder of phone.

Note: If you do advanced locking like PCI, UARFCN, PSC Stay - you need to do "Start QMDL"
again as the engine has been restarted in some cases. But basic locks like RAT and Band are
OK - no need to press "Start QMDL" again for them.
Video: ​https://youtu.be/59oOqhiEDRQ

155
How to collect Android logcat (debug logs)
1. Download platform tools (adb):
https://dl.google.com/android/repository/platform-tools-latest-windows.zip
2. Extract and put folder “platform-tools” in C:\

Inside the folder should looks like this

3. Connect phone to PC via USB, enable USB debugging.

4. Press start then type “cmd”

156
5. Right click on Command Prompt and choose Run as administrator

157
6. On Command prompt:
a. Type: cd\platform-tools
b. Type: adb devices
c. Check if the following is showing, if not check if usb debugging is enabled or if
USB is in file transfer mode (it should be in file transfer mode)

Device number is random and will not match perfectly, it’s fine as long as it’s
there
d. Type: ​adb logcat -v time > logcat.txt

7. Replicate the problem on azenqos app you encountered, app not starting/crash
8. When done press Ctrl + C, and confirm that the file size is not lower than 1 KBs
9. Send the logcat.txt to us at ​support@azenqos.com​ together with details of your problem/
phone model/ azenqos app version
Note:​ logcat.txt will be in C:\platform-tools

iPerf3 Server Setup

Docker
If you use docker you can use this image https://hub.docker.com/r/mlabbe/iperf3 to create iPerf3
container

Ubuntu / Debian
If you use Ubuntu or Debian based distro you can follow this link https://iperf.fr/iperf-servers.php
(section Script to host a iPerf3 server with Linux (Ubuntu / Debian))

158
Windows (Clone from Ubuntu/Debian above)

1. Download iPerf3 binary from ​https://iperf.fr/iperf-download.php


2. Extract and place the iPerf3 folder in desired location
3. Download restart_iperf3.bat from ​https://files.azenqos.com/temp/restart_iperf3.bat
4. Edit restart_iperf3.bat and replace path\to\iperf3.exe with your iperf3.exe path
5. Open Windows Defender Firewall the follow the step below

159
Windows Firewall Settings
A. Click Inbounded Rules and then click New Rule...

B. Select Program and click next

160
C. Click Browse...

D. Select your iperf3.exe

161
E. Click next

F. Select Allow the connect then click next

162
G. Click next

H. Name the rule then click finish

163
164
Run the server
Just double click a restart_iperf3.bat then 10 instances of iperf3 will spawn

Auto start after boot


Place the restart_iperf3.bat in startup folder

For current user only


C:\Users\​Username​\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

For all user


C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

How to let users sync processed_azms from AZQ Servers to their


own GNU/Linux server

*For users on windows please get wget.exe from ​https://eternallybored.org/misc/wget/


And use cmd to run the wget command as the steps below.

(You can easily make a bash script of below steps)

NOTE: replace ​gnu0.azenqos.com​ with your server domain in examples below

1. Get a list of logs for a month for the specified list of imeis - example:
- single imei:
​http://gnu0.azenqos.com:8004/processed_azm_links/201810/999999999999999
- multiple imeis:

http://gnu0.azenqos.com:8004/processed_azm_links/201810/999999999999999,999999999999
998

2. The logfile path list would be separated by \n for further


scripting - so you'd better get it by wget - example:
mkdir 201810
cd 201810

165
wget -O -
"​http://gnu0.azenqos.com:8004/processed_azm_links/201810/999999999999999,99999999999
9998​"
> path_list.txt

3. check that your path_list.txt is not empty

4. now add the prefix (http://<server domain>) to the


url_list_201810.txt file - example:
sed -e 's:^:http\://​gnu0.azenqos.com​:g' path_list.txt > url_list.txt
*If command above did not work, simply use notepad++ (or similar) to add your server
domain(http://<server domain>) in front of every path.

5. use wget to sync all of them - only if not already downloaded or


newer version exists on server:
wget -N -i url_list.txt

6. See output of wget. Run again when needed to re-sync.

166
Azenqos Application Screen Description
This section will describe what each option does on Azenqos app, some are also discussed in
other section.
On “Home” Screen:

- Start Script:​ Select and start a script


- Network Monitor:​ Start a “script less” test, data will be collected in logs, but any action
has to be done by manually by hand. User can still use Band/Technology lock option
during test.
- Start Schedule:​ This is used for “Unattended mode”, working together with schedule
assigned from servers
- Replay Log:​ Replay(re-enactment of the test process) of the test log on phone.
- New Script:​ Create new script, refer to ​Script creation​ for more info
- Open Script:​ Open and edit existing script
- Delete Script:​ Remove script from phone

167
- Setting:​ Shows various settings of Azenqos app
- Upload Logs:​ Upload logs on phone, this will only shows ‘un-uploaded logs’
- Manage Logs:​ Check status and download default excel report of each log, this will only
shows ‘uploaded logs’
- Use Bluetooth commander:​ Connect to Tablets with special Azenqos controlling app
installed (see ​guide​)
- Check For Update:​ Automatically check for new release of Azenqos application, we
recommend that every user update to latest version before reporting any issue.
- HOWTO Videos and FAQ:​ Open a link to our webpage for user guide
- Email Support:​ Send an email to our support team.
- About:​ Shows copyright information, check license version, IMEI, and your azenqos
server. Also allows you to re-activate your license
- Logcat Manager:​ Collect logcat that can help us debug issues with in the app, this
method has limited length available, ​collecting via PC​ is more flexible.
- Connect to BOSS:​ Connect to remote commander via internet/web browser (more info
here​)

Setting Details

This allows user to select cell file in the phone to be displayed in map during drive test
The format and method for using cell file is available ​here

168
Option to let the app notifies users when GPS/Charger is disconnected with voice message.
For example, “GPS lost” when GPS signal lock is lost, or “GPS OK” when it is restored.

This option allows the logs to be split periodically, when user runs script, it will stop then restart
automatically in order to split the log file. Note that any data during the period of stop until restart
will be lost.

When log is uploaded, an email will be sent to specified address with report from that log in
default format.

169
Note: Auto turn on GPS may not work in some models, please double check.

If unchecked, excel report(after generation on server) will zoom in on floor plan according to
your actual test area. As opposed to showing whole floor plan.

If enabled, will show extra information for throughput during test as picture below

170
Should be disabled if you know you’re going to test in a rural area with no coverage zone to
prevent phone from going into airplane mode all the time.

Prevent/delay phone screen from going to sleep mode.

Note: Enable Database Logging will increase log file size.

Enable manual band/technology lock during test, and restore any lock to default state after
every test (Please enable this if you have to test in locked and then auto mode after.

171
Does not have any effect on test result, only for labeling.

If clear tag name is not enabled, last used tag name will be auto filled when you try to save the
next log.

Used to prevent Voice MOS recording from being affected by volume button.

Log in to respective test account (Require actual Facebook/Dropbox to be installed)

This affects the color code of parameters displayed during test (Eg. Red when value is low)
Theme used is in the same format as used on report server, guide ​here

172
To be used with PCTel IBFlex Scanner, (​Guide​)

With certain settings in script (​More info here​), it is possible to set a threshold, if the value tested
is lower than the threshold, the app will ask user if they want to redo the test, this affects how
long the app wait for user.

173

Das könnte Ihnen auch gefallen