Atmospheric Delays
Ionospheric
Atmospheric Delay Corrections: Ionospheric submodule.
Through the ionosphere, propagation delays are caused by dispersive effects.
Attributes
Classes
IonosphericAnalysisCenters
WrongAnalysisCenterNameError
Bases: ValueError
Wrong analysis center name for ionospheric data retrieval
TECMapReadingError
Bases: RuntimeError
Error encountered while reading the Ionospheric IONEX TEC Map file
IonosphericMapFileNotFoundError
Bases: FileNotFoundError
Could not find the specified ionospheric map file
TECIncidenceAngleMethod
Bases: Enum
Method for generating mapping function for Ionospheric delay evaluation from TEC data
TECMapSolutionType
Bases: Enum
Solution type of TEC maps for Ionospheric delay evaluation from TEC data
TECMapTimeResolution
Bases: Enum
Time resolution of TEC maps for Ionospheric delay evaluation from TEC data
IonosphericDelayEstimator
Ionospheric Delay Estimator (first order approximation, slant range) from CDDIS IONEX TEC MAP class. The delay is due to the refractive index of the medium the signal is passing through.
The ionosphere is the zone of the terrestrial atmosphere that contains a partially ionised medium, as result of the X and UV rays of Solar Radiation and the incidence of charged particles.
The propagation speed of the electromagnetic signals in the ionosphere depends on its electron density:
- during the day, sun radiation causes ionisation of neutral atoms producing free electrons and ions (TEC)
- during the night, the recombination process prevails, where free electrons and ions are recombined, lowering TEC
Ionosphere is a dispersive media, with the following Relation of Dispersion between \(\omega\) and \(k\) of the incoming wave:
where \(\omega_p\) is the critical frequency of the ionospheric plasma, meaning that only signals with \(\omega > \omega_p\) through the ionized plasma medium. Therefore, ionosphere causes a frequency dependent path delay for microwave signals.
Attributes
ionospheric_delay_scaling_factor
instance-attribute
analysis_center
instance-attribute
Methods:
__init__
__init__(acquisition_time: PreciseDateTime, analysis_center: str, fc_hz: float, ionospheric_delay_scaling_factor: float, tec_mapping_method: TECIncidenceAngleMethod, tec_solution_type: TECMapSolutionType = TECMapSolutionType.FINAL, tec_time_resolution: TECMapTimeResolution = TECMapTimeResolution.HOUR, map_folder: Path | str | None = None) -> None
Ionosphere delay estimator class from TEC MAP file NASA CDDIS format. This class, through the method estimate delay, provides as output the first order approximation of the ionospheric path delay experiences by the electromagnetic signal of the sensor converted in slant range for each set of point target coordinates.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
acquisition_time
|
PreciseDateTime
|
scene acquisition time, the time at which the ionospheric delay must be evaluated |
required |
analysis_center
|
str
|
analysis center for solutions from those supported |
required |
fc_hz
|
float
|
carrier frequency of the sensors signal |
required |
ionospheric_delay_scaling_factor
|
float
|
scaling factor to be applied to the ionospheric delay |
required |
tec_mapping_method
|
TECIncidenceAngleMethod
|
selected method to compute the mapping function |
required |
tec_solution_type
|
TECMapSolutionType
|
selected type of solution for TEC maps, by default TECMapSolutionType.FINAL |
FINAL
|
tec_time_resolution
|
TECMapTimeResolution
|
selected type of time resolution for TEC maps, by default TECMapTimeResolution.HOUR |
HOUR
|
map_folder
|
Path | str | None
|
path to the folder where the TEC MAP file is placed, by default None |
None
|
Raises:
| Type | Description |
|---|---|
WrongAnalysisCenterNameError
|
if the analysis center is not among those implemented, this error is raised |
read_ionosphere_map_file
read_ionosphere_map_file(ionosphere_map_file: Path) -> tuple[list, list, np.ndarray, np.ndarray]
Read the Ionosphere IONEX map file to extract data on Total Electron Content.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
ionosphere_map_file
|
Path
|
path to the ionosphere map file, not zipped |
required |
Returns:
| Type | Description |
|---|---|
list
|
list of tec data arrays for each lat/lon |
list
|
list of recording hours |
ndarray
|
latitude axis (monotonically increasing) |
ndarray
|
longitude axis (monotonically increasing) |
estimate_delay
Estimation of the ionospheric time delay as first order approximation of the ionospheric path delay in slant range.
The equation used is the following (latex):
where f_c is the carrier frequency of the signal piercing through the ionosphere, MF(z) is the mapping function mapping function for conversion into slant delay using the zenith angle z, and vTEC is the vertical total electron content of the ionosphere in that point, in TEC units (1 TECU = 10E16 electrons per m^2)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
sat_xyz_coords
|
ndarray
|
satellite XYZ coordinates at which calibration targets are seen as numpy array of shape Nx3 |
required |
point_targets_coords
|
ndarray
|
point targets XYZ coordinates as numpy array of shape Nx3 |
required |
Returns:
| Type | Description |
|---|---|
ndarray
|
ionospheric delay |
Functions:
generate_ionospheric_map_filename
generate_ionospheric_map_filename(acq_time: PreciseDateTime, center: IonosphericAnalysisCenters, solution_type: TECMapSolutionType = TECMapSolutionType.FINAL, time_resolution: TECMapTimeResolution = TECMapTimeResolution.HOUR) -> str
Generating the map file name accordingly to the CDDIS format.
For more information on the naming convention see also:
https://cddis.nasa.gov/Data_and_Derived_Products/GNSS/atmospheric_products.html
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
acq_time
|
PreciseDateTime
|
time of interest to retrieve the correct ionospheric data |
required |
center
|
IonosphericAnalysisCenters
|
analysis center name |
required |
solution_type
|
IonosphericAnalysisCenters
|
TEC map solution type, by default TECMapSolutionType.FINAL |
FINAL
|
time_resolution
|
TECMapTimeResolution
|
TEC map time resolution, by default TECMapTimeResolution.HOUR |
HOUR
|
Returns:
| Type | Description |
|---|---|
str
|
name of the ionospheric map file |
compute_delay
compute_delay(acq_time: PreciseDateTime, targets_xyz_coords: ndarray, sat_xyz_coords: ndarray, analysis_center: str | IonosphericAnalysisCenters, fc_hz: float, map_folder: Path | str | None = None, delay_scaling_factor: float = 1.0, tec_mapping_method: TECIncidenceAngleMethod = TECIncidenceAngleMethod.GROUND_CONVERTED, tec_solution_type: TECMapSolutionType = TECMapSolutionType.FINAL, tec_time_resolution: TECMapTimeResolution = TECMapTimeResolution.HOUR) -> np.ndarray
Compute ionospheric signal delay from date and coordinates (sensor and ground).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
acq_time
|
PreciseDateTime
|
scene acquisition time, the time at which the ionospheric delay must be evaluated |
required |
targets_xyz_coords
|
ndarray
|
point targets XYZ coordinates as numpy array of shape Nx3 |
required |
sat_xyz_coords
|
ndarray
|
satellite XYZ coordinates at which calibration targets are seen as numpy array of shape Nx3 |
required |
analysis_center
|
str | IonosphericAnalysisCenters]
|
analysis center for solutions from those supported |
required |
fc_hz
|
float
|
carrier frequency of the sensor's signal |
required |
map_folder
|
Path | str | None
|
path to the folder where the TEC MAP file is placed, by default None |
None
|
delay_scaling_factor
|
float
|
scaling factor to be applied to the ionospheric delay, by default 1.0 |
1.0
|
tec_mapping_method
|
TECIncidenceAngleMethod
|
selected method to compute the mapping function, by default TECIncidenceAngleMethod.GROUND_CONVERTED |
GROUND_CONVERTED
|
tec_solution_type
|
TECMapSolutionType
|
selected type of solution for TEC maps, by default TECMapSolutionType.FINAL |
FINAL
|
tec_time_resolution
|
TECMapTimeResolution
|
selected type of time resolution for TEC maps, by default TECMapTimeResolution.HOUR |
HOUR
|
Returns:
| Type | Description |
|---|---|
ndarray
|
ionospheric delay |
Tropospheric
Atmospheric Delay Corrections: Tropospheric submodule.
Through neutral troposphere, propagation delays are caused by air refractivity gradients.
Air refractivity gradients in the troposphere are first due to the dry air pressure and temperature and, to a lesser extent, to air moisture and condensed water in clouds or rain. The dry air temperature and pressure can be considered as mostly vertically stratified, and thus lead to a large phase delay varying only with elevation in a radar scene. On the contrary, the air water vapor varies both vertically and laterally over short distances.
Attributes
Classes
TroposphericGridStationFileNotFoundError
Bases: FileNotFoundError
Could not find the specified grid points station coordinates file
TroposphericGridResolutionNotSupportedError
Bases: ValueError
Grid resolution provided is not supported
TroposphericMapModel
TroposphericGRIDResolution
Bases: Enum
Tropospheric map resolution for GRID model
TroposphericMapType
TroposphericMapVersion
TroposphericGridInterpolationMethod
Bases: Enum
Tropospheric grid interpolation method using griddata from scipy.interpolate, check the function for the available methods
TroposphericDelayEstimator
Tropospheric Delay Estimator from Vienna Mapping Function 3 data. The delay is due to the refractive index of the medium the signal is passing through.
The Troposphere is neutral and non-dispersive for frequencies up to 30 GHz, so the path through this medium is not depended on the carrier frequency for microwave signals, in contrast to the ionosphere.
The refractive index of the troposphere is a function of pressure, temperature and partial water vapor pressure. The total delay can be decomposed into a wet and dry (hydrostatic) component. - hydrostatic part comprises approximately 90% of the overall delay and is well suited to pressure driven modelling. Closely linked to topography, reflector height has to be taken into account. - wet component undergoes rapid changes due to the high spatiotemporal variability of water vapor.
The equation to be solved is the following:
where \(\Delta L(\epsilon)\) is the total delay time and it is composed by an hydrostatic component \(h\) and a wet component \(w\). \(mf(\epsilon)\) are the wet and hydrostatic mapping functions generated in this algorithm starting from the Vienna Mapping Function 3 data and the spherical harmonics Legendre polynomials.
Attributes
Methods:
__init__
__init__(acquisition_time: PreciseDateTime, interpolation_method: TroposphericGridInterpolationMethod, map_folder: Path = None, map_model: TroposphericMapModel = TroposphericMapModel.GRID, map_grid_res: TroposphericGRIDResolution = TroposphericGRIDResolution.FINE, map_type: TroposphericMapType = TroposphericMapType.VMF3, map_version: TroposphericMapVersion = TroposphericMapVersion.OP) -> None
Tropospheric delay estimation using Vienna Mapping Function 3 (VMF3) data. Empirical ""b" and "c" coefficients, "a" coefficients determined epoch-wise (00, 06, 12, 18 UT) from ray traced-delays at 3° elevation and 8 equally spaced azimuth angles.
Only "OP" (operational) "GRID" (grid-wise) data are supported in this application.
Reference articles: Landskron, D., Böhm, J. VMF3/GPT3: refined discrete and empirical troposphere mapping functions. J Geod 92, 349-360 (2018). "https://doi.org/10.1007/s00190-017-1066-2"
U. Balss et al., "Survey protocol for geometric SAR sensor analysis", German Aerospace Center (DLR), Tech. Univ. Munich (TUM), Remote Sensing Lab. Univ. Zurich, Zürich, Switzerland, Tech. Rep. DLRFRM4SAR-TN-200, Apr. 2018.
Data source: VMF Data Server: "https://vmf.geo.tuwien.ac.at/"
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
acquisition_time
|
PreciseDateTime
|
acquisition time of the scene, a.k.a. the time at which estimate the delay |
required |
interpolation_method
|
TroposphericGridInterpolationMethod
|
method for data grid interpolation |
required |
map_folder
|
Path
|
path to the folder containing the map files, by default None |
None
|
map_model
|
TroposphericMapModel
|
map file model, by default TroposphericMapModel.GRID |
GRID
|
map_grid_res
|
TroposphericGRIDResolution
|
map grid resolution, by default TroposphericGRIDResolution.FINE |
FINE
|
map_type
|
TroposphericMapType
|
map data type, by default TroposphericMapType.VMF3 |
VMF3
|
map_version
|
TroposphericMapVersion
|
map data version, by default TroposphericMapVersion.OP |
OP
|
read_vmf3_files
staticmethod
Reading VMF3 OP GRID troposphere data files. VMF3 files are provided as tabular textual data, with an header. Data are divided in the following columns: lat: latitude in deg, lon: longitude in deg, ah: "a" coefficient, hydrostatic (dry gases contribution) aw: "a" coefficient, wet (water vapor contribution) zhd: zenith hydrostatic delay in meters, zwd: zenith wet delay in meters
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
files
|
list[Path]
|
list of path to files |
required |
Returns:
| Type | Description |
|---|---|
list[DataFrame]
|
list of pandas dataframe from loaded files |
estimate_delay
estimate_delay(point_targets_coords: ndarray, sat_xyz_coords: ndarray) -> tuple[np.ndarray, np.ndarray]
Estimate the tropospheric wet and hydrostatic delays from VMF3 data.
Correcting zenith hydrostatic and wet delays by taking into account the height due to topography dependence.
Other formulas used in this method:
Saastamoinen J. formula, hydrostatic delay
wet delay exponential empirical decay correction by height
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
point_targets_coords
|
ndarray
|
point targets XYZ coordinates as numpy array of shape Nx3 |
required |
sat_xyz_coords
|
ndarray
|
satellite XYZ coordinates at which calibration targets are seen as numpy array of shape Nx3 |
required |
Returns:
| Type | Description |
|---|---|
ndarray
|
array of estimated hydrostatic delay, one for each point target |
ndarray
|
array of estimated wet delay, one for each point target |
Raises:
| Type | Description |
|---|---|
RuntimeError
|
files provided are not in VMF3 format |
Functions:
generate_tropospheric_map_name_for_vmf_data
generate_tropospheric_map_name_for_vmf_data(acq_time: PreciseDateTime, map_type: TroposphericMapType) -> tuple[list[str], list[PreciseDateTime]]
Generating the name of the 4 files needed to perform the tropospheric delay estimation for VMF data.
Data can be found at this location: https://vmf.geo.tuwien.ac.at/trop_products/
A note on file selection criterion: files are selected with respect to the map data type and the acquisition time tropospheric map files are recorded every 6 hours across the day, every day, so there are 4 files pertaining to each day H00, H06, H12, H18 4 files are needed to perform a proper interpolation of values and estimate at best the tropospheric delay the main file, the closest to the acquisition time hour (approximated by defect) the previous file (the one 6 hours before the main one) the two files after the main one (6 hours after and 12 hours after)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
acq_time
|
PreciseDateTime
|
acquisition time at which the tropospheric delay must be estimated |
required |
map_type
|
TroposphericMapType
|
type of tropospheric map data |
required |
Returns:
| Type | Description |
|---|---|
list[str]
|
list of file names |
list[PreciseDateTime]
|
list of file dates in PreciseDatetime form |
compute_delay
compute_delay(acq_time: PreciseDateTime, targets_xyz_coords: ndarray, sat_xyz_coords: ndarray, map_folder: Path | str | None = None, map_resolution: TroposphericGRIDResolution = TroposphericGRIDResolution.FINE, interp_method: TroposphericGridInterpolationMethod = TroposphericGridInterpolationMethod.CUBIC) -> tuple[np.ndarray, np.ndarray]
Compute signal delay due to tropospheric refractivity gradients.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
acq_time
|
PreciseDateTime
|
acquisition time of the scene, a.k.a. the time at which estimate the delay |
required |
targets_xyz_coords
|
ndarray
|
point targets XYZ coordinates as numpy array of shape Nx3 |
required |
sat_xyz_coords
|
ndarray
|
satellite XYZ coordinates at which calibration targets are seen as numpy array of shape Nx3 |
required |
map_folder
|
Path | str | None
|
path to the folder containing the map files, by default None |
None
|
map_resolution
|
TroposphericGRIDResolution
|
map grid resolution, by default TroposphericGRIDResolution.FINE |
FINE
|
interp_method
|
TroposphericGridInterpolationMethod
|
method for data grid interpolation, by default TroposphericGridInterpolationMethod.CUBIC |
CUBIC
|
Returns:
| Type | Description |
|---|---|
ndarray
|
array of estimated hydrostatic delay [one for each point target] |
ndarray
|
array of estimated wet delay [one for each point target] |