0.5.0
Loading...
Searching...
No Matches
Real-Time Kinematics Positioning

Observation equations

Single GNSS Observation Equation

\begin{equation}\begin{aligned}
{ p_{r,j}^s}
         &= { \rho_r^s}
          + {\delta\rho_{ie,r}^s}
          + { T_r^s}
          + { \mu_j^S I_r^s}
          + c \left[ { dt_r}
                   - { dt^s}
                   + { dt_{ISB}^S}
                   + { \delta t^{rel}_{stc}} - { \delta t^{rel}_{clk}}
                   + { d_{r,j}^S}
                   - { d_{j}^s}
                   + { \Delta d_{r,j}^s}
              \right]
          + { \xi_{r,j}^s}
          + { e_{r,j}^s} \\
{ \varphi_{r,j}^s}
         &= { \rho_r^s}
          + {\delta\rho_{ie,r}^s}
          + { T_r^s}
          - { \mu_j^S I_r^s}
          + c \left[ { dt_r}
                   - { dt^s}
                   + { dt_{ISB}^S}
                   + { \delta t^{rel}_{stc}} - { \delta t^{rel}_{clk}}
                   + { \delta_{r,j}^S}
                   - { \delta_{j}^s}
                   + { \Delta \delta_{r,j}^s}
              \right]
          + { \zeta_{r,j}^s}
          + { \epsilon_{r,j}^s}
          + { \lambda_j^S}
                ({ \omega_{r}^s }
                 + { N_{r,j}^s}) \\
{ \dotup{p}_r^s} &= {{\mathbf{u}_{r}^{s}}^T}
                               [ {\mathbf{v}^s}
                                - {\mathbf{v}_r} ]
                       - {\delta\dotup{\rho}_{ie,r}^s}
                       + { \dotup{T}_r^s}
                       - { \mu_j^S \dotup{I}_r^s}
                       + c [{d\dotup{t}_r}
                            - {d\dotup{t}^s }
                            + {d\dotup{t}_{ISB}^S}
                            + { \delta f^{rel}_{clk}}]
\end{aligned}
\end{equation}

\begin{equation*}\begin{array}{clcl}
  { p_{r,j}^s}                    & \text{Code/pseudorange observable [m]}              & { \varphi_{r,j}^s}              & \text{Carrier-phase observable [m]} \\
  { \dotup{p}_r^s}                  & \text{Pseudorange rate (doppler) measurement [m/s]} &  \\
  { \rho_r^s}                   & \text{Receiver-satellite range [m]}                 & {\mathbf{u}_{r}^s}            & \text{Line-of-Sight vector} \\
  {\delta\rho_{ie,r}^s}          & \text{Earth rotation/Sagnac correction [m]}         & {\delta\dotup{\rho}_{ie,r}^s}    & \text{Earth rotation/Sagnac rate correction [m/s]} \\
  {\mathbf{r}^s}             & \text{Satellite position [m]}                       & {\mathbf{v}^s}             & \text{Satellite velocity [m/s]} \\
  {\mathbf{r}_r}           & \text{Receiver position [m]}                        & {\mathbf{v}_r}           & \text{Receiver velocity [m/s]} \\
  { I_r^s}                      & \text{Ionospheric delay [m]}                        & { \mu_j^S}                    & \text{Ionospheric coefficient} \\
  { T_r^s}                        & \text{Tropospheric delay [m]}                       &  \\
  { dt_r}                          & \text{Receiver clock error [s]}                     & {d\dotup{t}_r}                     & \text{Receiver clock drift [s/s]} \\
  { dt^s}                   & \text{Satellite clock error [s]}                    & {d\dotup{t}^s}              & \text{Satellite clock drift [s/s]} \\
  { dt_{ISB}^S}             & \text{Clock inter-system bias [s]}                  & {d\dotup{t}_{ISB}^S}        & \text{Inter-system bias clock drift [s/s]} \\
  { \delta t^{rel}_{clk}} & \text{Relativistic clock correction [s]}            & { \delta t^{rel}_{stc}} & \text{Relativistic signal delay due to space-time curvature [s]}\\
                                              &                                                     & { \delta f^{rel}_{clk}} & \text{Frequency deviation due to relativist effects [-]}\\
  { d_{r,j}^S}                    & \text{Receiver code hardware bias [s]}              & { \delta_{r,j}^S}               & \text{Receiver phase hardware bias [s]} \\
  { d_{j}^s}                & \text{Satellite code hardware bias [s]}             & { \delta_{j}^s}           & \text{Satellite phase hardware bias [s]} \\
  { \Delta d_{r,j}^s}            & \text{Code interchannel bias [s] (FDMA only)}       & { \Delta \delta_{r,j}^s}       & \text{Phase interchannel bias [s] (FDMA only)} \\
  { \xi_{r,j}^s}                 & \text{Phase-center offset \& variation [m]}         & { \zeta_{r,j}^s}               & \text{Phase-center offset \& variation [m]} \\
  { e_{r,j}^s}            & \text{Residual errors (noise, mulitpath, NLOS) [m]} & { \epsilon_{r,j}^s}     & \text{Residual errors (noise, mulitpath, NLOS) [m]} \\
  { \lambda_j^S}                  & \text{Wavelength [m]}                               & { N_{r,j}^s}                   & \text{Carrier-phase ambiguity [cyc]} \\
  { \omega_{r}^s }      & \text{Phase wind-up error [m]} \\
\end{array}
\end{equation*}

See

  • [48] SpringerHandbookGNSS2017, p.606
  • [35] Morton2020Vol1, p. 483
  • [18] Groves2013, p. 443

Single Difference

  • Base receiver $ b $, rover receiver $ r $

    \begin{equation}\begin{aligned}
{ p_{br}^s}
        &= { p_{r}^s} - { p_{b}^s}
        &&= \overbrace{{ \rho_r^s} - { \rho_b^s}}^{ \rho_{br}^s}
          + \overbrace{{ \delta\rho_{ie,r}^s} - { \delta\rho_{ie,b}^s}}^{ \delta\rho_{ie,br}^s}
          + \overbrace{{ T_r^s} - { T_b^s}}^{ T_{br}^s}
          + {\mu_j^S} (\overbrace{{ I_r^s} - { I_b^s}}^{ I_{br}^s})
          + c\ [ \overbrace{{ dt_r} - { dt_b}}^{ dt_{br}}
                   - \overbrace{({ dt^s} - { dt^s})}^{= 0}
                   + \overbrace{{ dt_{ISB}^S} - { dt_{ISB}^S}}^{= 0}
                   + \overbrace{{ \delta t^{rel,s}_{stc,r}} - { \delta t^{rel,s}_{stc,b}}}^{ \delta t^{rel,s}_{stc,br}}
                   - \overbrace{({ \delta t^{rel,s}_{clk}} - { \delta t^{rel,s}_{clk}})}^{= 0}
              ]\\
          & &&\quad\, + c\ [ \underbrace{{ d_{r,j}^S} - { d_{b,j}^S}}_{ d_{br,j}^S}
                   - \underbrace{({ d_{j}^s} - { d_{j}^s})}_{= 0}
                   + \underbrace{{ \Delta d_{r,j}^s} - { \Delta d_{b,j}^s}}_{ \Delta d_{br,j}^s}
              ]
          + \underbrace{{ \xi_{r,j}^s} - { \xi_{b,j}^s}}_{ \xi_{br,j}^s}
          + \underbrace{{ e_{r,j}^s} - { e_{b,j}^s}}_{ e_{br,j}^s} \\
{ \varphi_{br}^s}
         &= { \varphi_{r}^s} - { \varphi_{b}^s}
         &&= \overbrace{{ \rho_r^s} - { \rho_b^s}}^{ \rho_{br}^s}
          + \overbrace{{ \delta\rho_{ie,r}^s} - { \delta\rho_{ie,b}^s}}^{ \delta\rho_{ie,br}^s}
          + \overbrace{{ T_r^s} - { T_b^s}}^{ T_{br}^s}
          - {\mu_j^S} (\overbrace{{ I_r^s} - { I_b^s}}^{ I_{br}^s})
          + c [ \overbrace{{ dt_r} - { dt_b}}^{ dt_{br}}
                   - \overbrace{({ dt^s} - { dt^s})}^{= 0}
                   + \overbrace{{ dt_{ISB}^S} - { dt_{ISB}^S}}^{= 0}
                   + \overbrace{{ \delta t^{rel,s}_{stc,r}} - { \delta t^{rel,s}_{stc,b}}}^{ \delta t^{rel,s}_{stc,br}}
                   - \overbrace{({ \delta t^{rel,s}_{clk}} - { \delta t^{rel,s}_{clk}})}^{= 0}
              ]\\
          & &&\quad\, + c [\underbrace{{ \delta_{r,j}^S} - { \delta_{b,j}^S}}_{ \delta_{br,j}^S}
                      - \underbrace{({ \delta_{j}^s} - { \delta_{j}^s})}_{= 0}
                      + \underbrace{{ \Delta \delta_{r,j}^s} - { \Delta \delta_{b,j}^s}}_{ \Delta \delta_{br,j}^s}
              ]
          + \underbrace{{ \zeta_{r,j}^s} - { \zeta_{b,j}^s}}_{ \zeta_{br,j}^s}
          + \underbrace{{ \epsilon_{r,j}^s} - { \epsilon_{b,j}^s}}_{ \epsilon_{br,j}^s}
          + { \lambda_j^S}
                (\underbrace{{ N_{r,j}^s} - { N_{b,j}^s}}_{ N_{br}^s}
          + \underbrace{{ \omega_{r}^s } - { \omega_{b}^s }}_{ \omega_{br}^s }) \\
{ \dotup{p}_{br}^s}
         &= { \dotup{p}_{r}^s} - { \dotup{p}_{b}^s}
         &&= {{\mathbf{u}_{r}^{s}}^T} [{\mathbf{v}^s} - {\mathbf{v}_r} ]
             - {{\mathbf{u}_{b}^{s}}^T} {\mathbf{v}^s}
             - \overbrace{({\delta\dotup{\rho}_{ie,r}^s} - {\delta\dotup{\rho}_{ie,b}^s})}^{\delta\dotup{\rho}_{ie,br}^s}
             + \overbrace{{ \dotup{T}_r^s} - { \dotup{T}_b^s}}^{\approx 0}
             + {\mu_j^S} (\overbrace{{ \dotup{I}_r^s} - { \dotup{I}_b^s}}^{\approx 0})
             + c [\overbrace{{d\dotup{t}_r} - {d\dotup{t}_b}}^{d\dotup{t}_{br}}
                  - \overbrace{({d\dotup{t}^s } - {d\dotup{t}^s })}^{= 0}
                  + \overbrace{{d\dotup{t}_{ISB}^S} - {d\dotup{t}_{ISB}^S}}^{= 0}
                  + \overbrace{{ \delta f^{rel,s}_{clk}} - { \delta f^{rel,s}_{clk}}}^{= 0}]
