Ionospheric Fringe Fitting: Solving for Differential TEC
The MHO_IonosphericFringeFitter class extends the standard three-dimensional
fringe-fitting algorithm by adding a fourth search dimension: the differential
Total Electron Content (dTEC) between the reference and remote stations.
This addresses the dispersive ionospheric phase, which scales as \(\nu^{-1}\)
with observing frequency, and can severely degrade the coherent
combination of wide-band visibility data when left uncorrected.
Physical Background
The ionosphere is a plasma layer in the Earth’s upper atmosphere that introduces a frequency-dependent phase delay to radio signals. This phase delay depends on the integrated total electron content (TEC) along the propagation path. For a particluar station A and source S the instantaneous line-of-sight (or slant) TEC (STEC) is given by:
The differential TEC (dTEC) for the baseline AB is the difference in the integrated electron column density along the line of sight from each of the two stations to the source:
A non-zero dTEC has the effect of accumulating a frequency dependent phase over the VLBI visibilities, which to first order (and ignoring time dependence) is approximately [Cappallo2016]:
where:
Variable |
Description |
Units |
|---|---|---|
\(\kappa_{\mathrm{ion}} = -8.448 \times 10^9\) |
Ionospheric constant |
\(\mathrm{rad \cdot Hz \cdot TECu}^{-1}\) |
\(\mathrm{dTEC}\) |
Differential TEC |
\(\mathrm{TECu}\) [1] |
\(\nu_c\) |
Channel center frequency |
\(\mathrm{MHz}\) |
Because the ionospheric effect scales as \(1/\nu\), lower-frequency channels experience larger phase rotations. Over a multi-GHz bandwidth, this differential phase can smear the fringe amplitude across the band, making it indistinguishable from a multi-band delay error if uncorrected. Removing the effect of the dTEC is crucial for VGOS geodetic observations.
Ionospheric Phase Correction Operator
The class MHO_IonosphericPhaseCorrection applies a dTEC correction
in-place on the visibility tensor. For each channel, the operator:
Retrieves the channel’s sky frequency \(\nu_c\), bandwidth \(B_c\), and net sideband (USB/LSB/DSB).
Computes the channel’s center frequency: \(\nu_{c,\mathrm{center}} = 0.5 \cdot (\nu_{\mathrm{lower}} + \nu_{\mathrm{upper}})\).
Calculates the ionospheric phase rotation using the equation above.
Multiplies the entire visibility slice for that channel by the complex phasor \(\Psi_{\mathrm{ion}}(c)\), given by:
Records the applied phase (in degrees) as channel metadata under the key
dtec_phase_deg.
This correction is additive in phase space but multiplicative in the complex visibility domain. Reversing a previously applied correction is achieved by re-applying the operator with the negated dTEC value (this is used extensively during the dTEC search).
Two-Stage Search Strategy
The ionospheric fringe fitter provides two search strategies, selected by the
control-file flag ion_smooth:
Standard search (
rjc_ion_search): A four-level hierarchical search (coarse \(\to\) medium \(\to\) fine \(\to\) final) with parabolic interpolation at the final stage.Smoothed search (
ion_search_smooth): A three-level hierarchical search (coarse \(\to\) fine \(\to\) final) that applies a cosine-window smoothing and fourfold interpolation to the coarse points before the fine search. This is more robust when the coarse sampling is sparse relative to the width of the TEC response curve.
Both strategies follow the same outer-loop structure described below.
Search Window and Configuration
The search is configured via control-file parameters:
ion_win– two-element search window \([w_0,\, w_1]\) in TEC units (default \([0,\,0]\), i.e., no search).ion_npts– number of coarse grid points (default \(1\), meaning a fixed-fit with a priori ionospheric values).ion_smooth– boolean flag to enable cosine smoothing (defaultfalse).
When ion_npts = 1, the fitter reads a priori ionospheric values from
the station entries in the control file (keyword ionosphere, default value is 0)
and fixes dTEC to:
applies a single ionospheric phase correction and then performs a single fringe fit.
Hierarchical Search Levels
Standard (Four-Level) Search
The standard search proceeds through four levels:
Coarse (level 0): A uniform grid of
ion_nptspoints spanning \([w_0,\, w_1]\). For each dTEC trial point, the full three-dimensional fringe search (SBD, DR, MBD) is executed. The maximum amplitude across the coarse grid determines the center of the medium search.Medium (level 1): \(N_{\mathrm{med}} = 12\) points with a step size of \(2.0\) TECu, centered on the coarse maximum. Edge cases (peak at boundary) are handled by shifting the center inward.
Fine (level 2): \(N_{\mathrm{fine}} = 12\) points with a step size of \(0.4\) TECu, centered on the medium maximum.
Final (level 3): The three points around the fine maximum are fitted with a parabola (using
MHO_MathUtilities::parabola) to extract the sub-grid dTEC peak location. The parabola coefficients \(q\) and the interpolated peak \((x_{\max},\, A_{\max})\) are returned.
Smoothed (Three-Level) Search
The smoothed search replaces the medium level with a smoothing step:
Coarse (level 0): Identical to the standard coarse search.
Smoothing and fourfold interpolation: The coarse amplitude array is up-sampled by a factor of 4 (inserting zeros between points) and convolved with a half-cycle cosine kernel of width:
\[n_s = \max\left(1,\; \left\lceil \frac{36}{\delta_{\mathrm{TEC}}} \right\rceil\right)\](clipped to the array length, forced odd). The half-cosine kernel has a half-power width of approximately \(3\) TECu, matched to the expected correlation width of the TEC response for \(3\)–\(10\) GHz frequency distributions. The interpolated maximum determines the center of the fine search.
Fine (level 1): \(N_{\mathrm{fine\_smooth}} = 24\) points with a step size of \(0.4\) TECu, centered on the smoothed maximum.
Final (level 2): Identical parabolic interpolation to the standard search.
Inner Loop: Visibility Modification per dTEC Trial
For each dTEC trial value \(\delta_{\mathrm{trial}}\) in the outer loop, the algorithm modifies the visibilities in-place as follows:
Undo the previous dTEC correction:
iono.SetDifferentialTEC(delta_prev); iono.Execute();
This restores the visibilities to their uncorrected state.
Apply the current dTEC correction:
iono.SetDifferentialTEC(-delta_trial); iono.Execute();
The application of the ionospheric effect on the visibilities is done in-place in order to avoid doubling the memory requirements. The first step is required to reset the visibilities back to their original state, while the negation in the second step arises because the operator corrects the data by removing the ionospheric effect, which requires applying the opposite sense phase rotation as would have been accumulated by the net (differential) propagation through the ionosphere.
Execute the full coarse fringe search (
coarse_fringe_search) followed by fine peak interpolation (interpolate_peak).Store the peak amplitude
fampfor this dTEC trial.
After the first dTEC trial, the algorithm caches the full SBD search window and, if the approximate SNR exceeds \(15\), narrows the SBD window to \(\pm 1\) bin around the fitted SBD to accelerate subsequent trials. This can greatly accelerate ionospheric fringe fitting in the strong (high-SNR) fringe case.
Output and Solution
Upon completion of the hierarchical search, the dTEC value corresponding to the maximum fringe amplitude
is stored in the parameter store as /fringe/ion_diff. The full dTEC vs. fringe amplitude
scan (sorted by dTEC value) is also stored as two parallel arrays:
/fringe/dtec_array and /fringe/dtec_amp_array.
The standard solution quantities (SNR, delays, errors, residual phase, PFD,
quality code) are then computed by
MHO_BasicFringeUtilities::calculate_fringe_solution_info,
using the visibilities with the best dTEC correction already applied. When
ionospheric correction is active, the MBD error is recomputed from the
ionospheric covariance matrix to account for the additional uncertainty
introduced by the dTEC fit.