As denoted in (1), detrended SNR can be expressed as a function of elevation angle \(\varepsilon\), reflector height \(h\left( t \right)\), damping \(\varLambda\), amplitude \(A\), and phase \(\phi\). The latter two parameters are satellite system specific and must thus be estimated separately for each GNSS, as well as for each frequency. On the other hand, reflector height and damping are common to all SNR observations, which means that the combination of several GNSS will improve the estimation of all parameters and reduce the risk of having outliers bias the target parameters.
Damping, amplitude, and phase mostly depend on slowly changing parameters in the environment around a station. Therefore, they can be modeled with a random walk process that has very small process noise. However, for the sea surface height, it is hard to find a dynamic model that works for different sites, as the instantaneous sea level can be both driven by astronomical and meteorological tides to a varying extent, depending on the site and its location. Therefore, we turn instead to the B-spline method used by Strandberg et al. (2016). This approach uses quadratic B-spline coefficients in order to represent the temporal variations of the reflector height. In general, the Kalman filter state vector can only have a finite number of parameters. Thus, if we want to be able to use a Kalman filter without being limited to a fixed time interval, we have to change the definition range of our B-splines while the filter is running.
Dynamic introduction of B-spline coefficients
If temporal changes of the reflector height \(h\left( t \right)\) are described by quadratic B-spline functions \(B_{i}^{2}\), we only need to estimate a set of scaling coefficients \(\alpha_{i}\). Then, we are able to evaluate the function at any point in time, i.e.
$$h\left( t \right) = \mathop \sum \limits_{i} \alpha_{i} B_{i}^{2} \left( t \right)$$
(17)
Considering now that B-spline functions are defined on the zero-degree base function
$$B_{i} \left( t \right) = \left\{ {\begin{array}{l l} 1 & \text{if } t_{i} \le t \le t_{i + 1} \\ 0 & \text{otherwise} \end{array} } \right.$$
(18)
and the recursive relation
$$B_{i}^{k} \left( t \right) = \frac{{t - t_{i} }}{{t_{i + k} - t_{i} }}B_{i}^{k - 1} \left( t \right) + \frac{{t_{i + k + 1} - t}}{{t_{i + k} - t_{i} }}B_{i + 1}^{k - 1} \left( t \right)$$
(19)
it is obvious that the evaluation of (18) for any higher degree \(k\) at a certain point in time \(t\) does only require the knowledge of four node values that surround the epoch of interest. However, for evaluating \(h\left( t \right)\) at any arbitrary epoch, the knowledge of all scaling coefficients \(\alpha_{i}\) is necessary. In case of dynamic filtering, this restriction poses a problem, as the dimension of the state vector depends on the total length of the observational time series and is not predictable unless data are processed in batches. However, as this contradicts the idea of continuous Kalman filtering, we have to use another method. One method for using B-splines in a Kalman setting, presented by Jauch et al. (2017), is based on utilizing a fixed set of parameters, and periodically changing the definition range. This concept is illustrated in Fig. 2 and makes use of the fact that B-spline base functions are compactly supported, i.e., they are only valid over a certain interval.
As stated earlier, four quadratic B-spline functions are necessary to model \(h\left( t \right)\) at any given epoch. If we consider that we only need to have those B-spline coefficients in the state vector that relate to the current update epoch, the state vector is of constant size. However, as one approaches an epoch where a new B-spline base function is necessary to cover the definition range, some actions are needed to deal with this special case. As shown in Fig. 2, the four B-spline coefficients and the corresponding covariances are continuously updated as the filter moves along in time until the point \(t_{j}\) where the new node at \(t_{j + 1}\) needs to be introduced and the node which is no longer required (\(\alpha_{i - 3}\)) has to be dropped from the state vector. As nodes \(\alpha_{i - 2}\), \(\alpha_{i - 1}\), and \(\alpha_{i}\) are still needed, they change position in the state vector to become the first three entries for the B-spline representation, which opens the space for the new node, to be put on the fourth location in the state vector. As depicted in the second step in Fig. 2, the initialization of the new node happens with the estimated value of the third node and a slightly larger variance, which allows that following updates will correct the coefficient according to the next SNR measurements. Correlations between the new coefficients and the other three coefficients are reconstructed from the covariance matrix before the shifting takes place. Having introduced the new coefficients and considered their new validity range, the filter can continue with the normal prediction/update sequence and estimate reflector height, damping, amplitudes, and phases continuously and in close real time. As the latter parameter types are modeled as random walk processes, there is no need for special considerations, except that only those satellite-specific parameters are updated when the particular satellites are in view at a certain point in time. B-spline coefficients which are no longer in the state vector are stored on disk so that one can later obtain a timer series of \(h\left( t \right)\) or evaluate the reflector height at any given point in time.
The choice of the stochastic model
While B-spline coefficients are treated as constant parameters, i.e., having zero process noise and periodically being exchanged for new nodes with some uncertainty, the other parameters are modeled as random walk processes in order to consider that environmental changes can lead to variations of these parameters. For example, the amplitudes and the damping coefficient are related to the reflectivity and thus allow concluding on parameters like ice coverage (Strandberg et al. 2017) or vegetation (Small et al. 2010). Considering that the phase of the SNR interference pattern relates, for example, to soil moisture, it is obvious that also this parameter should be allowed to vary over time.
While the filter determines estimates of the system-dependent parameters amplitude and phase for each GNSS and frequency, they are assumed to behave statistically similarly across all systems. Thus, the process noises of all amplitudes are the same, as well as the process noises for all phase parameters. This choice was made to limit the search space in order to find functional settings.
The values have been chosen to guarantee a stable solution on 20-day long data sets used for testing purposes, without any diverging parameters. The effects of changing the respective process noise variances are presented in Fig. 3. Based on these results, the chosen model parameters used for dynamic inversion of the SNR observations are presented in Table 1. As the true observation noise for the SNR data is unknown, the observation noise is estimated per satellite system and frequency from the average residual of the last hour of SNR observations, resulting in noise variances around 100–200 V per volt squared (V/V)2.
Table 1 Process types and noises of the parameters of the prediction function of the Kalman filter
To be able to run the filter in real time, it is also necessary to perform the aforementioned detrending of the SNR series in real time as well. The trend depends largely on the equipment used, and the surroundings of the antenna (Nievinski and Larson 2014a), and is therefore only slowly varying in time. Here, we introduce two alternatives which take advantage of the stability of the trends: Either the polynomial coefficients are introduced as parameters in the state vector of the Kalman filter, or the polynomial for each recurring arc is determined through a running average of the last few passages. To not increase the number of parameters in the filter overly much, we chose to use the second alternative.