\end{aligned}
\end{equation}

    \begin{equation}\begin{aligned}
{ p_{br}^s} &= { \rho_{br}^s}
                        + { \delta\rho_{ie,br}^s}
                        + { T_{br}^s}
                        + {\mu_j^S} { I_{br}^s}
                        + c \left[ { dt_{br}}
                                 + { \delta t^{rel,s}_{stc,br}}
                                 + { d_{br,j}^S}
                                 + { \Delta d_{br,j}^s}
                            \right]
                        + { \xi_{br,j}^s}
                        + { e_{br,j}^s} \\
{ \varphi_{br}^s} &= { \rho_{br}^s}
                              + { \delta\rho_{ie,br}^s}
                              + { T_{br}^s}
                              - {\mu_j^S} { I_{br}^s}
                              + c \left[ { dt_{br}}
                                       + { \delta t^{rel,s}_{stc,br}}
                                       + { \delta_{br,j}^S}
                                       + { \Delta \delta_{br,j}^s}
                                  \right]
                              + { \zeta_{br,j}^s}
                              + { \epsilon_{br,j}^s}
                              + { \lambda_j^S}
                                ({ N_{br}^s}
                                 + { \omega_{br}^s }) \\
{ d_{br}^s} &= {{\mathbf{u}_{r}^{s}}^T} [{\mathbf{v}^s} - {\mathbf{v}_r} ]
                           - {{\mathbf{u}_{b}^{s}}^T} {\mathbf{v}^s}
                           - {\delta\dotup{\rho}_{ie,br}^s}
                           + c\ {d\dotup{t}_{br}}
\end{aligned}
\end{equation}

See

  • [48] SpringerHandbookGNSS2017, p.596
  • [35] Morton2020Vol1, p. 486
  • [18] Groves2013, p. 443
Note
Increased noise of Single Difference, compared to separate measurements: $ \sigma_{12} = \sqrt{2}\sigma $

Double Difference

  • Pivot satellite $1$ and other satellites as $s$
  • 1 Pivot satellite per GNSS constellation needed. Double Difference only possible for measurements on same frequency, otherwise the hardware biases do not cancel out each other

    \begin{equation}\begin{aligned}
{ p_{br}^{1s}}
        &= { p_{br}^s} - { p_{br}^1}
        &&= \overbrace{{ \rho_{br}^s} - { \rho_{br}^1}}^{ \rho_{br}^{1s}}
          + \overbrace{{ \delta\rho_{ie,br}^s} - { \delta\rho_{ie,br}^1}}^{ \delta\rho_{ie,br}^{1s}}
          + \overbrace{{ T_{br}^s} - { T_{br}^1}}^{ T_{br}^{1s}}
          + \overbrace{{\mu_j^1} { I_{br}^s} - {\mu_j^1} { I_{br}^1}}^{{\mu_j^{1}} { I_{br}^{1s}}}
          + c\ [ \overbrace{{ dt_{br}} - { dt_{br}}}^{= 0}
                   + \overbrace{{ \delta t^{rel,s}_{stc,br}} - { \delta t^{rel,1}_{stc,br}}}^{ \delta t^{rel,1s}_{stc,br}}
              ]\\
          & &&\quad\, + c\ [ \underbrace{{ d_{br,j}^S} - { d_{br,j}^1}}_{ d_{br}^{1S}}
                   + \underbrace{{ \Delta d_{br,j}^s} - { \Delta d_{br,j}^1}}_{ \Delta d_{br}^{1s}}
              ]
          + \underbrace{{ \xi_{br,j}^s} - { \xi_{br,j}^1}}_{ \xi_{br}^{1s}}
          + \underbrace{{ e_{br,j}^s} - { e_{br,j}^1}}_{ e_{br}^{1s}}\\
{ \varphi_{br}^{1s}}
         &= { \varphi_{br}^s} - { \varphi_{br}^1}
         &&= \overbrace{{ \rho_{br}^s} - { \rho_{br}^1}}^{ \rho_{br}^{1s}}
          + \overbrace{{ \delta\rho_{ie,br}^s} - { \delta\rho_{ie,br}^1}}^{ \delta\rho_{ie,br}^{1s}}
          + \overbrace{{ T_{br}^s} - { T_{br}^1}}^{ T_{br}^{1s}}
          - \overbrace{({\mu_j^1} { I_{br}^s} - {\mu_j^1} { I_{br}^1})}^{{\mu_j^{1}} { I_{br}^{1s}}}
          + c [ \overbrace{{ dt_{br}} - { dt_{br}}}^{= 0}
                   + \overbrace{{ \delta t^{rel,s}_{stc,br}} - { \delta t^{rel,1}_{stc,br}}}^{ \delta t^{rel,1s}_{stc,br}}
              ]\\
          & &&\quad\, + c [\underbrace{{ \delta_{br,j}^S} - { \delta_{br,j}^1}}_{ \delta_{br}^{1S}}
                      + \underbrace{{ \Delta \delta_{br,j}^s} - { \Delta \delta_{br,j}^1}}_{ \Delta \delta_{br}^{1s}}
              ]
          + \underbrace{{ \zeta_{br,j}^s} - { \zeta_{br,j}^1}}_{ \zeta_{br}^{1s}}
          + \underbrace{{ \epsilon_{br,j}^s} - { \epsilon_{br,j}^1}}_{ \epsilon_{br}^{1s}}
          + { \lambda_j^1} (\underbrace{{N_{br}^s} - {N_{br}^1}}_{N_{br}^{1s}}
                                      + \underbrace{{\omega_{br}^s} - {\omega_{br}^1}}_{\omega_{br}^{1s}})\\
{ \dotup{p}_{br}^{1s}}
         &= { \dotup{p}_{br}^s} - { \dotup{p}_{br}^1}
         &&= {{\mathbf{u}_{r}^{s}}^T} [{\mathbf{v}^s} - {\mathbf{v}_r} ]
                - {{\mathbf{u}_{b}^{s}}^T} {\mathbf{v}^s}
             - {{\mathbf{u}_{r}^{1}}^T} [{\mathbf{v}^1} - {\mathbf{v}_r} ]
                + {{\mathbf{u}_{b}^{1}}^T} {\mathbf{v}^1}
             - ({\delta\dotup{\rho}_{ie,br}^s} - {\delta\dotup{\rho}_{ie,br}^1})
             + c [ \overbrace{{d\dotup{t}_{br}} - {d\dotup{t}_{br}}}^{= 0} ]
\end{aligned}
\end{equation}

    \begin{equation}\begin{aligned}
{ p_{br}^{1s}} &= { \rho_{br}^{1s}}
                        + { \delta\rho_{ie,br}^{1s}}
                        + { T_{br}^{1s}}
                        + {\mu_j^{1}} { I_{br}^{1s}}
                        + c \left[ { \delta t^{rel,1s}_{stc,br}}
                                 + { d_{br}^{1S}}
                                 + { \Delta d_{br}^{1s}}
                            \right]
                        + { \xi_{br}^{1s}}
                        + { e_{br}^{1s}} \\
{ \varphi_{br}^{1s}} &= { \rho_{br}^{1s}}
                              + { \delta\rho_{ie,br}^{1s}}
                              + { T_{br}^{1s}}
                              - {\mu_j^{1}} { I_{br}^{1s}}
                              + c \left[ { \delta t^{rel,1s}_{stc,br}}
                                       + { \delta_{br}^{1S}}
                                       + { \Delta \delta_{br,j}^{1s}}
                                  \right]
                              + { \zeta_{br}^{1s}}
                              + { \epsilon_{br}^{1s}}
                              + { \lambda_j^1} ({ N_{br}^{1s}} + { \omega_{br}^{1s}})\\
{ \dotup{p}_{br}^{1s}} &= {{\mathbf{u}_{r}^{s}}^T} [{\mathbf{v}^s} - {\mathbf{v}_r} ]
                                 - {{\mathbf{u}_{b}^{s}}^T} {\mathbf{v}^s}
                              - {{\mathbf{u}_{r}^{1}}^T} [{\mathbf{v}^1} - {\mathbf{v}_r} ]
                                 + {{\mathbf{u}_{b}^{1}}^T} {\mathbf{v}^1}
                              - ({\delta\dotup{\rho}_{ie,br}^s} - {\delta\dotup{\rho}_{ie,br}^1})
\end{aligned}
\end{equation}

See

  • [48] SpringerHandbookGNSS2017, p. 597
  • [35] Morton2020Vol1, p. 486
  • [18] Groves2013, p. 444ff
Note
Increased noise of Double Difference, compared to separate measurements: $ \sigma_{br}^{1s} = \sqrt{4}\sigma = 2\sigma $

State

Theoretically our state would consist of the following states, satellite 1 being our pivot satellite.

\begin{equation}\mathbf{x}^e = \left[
\begin{array}{cc|ccccc}
    { \mathbf{r}_{r} } & { \mathbf{v}_{r} } & {N_{br}^1} & {N_{br}^2} & {N_{br}^3} & \dots & {N_{br}^m}
\end{array}\right]
\end{equation}

This will however lead to the system not being solvable in a unique way, as it is is rank-deficient (see [48] SpringerHandbookGNSS2017, ch. 26.3.1, p. 763).

To solve this, we set the ambiguity of the pivot satellite to 0 and remove it from the state. This means all other ambiguities will be relative to the pivot satellite ambiguity. This practically results in us doing double difference ambiguities in the state

\begin{equation}\mathbf{x}^e
=
\begin{bmatrix}
    { \mathbf{r}_{r} } \\
    { \mathbf{v}_{r} } \\\hdashline
    {N_{br}^2} - {N_{br}^1} \\
    {N_{br}^3} - {N_{br}^1} \\
    \vdots \\
    {N_{br}^m} - {N_{br}^1} \\
\end{bmatrix}
=
\begin{bmatrix}
    { \mathbf{r}_{r} } \\
    { \mathbf{v}_{r} } \\\hdashline
    {N_{br}^{12}} \\
    {N_{br}^{13}} \\
    \vdots \\
    {N_{br}^{1m}} \\
\end{bmatrix}
=
\begin{bmatrix}
    \text{Baseline from Base to Rover [m]} \\
    \text{Velocity difference between base and rover [m/s]} \\ \hdashline
    \text{Double-Differenced Carrier-phase ambiguity of satellite 2 [cyc]} \\
    \text{Double-Differenced Carrier-phase ambiguity of satellite 3 [cyc]} \\
    \vdots \\
    \text{Double-Differenced Carrier-phase ambiguity of satellite m [cyc]} \\
\end{bmatrix}
\end{equation}

Ambiguity initialization

Carrier-Pseudorange Difference

The ambiguities can be initialized from the difference of the carrier-phase and pseudorange measurements

