Cell phone high-precision navigation exploration (technical article)-Satellite Map and Rinex Logger
By Nander Yang,
Since the release of Xiaomi 8 with dual-band positioning module, major domestic manufacturers have followed up (personally, in fact, just Broadcom first produced dual-band chip, the cell phone manufacturers who first released was meaningless at all), many people are studying the effect of this cell phone dual-band positioning module. In this case, let's make an APP to analyze his data and convert it into international Rinex data, so that experts and software in the field of high precision can analyze it.
The whole development and functions are as follows:
① To make up a Satellite Map from the NMEA data received by the phone.
② Find a professional document to transform the RAW data into Rinex's four elements: carrier, pseudorange, signal-to-noise ratio, Doppler.
③ According to the Rinex 3.03 documentation, add a Rinex file hearder and package each Epoch data. In order to storge a RInex3.03 file for your reference.
First , MainActivity is the main interface, a total of three sub-page Fragment, the focus is the star map page and Rinex data page, Fragment page just for interface and data display, data solving and refining are in the internal class GNSSContainer.
The main character GNSSContainer appears, it mainly consists of two modules, LocationListener and GNSSMeasurementEvent, they are both Android system classes and interfaces, I took from the former to the 5 elements needed for the satellite map: satellite type, satellite number, altitude angle, azimuth angle, SNR. From the latter, I fetch the raw GNSS data from the phone to prepare for the conversion to Rinex data later.
In fact, this part is relatively simple, look at the following screenshot. The focus on this part is the implementation of the LocationListener interface. Let's look directly at the following code and online information is also quite a lot.
This step is the first core point, first we have to get the GNSS raw data from the Android system to the phone, this part of the Android team has written a detailed manual. There are mainly three sections, the first one is a User Manual , as follows:
An open source APP, GNSS Logger, you can use this APP to save your phone's GNSS raw data and NMEA and other data, of course, the most critical is to look at the source code written by Google, and also Ctrl + C, Ctrl + V for your faster development.
The last one is the open source windows side of the analysis software GNSS Analysis, you can save the GNSS Logger file directly to this software to parse, It will be based on different data analysis out of 9 (if no memory error) chart to you, his analysis and drawing code is also open source, but use Matlab to write, this part will be studied in the next future.
I will package all these documents and applications mentioned above as attachments, so you can download them at your leisure. According to the above information, we can already get the raw data we want, next is another core point, raw data -> Rinex Four elements.
Actually, the data output by Android system is very raw, which is quite different from the raw data output by Trimble, Novatel, Septentrio, etc..The data is shown below for your reference.
OK, go on. From the above code, we can see that the SNR is ready-made and available, the pseudorange and carrier method are also mentioned in the above article given by Android, it may be a methodology so still not enough for a layman like me, I searched for a lot of materials at that time, my boss Geososo gave a GNSS raw data to Rinex2.11 source code to me, which is written by python. I combined with it to write a preliminary version. it is introduced in the following figure, the source code is also attached to offer.
But this source code has a defect, it only has a single frequency, and some of his methods are slightly different from the Android release information.
As a result, I finally found a tutorial published by the GSA (European GNSS Agency) at last, as shown in the figure.
The steps of the conversion have been written in detail, combined with the above Rinex2.11 python source code, the dual-frequency issue and some pseudorange issues have been solved, the latest and final Rinex data as follows (the phone does not retain decimals, my phone is Huawei's P30 pro).
Finally, the code wrote by foreign friend is Rinex2.11 python code, I changed to Rinex3.03 (multi-frequency) python code on his basis. But because it involves the company's projects and cooperation, I can't release it direcy now, but if you have interest or questions, you can contact me by wechat, or email (email@example.com) .
Well, come to the last step, write all the data into a file as the format of Rinex3.03, in fact, this step is also very critical, but I can not go into detail, already 3700 words. If go on, I need to write another article. If you are interested in it ,just contact me privately. Rinex 3.03 final chart is attached, APP installation package is attached, that's all. See you next time.
Service is still okay
An experienced programmer and engineer with a passion for GNSS solution and opensource.
- Nander Yang -
BD product manager
All the documents are ready for your reference. Don't hesitate to download right now.