## 2 Velocity Estimation
### Doppler-Based Velocity  
The Doppler shift is the apparent frequency change of signals related to the relative motion between the observer and the source. In the GNSS context, satellites are the signal source and receivers are the observers. Doppler shift is exploited to estimate receiver velocity, with the satellite motion being known. The Doppler shift, \(D\), can be expressed as the variation in the receiver-satellite range, \(\dot{P}\), as follows:  
\[\dot{P}=-\lambda\cdot D \tag{1}\]  
where \(\lambda\) is the signal wavelength. \(\dot{P}\) is not exactly coincident with the receiver-satellite geometric range rate, \(\dot{d}\), owing to errors related to the receiver and satellite clock drift, troposphere, ionosphere, orbits, multipath, and noise. In addition, \(\dot{P}\) includes the receiver clock drift, \(\dot{b}_{u}\), which is unknown and needs to be estimated together with the receiver velocity. Satellite clock drift is monitored by the GNSS ground segment: it is accurately estimated and broadcasted to users through the navigation message. The remaining error sources are generally negligible. The measurement equation related to the Doppler shift can be expressed as  
\[\dot{p}=\dot{d}+\dot{b}_{u}+\varepsilon_{D} \tag{2}\]  
where the unmodeled and uncorrected error sources are lumped in \(\varepsilon_{D}\). \(\dot{d}\) is the projection of the relative motion between the satellite and the receiver in the receiver-satellite direction, that is,  
\[\dot{d}=(\underline{v}_{S}-\underline{v}_{u})\cdot\underline{\dot{e}} \tag{3}\]  
By replacing the expression of \(\dot{d}\) reported in (3) in measurement Equation (2) and rearranging the terms, the following equation is obtained:  
\[\dot{p}-\underline{v}_{S}\cdot\underline{\dot{e}}=-\underline{\dot{e}}\cdot \underline{v}_{u}+\dot{b}_{u}+\varepsilon_{D} \tag{4}\]  
Considering the components of \(\underline{\dot{e}}\), \(e_{x}=\frac{x_{c}-x_{u}}{d}\), \(e_{y}=\frac{y_{S}-y_{u}}{d}\), \(e_{z}=\frac{z_{c}-z_{u}}{d}\), the dot product in (4) can be developed, resulting in the following:  
\[ \begin{array}{l}\dot{p}-\left(y_{Sx}\frac{x_{S}-x_{u}}{d}+v_{Sy}\frac{y_{S}- y_{u}}{d}+v_{Sz}\frac{z_{c}-z_{u}}{d}\right)=\\ -\left(\frac{x_{S}-x_{u}}{d}v_{ux}+\frac{y_{S}-y_{u}}{d}v_{uy}+\frac{z_{c}-z_ {u}}{d}v_{uz}\right)+\dot{b}_{u}+\varepsilon_{D}\end{array}  \tag{5}\]  
In Equation (5), the left side contains only known entities; the satellite position and velocity are known thanks to the navigation message, and it is assumed that the receiver position has already been estimated. On the right side of (5), the unknowns of the problem, i.e., receiver velocity components and clock drift, are present. In the case of a single GNSS, at least four equations like (5), corresponding to as many simultaneous available measurements, are necessary for computing the unknowns. A system of \(m\) measurements like (5) can be written as  
\[\underline{y}_{D}=H_{D} \begin{bmatrix}v_{ux}\\ v_{uy}\\ v_{uz}\\ \dot{b}_{u}\end{bmatrix}  \tag{6}\]  
As can be seen from (5), the receiver position and the receiver clock bias have already been estimated. So, the receiver clock drift in (6) can be also calculated by differencing two consecutive clock biases and by dividing such difference by the time interval between the considered epochs. However, in this way, a noisier clock drift is obtained in comparison to the use of Doppler measurements. The Doppler measurements expressed in velocity units, corrected for the satellite motion, are stored in \(\underline{y}_{D}\). \(H_{D}\) is the design matrix whose \(i\)th row is \(\left[-\frac{x_{Qi}-x_{u}}{d_{i}}-\frac{y_{Xi}-y_{u}}{d_{i}}-\frac{z_{Xi}-z_{u }}{d_{i}}\quad 1\right]\) and contains information about the satellite geometry observed by the receiver. \( \begin{bmatrix}v_{ux}\\ v_{uy}\\ v_{uz}\\ \dot{b}_{u}\end{bmatrix} \) is the unknown vector, which can be resumed with \(\underline{v}_{\underline{U}}\) and contains the ECEF components of the user velocity and the receiver clock drift \(\dot{b}_{u}\).