\begin{equation}\begin{aligned}
{ \tilde{\varphi}_{br}^{1s}} - { \tilde{p}_{br}^{1s}}
        &= { \rho_{br}^{1s}}
            + { \delta\rho_{ie,br}^{1s}}
            + { T_{br}^{1s}}
            - {\mu_j^{1}} { I_{br}^{1s}}
            + c \left[ { \delta t^{rel,1s}_{stc,br}}
                     + { \delta_{br}^{1S}}
                     + { \Delta \delta_{br,j}^{1s}}
               \right]
            + { \zeta_{br}^{1s}}
            + { \epsilon_{br}^{1s}}
            + { \lambda_j^1} ({ N_{br}^{1s}} + { \omega_{br}^{1s}})\\
        &- { \rho_{br}^{1s}}
            - { \delta\rho_{ie,br}^{1s}}
            - { T_{br}^{1s}}
            - {\mu_j^{1}} { I_{br}^{1s}}
            - c \left[ { \delta t^{rel,1s}_{stc,br}}
                     + { d_{br}^{1S}}
                     + { \Delta d_{br}^{1s}}
                \right]
            - { \xi_{br}^{1s}}
            - { e_{br}^{1s}}\\
{ \tilde{\varphi}_{br}^{1s}} - { \tilde{p}_{br}^{1s}}
        &= -2 {\mu_j^{1}} { I_{br}^{1s}}
            + c \left[ { \delta_{br}^{1S}}
                     + { \Delta \delta_{br,j}^{1s}}
                     - { d_{br}^{1S}}
                     - { \Delta d_{br}^{1s}}
               \right]
            + { \zeta_{br}^{1s}}
            - { \xi_{br}^{1s}}
            + { \epsilon_{br}^{1s}}
            - { e_{br}^{1s}}
            + { \lambda_j^1} ({ N_{br}^{1s}} + { \omega_{br}^{1s}})\\
{ N_{br}^{1s}} &= \frac{1}{{ \lambda_j^1}}
        \left(
            { \tilde{\varphi}_{br}^{1s}} - { \tilde{p}_{br}^{1s}}
            +2 {\mu_j^{1}} { I_{br}^{1s}}
            - c \left[ { \delta_{br}^{1S}}
                     + { \Delta \delta_{br,j}^{1s}}
                     - { d_{br}^{1S}}
                     - { \Delta d_{br}^{1s}}
               \right]
            - { \zeta_{br}^{1s}}
            + { \xi_{br}^{1s}}
            - { \epsilon_{br}^{1s}}
            + { e_{br}^{1s}}
            - { \lambda_j^1} { \omega_{br}^{1s}}
        \right)
\end{aligned}
\end{equation}

Neglecting the error terms this becomes

\begin{equation}{ N_{br}^{1s}} = \frac{1}{{ \lambda_j^1}}
        \left(
            { \tilde{\varphi}_{br}^{1s}} - { \tilde{p}_{br}^{1s}}
        \right)
\end{equation}

However the pseudorange error terms are quite big and can lead to significant errors

Carrier-Geometry Difference

As the pseudorange is very noisy, it is better to use the estimated measurement (with ambiguity 0) when the position is known

\begin{equation}\begin{aligned}
{ \tilde{\varphi}_{br}^{1s}} - { \hat{\varphi}_{br}^{1s}}
        &= { \rho_{br}^{1s}}
            + { \delta\rho_{ie,br}^{1s}}
            + { T_{br}^{1s}}
            - {\mu_j^{1}} { I_{br}^{1s}}
            + c \left[ { \delta t^{rel,1s}_{stc,br}}
                     + { \delta_{br}^{1S}}
                     + { \Delta \delta_{br,j}^{1s}}
               \right]
            + { \zeta_{br}^{1s}}
            + { \epsilon_{br}^{1s}}
            + { \lambda_j^1} ({ N_{br}^{1s}} + { \omega_{br}^{1s}})\\
        &- { \hat{\rho}_{br}^{1s}}
            - { \delta\hat{\rho}_{ie,br}^{1s}}
            - { \hat{T}_{br}^{1s}}
            + {\mu_j^{1}} { \hat{I}_{br}^{1s}}\\
{ \tilde{\varphi}_{br}^{1s}} - { \hat{\varphi}_{br}^{1s}}
        &= c \left[ { \delta t^{rel,1s}_{stc,br}}
                     + { \delta_{br}^{1S}}
                     + { \Delta \delta_{br,j}^{1s}}
               \right]
            + { \zeta_{br}^{1s}}
            + { \epsilon_{br}^{1s}}
            + { \lambda_j^1} ({ N_{br}^{1s}} + { \omega_{br}^{1s}})\\
{ N_{br}^{1s}} &= \frac{1}{{ \lambda_j^1}}
        \left(
            { \tilde{\varphi}_{br}^{1s}} - { \hat{\varphi}_{br}^{1s}}
            - c \left[ { \delta t^{rel,1s}_{stc,br}}
                     + { \delta_{br}^{1S}}
                     + { \Delta \delta_{br,j}^{1s}}
               \right]
            - { \zeta_{br}^{1s}}
            - { \epsilon_{br}^{1s}}
            - { \lambda_j^1} { \omega_{br}^{1s}}
        \right)
\end{aligned}
\end{equation}

Neglecting the error terms this becomes

\begin{equation}{ N_{br}^{1s}} = \frac{1}{{ \lambda_j^1}}
        \left(
            { \tilde{\varphi}_{br}^{1s}} - { \hat{\varphi}_{br}^{1s}}
        \right)
\end{equation}

Pivot satellite change

When the pivot satellite changes, we have to take this into account. Lets assume we have 5 satellites and satellite 1 is the current pivot. Therefore the double difference ambiguity of satellite 1 is not in the state (as it would be 0 anyway)

\begin{equation}\mathbf{x}_{\text{old}} =
\begin{bmatrix}
    { \mathbf{r}_{r} } \\
    { \mathbf{v}_{r} } \\ \hdashline
    {N_{br}^{12}} \\
    {N_{br}^{13}} \\
    {N_{br}^{14}} \\
    {N_{br}^{15}} \\
\end{bmatrix}_{\text{old}}
\end{equation}

Case 1: Low elevation

  • Old pivot satellite 1 has low elevation but is still observed
  • Satellite 2 becomes the new pivot We can transform the state with a matrix $ \mathbf{D} $ with $ \mathbf{x}_{\text{new}} = \mathbf{D} \cdot \mathbf{x}_{\text{old}} $

    \begin{equation}\begin{bmatrix}
    { \mathbf{r}_{r} } \\
    { \mathbf{v}_{r} } \\ \hdashline
    {N_{br}^{21}} = {N_{br}^{1}} - {N_{br}^{2}} \\
    {N_{br}^{23}} = {N_{br}^{3}} - {N_{br}^{2}} \\
    {N_{br}^{24}} = {N_{br}^{4}} - {N_{br}^{2}} \\
    {N_{br}^{25}} = {N_{br}^{5}} - {N_{br}^{2}} \\
\end{bmatrix}_{\text{new}}
=
\overbrace{
  \left[\begin{array}{cc:cccc}
    \mathbf{I}_3     & \mathbf{0}_3     &    0   &    0   &    0  &  0  \\
    \mathbf{0}_3     & \mathbf{I}_3     &    0   &    0   &    0  &  0  \\\hdashline
    \mathbf{0}_{1,3} & \mathbf{0}_{1,3} &   -1   &    0   &    0  &  0  \\
    \mathbf{0}_{1,3} & \mathbf{0}_{1,3} &   -1   &    1   &    0  &  0  \\
    \mathbf{0}_{1,3} & \mathbf{0}_{1,3} &   -1   &    0   &    1  &  0  \\
    \mathbf{0}_{1,3} & \mathbf{0}_{1,3} &   -1   &    0   &    0  &  1  \\
  \end{array}\right]
}^{\mathbf{D}}
\cdot
\begin{bmatrix}
    { \mathbf{r}_{r} } \\
    { \mathbf{v}_{r} } \\ \hdashline
    {N_{br}^{12}} = {N_{br}^{2}} - {N_{br}^{1}} \\
    {N_{br}^{13}} = {N_{br}^{3}} - {N_{br}^{1}} \\
    {N_{br}^{14}} = {N_{br}^{4}} - {N_{br}^{1}} \\
    {N_{br}^{15}} = {N_{br}^{5}} - {N_{br}^{1}} \\
\end{bmatrix}_{\text{old}}
\end{equation}

Case 2: Not observed

  • Old pivot satellite 1 is not observed this epoch
  • Satellite 2 becomes the new pivot We can transform the state with a matrix $ \mathbf{D} $ with $ \mathbf{x}_{\text{new}} = \mathbf{D} \cdot \mathbf{x}_{\text{old}} $

    \begin{equation}\begin{bmatrix}
    { \mathbf{r}_{r} } \\
    { \mathbf{v}_{r} } \\ \hdashline
    \cancel{{N_{br}^{21}} = 0} \\
    {N_{br}^{23}} = {N_{br}^{3}} - {N_{br}^{2}} \\
    {N_{br}^{24}} = {N_{br}^{4}} - {N_{br}^{2}} \\
    {N_{br}^{25}} = {N_{br}^{5}} - {N_{br}^{2}} \\
\end{bmatrix}_{\text{new}}
=
\overbrace{
  \left[\begin{array}{cc:cccc}
    \mathbf{I}_3     & \mathbf{0}_3     &    0   &    0   &    0  &  0  \\
    \mathbf{0}_3     & \mathbf{I}_3     &    0   &    0   &    0  &  0  \\\hdashline
    \mathbf{0}_{1,3} & \mathbf{0}_{1,3} &    0   &    0   &    0  &  0  \\
    \mathbf{0}_{1,3} & \mathbf{0}_{1,3} &   -1   &    1   &    0  &  0  \\
    \mathbf{0}_{1,3} & \mathbf{0}_{1,3} &   -1   &    0   &    1  &  0  \\
    \mathbf{0}_{1,3} & \mathbf{0}_{1,3} &   -1   &    0   &    0  &  1  \\
  \end{array}\right]
}^{\mathbf{D}}
\cdot
\begin{bmatrix}
    { \mathbf{r}_{r} } \\
    { \mathbf{v}_{r} } \\ \hdashline
    {N_{br}^{12}} = {N_{br}^{2}} - {N_{br}^{1}} \\
    {N_{br}^{13}} = {N_{br}^{3}} - {N_{br}^{1}} \\
    {N_{br}^{14}} = {N_{br}^{4}} - {N_{br}^{1}} \\
    {N_{br}^{15}} = {N_{br}^{5}} - {N_{br}^{1}} \\
\end{bmatrix}_{\text{old}}
\end{equation}

Error propagation

After a transformation, the covariance matrix has also to be adapted by error propagation

\begin{equation}\mathbf{P}_{\text{new}} = \mathbf{D} \cdot \mathbf{P}_{\text{old}} \cdot \mathbf{D}^T
\end{equation}

