## 3 Precise Positioning Using Uncombined PPP (UPPP) Algorithm
### Analysis of GNSS Observations from Different Logging Apps
#### 4.1.1 Inconsistency between Pseudorange, Carrier-Phase and Doppler Observations  
GnssLogger app and Geo++ RINEX both are capable of providing GNSS observables in RINEX format. Having RINEX format available allows the users to post-process the logged data, improving the accuracy. However, different logging apps have different performance which affects the positioning results as well. In this section, we first investigate outputs of the three RINEX files, (1) RINEX file saved by GNSSLogger App, (2) RINEX file logged by Geo++ RINEX Logger App and (3) RINEX file generated by our convertor toolbox which converts the CSV file to the RINEX format. To this end, the Xiaomi Mi8, Samsung S20 and Google Pixel 5 smartphones were put on the top of the geodetic pillars with known coordinates on the rooftop of the Civil Engineering building, University of Calgary, Calgary, Canada. The first two devices used the Broadcom chipset, while the last one used the Qualcomm chipset. All three devices were dual-frequency smartphones supporting L5/E5a frequencies for GPS and Galileo, respectively. The dataset was collected on 23 November 2022 with a sampling interval of 1 sec for about 1:30 h. For further investigation and presenting results, GPS PRN 01, Galileo PRN 31 and GLONASS PRN 17 were selected. The reason for selecting these PRNs is their better availability and continuity during the observation period. We should also mention that the same results were observed for other PRNs. To have a better view, the first 900 epochs (15 min) were used for plotting the figures. Table 2 also provides a brief summary of the experiment. Figure 1 provides the C/N0 measurements of the selected PRNs on the L1 frequency for the Xiaomi Mi8, Google Pixel 5 and Samsung S20, from left to right, respectively. The plot reveals that the three smartphones did not have similar performances in terms of their C/N0 records, even though the data have been collected in the same environment at the same time. As can be seen, the C/N0 records of the Xiaomi Mi8 and Samsung S20 are smoother than the ones recorded by the Google Pixel 5. \begin{table}
\begin{tabular}{l l} \hline Devices & Xiaomi Mi8, Google Pixel 5 and Samsung S20 \\ \hline PRNs & PRN 01 (GPS), 17 (GLONASS), 31 (Galileo) \\ \hline Mode & Static \\ \hline App logger & Geo++ RINEX logger (v2.1.6), GnssLogger (v3.0.5.6) \\ \hline Date & 23 November, 2022 \\ \hline Duration & \textasci{}1 h 30 min \\ \hline Sampling interval & 1 sec \\ \hline \end{tabular}
\end{table} 
Table 2: GNSS data information. To investigate the quality of GNSS observations from the three RINEX files, different indicators are selected and reported in Table 3. They are as follows:  
* First-order differentiation of pseudorange and carrier-phase versus Doppler observations: The first-order differentiation of GNSS pseudorange and carrier-phase observations are obtained by calculating differences between adjacent elements of GNSS pseudorange and carrier-phase observations divided by the sampling interval (i.e., \(diff(\text{P}^{s}_{r,j})/T\) and \(diff(\Phi^{s}_{r,j})/T\) where \(T\) is the sampling interval which is 1 s here). They then compare to the Doppler observations (\(-\lambda_{j}D^{s}_{r,j}\)). The first-order differences of pseudorange and carrier-phase observations have to follow the same trend of the Doppler observations in theory;
* Geometry-free combination (Code-minus-phase: CMP): It cancel the geometric part of the measurement (i.e., geometric range, receiver and satellite clock and tropospheric delay), leaving ambiguity, ionosphere term, multipath and noise. This combination can also be used to detect cycle-slips in the carrier-phase observations as a cycle-slip appears as a jump in the CMP plot;
* Carrier-phase predicted error: The predicted carrier-phase in cycle can be obtained using the discrete Doppler measurements as \(\hat{\varphi}^{s}_{r,j}(k+1)=\varphi^{s}_{r,j}(k)+\frac{D^{s}_{r,j}(k+1)+D^{s }_{r,j}(k)}{2}T\).