# The Implementation of Precise Point Positioning (PPP): A Comprehensive Review
## 2 Error Sources in PPP
### Antenna Phase Center Effects
#### 2.6.1 Satellite APC Errors  
The PCO of a satellite is defined as the distance between its CoM and the mean APC, expressed in the satellite body-fixed frame. The IGS definition for this frame is that the coordinate system's origin is at the satellite's CoM, the z-axis is parallel to the antenna boresight, the y-axis is aligned with the rotation axis of the solar panels, and the x-axis completes the right-handed system [57].  
During nominal operation conditions, GNSS satellites employ the \"yaw-steering\" attitude control mode, which necessitates continuous rotation around the z- and y-axes, as shown in Figure 2. Alternative attitude control modes are deployed during eclipse periods or for low angular values of \(\beta\) (defined in Figure 2); nonetheless, these modes are beyond the scope of this study. The unit vectors of the satellite body frame \((\mathbf{s_{\theta}},\mathbf{\hat{y_{s}}},\mathbf{\hat{z_{s}}})\) in the yaw-steering mode can be expressed in the Earth-Centered Earth-Fixed (ECEF) as follows [41; 57]\[\mathbf{\hat{z}_{s}} =-\frac{\mathbf{r_{s_{CM}}}}{\|\mathbf{r_{s_{CM}}}\|} \tag{7}\] \[\mathbf{\hat{y}_{s}} =\frac{\mathbf{\hat{z}_{s}}\times\mathbf{e_{s}}}{\|\mathbf{z_{s}} \times\mathbf{e_{s}}\|}\] (8) \[\mathbf{\hat{x}_{s}} =\mathbf{\hat{y}_{s}}\times\mathbf{\hat{z}_{s}} \tag{9}\]  
where \(\mathbf{e_{s}}=\frac{\mathbf{R_{\bigodot}}-\mathbf{r_{s_{CM}}}}{\|\mathbf{R_ {\bigodot}}-\mathbf{r_{s_{CM}}}\|}\), \(\mathbf{r_{s_{CM}}}\) is the CoM satellite position vector, and \(\mathbf{R_{\bigodot}}\) represents the sun's position vector, both in the ECEF frame. The sun's position can be calculated from the planetary ephemerides [58] or simply from analytical formulas [59].  
If the satellite position is expressed in the ECEF frame, the PCO corrections must also be transformed to the ECEF frame and subsequently added to the satellite position as follows:  
\[\mathbf{PCO^{s}_{ECEF}} =\big{[}\mathbf{\hat{x}_{s}}\quad\mathbf{\hat{y}_{s}}\quad \mathbf{\hat{z}_{s}}\big{]}\mathbf{PCO^{s}} \tag{10}\] \[\mathbf{r_{s}} =\mathbf{r_{s_{CM}}}+\mathbf{PCO^{s}_{ECEF}} \tag{11}\]  
where \(\mathbf{PCO^{s}}\) is the satellite PCO vector in the satellite body frame (from the ANTEX file), \(\mathbf{PCO^{s}_{ECEF}}\) contains the offset values in the ECEF frame, and \(\mathbf{r_{s}}\) represents the corrected satellite position vector at the APC. The magnitude of the satellite offset vector varies between 0.5 and 3 m [7], which may induce centimeter-level positioning errors.  
The satellite PCV refers to the change in the APC as a function of the satellite nadir angle. IGS provides calibrated satellite PCV values in its ANTEX file for specific nadir angle ranges, up to 17\({}^{\circ}\) for GPS and up to 15\({}^{\circ}\) for GLONASS with steps of 1\({}^{\circ}\). For Galileo, the range is up to 20\({}^{\circ}\) with a step of 0.5\({}^{\circ}\), while there are no PCVs for BDS satellites so far. The relevant PCV values are obtained through linear interpolation at the calculated satellite nadir angle. The nadir angle \(\theta\) is defined as the angle between the direction from the satellite toward the center of the earth and the Line-of-Sight (LOS) vector between the satellite and receiver. It can be calculated as  
\[\theta=\arccos(-\mathbf{u^{s}_{r}}\odot-\mathbf{\hat{z}_{s}})=\arccos( \mathbf{u^{s}_{r}}\odot\mathbf{\hat{z}_{s}}) \tag{12}\]  
where \(\mathbf{u^{s}_{r}}\) is the LOS unit vector from the receiver to the satellite in the ECEF frame and \(\odot\) is the dot-product operator.  
Figure 2: Yaw-steering mode of GNSS satellite orientation (after [57]).  
After interpolation, the derived PCV values are subtracted from both the code and carrier-phase observations. Nonetheless, the satellite PCVs are typically within the millimeter range and, thus, influence only those applications demanding millimeter-level accuracy.