Synchronization correction

Two step correction

See [46] Stucke2023

The linearized observation equation is valid for a common point in time. So for example the rover receiver time $ t_r $

\begin{equation}{ \tilde{p}_{br}^{1s}}({ t_r})
- { \hat{p}_{br}^{1s}}({ t_r})
  = \mathbf{H}({ t_r})\delta\mathbf{x}({ t_r})
\end{equation}

However, the base observation is observed at a time $ t_b $. So we need to sync the observations according to [46] Stucke2023, ch. 3 in two steps.

1. Correction of receiver internal clock error

The observations estimate their observations at times $ t_b $ for the base and $ t_r $ for the rover. However they are not logged for the estimated times but instead for the internal clock at times $ \tilde{t}_b $ and $ \tilde{t}_r $. According to [46] Stucke2023 the error lies in the order of milliseconds. To remove this error, the receiver clock errors $ dt_b $ and $ dt_r $ are estimated by a SPP. This allows evaluation of the observations at the correct instances of time

\begin{equation}\begin{aligned}
{ t_b} &= { \tilde{t}_b} - { dt_b} \\
{ t_r} &= { \tilde{t}_r} - { dt_r} \\
\end{aligned}
\end{equation}

While this correction of the time makes sense, it proved to deteriorate the solution. So this first step is not applied.

2. Synchronizing base and rover observations

We now correcting the pseudorange ${ p_{b}^s}({ t_b}) $ of the base to the time of the rover ${ t_r} $. This can be done for the carrier-phase analogously.

Assuming the time-dependent error is approximately driven by the geometrical range, the correction equation for the basis receiver can be given as

\begin{equation}\begin{aligned}
{ \tilde{p}_{b}^s}({ t_r}) - { \tilde{p}_{b}^s}({ t_b}) &\approx { \hat{p}_{b}^s}({ t_r}) - { \hat{p}_{b}^s}({ t_b}) \\
{ \tilde{p}_{b}^s}({ t_r}) &\approx { \tilde{p}_{b}^s}({ t_b}) + { \hat{p}_{b}^s}({ t_r}) - { \hat{p}_{b}^s}({ t_b})
\end{aligned}
\end{equation}

The linearized observation equation is

\begin{equation}\begin{aligned}
\delta\mathbf{z}({ t_r}) &= \mathbf{H}({ t_r})\delta\mathbf{x}({ t_r}) \\
\mathbf{z}({ t_r}) - \mathbf{h}(\mathbf{\hat{x}}({ t_r})) &= \mathbf{H}({ t_r})\delta\mathbf{x}({ t_r}) \\
\mathbf{\tilde{z}}({ t_r}) - \mathbf{\hat{z}}({ t_r}) &= \mathbf{H}({ t_r})\delta\mathbf{x}({ t_r}) \\
\end{aligned}
\end{equation}

For the double differenced pseudorange this is

\begin{equation}\begin{aligned}
  { \tilde{p}_{br}^{1s}}({ t_r})
- { \hat{p}_{br}^{1s}}({ t_r})
  &= \mathbf{H}({ t_r})\delta\mathbf{x}({ t_r}) \\
  \left[\big({ \tilde{p}_{r}^s}({ t_r})
               - { \tilde{p}_{b}^s}({ t_r})\big)
          - \big({ \tilde{p}_{r}^1}({ t_r})
               - { \tilde{p}_{b}^1}({ t_r})\big)\right]
- \left[\big({ \hat{p}_{r}^s}({ t_r})
               - { \hat{p}_{b}^s}({ t_r})\big)
          - \big({ \hat{p}_{r}^1}({ t_r})
               - { \hat{p}_{b}^1}({ t_r})\big)\right]
  &= \mathbf{H}({ t_r})\delta\mathbf{x}({ t_r}) \\
  \left[\big({ \tilde{p}_{r}^s}({ t_r})
           - [\overbrace{{ \tilde{p}_{b}^s}({ t_b})
              + \cancel{{ \hat{p}_{b}^s}({ t_r})}
              - { \hat{p}_{b}^s}({ t_b})}^{{ \tilde{p}_{b}^s}({ t_r})}]\big)
        - \big({ \tilde{p}_{r}^1}({ t_r})
           - [\overbrace{{ \tilde{p}_{b}^1}({ t_b})
              + \cancel{{ \hat{p}_{b}^1}({ t_r})}
              - { \hat{p}_{b}^1}({ t_b})}^{{ \tilde{p}_{b}^1}({ t_r})}]\big)\right]
- \left[({ \hat{p}_{r}^s}({ t_r})
           - \cancel{{ \hat{p}_{b}^s}({ t_r})})
        - ({ \hat{p}_{r}^1}({ t_r})
           - \cancel{{ \hat{p}_{b}^1}({ t_r})})\right]
  &= \mathbf{H}({ t_r})\delta\mathbf{x}({ t_r}) \\
  \left[\big({ \tilde{p}_{r}^s}({ t_r})
           - { \tilde{p}_{b}^s}({ t_b})\big)
        - \big({ \tilde{p}_{r}^1}({ t_r})
           - { \tilde{p}_{b}^1}({ t_b})\big)\right]
- \left[\big({ \hat{p}_{r}^s}({ t_r})
           - { \hat{p}_{b}^s}({ t_b})\big)
       - \big({ \hat{p}_{r}^1}({ t_r})
           - { \hat{p}_{b}^1}({ t_b})\big)\right]
  &= \mathbf{H}({ t_r})\delta\mathbf{x}({ t_r}) \\
\end{aligned}
\end{equation}

Observation equations

\begin{equation}\begin{aligned}
{ p_{r,j}^s}
         &= { \rho_r^s}
          + {\delta\rho_{ie,r}^s}
          + { T_r^s}
          + { \mu_j^S I_r^s}
          + c \left[ { dt_r}
                   - { dt^s}
                   + { dt_{ISB}^S}
                   + { \delta t^{rel}_{stc}} - { \delta t^{rel}_{clk}}
                   + { d_{r,j}^S}
                   - { d_{j}^s}
                   + { \Delta d_{r,j}^s}
              \right]
          + { \xi_{r,j}^s}
          + { e_{r,j}^s} \\
{ \varphi_{r,j}^s}
         &= { \rho_r^s}
          + {\delta\rho_{ie,r}^s}
          + { T_r^s}
          - { \mu_j^S I_r^s}
          + c \left[ { dt_r}
                   - { dt^s}
                   + { dt_{ISB}^S}
                   + { \delta t^{rel}_{stc}} - { \delta t^{rel}_{clk}}
                   + { \delta_{r,j}^S}
                   - { \delta_{j}^s}
                   + { \Delta \delta_{r,j}^s}
              \right]
          + { \zeta_{r,j}^s}
          + { \epsilon_{r,j}^s}
          + { \lambda_j^S}
                ({ \omega_{r}^s }
                 + { N_{r,j}^s})\\
{ \dotup{p}_r^s} &= {{\mathbf{u}_{r}^{s}}^T}
                               [ {\mathbf{v}^s}
                                - {\mathbf{v}_r} ]
                       - {\delta\dotup{\rho}_{ie,r}^s}
                       + { \dotup{T}_r^s}
                       - { \mu_j^S \dotup{I}_r^s}
                       + c [{d\dotup{t}_r}
                            - {d\dotup{t}^s }
                            + {d\dotup{t}_{ISB}^S}
                            + { \delta f^{rel}_{clk}}]
\end{aligned}
\end{equation}

Single difference

\begin{equation}\begin{aligned}
{ p_{br}^s}
        &= { p_{r}^s}({ t_r}) - { p_{b}^s}({ t_b})
        &&= \overbrace{{ \rho_r^s}({ t_r}) - { \rho_b^s}({ t_b})}^{ \rho_{br}^s}
          + \overbrace{{ \delta\rho_{ie,r}^s}({ t_r}) - { \delta\rho_{ie,b}^s}({ t_b})}^{ \delta\rho_{ie,br}^s}
          + \overbrace{{ T_r^s}({ t_r}) - { T_b^s}({ t_b})}^{ T_{br}^s}
          + {\mu_j^S} (\overbrace{{ I_r^s}({ t_r}) - { I_b^s}({ t_b})}^{ I_{br}^s}) \\
          & &&\quad\, + c\ [ \overbrace{{ dt_r}({ t_r}) - { dt_b}({ t_b})}^{ dt_{br}}
                   - \overbrace{({ dt^s}({ t_r}) - { dt^s}({ t_b}))}^{{ dt_{br}^s}}
                   + \overbrace{{ dt_{ISB}^S}({ t_r}) - { dt_{ISB}^S}({ t_b})}^{\approx 0}
                   + \overbrace{{ \delta t^{rel,s}_{stc,r}}({ t_r})
                       - { \delta t^{rel,s}_{stc,b}}({ t_b})}^{ \delta t^{rel,s}_{stc,br}}
                   - \overbrace{({ \delta t^{rel,s}_{clk}}({ t_r})
                       - { \delta t^{rel,s}_{clk}}({ t_b}))}^{{ \delta t^{rel,s}_{clk,br}}}
              ]\\
          & &&\quad\, + c\ [ \underbrace{{ d_{r,j}^S}({ t_r}) - { d_{b,j}^S}({ t_b})}_{ d_{br,j}^S}
                   - \underbrace{({ d_{j}^s}({ t_r}) - { d_{j}^s}({ t_b}))}_{{ d_{br,j}^s}}
                   + \underbrace{{ \Delta d_{r,j}^s}({ t_r}) - { \Delta d_{b,j}^s}({ t_b})}_{ \Delta d_{br,j}^s}
              ]
          + \underbrace{{ \xi_{r,j}^s}({ t_r}) - { \xi_{b,j}^s}({ t_b})}_{ \xi_{br,j}^s}
          + \underbrace{{ e_{r,j}^s}({ t_r}) - { e_{b,j}^s}({ t_b})}_{ e_{br,j}^s}
