Raw Doppler (RD) method
In the RD method, the doppler shift is calculated as the difference in the carrier phase frequency between the signal transmitted by a satellite and the signal received by a receiver and is thus related to the pseudorange rate. The RD method is quite suitable for velocity determination (Cheng et al., 2021; He et al., 2020), and the measurement model can be written as
$$\lambda D = \dot{\rho } + c\left( {{\text{d}}\dot{t}_{R} - {\text{d}}\dot{t}_{S} } \right) + \dot{I}_{\rho } + \dot{T}_{\rho } + \dot{\varepsilon }_{\rho }$$
(1)
where \(\lambda\) is the wavelength, \(D\) is the Doppler shift, \(\dot{\rho }\) is the pseudorange rate, \(c\) is the speed of light in vacuum, \({\text{d}}\dot{t}_{R}\) and \({\text{d}}\dot{t}_{S}\) are the satellite clock drift and receiver clock drift, respectively, \(\dot{I}_{\rho }\) and \(\dot{T}_{\rho }\) are the rates of change in the ionospheric and tropospheric delays, respectively, and \(\dot{\varepsilon }_{\rho }\) denotes all of the unmodeled error and observational noise. The pseudorange rate \(\dot{\rho }\) can be expressed as
$$\dot{\rho } = \frac{{{\varvec{X}}^{R} - {\varvec{X}}^{S} }}{\rho } \cdot \left( {{\varvec{V}}^{R} - {\varvec{V}}^{S} } \right)$$
(2)
where \({\varvec{X}}^{S}\) and \({\varvec{V}}^{S}\) denote the satellite position vector and velocity vector, respectively. \({\varvec{X}}^{R}\) and \({\varvec{V}}^{R}\) denote the receiver position vector and velocity vector, respectively; and \(\rho\) is the pseudorange between the satellite and the receiver.
The velocity and position of a satellite can be obtained from broadcast ephemeris, and the satellite clock drift is negligible due to the stability of the atomic clocks. The ionospheric delay and tropospheric delay vary slowly within a sufficiently small sampling interval, therefore we can also ignore the changes in a small-time interval (Cheng et al., 2021). Let \({\varvec{u}} = \left( {{\varvec{X}}^{R} - {\varvec{X}}^{S} } \right)/\rho\) and hence we can get the observation equation in vector form as
$$\left[ {\begin{array}{*{20}c} u & 1 \\ \end{array} } \right] \cdot \left[ {\begin{array}{*{20}c} {V^{R} } \\ {{\text{d}}\dot{t}_{R} } \\ \end{array} } \right] = {\varvec{u}} \cdot {\varvec{V}}^{S} + \lambda D + \dot{\varepsilon }_{\rho }$$
(3)
Then we can calculate the vehicle velocity \({\varvec{V}}^{R}\) in the Earth-Centered Earth-Fixed (ECEF) frame if more than four satellites are observed at the same time, as follows:
$$\left[ {\begin{array}{*{20}c} {u_{1} } & 1 \\ {u_{2} } & 1 \\ \vdots & \vdots \\ {u_{i} } & 1 \\ \end{array} } \right] \cdot \left[ {\begin{array}{*{20}c} {V^{R} } \\ {{\text{d}}\dot{t}_{R} } \\ \end{array} } \right] = \left[ {\begin{array}{*{20}c} {u_{1} \cdot V_{1}^{S} + \lambda D_{1} } \\ {u_{2} \cdot V_{2}^{S} + \lambda D_{2} } \\ \vdots \\ {u_{i} \cdot V_{i}^{S} + \lambda D_{i} } \\ \end{array} } \right] + \left[ {\begin{array}{*{20}c} {\dot{\varepsilon }_{\rho \left( 1 \right)} } \\ {\dot{\varepsilon }_{\rho \left( 2 \right)} } \\ \vdots \\ {\dot{\varepsilon }_{\rho \left( i \right)} } \\ \end{array} } \right]$$
(4)
Let \({\varvec{B}} = \left[ {\begin{array}{*{20}c} {u_{1} } & 1 \\ {u_{2} } & 1 \\ \vdots & \vdots \\ {u_{i} } & 1 \\ \end{array} } \right]\), \({\varvec{C}} = \left[ {\begin{array}{*{20}c} {u_{1} \cdot V_{1}^{S} + \lambda D_{1} } \\ {u_{2} \cdot V_{2}^{S} + \lambda D_{2} } \\ \vdots \\ {u_{i} \cdot V_{i}^{S} + \lambda D_{i} } \\ \end{array} } \right]\), and \(i\) is the number of satellites, then we can obtain the least squares solution as (Koch, 1999):
$$\left[ {\begin{array}{*{20}c} {V^{R} } \\ {{\text{d}}\dot{t}_{R} } \\ \end{array} } \right] = \left( {{\varvec{B}}^{{\text{T}}} {\varvec{B}}} \right)^{ - 1} {\varvec{B}}^{{\text{T}}} {\varvec{C}}$$
(5)
where \({\varvec{V}}^{R} = \left[ {V_{x}^{R} \, V_{y}^{R} \, V_{z}^{R} } \right]^{{\text{T}}}\). \(V_{x}^{R}\), \(V_{y}^{R}\), and \(V_{z}^{R}\) are vehicle velocity components calculated by the RD method.
Additionally, the use of multi-constellation observations will introduce multiple receiver clock drifts, so we can obtain the vehicle velocity if more than \(3 + n_{{{\text{Const}}}}\) satellites are observed, where \(n_{{{\text{Const}}}}\) denotes the number of constellations.
Time-Differenced Pseudorange (TDPR) method
The pseudorange measurement model can be written as:
$$\rho = r + c\left( {{\text{d}}t_{R} - {\text{d}}t_{S} } \right) + I_{\rho } + T_{\rho } + \varepsilon_{\rho }$$
(6)
where \(\rho\) is the measured pseudorange, \(r\) denotes the geometric range between a receiver and a satellite, \(c\) is the speed of light in vacuum, \({\text{d}}t_{R}\) and \({\text{d}}t_{S}\) are the receiver clock error and satellite clock error, respectively, \(I_{\rho }\) and \(T_{\rho }\) are the ionospheric and tropospheric delays, respectively, and \(\varepsilon_{\rho }\) denotes all of the unmodeled error and observational noise (Soon et al., 2008).
The satellite clock error \({\text{d}}t_{S}\), ionospheric delay \(I_{\rho }\), tropospheric delay \(T_{\rho }\), and other error \(\varepsilon_{\rho }\) are negligible since most of these errors vary slowly within a small sampling interval. Thus, we can obtain the time-differenced pseudorange as:
$${\Delta }\rho = \rho_{{t\left( {k + 1} \right)}} - \rho_{t\left( k \right)} = {\Delta }r + c{\Delta\text{d}}t_{R} + {\Delta }\varepsilon_{\rho }$$
(7)
where \({\Delta }\rho\) and \({\Delta }r\) denote the changes in the pseudorange and geometric range between the receiver and the satellite, and \({\Delta\text{d}}t_{R}\) denotes the receiver clock drift. According to the relationship between the positions of the satellite and the receiver, the change in the position of the receiver between two epochs can be expressed as (Sun et al., 2020):
$${\Delta }r = {\varvec{u}}_{{t\left( {k + 1} \right)}} \cdot \left( {{\varvec{X}}_{{t\left( {k + 1} \right)}}^{S} - {\varvec{X}}_{{t\left( {k + 1} \right)}}^{R} } \right) - {\varvec{u}}_{t\left( k \right)} \cdot \left( {{\varvec{X}}_{t\left( k \right)}^{S} - {\varvec{X}}_{t\left( k \right)}^{R} } \right)$$
(8)
where \({\varvec{u}}_{{t\left( {k + 1} \right)}}\) and \({\varvec{u}}_{t\left( k \right)}\) are the unit vector from the satellite to the receiver at epochs \(t\left( {k + 1} \right)\) and \(t\left( k \right)\), respectively. \({\varvec{X}}_{{t\left( {k + 1} \right)}}^{S}\) and \({\varvec{X}}_{t\left( k \right)}^{S}\) are the satellite position vectors at the two epochs, respectively. Similarly, \({\varvec{X}}_{{t\left( {k + 1} \right)}}^{R}\) and \({\varvec{X}}_{t\left( k \right)}^{R}\) are the receiver position vector at the two epochs, respectively. Considering the velocity of the satellite is much larger than that of the receiver, we can deem that \({\varvec{u}}_{{t\left( {k + 1} \right)}}\) is approximately equal to \({\varvec{u}}_{t\left( k \right)}\). Hence, we can obtain:
$$ \begin{aligned}{\Delta }r = &\,{\varvec{u}}_{{t\left( {k + 1} \right)}} \cdot \left( {{\varvec{X}}_{{t\left( {k + 1} \right)}}^{S} - {\varvec{X}}_{{t\left( {k + 1} \right)}}^{R} } \right) - {\varvec{u}}_{{t\left( {k + 1} \right)}} \\&\cdot \left( {{\varvec{X}}_{t\left( k \right)}^{S} - {\varvec{X}}_{t\left( k \right)}^{R} } \right) = {\varvec{u}}_{{t\left( {k + 1} \right)}} \cdot \left( {{\Delta }{\varvec{r}}^{S} - {\Delta }{\varvec{r}}^{R} } \right)\end{aligned} $$
(9)
where \({\Delta }{\varvec{r}}^{S}\) and \({\Delta }{\varvec{r}}^{R}\) are the geometric position changes of the satellite and the receiver between two epochs, respectively. According to (7) and (9), we can obtain:
$${\Delta }\rho = {\varvec{u}}_{{t\left( {k + 1} \right)}} \cdot \left( {{\Delta }{\varvec{r}}^{S} - {\Delta }{\varvec{r}}^{R} } \right) + c{\Delta\text{d}}t_{R} + {\Delta }\varepsilon_{\rho }$$
(10)
And the above equation can be rewritten in a vector form as:
$$\left[ {\begin{array}{*{20}c} {u_{{t\left( {k + 1} \right)}} } & { - 1} \\ \end{array} } \right] \cdot \left[ {\begin{array}{*{20}c} {{\Delta }r^{R} } \\ {c{\Delta\text{d}}t_{R} } \\ \end{array} } \right] = {\varvec{u}}_{{t\left( {k + 1} \right)}} \cdot {\Delta }{\varvec{r}}^{S} - {\Delta }\rho + {\Delta }\varepsilon_{\rho }$$
(11)
When using the observations of a single constellation, we can calculate the vehicle delta position \({\Delta }{\varvec{r}}^{R}\) in the ECEF frame if more than four satellites are observed, as follows:
$$ \begin{aligned}&\left[ {\begin{array}{cc} {\begin{array}{*{20}c} {u_{1}^{{t\left( {k + 1} \right)}} } \\ {u_{2}^{{t\left( {k + 1} \right)}} } \\ \end{array} } & {\begin{array}{*{20}c} { - 1} \\ { - 1} \\ \end{array} } \\ {\begin{array}{*{20}c} \vdots \\ {u_{i}^{{t\left( {k + 1} \right)}} } \\ \end{array} } & {\begin{array}{*{20}c} \vdots \\ { - 1} \\ \end{array} } \\ \end{array} } \right] \cdot \left[ {\begin{array}{*{20}c} {{\Delta }r^{R} } \\ {c{\Delta\text{d}}t_{R} } \\ \end{array} } \right] \\&= \left[ {\begin{array}{*{20}c} {\begin{array}{*{20}c} {u_{1}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{1}^{S} - {\Delta }\rho_{1} } \\ {u_{2}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{2}^{S} - {\Delta }\rho_{2} } \\ \end{array} } \\ {\begin{array}{*{20}c} \vdots \\ {u_{i}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{i}^{S} - {\Delta }\rho_{i} } \\ \end{array} } \\ \end{array} } \right] + \left[ {\begin{array}{*{20}c} {\begin{array}{*{20}c} {{\Delta }\varepsilon_{\rho \left( 1 \right)} } \\ {{\Delta }\varepsilon_{\rho \left( 2 \right)} } \\ \end{array} } \\ {\begin{array}{*{20}c} \vdots \\ {{\Delta }\varepsilon_{\rho \left( i \right)} } \\ \end{array} } \\ \end{array} } \right]\end{aligned} $$
(12)
When multi-constellation observations are used, the number of constellations \(n_{{{\text{Const}}}}\) is included in the elements of the receiver clock error \({\text{d}}t_{R}\). Then, the minimum number of observed satellites is \(3 + n_{{{\text{Const}}}}\).
Let \({\varvec{B}} = \left[ {\begin{array}{*{20}c} {\begin{array}{*{20}c} {u_{1}^{{t\left( {k + 1} \right)}} } \\ {u_{2}^{{t\left( {k + 1} \right)}} } \\ \end{array} } & {\begin{array}{*{20}c} { - 1} \\ { - 1} \\ \end{array} } \\ {\begin{array}{*{20}c} \vdots \\ {u_{i}^{{t\left( {k + 1} \right)}} } \\ \end{array} } & {\begin{array}{*{20}c} \vdots \\ { - 1} \\ \end{array} } \\ \end{array} } \right]\), \({\varvec{C}} = \left[ {\begin{array}{*{20}c} {\begin{array}{*{20}c} {u_{1}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{1}^{S} - {\Delta }\rho_{1} } \\ {u_{2}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{2}^{S} - {\Delta }\rho_{2} } \\ \end{array} } \\ {\begin{array}{*{20}c} \vdots \\ {u_{i}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{i}^{S} - {\Delta }\rho_{i} } \\ \end{array} } \\ \end{array} } \right]\), we can obtain the delta position of a vehicle between two epochs in the ECEF frame based on the least squares method:
$$\left[ {\begin{array}{*{20}c} {{\Delta }r^{R} } \\ {c{\Delta\text{d}}t_{R} } \\ \end{array} } \right] = \left( {{\varvec{B}}^{{\text{T}}} {\varvec{B}}} \right)^{ - 1} {\varvec{B}}^{{\text{T}}} {\mathbf{C}}$$
(13)
According to the delta position between epochs \(t\left( {k + 1} \right)\) and\(t\left( {k} \right)\), we can obtain the mean velocity between epochs \(t\left( {k + 1} \right)\) and \(t\left( k \right)\) calculated by \({\varvec{V}}^{R} = {\Delta }{\varvec{r}}^{R} /{\Delta }t\), and then treat \({\varvec{V}}^{R}\) as instantaneous velocity at epoch \(t\left( {k + 1} \right)\).
Time-Differenced Carrier Phase (TDCP) method
The carrier phase measurement model can be written as:
$$\Phi = \frac{1}{\lambda }\left( {r - I_{\Phi } + T_{\Phi } } \right) + \frac{c}{\lambda }\left( {{\text{d}}t_{R} - {\text{d}}t_{S} } \right) + N + \varepsilon_{\Phi }$$
(14)
where \(\Phi\) is the measured carrier phase in cycles, \(r\) denotes the geometric range between a receiver and a satellite, \(c\) is the speed of light in vacuum, \(\lambda\) is the wavelength of the carrier, \(I_{\Phi }\) and \(T_{\Phi }\) are the ionospheric delay and tropospheric delay, respectively, \({\text{d}}t_{R}\) and \({\text{d}}t_{S}\) are the satellite clock error and receiver clock error, respectively, \(N\) is the integer ambiguity, and \(\varepsilon_{\Phi }\) denotes all of the unmodeled error and observational noise. Since most of these errors vary slowly within a small sampling interval, we can ignore their changes. In addition, the integer ambiguity \(N\) remains unchanged if the carrier tracking loop maintains lock. Hence by differencing the observational equations at two epochs we have:
$${\Delta }\Phi = \Phi_{{t\left( {k + 1} \right)}} - \Phi_{t\left( k \right)} = \frac{1}{\lambda }{\Delta }r + \frac{c}{\lambda }{\Delta\text{d}}t_{R} + {\Delta }\varepsilon_{\Phi }$$
(15)
According to (9) and (15), we can obtain:
$${\Delta }\Phi = \frac{1}{\lambda }{\varvec{u}}_{{t\left( {k + 1} \right)}} \cdot \left( {{\Delta }{\varvec{r}}^{S} - {\Delta }{\varvec{r}}^{R} } \right) + \frac{c}{\lambda }{\Delta\text{d}}t_{R} + {\Delta }\varepsilon_{\Phi }$$
(16)
The above expression can be written in a vector form as:
$$\left[ {\begin{array}{*{20}c} {u_{{t\left( {k + 1} \right)}} } & { - 1} \\ \end{array} } \right] \cdot \left[ {\begin{array}{*{20}c} {{\Delta }r^{R} } \\ {c{\Delta\text{d}}t_{R} } \\ \end{array} } \right] = {\varvec{u}}_{{t\left( {k + 1} \right)}} \cdot {\Delta }{\varvec{r}}^{S} - \lambda {\Delta }\Phi + \lambda {\Delta }\varepsilon_{\Phi }$$
(17)
Similar to the TDPR method, we can calculate the vehicle delta position \({\Delta }{\varvec{r}}^{R}\) in the ECEF frame if more than \(3 + n_{{{\text{Const}}}}\) satellites are observed, and all the carrier tracking loops maintain lock, where \(n_{{{\text{Const}}}}\) is the number of constellations, as follows:
$$ \begin{aligned}&\left[ {\begin{array}{*{20}c} {\begin{array}{*{20}c} {u_{1}^{{t\left( {k + 1} \right)}} } \\ {u_{2}^{{t\left( {k + 1} \right)}} } \\ \end{array} } & {\begin{array}{*{20}c} { - 1} \\ { - 1} \\ \end{array} } \\ {\begin{array}{*{20}c} \vdots \\ {u_{i}^{{t\left( {k + 1} \right)}} } \\ \end{array} } & {\begin{array}{*{20}c} \vdots \\ { - 1} \\ \end{array} } \\ \end{array} } \right] \cdot \left[ {\begin{array}{*{20}c} {{\Delta }r^{R} } \\ {c{\Delta\text{d}}t_{R} } \\ \end{array} } \right]\\& = \left[ {\begin{array}{*{20}c} {\begin{array}{*{20}c} {u_{1}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{1}^{S} - \lambda {\Delta }\Phi_{1} } \\ {u_{2}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{2}^{S} - \lambda {\Delta }\Phi_{2} } \\ \end{array} } \\ {\begin{array}{*{20}c} \vdots \\ {u_{i}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{i}^{S} - \lambda {\Delta }\Phi_{i} } \\ \end{array} } \\ \end{array} } \right] + \lambda \left[ {\begin{array}{*{20}c} {\begin{array}{*{20}c} {{\Delta }\varepsilon_{\Phi \left( 1 \right)} } \\ {{\Delta }\varepsilon_{\Phi \left( 2 \right)} } \\ \end{array} } \\ {\begin{array}{*{20}c} \vdots \\ {{\Delta }\varepsilon_{\Phi \left( i \right)} } \\ \end{array} } \\ \end{array} } \right]\end{aligned} $$
(18)
Let \({\varvec{B}} = \left[ {\begin{array}{*{20}c} {\begin{array}{*{20}c} {u_{1}^{{t\left( {k + 1} \right)}} } \\ {u_{2}^{{t\left( {k + 1} \right)}} } \\ \end{array} } & {\begin{array}{*{20}c} { - 1} \\ { - 1} \\ \end{array} } \\ {\begin{array}{*{20}c} \vdots \\ {u_{i}^{{t\left( {k + 1} \right)}} } \\ \end{array} } & {\begin{array}{*{20}c} \vdots \\ { - 1} \\ \end{array} } \\ \end{array} } \right]\), \({\varvec{C}} = \left[ {\begin{array}{*{20}c} {\begin{array}{*{20}c} {u_{1}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{1}^{S} - \lambda {\Delta }\Phi_{1} } \\ {u_{2}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{2}^{S} - \lambda {\Delta }\Phi_{2} } \\ \end{array} } \\ {\begin{array}{*{20}c} \vdots \\ {u_{i}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{i}^{S} - \lambda {\Delta }\Phi_{i} } \\ \end{array} } \\ \end{array} } \right]\), we can obtain:
$$\left[ {\begin{array}{*{20}c} {{\Delta }r^{R} } \\ {c{\Delta\text{d}}t_{R} } \\ \end{array} } \right] = \left( {{\varvec{B}}^{{\text{T}}} {\varvec{B}}} \right)^{ - 1} {\varvec{B}}^{{\text{T}}} {\varvec{C}}$$
(19)
According to the delta position \({\Delta }{\varvec{r}}^{R}\), we can get the approximate vehicle velocity at epoch \(t\left( {k + 1} \right)\) calculated by \({\varvec{V}}^{R} = {\Delta }{\varvec{r}}^{R} /{\Delta }t\) (Farrell, 2001; Wendel et al., 2006).
Double-Differenced Carrier Phase (DDCP) method
The DDCP method represents the difference in the carrier phase between epochs and between satellites successively. According to (16), after determining the difference between satellite \(P\) and satellite \(Q\) to eliminate the inconsistency of the receiver clock errors between epochs, we can obtain:
$$\lambda \nabla {\Delta }\Phi_{PQ} = \left( {{\varvec{u}}_{Q}^{{t\left( {k + 1} \right)}} - {\varvec{u}}_{P}^{{t\left( {k + 1} \right)}} } \right) \cdot {\Delta }{\varvec{r}}^{R} + {\varvec{u}}_{P}^{{t\left( {k + 1} \right)}} \cdot {\Delta }{\varvec{r}}^{P} - {\varvec{u}}_{Q}^{{t\left( {k + 1} \right)}} \cdot {\Delta }{\varvec{r}}^{Q} + \lambda \nabla {\Delta }\varepsilon_{\Phi }$$
(20)
where \(\nabla {\Delta }\Phi_{PQ} = {\Delta }\Phi_{P} - {\Delta }\Phi_{Q}\) with \({\Delta }\Phi_{P}\) and \({\Delta }\Phi_{Q}\) being the delta carrier phases of satellite \(P\) and satellite \(Q\) between two adjacent epochs, respectively.
The above expression can be written in a vector form as:
$$\left[ {\begin{array}{*{20}c} {\left( {u_{Q}^{{t\left( {k + 1} \right)}} - u_{P}^{{t\left( {k + 1} \right)}} } \right)} & { - 1} \\ \end{array} } \right] \cdot {\Delta }{\varvec{r}}^{R} = {\varvec{u}}_{Q}^{{t\left( {k + 1} \right)}} \cdot {\Delta }{\varvec{r}}^{Q} - {\varvec{u}}_{P}^{{t\left( {k + 1} \right)}} \cdot {\Delta }{\varvec{r}}^{P} + \lambda \nabla {\Delta }\Phi_{PQ} + \lambda \nabla {\Delta }\varepsilon_{\Phi }$$
(21)
where \({\Delta }{\varvec{r}}^{P}\) and \({\Delta }{\varvec{r}}^{Q}\) denote the delta satellite position between epoch \(t\left( {k + 1} \right)\) and \(t\left( k \right)\), \({\varvec{u}}_{P}^{{t\left( {k + 1} \right)}}\) and \({\varvec{u}}_{Q}^{{t\left( {k + 1} \right)}}\) are the unit vectors from satellites \(P\) and \(Q\) to the receiver at epoch \(t\left( {k + 1} \right)\), respectively.
To determine the vehicle delta position \({\Delta }{\varvec{r}}^{R}\), we can calculate \({\Delta }{\varvec{r}}^{R}\) in the ECEF frame if more than \(3 + n_{{{\text{Const}}}}\) satellites are observed and all the carrier tracking loops maintain lock, where \(n_{{{\text{Const}}}}\) is the number of constellations, as follows:
$$ \begin{aligned}&\left[ {\begin{array}{*{20}c} {\left( {u_{Q\left( 1 \right)}^{{t\left( {k + 1} \right)}} - u_{P\left( 1 \right)}^{{t\left( {k + 1} \right)}} } \right)} & { - 1} \\ {\left( {u_{Q\left( 2 \right)}^{{t\left( {k + 1} \right)}} - u_{P\left( 2 \right)}^{{t\left( {k + 1} \right)}} } \right)} & { - 1} \\ \vdots & \vdots \\ {\left( {u_{Q\left( i \right)}^{{t\left( {k + 1} \right)}} - u_{P\left( i \right)}^{{t\left( {k + 1} \right)}} } \right)} & { - 1} \\ \end{array} } \right] \cdot \Delta {\varvec{r}}^{R} \\ &= \left[ {\begin{array}{*{20}c} {\begin{array}{*{20}c} {u_{Q\left( 1 \right)}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{1}^{Q} - u_{P\left( 1 \right)}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{1}^{P} + \lambda \nabla {\Delta }\Phi_{1}^{PQ} } \\ {u_{Q\left( 2 \right)}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{2}^{Q} - u_{P\left( 2 \right)}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{2}^{P} + \lambda \nabla {\Delta }\Phi_{2}^{PQ} } \\ \end{array} } \\ {\begin{array}{*{20}c} \vdots \\ {u_{Q\left( i \right)}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{i}^{Q} - u_{P\left( i \right)}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{i}^{P} + \lambda \nabla {\Delta }\Phi_{i}^{PQ} } \\ \end{array} } \\ \end{array} } \right]\\&\quad + \lambda \left[ {\begin{array}{*{20}c} {\begin{array}{*{20}c} {\nabla {\Delta }\varepsilon_{\Phi \left( 1 \right)} } \\ {\nabla {\Delta }\varepsilon_{\Phi \left( 2 \right)} } \\ \end{array} } \\ {\begin{array}{*{20}c} \vdots \\ {\nabla {\Delta }\varepsilon_{\Phi \left( i \right)} } \\ \end{array} } \\ \end{array} } \right]\end{aligned} $$
(22)
Let \({\varvec{B}} = \left[ {\begin{array}{*{20}c} {\left( {u_{Q\left( 1 \right)}^{{t\left( {k + 1} \right)}} - u_{P\left( 1 \right)}^{{t\left( {k + 1} \right)}} } \right)} & { - 1} \\ {\left( {u_{Q\left( 2 \right)}^{{t\left( {k + 1} \right)}} - u_{P\left( 2 \right)}^{{t\left( {k + 1} \right)}} } \right)} & { - 1} \\ \vdots & \vdots \\ {\left( {u_{Q\left( i \right)}^{{t\left( {k + 1} \right)}} - u_{P\left( i \right)}^{{t\left( {k + 1} \right)}} } \right)} & { - 1} \\ \end{array} } \right]\), \({\varvec{C}} = \left[ {\begin{array}{*{20}c} {\begin{array}{*{20}c} {u_{Q\left( 1 \right)}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{1}^{Q} - u_{P\left( 1 \right)}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{1}^{P} + \lambda \nabla {\Delta }\Phi_{1}^{PQ} } \\ {u_{Q\left( 2 \right)}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{2}^{Q} - u_{P\left( 2 \right)}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{2}^{P} + \lambda \nabla {\Delta }\Phi_{2}^{PQ} } \\ \end{array} } \\ {\begin{array}{*{20}c} \vdots \\ {u_{Q\left( i \right)}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{i}^{Q} - u_{P\left( i \right)}^{{t\left( {k + 1} \right)}} \cdot {\Delta }r_{i}^{P} + \lambda \nabla {\Delta }\Phi_{i}^{PQ} } \\ \end{array} } \\ \end{array} } \right]\), we have:
$${\Delta }{\varvec{r}}^{R} = \left( {{\varvec{B}}^{{\text{T}}} {\varvec{B}}} \right)^{ - 1} {\varvec{B}}^{{\text{T}}} {\varvec{C}}$$
(23)
The vehicle velocity at epoch \(t\left( {k + 1} \right)\) can then be calculated by \({\varvec{V}}^{R} = {\Delta }{\varvec{r}}^{R} /{\Delta }t\). The DDCP method introduces the parameter of double-difference carrier phase ambiguity (Jin et al., 2020), which can be used to evaluate the reliability of the calculated velocity by checking if it is fixed.