Considering the low precision of pseudo-ranges, carrier-phase observations are used to improve the precision of ionospheric delay corrections. For each SBAS reference station, the real-time carrier-phase observations \(L_{{1}} ,L_{{2}}\) of two frequencies \(f_{{1}} ,f_{{2}}\) can be written as:

$$ \left\{ {\begin{array}{*{20}c} {L_{{1}} =\uprho (r^{s} ) + c \cdot (\tau^{r} - \tau^{s} ) + N_{1} + B_{1} - mf \cdot I_{1} + T + \varepsilon_{1} } \\ {L_{{2}} =\uprho (r^{s} ) + c \cdot (\tau^{r} - \tau^{s} ) + N_{2} + B_{2} - mf \cdot I_{2} + T + \varepsilon_{2} } \\ \end{array} } \right. $$

(11)

Compared with Eq. (4), the UPDs of satellites and receivers have been grouped into \(B_{{1}} ,B_{{2}}\), and \(N_{{1}} ,N_{{2}}\) are the phase ambiguity term of the two frequencies in meter. The vertical ionospheric delay for the first frequency \(I_{1}\) can be derived as:

$$ I_{1} = \frac{{f_{2}^{2} }}{{f_{1}^{2} - f_{2}^{2} }} \cdot \left( {L_{{1}} - L_{{2}} + N_{1} - N_{2} + B_{1} - B_{2} } \right) $$

(12)

Again, real-time carrier-phase requires sophisticated ambiguity handling strategies, and therefore the epoch-differenced approach is used for slant ionospheric delay calculation:

$$\Delta I_{1} = I_{1} \left( {t_{i} } \right) - I_{1} \left( {t_{i - 1} } \right) = \frac{{f_{2}^{2} }}{{f_{1}^{2} - f_{2}^{2} }}\left\{ {\left[ {L_{{1}} \left( {t_{i} } \right) - L_{{2}} \left( {t_{i} } \right)} \right] - \left[ {L_{{1}} \left( {t_{i - 1} } \right) - L_{{2}} \left( {t_{i - 1} } \right)} \right]} \right\} $$

(13)

where \(L_{{1}} \left( {t_{i} } \right),L_{{2}} \left( {t_{i} } \right),L_{{1}} \left( {t_{i - 1} } \right),L_{{2}} \left( {t_{i - 1} } \right)\) are carrier-phase observations of two frequencies at epochs \( i\) and \(i - 1\). The ambiguity term and carrier-phase UPDs are cancelled out in Eq. (13). Based on Eq. (13), the vertical ionospheric delay changes at IPPs between two adjacent epochs can be derived.

### Pseudo-range and carrier-phase combined corrections

The absolute correction parameters of satellite orbit/clock and ionospheric delay can be calculated by the pseudo-range based algorithms using Eqs. (2) and (10). And epoch-differenced correction parameters can be derived by the carrier-phase based algorithms using Eqs. (8) and (13). For BDS SBAS processing, the absolute and epoch-differenced correction parameters are combined using the following algorithm.

Define the best estimated satellite orbit/clock or ionospheric delay corrections at epoch \(i\) as \(\hat{x}_{i}\), the pseudo-range based solution as \(x_{c,i}\) and the epoch-differenced solution as \(x_{\varphi ,i} ,x_{\varphi ,i - 1}\). For each processed data batch, the pseudo-range based and the carrier-phase based solutions can be regarded as pseudo-observations of \(\widehat{{x_{i} }}\):

$$ \left\{ {\begin{array}{*{20}c} {\hat{x}_{i} - x_{c,i} = v_{c,i} } & {P_{c,i} } \\ {\left( {\hat{x}_{i} - \hat{x}_{i - 1} } \right) - \left( {x_{\varphi ,i} - x_{\varphi ,i - 1} } \right) = v_{{{\Delta }\varphi {\text{,i}}}} } & {P_{\varphi ,i} P_{\varphi ,i} } \\ \end{array} } \right.\quad i = 1,2, \ldots ,n $$

(14)

where \(v_{{\text{c,i}}}\) and \(v_{{\Delta \varphi ,{\text{i}}}}\) are the residuals of the pseudo-range and carrier-phase based solutions, respectively; \(P_{c,i} ,{ }P_{\varphi ,i}\) are weighting factors; and n is the number of epochs in the processed data batch, which is normally set to 10–20 in the BDS SBAS processing.

At epoch *i*, the weighting factor \(P_{c,i} ,P_{\varphi ,i}\) are derived by:

$$ P_{{\text{c,i}}} = \frac{{\sigma_{c}^{2} }}{{\sigma_{c,i}^{2} \left( {t_{i} } \right)}}\quad P_{\varphi ,i} = \frac{{\sigma_{\varphi }^{2} }}{{\sigma_{\varphi ,i}^{2} \left( {t_{i} } \right)}} $$

(15)

where \(\sigma_{c} ,\sigma_{\varphi }\) are the nominal errors of pseudo-range and carrier-phase observations and \(\sigma_{{{\text{c,}},i}} \left( {t_{i} } \right),{\upsigma }_{\varphi ,i} \left( {t_{i} } \right)\) are the estimated parameter errors in the previous steps.

For all n observations in the processed data batch, Eq. (14) can be cumulated as:

$$ \left\{ {\begin{array}{*{20}c} {{\varvec{E}}^{{\text{T}}} \cdot {\varvec{P}}_{c} \cdot E \cdot \hat{x}{\text{ = E}}^{{\text{T}}} \cdot {\varvec{P}}_{c} \cdot x_{c} } \\ {{\varvec{C}}^{{\text{T}}} \cdot {\varvec{P}}_{\varphi } \cdot C \cdot \hat{x}{\text{ = C}}^{{\text{T}}} \cdot P_{\varphi } \cdot {\Delta x}_{\varphi } } \\ \end{array} } \right. $$

(16)

with \({\varvec{E}}\) being unit matrix, \(P_{c} ,P_{\varphi }\) are diagonal weighting matrices and \({\varvec{C}}\) has the form of:

$$ {\varvec{C}} = \left( {\begin{array}{*{20}c} { - 1} & 1 & 0 & \ldots & 0 & 0 \\ 0 & { - 1} & 1 & \ldots & 0 & 0 \\ \vdots & \vdots & \vdots & {} & \vdots & \vdots \\ 0 & 0 & 0 & \ldots & { - 1} & 1 \\ \end{array} } \right)_{n \times n} $$

(17)

$$ \begin{aligned} \hat{x} & = \left( {\begin{array}{*{20}c} {\hat{x}_{1} } & {\hat{x}_{2} } & \ldots & {\hat{x}} \\ \end{array}_{n} } \right)^{{\text{T}}} \\ x_{c} & = \left( {\begin{array}{*{20}c} {x_{{\text{c,1}}} } & {x_{{\text{c,2}}} } & \ldots & {x_{{\text{c,n}}} } \\ \end{array} } \right)^{{\text{T}}} \\ {\Delta x}_{\varphi } & = \left( {\begin{array}{*{20}c} {x_{{{{\varphi ,2}}}} - {\text{x}}_{{{{\varphi ,1}}}} } & {x_{{{{\varphi ,3}}}} - {\text{x}}_{{{{\varphi ,2}}}} } & \ldots & {x_{{{{\varphi ,n}}}} - {\text{x}}_{{{{\varphi ,n}} - {1}}} } \\ \end{array} } \right)^{{\text{T}}} \\ \end{aligned} $$

(18)

Solving Eq. (16) using the least squares method, we can derive the real-time satellite orbit/clock and ionospheric correction parameters with pseudo-range and carrier-phase combined for each epoch of the processed data batch. Using the derived parameters, the rate of SBAS corrections can be further derived based on linear fitting using the data of defined number of consequent epochs.

In the algorithm, the precise phase observations are used to determine only accurate temporal changes of the parameters because of the existence of phase ambiguities, whereas the range observations are used to determine the constant offset of each parameter. The latter is necessary to align the parameters to the references. Because of lower weighting due to the relatively high noise level, the range observations barely contribute to the temporal parameter changes and the biased parameter offset does not affect the modeling of phase observations because it will be absorbed by the corresponding ambiguity parameter. However, the range observations must be down-weighted accordingly to avoid the contamination of such biases.

### Ionospheric grid corrections

Based on the algorithms in the previous sections, the vertical ionospheric delays can be derived for each epoch at IPPs in the processed data batch. As shown in Fig. 1, the vertical ionospheric delay of each IPP (\(I^{{{\text{IPP}}}}\)) can be interpolated from the vertical ionospheric delays at four surrounding IGPs using the formula (19).

$$ I^{{{\text{IPP}}}} = \frac{{\mathop \sum \nolimits_{1}^{4} p_{j} \cdot \left[ {I_{0}^{j} + \left( {t_{i} - {\text{t}}_{0} } \right)\dot{I}_{0}^{j} } \right]}}{{\mathop \sum \nolimits_{1}^{4} p_{j} }} $$

(19)

where \(p_{j}\) is the weight function of each IGP. At epoch i, the vertical ionospheric delay of (IGPs) is modeled as a linear function \(I_{0}^{j} + \left( {t_{i} - {\text{t}}_{0} } \right)\dot{I}_{0}^{j}\), where \(I_{0}^{j} {,}\ \dot{I}_{0}^{j}\) are ionospheric delay and its rate at reference time \(t_{0}\).

Using the vertical ionospheric delays of multiple IPPs in the grid shown in Fig. 1, the vertical ionospheric delays of the four IGPs can be derived based on the least squares estimator.

### Partition comprehensive corrections

With the real-time satellite orbit/clock errors corrected using the above-estimated correction algorithms, ionosphere-free pseudo-range and carrier-phase observation residuals \({\text{d}}P_{IF} ,\;{\text{d}}L_{IF}\) at each SBAS reference station can be written as:

$$ \begin{aligned} {\text{d}}\tilde{P}_{{{\text{IF}}}} & = P_{{{\text{IF}}}} - [\tilde{\rho } - c \cdot \tilde{\tau }^{s} + (b^{r} - b^{s} ) + T ] \\ {\text{d}}\tilde{L}_{{{\text{IF}}}} & = L_{{{\text{IF}}}} - [\tilde{\rho } - c \cdot \tilde{\tau }^{s} + (B^{r} - B^{s} ) + T ] \\ \end{aligned} $$

(20)

where \(\tilde{\rho }\) is geometric range calculated with satellite orbit corrections, \(\tilde{\tau }^{s} = \tau^{s} + {\text{d}}\tau^{s}\) is the satellite clock offset corrected with clock correction parameter. The observation residuals are the OSR based corrections and can be used to correct the remaining errors in observations. The basic philosophy of the BDS SBAS PCC is that the observation residual errors of a satellite are almost the same for the ground stations with less than few hundred kilometers apart. Thus, the observation residual errors of each satellite at each epoch can be represented by one OSR parameter over the whole region. The BDS SBAS designs 18 partitions over its key service area, where each partition covers an area with radius of up to 800–1000 km.

Equation (20) contains the receiver clock offset and ambiguity term. In order to reduce the digital range of carrier-phase PCC in broadcast messages, the receiver clock offsets are corrected using pseudo-range estimates:

$$ c \cdot \tilde{\tau }^{r} = \frac{{\mathop \sum \nolimits_{j = 1}^{m} {\text{d}}\tilde{P}_{{{\text{IF}},i}} }}{m} $$

(21)

where \(m\) is the number of the tracked satellites at a reference station at epoch \(i\). The ambiguity term can also be corrected using the following equation:

$$ \tilde{N} = {\text{d}}\tilde{L}_{{{\text{IF}}}} - c \cdot \tilde{\tau }^{r} $$

(22)

Thus, considering the approximate receiver clock and ambiguity, the PCC for this satellite/station pair can be written as:

$$ {\text{d}}L_{{{\text{IF}}}} = L_{{{\text{IF}}}} - [\tilde{\rho } + c \cdot (\tilde{\tau }^{r} - \tilde{\tau }^{s} ) + \tilde{N} + (B^{r} - B^{s} ) + T] $$

(23)

To ensure the reliability and integrity, redundant SBAS reference stations are established for each partition, and the PCC parameters \({\text{d}}L_{IF}\) can be obtained with the following equation:

$$ {\text{d}}L_{{{\text{IF}}}} = \frac{{\mathop \sum \nolimits_{i = 1}^{k} w_{i} \cdot {\text{d}}L_{{{\text{IF}},i}} }}{k} $$

(24)

where \({\text{d}}L_{{{\text{IF}},i}}\) is the PCC based on each reference station, \(w_{i}\) is the weight factor of each station, and k is the number of SBAS reference stations of this partition.