\end{aligned}
\end{equation}

  • The satellite clock ${ dt^s}$ drifts with approximately $2 \cdot 10^{-11}\ \text{[s/s]}$ which can lead to a maximum error of $0.012\ \text{[m]}$ over 1 second
  • The inter-system bias ${ dt_{ISB}^S}$ can be bounded by $6\ \text{ns/day}$ which leads to a maximum error of $4 \times 10^{-5}\ \text{[m]}$ over 1 second and can be neglected
  • Deviation of the satellite clock frequency due to relativistic effects ${ \delta t^{rel,s}_{clk}}$ (maximum value for GPS $\approx 45.0\text{ns} \equiv 13.5\text{m}$)
  • Satellite code hardware bias ${ d_{j}^s}$ and satellite phase hardware bias ${ \delta_{j}^s}$ also don't cancel out

    \begin{equation}\begin{aligned}
{ \varphi_{br}^s}
         &= { \varphi_{r}^s}({ t_r}) - { \varphi_{b}^s}({ t_b})
         &&= \overbrace{{ \rho_r^s}({ t_r}) - { \rho_b^s}({ t_b})}^{ \rho_{br}^s}
          + \overbrace{{ \delta\rho_{ie,r}^s}({ t_r}) - { \delta\rho_{ie,b}^s}({ t_b})}^{ \delta\rho_{ie,br}^s}
          + \overbrace{{ T_r^s}({ t_r}) - { T_b^s}({ t_b})}^{ T_{br}^s}
          - {\mu_j^S} (\overbrace{{ I_r^s}({ t_r}) - { I_b^s}({ t_b})}^{ I_{br}^s}) \\
          & &&\quad\, + c [ \overbrace{{ dt_r}({ t_r}) - { dt_b}({ t_b})}^{ dt_{br}}
                   - \overbrace{({ dt^s}({ t_r}) - { dt^s}({ t_b}))}^{{ dt_{br}^s}}
                   + \overbrace{{ dt_{ISB}^S}({ t_r}) - { dt_{ISB}^S}({ t_b})}^{\approx 0}
                   + \overbrace{{ \delta t^{rel,s}_{stc,r}}({ t_r})
                       - { \delta t^{rel,s}_{stc,b}}({ t_b})}^{ \delta t^{rel,s}_{stc,br}}
                   - \overbrace{({ \delta t^{rel,s}_{clk}}({ t_r})
                       - { \delta t^{rel,s}_{clk}}({ t_b}))}^{{ \delta t^{rel,s}_{clk,br}}}
              ]\\
          & &&\quad\, + c [\underbrace{{ \delta_{r,j}^S}({ t_r}) - { \delta_{b,j}^S}({ t_b})}_{ \delta_{br,j}^S}
                      - \underbrace{({ \delta_{j}^s}({ t_r}) - { \delta_{j}^s}({ t_b}))}_{ \delta_{br,j}^s}
                      + \underbrace{{ \Delta \delta_{r,j}^s}({ t_r}) - { \Delta \delta_{b,j}^s}({ t_b})}_{ \Delta \delta_{br,j}^s}
              ]
          + \underbrace{{ \zeta_{r,j}^s}({ t_r}) - { \zeta_{b,j}^s}({ t_b})}_{ \zeta_{br,j}^s}
          + \underbrace{{ \epsilon_{r,j}^s}({ t_r}) - { \epsilon_{b,j}^s}({ t_b})}_{ \epsilon_{br,j}^s}\\
          & &&\quad\, + { \lambda_j^S}
                (\underbrace{{ N_{r,j}^s}({ t_r}) - { N_{b,j}^s}({ t_b})}_{ N_{br}^s}
          + \underbrace{{ \omega_{r}^s}({ t_r}) - { \omega_{b}^s}({ t_b})}_{ \omega_{br}^s })\\
{ \dotup{p}_{br}^s}
         &= { \dotup{p}_{r}^s}({ t_r}) - { \dotup{p}_{b}^s}({ t_b})
         &&= {{\mathbf{u}_{r}^{s}}^T}({ t_r})
                 [{\mathbf{v}^s}({ t_r})
                  - {\mathbf{v}_r}({ t_r})]
             - {{\mathbf{u}_{b}^{s}}^T}({ t_b}) {\mathbf{v}^s}({ t_b})
             - \overbrace{({\delta\dotup{\rho}_{ie,r}^s}({ t_r})
                 - {\delta\dotup{\rho}_{ie,b}^s}({ t_b}))}^{\delta\dotup{\rho}_{ie,br}^s}
             + \overbrace{{ \dotup{T}_r^s}({ t_r})
                 - { \dotup{T}_b^s}({ t_b})}^{\approx 0}
             + {\mu_j^S} (\overbrace{{ \dotup{I}_r^s}({ t_r})
                 - { \dotup{I}_b^s}({ t_b})}^{\approx 0})\\
             & &&\quad\, + c [\underbrace{{d\dotup{t}_r}({ t_r})
                      - {d\dotup{t}_b}({ t_b})}_{d\dotup{t}_{br}}
                  - \underbrace{({d\dotup{t}^s}({ t_r})
                      - {d\dotup{t}^s}({ t_b}))}_{\approx 0}
                  + \underbrace{{d\dotup{t}_{ISB}^S}({ t_r})
                      - {d\dotup{t}_{ISB}^S}({ t_b})}_{\approx 0}
                  + \underbrace{{ \delta f^{rel,s}_{clk}}({ t_r})
                      - { \delta f^{rel,s}_{clk}}({ t_b})}_{\approx 0}]
\end{aligned}
\end{equation}

Double difference

\begin{equation}\begin{aligned}
{ p_{br}^{1s}}
        &= { p_{br}^s} - { p_{br}^1}
        &&= \overbrace{{ \rho_{br}^s} - { \rho_{br}^1}}^{ \rho_{br}^{1s}}
          + \overbrace{{ \delta\rho_{ie,br}^s} - { \delta\rho_{ie,br}^1}}^{ \delta\rho_{ie,br}^{1s}}
          + \overbrace{{ T_{br}^s} - { T_{br}^1}}^{ T_{br}^{1s}}
          + \overbrace{{\mu_j^1} { I_{br}^s} - {\mu_j^1} { I_{br}^1}}^{{\mu_j^{1}} { I_{br}^{1s}}}
          + c\ [ \overbrace{{ dt_{br}} - { dt_{br}}}^{= 0}
                   - (\overbrace{{ dt_{br}^s} - { dt_{br}^1}}^{{ dt_{br}^{1s}}})
                   + \overbrace{{ \delta t^{rel,s}_{stc,br}} - { \delta t^{rel,1}_{stc,br}}}^{ \delta t^{rel,1s}_{stc,br}}
                   + \overbrace{{ \delta t^{rel,s}_{clk,br}} - { \delta t^{rel,1}_{clk,br}}}^{ \delta t^{rel,1s}_{clk,br}}
              ]\\
          & &&\quad\, + c\ [ \underbrace{{ d_{br,j}^S} - { d_{br,j}^1}}_{ d_{br}^{1S}}
                   + \underbrace{{ d_{br,j}^s} - { d_{br,j}^1}}_{ d_{br}^{1s}}
                   + \underbrace{{ \Delta d_{br,j}^s} - { \Delta d_{br,j}^1}}_{ \Delta d_{br}^{1s}}
              ]
          + \underbrace{{ \xi_{br,j}^s} - { \xi_{br,j}^1}}_{ \xi_{br}^{1s}}
          + \underbrace{{ e_{br,j}^s} - { e_{br,j}^1}}_{ e_{br}^{1s}}\\
{ \varphi_{br}^{1s}}
         &= { \varphi_{br}^s} - { \varphi_{br}^1}
         &&= \overbrace{{ \rho_{br}^s} - { \rho_{br}^1}}^{ \rho_{br}^{1s}}
          + \overbrace{{ \delta\rho_{ie,br}^s} - { \delta\rho_{ie,br}^1}}^{ \delta\rho_{ie,br}^{1s}}
          + \overbrace{{ T_{br}^s} - { T_{br}^1}}^{ T_{br}^{1s}}
          - \overbrace{({\mu_j^1} { I_{br}^s} - {\mu_j^1} { I_{br}^1})}^{{\mu_j^{1}} { I_{br}^{1s}}}
          + c [ \overbrace{{ dt_{br}} - { dt_{br}}}^{= 0}
                   - (\overbrace{{ dt_{br}^s} - { dt_{br}^1}}^{{ dt_{br}^{1s}}})
                   + \overbrace{{ \delta t^{rel,s}_{stc,br}} - { \delta t^{rel,1}_{stc,br}}}^{ \delta t^{rel,1s}_{stc,br}}
                   + \overbrace{{ \delta t^{rel,s}_{clk,br}} - { \delta t^{rel,1}_{clk,br}}}^{ \delta t^{rel,1s}_{clk,br}}
              ]\\
          & &&\quad\, + c [\underbrace{{ \delta_{br,j}^S} - { \delta_{br,j}^1}}_{ \delta_{br}^{1S}}
                      + \underbrace{{ \delta_{br,j}^s} - { \delta_{br,j}^1}}_{ \delta_{br}^{1s}}
                      + \underbrace{{ \Delta \delta_{br,j}^s} - { \Delta \delta_{br,j}^1}}_{ \Delta \delta_{br}^{1s}}
              ]
          + \underbrace{{ \zeta_{br,j}^s} - { \zeta_{br,j}^1}}_{ \zeta_{br}^{1s}}
          + \underbrace{{ \epsilon_{br,j}^s} - { \epsilon_{br,j}^1}}_{ \epsilon_{br}^{1s}}
          + { \lambda_j^1} (\underbrace{{N_{br}^s} - {N_{br}^1}}_{N_{br}^{1s}}
                                      + \underbrace{{\omega_{br}^s} - {\omega_{br}^1}}_{\omega_{br}^{1s}})\\
{ \dotup{p}_{br}^{1s}}
         &= { \dotup{p}_{br}^s} - { \dotup{p}_{br}^1}
         &&= {{\mathbf{u}_{r}^{s}}^T} [{\mathbf{v}^s} - {\mathbf{v}_r} ]
                - {{\mathbf{u}_{b}^{s}}^T} {\mathbf{v}^s}
             - {{\mathbf{u}_{r}^{1}}^T} [{\mathbf{v}^1} - {\mathbf{v}_r} ]
                + {{\mathbf{u}_{b}^{1}}^T} {\mathbf{v}^1}
             - ({\delta\dotup{\rho}_{ie,br}^s} - {\delta\dotup{\rho}_{ie,br}^1})
             + c [ \overbrace{{d\dotup{t}_{br}} - {d\dotup{t}_{br}}}^{= 0} ]
\end{aligned}
\end{equation}

Kalman Filter

System Model

\begin{equation}\overbrace{
  \begin{bmatrix}
    { \mathbf{v}_{br} } \\
    { \mathbf{a}_{br} } \\\hdashline
    {\dotup{N}_{br}^{12}} \\
    {\dotup{N}_{br}^{13}} \\
    \vdots \\
    {\dotup{N}_{br}^{1m}} \\
  \end{bmatrix}
}^{\mathbf{\dotup{x}}^e}
=
\overbrace{\left[\begin{array}{cc:cccc}
%                                   |
\mathbf{0}_3     & \mathbf{I}_3     & \mathbf{0}_{3,1} & \mathbf{0}_{3,1} & \dots  & \mathbf{0}_{3,1}\\
\mathbf{0}_3     & \mathbf{0}_3     & \mathbf{0}_{3,1} & \mathbf{0}_{3,1} & \dots  & \mathbf{0}_{3,1}\\\hdashline
\mathbf{0}_{1,3} & \mathbf{0}_{1,3} &         0        &         0        & \dots  &         0       \\
\mathbf{0}_{1,3} & \mathbf{0}_{1,3} &         0        &         0        & \dots  &         0       \\
     \vdots      &      \vdots      &       \vdots     &       \vdots     & \ddots &       \vdots    \\
\mathbf{0}_{1,3} & \mathbf{0}_{1,3} &         0        &         0        & \dots  &         0       \\
\end{array}\right]}^{\mathbf{F}}
\cdot
\overbrace{
  \begin{bmatrix}
    { \mathbf{r}_{br} } \\
    { \mathbf{v}_{br} } \\\hdashline
    {N_{br}^{12}} \\
    {N_{br}^{13}} \\
    \vdots \\
    {N_{br}^{1m}} \\
  \end{bmatrix}
}^{\mathbf{x}^e}
+
\mathbf{G} \cdot \boldsymbol{w}
\end{equation}

