AZQ User Guide
AZQ User Guide
Installation on Android
Xperia X Performance AZQ Installation
Nexus 5X (not Nexus ‘5’) AZQ Installation
Samsung S5 (SM-G900F) AZQ Installation
Nexus 5 (not Nexus ‘5X’) AZQ Installation
Redmi Note 3 Installation
Sony Xperia XZ AZQ Installation
Sony Xperia X AZQ Installation
Google Pixel AZQ Installation
Samsung C9 Pro AZQ installation
Sony Xperia XZ1 AZQ Installation
Xiaomi MI MIX 2 AZQ Installation
Oneplus 6 AZQ installation
General Usage
GPS accuracy improvement guidelines
Facebook Testing
Adding new test users
Setting up Facebook account in AZQ
AZQ Remote Device Access
How to collect QMDL files for detailed analysis with QCAT/QXDM (for RTP/RTCP, TTI-level
analysis, etc)
2
Installation on Android
The general 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.
4. Install AZQ (AZENQOS) Android app.
5. Open AZENQOS app - choose ‘Send Email’ to send a trial (or full) license request for
your IMEI. ( or manually send IMEI and your company info to [email protected] ).
6. After license confirmation from AZQ team. Open AZENQOS app, and choose ‘Activate
Online’.
Please refer to below topics/links for installation procedure of each supported phone model.
1. Nexus firmware
https://dl.google.com/dl/android/aosp/bullhead-mdb08m-factory-5867cc27.tgz
2. Custom Kernel
3
http://www.azenqos.com/firmware_updater/NEXUS_5X/AZQ_KERNEL_NEXUS_5X_600_MDB08M_081215.zi
p
3. APK
Provided by Azenqos support team.
4. TWRP
https://dl.twrp.me/bullhead/twrp-3.0.0-0-bullhead.img.html
4
Sony Xperia X AZQ Installation
System requirement (please check at setting → about phone)
● Android 6.0.1
● Build number 34.0.A.1.277
● To download and install required firmware version, use flash tool
(http://www.flashtool.net/downloads.php ) to download and install firmware
1. Unlock bootloader
2. Flash boot.img (https://drive.google.com/open?id=0B4klVev8uDdtZkRISHpJa01iUk0)
using fastboot
(Switch off phone, disconnect cable. Hold volume up button and connect phone to pc,
hold volume up until you see the blue light)
then
enter "fastboot flash boot boot.img"
Where boot.img is the full path to the file downloaded in (2)
enter "fastboot reboot"
3. Install azenqos apk (at least v3.0.585 and above)
5
● Go to Pixel device and select Install button in TWRP home page then choose
twrp.zip in /sdcard directory then slide the slidebar to confirm installation
● Reboot Pixel device when installation finish
4. Install AZQ kernel
● Boot Pixel device to TWRP recovery mode by type the following command when
Pixel device on and connect to computer
adb reboot recovery
or
● power off Pixel device
● Hold power + volume down button to boot to bootloader mode
● Use volume up and volume down button to select recovery
● Press power button
● When Pixel boot to TWRP recovery mode then copy AZQ kernel file from
computer to Pixel device by use the following command in terminal
adb push <path/to/AZQ/kernel/zip/file>.zip /sdcard
● Select install button on Pixel device and choose AZQ kernel file in /sdcard
directory then slide the slidebar to confirm installation
● Reboot Pixel device when installation finish
5. Install azenqos apk (at least v3.0.6XX)
6
9. Install Azenqos mobile application
7
General Usage
Updated document pending - but below videos cover many usage and intro info
8
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:
9
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.
10
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.
11
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.
12
AZENQOS voice call POLQA MOS Test
When doing MOS tests, you need two AZENQOS installed phones to 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:
13
'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’:
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:
14
15
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:
16
Example 3.1.1.3: Below is a simulated ‘totally silent’ two first samples continuous wav file:
17
Tail points detected:
silent_start_ts_array: [ 34.10585417 47.10952083]
Ok, let’s manually roughly check the two tails in audacity:
18
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, then choosing the index (starting at 0) of the tail of the pair that is
nearest to the real distance as the anchor as below:
19
● 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.
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.
.1.4 If there were no valid 'tail pairs' found (either none or the ‘best’ pair’s tail distance were
3
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.
.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).
.2 For the splitted samples from step 3.1, the server would run the officially licensed POLQA
3
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
20
the 'polqa_mos' table in both the 'processed' azm and the server's central database, and also
polqa_mos.csv in the ‘processed’ azm).
21
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.
22
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).
23
So when you run the script - and it is 5:39 as below, it would wait until 5:40 to continue as
below:
24
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
25
Email Test
Use this statement to test email sending via Simple Mail Transfer Protocol (SMTP). Gmail is the
best recommendation service provider.
Usage
26
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 “[email protected]”. This parameter should be “test.suthat”.
Password : It is password of sender’s email.
Receiver Email : It is receiver email. The example is “[email protected]”.
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.
27
Choose “Save” item. Email test script will show in script editor page.
Operation
This color is start/end sending email step
28
This color is prepare steps
This color is execution steps
29
Using with PCTel Seegull IBFLex Scanners
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
30
- 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.
31
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’.
32
- 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
33
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.
34
AZQ cell file integration into report (from AZENQOS Web
Dashboard)
To integrate cell files into automatic report.First go to Administrator -> Cell Information
35
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
Go back to main AZQ menu then re-enter settings - MISC, then download LINE services
component
36
- 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
37
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 AZQ result
38
Facebook Testing
4. You will see test users on this page, Click on “Add” button
39
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”
40
6. After you have created the new test users, you can change the display name or password by
clicking “Edit” at the right side.
41
Setting up Facebook account in AZQ
1. From AZQ main menu, choose Settings -> In “General” tab choose “Login with
Facebook”
2. Click “Log in with Facebook” and enter test user email & password.
42
3. If you entered email & password correctly, the name & email will shown in AZQ.
43
AZQ Remote Device Access
To enable 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
44
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!
45
AZQ logs sqlite3 database - getting from web
dashboard
In all AZQ logs (azm files), there will be the sqlite3 database file named ’azqdata.db’ - below are
steps to get this file.
1. 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
46
Mobile Log (.azm) SQLite3 Database access and
data reference
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.
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.
NOTE: This ‘azqdata.db’ database logging feature is ‘enabled by default’ for customers who
informed us that they plan to use 3rd-party post processing tools. Otherwise, this is disabled by
default - simply go to the AZENQOS app on phone > Settings > ‘Enable Database Logging’
checkbox to enable this feature.
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!
47
- 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:
48
49
Parameter List and Sqlite Database structure
Generally a log 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:
50
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:
51
The ftp session shown in in above screenshot ends in the ‘FTP Download Last Byte Received’
event of below screenshot:
52
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).
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.
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
53
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.
54
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 usees 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 20mx 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.
55
● 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).
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)
56
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:
Then, let's say we want to know the 'max' RSRP - we can do the following query:
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:
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:
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
57
process some radio parameters and Layer-3 messages in the database - it produces some
charts below:
58
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.
Install 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
Choose the extracted azqdata.db and you will see a table list of various parameters
59
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
60
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
Click "classify" and you will get an automatic range (and of course, you can manually set your custom
range here too).
61
Click on the button ( Change...), click on "simple marker" on the left then change ‘Border’ to transparent,
then click ok
62
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
63
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!
64
- 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:
65
- 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:
66
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
67
68
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 wont' contain the '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.
69
Example R (R programming language) program source code accessing
and generating RSRP, RSRQ plots from db
Note: 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
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:
70
71
Excel Report KPI and Parameter Definitions
Please refer to below google sheets document:
https://docs.google.com/spreadsheets/d/1ZDoNCErBaTMSk75G7KMsG-6NLk0wxK4Ya2B
Xbym2tSI/edit?usp=sharing
72
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 - Would appear upon enable of Settings > Enable Database Logging. This
is the sqlite3 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.
73
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
74
● Go to advanced option
75
● Choose “On – Anyone with the link” and save
76
● Login to AZQ dasrboard go to “Manage Phone” - > “Mamage Template & Theme”
77
● Check URL button
● Fill Label (template name) and template URL, please note template URL not include “#”
sign if tenplate 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”
78
● 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
79
80
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 which can
inturn 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:
81
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:
82
- 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:
83
- 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.
84
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’
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:
85
lte_volte_rtp_direction
lte_volte_rtp_timestamp
lte_volte_rtp_payload_size
86
RTP/RTCP Packet parameter verification
88
RTP delay during Handover calculation and verification
AZQ is used to describe radio network and for analyse its behavior. Some AZQ parameters are
directly from signalling or data packets but some are stats further derived from them. For
example, parameter lte_volte_rtp_delay_during_lte_handover is one from the latter. Two of
Network to UE packets IMS RTP SN and Payload are used to calculated in condition of event
lte_handover between the two. Below is the sequence of first
lte_volte_rtp_delay_during_lte_handover t hat reported value 59 ms at time 07:03:54.848.
1. At time 07:03:54.789, packet 0x1568 IMS RTP SN and Payload direction Network to UE
is acquired.
2. LTE Handover event
2.1. At time 07.03:54.795, papcket 0xB0C0 LTE RRC OTA Packet -- DL_DCCH /
RRCConnectionReconfiguration (that has handover target info inside so it is a
Handover Command) N etwork to UE is acquired.
2.2. At time 07.03.54.820, packet 0xB0C0 LTE RRC OTA Packet -- UL_DCCH /
RRCConnectionReconfigurationComplete Network to UE is acquired.
3. At time 07:03:54.848, packet 0x1568 IMS RTP SN and Payload Direction Network to UE
is acquired.
4. Calculate time difference of packet 1. And 3.
07:03:54.848 - 07:03:54.789 = 0.59
Therefore, this manual analysis confirms the value reported by
lte_volte_rtp_delay_during_lte_handover.
89
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).
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.
90
Generic VoLTE message flows (SIP + RRC)
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
91
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:
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).
92
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.
93
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)
94
Scatter_Point_Size : Size of the plot for each parameter
95
Example : figsize_max : 50 (Maximum)
96
Example : force_ant_bw : 90 (Maximum)
Example : force_ant_bw : Use from cell file (Default) : Note the space bar
97
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
98
Sequential plot : Plot most recent value on top
If false, will plot the best value on top if it occupies the same position
Use Satellite Map : Use satellite map as background (if set to true)
99
1 Spacebar: Blank
1 Spacebar : Blank
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
100
Grid_Color : Assigning color to grid
101
102
AZENQOS Analytics 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
- 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 1,000 plus
active phones: 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
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).
103
Software
- 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
- 21 ftp control
- 3500-3700 ftp data
- 80 http
- 443 https
- preferred but not required: (debug and secondary usage of each container...)
- 8000, 8001, 8002, 8003
Installation process
104
How to let users sync processed_azms to their GNU/Linux server
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
105