State transition matrix 𝛟

Higher order terms are zero, so the exact solution is

\begin{equation}\mathbf{\Phi} = \text{exp}(\mathbf{F} \tau_s) = \mathbf{I} + \mathbf{F}\tau_s
\end{equation}

Process noise covariance matrix Q

Noise input matrix G

\begin{equation}\begin{array}{rc}
    & \begin{array}{cc cccc}
        { \mathbf{r}_r } & { \mathbf{v}_r } &
        {N_{br}^{12}} & {N_{br}^{13}} & \quad\ & {N_{br}^{1m}}
    \end{array}\\[0.6em]
    \mathbf{G} = \text{diag} &
    \left[\begin{array}{cc:cccc}
        \mathbf{0}_3 & \mathbf{C}_n^e &
        \;\;\ 1 \;\;\ & \;\;\ 1 \;\;\ & \dots & \;\;\ 1 \;\;\
    \end{array}\right]
\end{array}
\end{equation}

Noise scale matrix W

\begin{equation}\begin{array}{rc}
    & \begin{array}{cc cccc}
        { \mathbf{r}_r } & { \mathbf{v}_r} &
        {N_{br}^{12}} & {N_{br}^{13}} & \quad\ & {N_{br}^{1m}}
    \end{array}\\[0.6em]
    \mathbf{W} = \text{diag} &
    \left[\begin{array}{cc:cccc}
        \mathbf{0}_3 & \mathbf{S}_{a} &
        \:\ \sigma_N^2 \:\ & \:\ \sigma_N^3 \: & \dots & \: \sigma_N^m \:\
    \end{array}\right]
\end{array}
\end{equation}

  • Velocity change due to user motion (Variances) $\rightarrow$ IRW on position

    \begin{equation}\mathbf{S}_a^n = \begin{bmatrix}
S_{aH} &   0    & 0      \\
0    & S_{aH} & 0      \\
0    &   0    & S_{aV} \\
\end{bmatrix}
\end{equation}

    • Suitable values for $S_{aH}$ are around
      • $1 \text{ m}^2 \text{s}^{-3}$ for a pedestrian or ship,
      • $10 \text{ m}^2 \text{s}^{-3}$ for a car,
      • $100 \text{ m}^2 \text{s}^{-3}$ for a military aircraft.
    • The vertical acceleration PSD $S_{aV}$ is usually smaller
  • Ambiguities are modeled as RW with very small noise to keep numerical stability $\sigma_N \approx 10^{-6}$

Van-Loan method

The state transition matrix and the system/process noise covariance matrix can be calculated with the van Loan method [51] vanloan1978. In short

  1. Form a $2n \times 2n$ matrix called $\mathbf{A}$ ( $n$ is the dimension of $\mathbf{x}$ and $\mathbf{W}$ is the power spectral density of the noise $W(t)$)

    \begin{equation}  \mathbf{A} = \begin{bmatrix} -\mathbf{F} & \mathbf{G} \mathbf{W} \mathbf{G}^T \\
                                \mathbf{0} &            \mathbf{F}^T          \end{bmatrix} \Delta t
\end{equation}

  2. Calculate the exponential of $\mathbf{A}$

    \begin{equation}  \mathbf{B} = \text{expm}(\mathbf{A}) = \left[ \begin{array}{c:c}
                                            \dots          & \mathbf{\Phi}^{-1} \mathbf{Q} \\ \hdashline
                                            \mathbf{0}          & \mathbf{\Phi}^T                     \end{array} \right]
                                       = \begin{bmatrix} \mathbf{B}_{11} & \mathbf{B}_{12} \\
                                                         \mathbf{B}_{21} & \mathbf{B}_{22} \end{bmatrix}
\end{equation}

  3. Calculate the state transition matrix $\mathbf{\Phi}$ as

    \begin{equation}  \mathbf{\Phi} = \mathbf{B}_{22}^T
\end{equation}

  4. Calculate the process noise covariance matrix $\mathbf{Q}$ as

    \begin{equation}  \mathbf{Q} = \mathbf{\Phi} \mathbf{B}_{12}
\end{equation}

Computation

Because the ambiguity related parts of $\mathbf{F}$ are 0 and $\mathbf{G}, \mathbf{W}$ are purely diagonal matrices, the Van-Loan method must be only calculated for the 6x6 top left part of the matrices (position, velocity). The ambiguities can be directly computed in $\mathbf{Q}$ as $\sigma_N^2 \cdot \Delta t$ .

Measurement Model

See [18] Groves2013, p. 419ff

Measurement innovation dz

Measurement vector

\begin{equation}\mathbf{z} =
\left\{\begin{array}{cccc:cccc:cccc}
{ \tilde{\varphi}_{br}^{12}} & { \tilde{\varphi}_{br}^{13}} & \dots & { \tilde{\varphi}_{br}^{1n}} &
{ \tilde{p}_{br}^{12}} & { \tilde{p}_{br}^{13}} & \dots & { \tilde{p}_{br}^{1n}} &
{ \tilde{\dotup{p}}_{br}^{12}} & { \tilde{\dotup{p}}_{br}^{13}} & \dots & { \tilde{\dotup{p}}_{br}^{1n}}
\end{array}\right\}^T
\end{equation}

Measurement innovation

\begin{equation}\boldsymbol{\delta}\mathbf{z} = \overbrace{\mathbf{z}}^{\text{measurement}} - \underbrace{\mathbf{h}(\mathbf{\hat{x}})}_{\text{estimate}}
\end{equation}

where the estimates are

\begin{equation}\mathbf{h}(\mathbf{\hat{x}}) =
\left\{\begin{array}{cccc:cccc:cccc}
  { \hat{\varphi}_{br}^{12}} & { \hat{\varphi}_{br}^{13}} & \dots & { \hat{\varphi}_{br}^{1n}} &
  { \hat{p}_{br}^{12}} & { \hat{p}_{br}^{13}} & \dots & { \hat{p}_{br}^{1n}} &
  { \hat{\dotup{p}}_{br}^{12}} & { \hat{\dotup{p}}_{br}^{13}} & \dots & { \hat{\dotup{p}}_{br}^{1n}}
\end{array}\right\}^T
\end{equation}

Measurement sensitivity Matrix H

\begin{equation}\mathbf{H}_k = \frac{\partial\mathbf{h}(\mathbf{x}, t_k)}{\partial\mathbf{x}}\Biggr\rvert_{x=\hat{x}_k^-}
= \frac{\partial\mathbf{z}(\mathbf{x}, t_k)}{\partial\mathbf{x}}\Biggr\rvert_{x=\hat{x}_k^-}
\end{equation}

with helper definition for the velocities similar to the Line-of-Sight vector

\begin{equation}{\mathbf{u}_{r,v}^s} = \frac{{\mathbf{v}^s} - {\mathbf{v}_r}}{ \rho_r^s}
\end{equation}

Differentiating yields

\begin{equation}\begin{array}{rl}
\mathbf{H}_k &= \left[\begin{array}{ccc:ccc:cccc}
{\text{u}_{r,x}^1} - {\text{u}_{r,x}^2} & {\text{u}_{r,y}^1} - {\text{u}_{r,y}^2} & {\text{u}_{r,z}^1} - {\text{u}_{r,z}^2} & 0 & 0 & 0 & {\lambda_j^1} & 0 & \dots & 0\\
{\text{u}_{r,x}^1} - {\text{u}_{r,x}^3} & {\text{u}_{r,y}^1} - {\text{u}_{r,y}^3} & {\text{u}_{r,z}^1} - {\text{u}_{r,z}^3} & 0 & 0 & 0 & 0 & {\lambda_j^1} & \dots & 0\\
\dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots\\
{\text{u}_{r,x}^1} - {\text{u}_{r,x}^m} & {\text{u}_{r,y}^1} - {\text{u}_{r,y}^m} & {\text{u}_{r,z}^1} - {\text{u}_{r,z}^m} & 0 & 0 & 0 & 0 & 0 & \dots & {\lambda_j^1}\\ \hdashline
{\text{u}_{r,x}^1} - {\text{u}_{r,x}^2} & {\text{u}_{r,y}^1} - {\text{u}_{r,y}^2} & {\text{u}_{r,z}^1} - {\text{u}_{r,z}^2} & 0 & 0 & 0 & 0 & 0 & \dots & 0\\
{\text{u}_{r,x}^1} - {\text{u}_{r,x}^3} & {\text{u}_{r,y}^1} - {\text{u}_{r,y}^3} & {\text{u}_{r,z}^1} - {\text{u}_{r,z}^3} & 0 & 0 & 0 & 0 & 0 & \dots & 0\\
\dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots\\
{\text{u}_{r,x}^1} - {\text{u}_{r,x}^m} & {\text{u}_{r,y}^1} - {\text{u}_{r,y}^m} & {\text{u}_{r,z}^1} - {\text{u}_{r,z}^m} & 0 & 0 & 0 & 0 & 0 & \dots & 0\\ \hdashline
- {\text{u}_{r,v_x}^1} \left({\text{u}_{r,x}^1}\right)^{2} + {\text{u}_{r,v_x}^1} + {\text{u}_{r,v_x}^2} \left({\text{u}_{r,x}^2}\right)^{2} - {\text{u}_{r,v_x}^2} - {\text{u}_{r,v_y}^1} {\text{u}_{r,x}^1} {\text{u}_{r,y}^1} + {\text{u}_{r,v_y}^2} {\text{u}_{r,x}^2} {\text{u}_{r,y}^2} - {\text{u}_{r,v_z}^1} {\text{u}_{r,x}^1} {\text{u}_{r,z}^1} + {\text{u}_{r,v_z}^2} {\text{u}_{r,x}^2} {\text{u}_{r,z}^2} & - {\text{u}_{r,v_x}^1} {\text{u}_{r,x}^1} {\text{u}_{r,y}^1} + {\text{u}_{r,v_x}^2} {\text{u}_{r,x}^2} {\text{u}_{r,y}^2} - {\text{u}_{r,v_y}^1} \left({\text{u}_{r,y}^1}\right)^{2} + {\text{u}_{r,v_y}^1} + {\text{u}_{r,v_y}^2} \left({\text{u}_{r,y}^2}\right)^{2} - {\text{u}_{r,v_y}^2} - {\text{u}_{r,v_z}^1} {\text{u}_{r,y}^1} {\text{u}_{r,z}^1} + {\text{u}_{r,v_z}^2} {\text{u}_{r,y}^2} {\text{u}_{r,z}^2} & - {\text{u}_{r,v_x}^1} {\text{u}_{r,x}^1} {\text{u}_{r,z}^1} + {\text{u}_{r,v_x}^2} {\text{u}_{r,x}^2} {\text{u}_{r,z}^2} - {\text{u}_{r,v_y}^1} {\text{u}_{r,y}^1} {\text{u}_{r,z}^1} + {\text{u}_{r,v_y}^2} {\text{u}_{r,y}^2} {\text{u}_{r,z}^2} - {\text{u}_{r,v_z}^1} \left({\text{u}_{r,z}^1}\right)^{2} + {\text{u}_{r,v_z}^1} + {\text{u}_{r,v_z}^2} \left({\text{u}_{r,z}^2}\right)^{2} - {\text{u}_{r,v_z}^2} & {\text{u}_{r,x}^1} - {\text{u}_{r,x}^2} & {\text{u}_{r,y}^1} - {\text{u}_{r,y}^2} & {\text{u}_{r,z}^1} - {\text{u}_{r,z}^2} & 0 & 0 & \dots & 0\\
- {\text{u}_{r,v_x}^1} \left({\text{u}_{r,x}^1}\right)^{2} + {\text{u}_{r,v_x}^1} + {\text{u}_{r,v_x}^3} \left({\text{u}_{r,x}^3}\right)^{2} - {\text{u}_{r,v_x}^3} - {\text{u}_{r,v_y}^1} {\text{u}_{r,x}^1} {\text{u}_{r,y}^1} + {\text{u}_{r,v_y}^3} {\text{u}_{r,x}^3} {\text{u}_{r,y}^3} - {\text{u}_{r,v_z}^1} {\text{u}_{r,x}^1} {\text{u}_{r,z}^1} + {\text{u}_{r,v_z}^3} {\text{u}_{r,x}^3} {\text{u}_{r,z}^3} & - {\text{u}_{r,v_x}^1} {\text{u}_{r,x}^1} {\text{u}_{r,y}^1} + {\text{u}_{r,v_x}^3} {\text{u}_{r,x}^3} {\text{u}_{r,y}^3} - {\text{u}_{r,v_y}^1} \left({\text{u}_{r,y}^1}\right)^{2} + {\text{u}_{r,v_y}^1} + {\text{u}_{r,v_y}^3} \left({\text{u}_{r,y}^3}\right)^{2} - {\text{u}_{r,v_y}^3} - {\text{u}_{r,v_z}^1} {\text{u}_{r,y}^1} {\text{u}_{r,z}^1} + {\text{u}_{r,v_z}^3} {\text{u}_{r,y}^3} {\text{u}_{r,z}^3} & - {\text{u}_{r,v_x}^1} {\text{u}_{r,x}^1} {\text{u}_{r,z}^1} + {\text{u}_{r,v_x}^3} {\text{u}_{r,x}^3} {\text{u}_{r,z}^3} - {\text{u}_{r,v_y}^1} {\text{u}_{r,y}^1} {\text{u}_{r,z}^1} + {\text{u}_{r,v_y}^3} {\text{u}_{r,y}^3} {\text{u}_{r,z}^3} - {\text{u}_{r,v_z}^1} \left({\text{u}_{r,z}^1}\right)^{2} + {\text{u}_{r,v_z}^1} + {\text{u}_{r,v_z}^3} \left({\text{u}_{r,z}^3}\right)^{2} - {\text{u}_{r,v_z}^3} & {\text{u}_{r,x}^1} - {\text{u}_{r,x}^3} & {\text{u}_{r,y}^1} - {\text{u}_{r,y}^3} & {\text{u}_{r,z}^1} - {\text{u}_{r,z}^3} & 0 & 0 & \dots & 0\\
\dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots\\
- {\text{u}_{r,v_x}^1} \left({\text{u}_{r,x}^1}\right)^{2} + {\text{u}_{r,v_x}^1} + {\text{u}_{r,v_x}^m} \left({\text{u}_{r,x}^m}\right)^{2} - {\text{u}_{r,v_x}^m} - {\text{u}_{r,v_y}^1} {\text{u}_{r,x}^1} {\text{u}_{r,y}^1} + {\text{u}_{r,v_y}^m} {\text{u}_{r,x}^m} {\text{u}_{r,y}^m} - {\text{u}_{r,v_z}^1} {\text{u}_{r,x}^1} {\text{u}_{r,z}^1} + {\text{u}_{r,v_z}^m} {\text{u}_{r,x}^m} {\text{u}_{r,z}^m} & - {\text{u}_{r,v_x}^1} {\text{u}_{r,x}^1} {\text{u}_{r,y}^1} + {\text{u}_{r,v_x}^m} {\text{u}_{r,x}^m} {\text{u}_{r,y}^m} - {\text{u}_{r,v_y}^1} \left({\text{u}_{r,y}^1}\right)^{2} + {\text{u}_{r,v_y}^1} + {\text{u}_{r,v_y}^m} \left({\text{u}_{r,y}^m}\right)^{2} - {\text{u}_{r,v_y}^m} - {\text{u}_{r,v_z}^1} {\text{u}_{r,y}^1} {\text{u}_{r,z}^1} + {\text{u}_{r,v_z}^m} {\text{u}_{r,y}^m} {\text{u}_{r,z}^m} & - {\text{u}_{r,v_x}^1} {\text{u}_{r,x}^1} {\text{u}_{r,z}^1} + {\text{u}_{r,v_x}^m} {\text{u}_{r,x}^m} {\text{u}_{r,z}^m} - {\text{u}_{r,v_y}^1} {\text{u}_{r,y}^1} {\text{u}_{r,z}^1} + {\text{u}_{r,v_y}^m} {\text{u}_{r,y}^m} {\text{u}_{r,z}^m} - {\text{u}_{r,v_z}^1} \left({\text{u}_{r,z}^1}\right)^{2} + {\text{u}_{r,v_z}^1} + {\text{u}_{r,v_z}^m} \left({\text{u}_{r,z}^m}\right)^{2} - {\text{u}_{r,v_z}^m} & {\text{u}_{r,x}^1} - {\text{u}_{r,x}^m} & {\text{u}_{r,y}^1} - {\text{u}_{r,y}^m} & {\text{u}_{r,z}^1} - {\text{u}_{r,z}^m} & 0 & 0 & \dots & 0\\
\end{array}\right]
\end{array}
\end{equation}

Measurement noise covariance matrix R

Correlated measurement error

Because of the double differences, the measurements are correlated which causes the $\mathbf{R}$ matrix to have non diagonal elements. According to the propagation of uncertainty one can write this as:

\begin{equation}\mathbf{R} = \mathbf{J} \cdot \mathbf{\tilde{R}} \cdot \mathbf{J}^T
\end{equation}

where

  • $\mathbf{\tilde{R}}$ is the uncorrelated measurement error described below
  • $\mathbf{J}$ is the Jacobi-Matrix $J_{ij} = \dfrac{\partial h_i}{\partial z_r^s}$ with $z_r^s$ being the Single GNSS Observation Equation (see [48] SpringerHandbookGNSS2017, p.606 / [35] Morton2020-vol1, p. 483 / [18] Groves2013, p. 443)

For the double difference measurements the estimates are

\begin{equation}h = \left[\begin{matrix}
  {p_b^1} - {p_b^2} - {p_r^1} + {p_r^2}\\
  {p_b^1} - {p_b^3} - {p_r^1} + {p_r^3}\\
  \dots\\
  {p_b^1} - {p_b^m} - {p_r^1} + {p_r^m}\\ \hline
  {\varphi_b^1} - {\varphi_b^2} - {\varphi_r^1} + {\varphi_r^2}\\
  {\varphi_b^1} - {\varphi_b^3} - {\varphi_r^1} + {\varphi_r^3}\\
  \dots\\
  {\varphi_b^1} - {\varphi_b^m} - {\varphi_r^1} + {\varphi_r^m}\\ \hline
  {\dotup{p}_b^1} - {\dotup{p}_b^2} - {\dotup{p}_r^1} + {\dotup{p}_r^2}\\
  {\dotup{p}_b^1} - {\dotup{p}_b^3} - {\dotup{p}_r^1} + {\dotup{p}_r^3}\\
  \dots\\
  {\dotup{p}_b^1} - {\dotup{p}_b^m} - {\dotup{p}_r^1} + {\dotup{p}_r^m}\\
\end{matrix}\right]
\end{equation}

which leads to the following $\sigma$ means variances, not standard deviations

\begin{equation}\mathbf{\tilde{R}} =
    \left[\begin{array}{ccccccccc|ccccccccc|ccccccccc}
        {\sigma_{\varphi,r}^1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
        0 & {\sigma_{\varphi,b}^1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
        0 & 0 & {\sigma_{\varphi,r}^2} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
        0 & 0 & 0 & {\sigma_{\varphi,b}^2} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
        0 & 0 & 0 & 0 & {\sigma_{\varphi,r}^3} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
        0 & 0 & 0 & 0 & 0 & {\sigma_{\varphi,b}^3} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
        0 & 0 & 0 & 0 & 0 & 0 & \ddots & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
        0 & 0 & 0 & 0 & 0 & 0 & 0 & {\sigma_{\varphi,r}^m} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
        0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & {\sigma_{\varphi,b}^m} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\hline
        0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & {\sigma_{p,r}^1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
        0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & {\sigma_{p,b}^1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
        0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & {\sigma_{p,r}^2} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
        0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & {\sigma_{p,b}^2} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
        0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & {\sigma_{p,r}^3} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
        0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & {\sigma_{p,b}^3} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
        0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \ddots & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
        0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & {\sigma_{p,r}^m} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
        0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & {\sigma_{p,b}^m} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\hline
        0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & {\sigma_{d,r}^1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
        0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & {\sigma_{d,b}^1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
        0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & {\sigma_{d,r}^2} & 0 & 0 & 0 & 0 & 0 & 0 \\
        0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & {\sigma_{d,b}^2} & 0 & 0 & 0 & 0 & 0 \\
        0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & {\sigma_{d,r}^3} & 0 & 0 & 0 & 0 \\
        0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & {\sigma_{d,b}^3} & 0 & 0 & 0 \\
        0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \ddots & 0 & 0 \\
        0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & {\sigma_{d,r}^m} & 0 \\
        0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & {\sigma_{d,b}^m} \\
    \end{array}\right]
\end{equation}

\begin{equation}\mathbf{J} =
    \left[\begin{array}{ccccccccc|ccccccccc|ccccccccc}
        -1 & 1 & 1 & -1 & 0 & 0 & \dots & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \dots & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \dots & 0 & 0\\
        -1 & 1 & 0 & 0 & 1 & -1 & \dots & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \dots & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \dots & 0 & 0\\
        \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots\\
        -1 & 1 & 0 & 0 & 0 & 0 & \dots & 1 & -1 & 0 & 0 & 0 & 0 & 0 & 0 & \dots & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \dots & 0 & 0\\\hline
        0 & 0 & 0 & 0 & 0 & 0 & \dots & 0 & 0 & -1 & 1 & 1 & -1 & 0 & 0 & \dots & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \dots & 0 & 0\\
        0 & 0 & 0 & 0 & 0 & 0 & \dots & 0 & 0 & -1 & 1 & 0 & 0 & 1 & -1 & \dots & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \dots & 0 & 0\\
        \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots\\
        0 & 0 & 0 & 0 & 0 & 0 & \dots & 0 & 0 & -1 & 1 & 0 & 0 & 0 & 0 & \dots & 1 & -1 & 0 & 0 & 0 & 0 & 0 & 0 & \dots & 0 & 0\\\hline
        0 & 0 & 0 & 0 & 0 & 0 & \dots & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \dots & 0 & 0 & -1 & 1 & 1 & -1 & 0 & 0 & \dots & 0 & 0\\
        0 & 0 & 0 & 0 & 0 & 0 & \dots & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \dots & 0 & 0 & -1 & 1 & 0 & 0 & 1 & -1 & \dots & 0 & 0\\
        \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots & \dots\\
        0 & 0 & 0 & 0 & 0 & 0 & \dots & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \dots & 0 & 0 & -1 & 1 & 0 & 0 & 0 & 0 & \dots & 1 & -1
    \end{array}\right]
\end{equation}

As the $\mathbf{J}$ matrix has a block for each observation type and the $\mathbf{\tilde{R}}$ matrix is diagonal, we can calculate each part separately and join them into the final $\mathbf{R}$ matrix like

\begin{equation}\mathbf{R} = \begin{bmatrix}
    \mathbf{R}_\varphi & \mathbf{0} & \mathbf{0} \\
    \mathbf{0} & \mathbf{R}_p & \mathbf{0} \\
    \mathbf{0} & \mathbf{0} & \mathbf{R}_d \\
\end{bmatrix}
\end{equation}

Uncorrelated Measurement Error

  • Increased noise of Single Difference, compared to separate measurements: $\sigma_{br} = \sqrt{2}\sigma$
  • Increased noise of Double Difference, compared to separate measurements: $\sigma_{br}^{1s} = \sqrt{4}\sigma = 2\sigma$
  • But errors are correlated, so the error propagation above is applied
GNSS measurement error

See [47] rtklibexplorer2021, eq. E.6.24, p. 162

\begin{equation}\begin{array}{rl}
\sigma_{pj}^2     &= {F^s}^2 {R_r}^2 \left(a_\sigma^2 + \frac{b_\sigma^2}{\sin^2{\text{El}_r^s}} \right) \\
\sigma_{\phi j}^2 &= {F^s}^2 \left(a_\sigma^2 + \frac{b_\sigma^2}{\sin^2{\text{El}_r^s}} \right) \\
\end{array}
\end{equation}

where:

\begin{equation*}\begin{array}{cl}
F^s                & \text{Satellite system error factor (1:GPS, Galileo, QZSS and BeiDou, 1.5: GLONASS, 3.0: SBAS)} \\
R_r                & \text{Code/Carrier-phase error ratio (default value is 100)} \\
a_\sigma, b_\sigma & \text{Carrier-phase error factor $a$ and $b$ [m] (default values are 0.003m for both factors)} \\
\sigma_{dj}        & \text{Doppler Frequency error factor [Hz] (default value is 1 Hz)} \\
\end{array}
\end{equation*}

GNSS measurement error

See [18] Groves2013, p. 422f

\begin{equation*}\begin{array}{rl}
\sigma_{pj}^2     &= \dfrac{1}{\sin^2({el})} \left( \sigma_{pZ}^2 + \dfrac{\sigma_{pc}^2}{(c/n_0)_j} + \sigma_{pa}^2 \ddot{r}_{aj}^2 \right)\\
\sigma_{\phi j}^2 &= \dfrac{1}{\sin^2({el})} \left( \sigma_{\phi Z}^2 + \dfrac{\sigma_{\phi c}^2}{(c/n_0)_j} + \sigma_{\phi a}^2 \ddot{r}_{aj}^2 \right)\\
\end{array}
\end{equation*}

  • coefficients $\sigma_{pZ}$, $\sigma_{pc}$, $\sigma_{pa}$, $\sigma_{\phi Z}$, $\sigma_{\phi c}$ and $\sigma_{\phi a}$ should be determined empirically
  • $\ddotup{r}_{aj}$ Range acceleration [groves2013, Appendix G.4.1] (probably not necessary)

Measurement Innovation validation

Normalized Innovation Squared (NIS)

See Dingler2022-NIS

\begin{equation}\text{NIS} (\boldsymbol{\delta}\mathbf{z}_k,\mathbf{S}_k) = \epsilon_{\boldsymbol{\delta}\mathbf{z}_k} = \boldsymbol{\delta}\mathbf{z}_k^T \mathbf{S}_k^{-1} \boldsymbol{\delta}\mathbf{z}_k
\end{equation}

where

  • Measurement innovation $\boldsymbol{\delta}\mathbf{z}$
  • $n_z = \text{dim}( \boldsymbol{\delta}\mathbf{z} )$ degrees of freedom is the the dimension of the measurement vector
  • $\mathbf{S}(k) = \mathbf{H}_{k} \mathbf{P}_{k}^{-} \mathbf{H}_{k}^\text{T} + \mathbf{R}_{k}$ Innovation Covariance Matrix

NIS accepted if

\begin{equation}\epsilon_{\boldsymbol{\delta}\mathbf{z}} \in [r_1,r_2] \text{.}
\end{equation}

where $[r_1,r_2]$ is the confidence interval

\begin{equation}r_1 = F^{-1} ( \frac{\alpha}{2}, n_z ), \ r_2 = F^{-1} ( 1- \frac{\alpha}{2}, n_z ) \text{.}
\end{equation}

and can be calculated with the inverse cumulative distribution function $F^{-1}$ (also called Quantile function) of the chi-squared distribution (Chi Squared Distribution - Boost 1.85.0 - quantile function)

Chi-squared distribution - Wikipedia (Incomplete Gamma Functions - Boost 1.85.0)

\begin{equation}\text{CDF} = \frac{1}{\Gamma(k/2)} \gamma \left( \frac{k}{2}, \frac{x}{2} \right), \quad \text{gamma\_p(a, z)} = \frac{\gamma(a, z)}{\Gamma(a)}
\end{equation}

Gamma function - Wikipedia

\begin{equation}\Gamma (z) = \int_0^\infty t^{z-1} e^{-t} dt
\end{equation}

Lower incomplete gamma function - Wikipedia

\begin{equation}\gamma (s, x) = \int_0^x t^{s-1} e^{-t} dt
\end{equation}

One sided Test

Test only $\epsilon_{\boldsymbol{\delta}\mathbf{z}} \le r_2$ with $r_2 = F^{-1} ( 1 - \alpha, n_z )$

KF scheme with NIS test

NIS only tells that something is wrong, not what. Need to look at post-fit residuals to find incorrect measurements.

Ambiguity resolution

Correcting float state

Readjusting the float estimator $\boldsymbol{\hat{b}}$ with the ambiguity residual $\boldsymbol{\hat{a}} - \boldsymbol{\check{a}}$

\begin{equation}\begin{aligned}
  \boldsymbol{\check{b}}                       & = \boldsymbol{\hat{b}} - \mathbf{Q}_{\boldsymbol{\hat{b}\hat{a}}} \mathbf{Q}_{\boldsymbol{\hat{a}\hat{a}}}^{-1} \left( \boldsymbol{\hat{a}} - \boldsymbol{\check{a}} \right)         \\
  \mathbf{Q}_{\boldsymbol{\check{b}\check{b}}} & = \mathbf{Q}_{\boldsymbol{\hat{b}\hat{b}}} - \mathbf{Q}_{\boldsymbol{\hat{b}\hat{a}}} \mathbf{Q}_{\boldsymbol{\hat{a}\hat{a}}}^{-1} \mathbf{Q}_{\boldsymbol{\hat{a}\hat{b}}}
\end{aligned}
\end{equation}

Updating Ambiguity covariance

After fixing the ambiguities we do a Kalman Filter update with the ambiguities

Measurement innovation dz

Measurement vector

\begin{equation}\mathbf{z} =
\left\{\begin{array}{cccc}
{\check{N}_{br}^{12}} & {\check{N}_{br}^{13}} & \dots & {\check{N}_{br}^{1m}}
\end{array}\right\}^T
\end{equation}

Measurement innovation

This is the difference between the current ambiguities in the state vector and the fixed ambiguities here

\begin{equation}\boldsymbol{\delta}\mathbf{z} = \mathbf{z} - \mathbf{h}(\mathbf{\hat{x}})
\end{equation}

Measurement sensitivity Matrix H

This extends the previously stated $\mathbf{H}$ matrix

\begin{equation}\overbrace{
  \begin{bmatrix}
    {\check{N}_{br}^{12}} \\
    {\check{N}_{br}^{13}} \\
    \vdots \\
    {\check{N}_{br}^{1m}} \\
  \end{bmatrix}
}^{\mathbf{z}} =
\overbrace{
\left[ \begin{array}{cc:cccc}
\mathbf{0}_{1x3} & \mathbf{0}_{1x3} &    1   &   0    & \dots  & 0 \\
\mathbf{0}_{1x3} & \mathbf{0}_{1x3} &    0   &   1    & \dots  & 0 \\
     \vdots      &      \vdots      & \vdots & \vdots & \ddots & \vdots \\
\mathbf{0}_{1x3} & \mathbf{0}_{1x3} &    0   &   0    & \dots  & 1 \\
\end{array} \right]}^{\mathbf{H}}
\overbrace{
  \begin{bmatrix}
    { \mathbf{r}_{br} } \\
    { \mathbf{v}_{br} } \\\hline
    {N_{br}^{12}} \\
    {N_{br}^{13}} \\
    \vdots \\
    {N_{br}^{1m}} \\
  \end{bmatrix}
}^{\mathbf{x}}
\end{equation}

Measurement noise covariance matrix R

\begin{equation}\mathbf{R} = \left[ \begin{array}{cccc}
\sigma_{N}^2 &   0    & \dots & 0 \\
   0   & \sigma_{N}^2 & \dots & 0 \\
\vdots & \vdots & \ddots & \vdots \\
   0   &   0    & \dots & \sigma_{N}^2 \\
\end{array} \right]
\end{equation}

with $\sigma_{N}^2$ being very small, e.g. $10^{-6}$