Clock error, orbit determination accuracy is relatively low
Dear ginan team: I used sample data to run the pod. Below is my pod.yaml file.
inputs:
include_yamls: [ /home/jddai/ginan/inputData/products/boxwing.yaml ] # required if using boxwing model
inputs_root: /home/jddai/ginan/inputData/products/
atx_files: [ igs20.atx ] # required
egm_files: [ tables/EGM2008.gfc ] # Earth gravity model coefficients file
igrf_files: [ tables/igrf13coeffs.txt ]
erp_files: [ finals.data.iau2000.txt ]
planetary_ephemeris_files: [ tables/DE436.1950.2050 ]
troposphere:
gpt2grid_files: [ tables/gpt_25.grd ]
tides:
ocean_tide_loading_blq_files: [ tables/OLOAD_GO.BLQ ] # required if ocean loading is applied
atmos_tide_loading_blq_files: [ tables/ALOAD_GO.BLQ ] # required if atmospheric tide loading is applied
ocean_pole_tide_loading_files: [ tables/opoleloadcoefcmcor.txt ] # required if ocean pole tide loading is applied
ocean_tide_potential_files: [ tables/fes2014b_Cnm-Snm.dat ]
snx_files:
# - "*.SNX" # use a wild card to include all files matching the description in the directory
- tables/igs_satellite_metadata_2203_plus.snx
- tables/sat_yaw_bias_rate.snx
- tables/qzss_yaw_modes.snx
- tables/bds_yaw_modes.snx
- IGS1R03SNX_20191950000_07D_07D_CRD.SNX
satellite_data:
nav_files: [ brdm1990.19p ]
gnss_observations:
gnss_observations_root: /home/jddai/ginan/inputData/data
rnx_inputs:
- AREG00PER_R_20191990000_01D_30S_MO.rnx
- ASCG00SHN_R_20191990000_01D_30S_MO.rnx
- CEDU00AUS_R_20191990000_01D_30S_MO.rnx
- COCO00AUS_R_20191990000_01D_30S_MO.rnx
- CPVG00CPV_R_20191990000_01D_30S_MO.rnx
- DARW00AUS_R_20191990000_01D_30S_MO.rnx
- DGAR00GBR_R_20191990000_01D_30S_MO.rnx
- DJIG00DJI_R_20191990000_01D_30S_MO.rnx
- FAIR00USA_R_20191990000_01D_30S_MO.rnx
- HERS00GBR_R_20191990000_01D_30S_MO.rnx
- HOB200AUS_R_20191990000_01D_30S_MO.rnx
- IISC00IND_R_20191990000_01D_30S_MO.rnx
- JFNG00CHN_R_20191990000_01D_30S_MO.rnx
- KARR00AUS_R_20191990000_01D_30S_MO.rnx
- KIRI00KIR_R_20191990000_01D_30S_MO.rnx
- KOKV00USA_R_20191990000_01D_30S_MO.rnx
- LHAZ00CHN_R_20191990000_01D_30S_MO.rnx
- LMMF00MTQ_R_20191990000_01D_30S_MO.rnx
- MAW100ATA_R_20191990000_01D_30S_MO.rnx
- MBAR00UGA_R_20191990000_01D_30S_MO.rnx
- METG00FIN_R_20191990000_01D_30S_MO.rnx
- MGUE00ARG_R_20191990000_01D_30S_MO.rnx
- NICO00CYP_R_20191990000_01D_30S_MO.rnx
- NKLG00GAB_R_20191990000_01D_30S_MO.rnx
- OHI300ATA_R_20191990000_01D_30S_MO.rnx
- POAL00BRA_R_20191990000_01D_30S_MO.rnx
- QUIN00USA_R_20191990000_01D_30S_MO.rnx
- REYK00ISL_R_20191990000_01D_30S_MO.rnx
- RGDG00ARG_R_20191990000_01D_30S_MO.rnx
- SAMO00WSM_R_20191990000_01D_30S_MO.rnx
- SEY200SYC_R_20191990000_01D_30S_MO.rnx
- SOLO00SLB_R_20191990000_01D_30S_MO.rnx
- TONG00TON_R_20191990000_01D_30S_MO.rnx
- TOPL00BRA_R_20191990000_01D_30S_MO.rnx
- TOW200AUS_R_20191990000_01D_30S_MO.rnx
- USN700USA_R_20191990000_01D_30S_MO.rnx
- VACS00MUS_R_20191990000_01D_30S_MO.rnx
- ZIM200CHE_R_20191990000_01D_30S_MO.rnx
- CUSV00THA_R_20191990000_01D_30S_MO.rnx
outputs:
outputs_root: /home/jddai/ginan/out/output_pod_example_300/
metadata:
config_description: pod_example
analysis_agency: GAA
analysis_centre: Geoscience Australia -----FILE NOT FOR OPERATIONAL USE-----
analysis_software: Ginan v3.0
rinex_comment: AUSNETWORK1
gradient_mapping_function: Chen & Herring, 1992 # (string) Name of mapping function used for mapping horizontal troposphere gradients
ocean_tide_loading_model: FES2014 # (string) Ocean tide loading model applied
reference_system: igs20 # (string) Terrestrial Reference System Code
time_system: G # (string) Time system - e.g. "G", "UTC"
trace:
level: 3
output_receivers: true
output_network: true
receiver_filename: <RECEIVER>_<CONFIG>_<YYYY><DDD><HH>.TRACE
network_filename: <RECEIVER>_<CONFIG>_<YYYY><DDD><HH>.TRACE
output_residuals: true
output_residual_chain: true
output_config: true
network_statistics:
output: true # (bool) Enable exporting network statistics data to file
directory: ./pod_network # (string) Directory to export network statistics data
filename: <CONFIG>_network_statistics.json # (string) Network statistics data filename
gpx:
output: true
sinex:
output: true
directory: ./pod_snx
filename: <CONFIG>_<YYYY><DDD><HH>.SNX
sp3:
output: true
directory: ./pod_sp3
filename: <CONFIG>_<YYYY><DDD><HH>.SP3
output_interval: 30 # (int) Update interval for sp3 records
clocks:
output: true
directory: ./pod_clk
filename: <CONFIG>_<YYYY><DDD><HH>.CLK
erp:
output: true
directory: ./pod_erp
filename: <CONFIG>_<YYYY><DDD><HH>.ERP
orbex:
output: true
filename: <CONFIG>_<YYYY><DDD><HH>.OBX
directory: ./pod_orbex
attitude_sources: [MODEL, NOMINAL]
satellite_options:
global:
#clock_codes: [AUTO, AUTO]
models:
clock:
enable: true
sources: [KALMAN, PRECISE, BROADCAST]
pos:
enable: true
sources: [KALMAN, PRECISE, BROADCAST]
attitude:
enable: true
sources: [MODEL, PRECISE, NOMINAL]
pco:
enable: true
pcv:
enable: true
code_bias:
enable: true
default_bias: 0
undefined_sigma: 0
phase_bias:
enable: false
default_bias: 0
undefined_sigma: 0
orbit_propagation:
albedo: cannonball
antenna_thrust: true
empirical: true
empirical_dyb_eclipse: [true,false,false]
planetary_perturbations: [moon,sun,mercury,venus,mars,jupiter,saturn,uranus,neptune,pluto]
pseudo_pulses:
enable: false
solar_radiation_pressure: boxwing
mass: 1000
area: 15
srp_cr: 1.75
power: 20
GPS:
clock_codes: [ L1W,L2W ]
# G04:
# exclude: true
G15:
exclude: true
E05: { exclude: true }
E06: { exclude: true }
E10: { exclude: true }
E16: { exclude: true }
E17: { exclude: true }
E23: { exclude: true }
E28: { exclude: true }
E29: { exclude: true }
E32: { exclude: true }
E34: { exclude: true }
E35: { exclude: true }
receiver_options: # Options to configure individual stations or global configs
USN7:
aliases: [PIVOT]
global:
error_model: elevation_dependent # uniform, elevation_dependent
elevation_mask: 10
code_sigma: 0.4
phase_sigma: 0.002
clock_codes: [AUTO, AUTO]
zero_dcb_codes: [NONE, NONE]
models:
eccentricity:
enable: true # (bool) Enable modelling of antenna eccentricities
attitude:
enable: true # (bool) Enables non-nominal attitude types
sources: [MODEL, NOMINAL] # List of sourecs to use for attitudes
clock:
enable: true # (bool) Enable modelling of clocks
pco:
enable: true # (bool) Enable modelling of phase center offsets
pcv:
enable: true # (bool) Enable modelling of phase center variations
code_bias:
enable: true # (bool) Enable modelling of code biases
default_bias: 0 # (float) Bias to use when no code bias is found
undefined_sigma: 0 # (float) Uncertainty sigma to apply to default code biases
phase_bias:
enable: false # (bool) Enable modelling of phase biases
default_bias: 0 # (float) Bias to use when no phase bias is found
undefined_sigma: 0 # (float) Uncertainty sigma to apply to default phase biases
pos:
enable: true # (bool) Enable modelling of position
ionospheric_components: # Ionospheric models produce frequency-dependent effects
enable: true # Enable ionospheric modelling
use_2nd_order: true
use_3rd_order: true
troposphere:
enable: true
models: [gpt2]
eop:
enable: true
apriori_sigma_enu: [0.003, 0.003, 0.009] # Use these fixed igma'sfor sites listed below
mincon_scale_apriori_sigma: 1 # Use ALL fixed and/or SINEX file sigma's (!! first preference to the fixed sigma's !!)
mincon_scale_filter_sigma: 0
#ABMF: {mincon_scale_apriori_sigma: 3 }
#ALBH: {mincon_scale_apriori_sigma: 3 }
#ALGO: {mincon_scale_apriori_sigma: 3 }
processing_options:
process_modes:
preprocessor: true
spp: true
ppp: true
ionosphere: false
epoch_control:
epoch_interval: 30
wait_next_epoch: 3600 # Wait up to an hour for next data point - When processing RINEX causes PEA to wait a long as need for last epoch to be processed.
wait_all_receivers: 1
gnss_general:
rec_reference_system: gps
minimise_sat_clock_offsets: true
sys_options:
gps:
process: true
ambiguity_resolution: false
reject_eclipse: false
code_priorities: [ L1W, L1C, L2W ]
# gal:
# process: true
# ambiguity_resolution: false
# reject_eclipse: false
# code_priorities: [ L1C, L5Q, L1X, L5X ]
# glo:
# process: true
# ambiguity_resolution: false
# reject_eclipse: true
# code_priorities: [ L1P, L1C, L2P, L2C ]
# qzs:
# process: true
# ambiguity_resolution: false
# reject_eclipse: true
# code_priorities: [ L1C, L2L, L2X ]
spp:
always_reinitialise: false
max_lsq_iterations: 12
outlier_screening:
max_gdop: 30
postfit:
sigma_check: true
ppp_filter:
ionospheric_components:
common_ionosphere: true
use_if_combo: false
outlier_screening:
prefit:
max_iterations: 2
sigma_check: true
sigma_threshold: 5
omega_test: false
postfit:
max_iterations: 10
sigma_check: true
sigma_threshold: 3
rts:
enable: true
model_error_handling:
meas_deweighting:
deweight_factor: 10000
state_deweighting:
deweight_factor: 10000
ambiguities:
outage_reset_limit: 3
phase_reject_limit: 2
reset_on:
gf: true
lli: true
mw: true
scdia: true
exclusions:
gf: true
lli: true
mw: true
scdia: true
eclipse: false
ionospheric_components:
outage_reset_limit: 3
orbit_errors:
enable: false
pos_process_noise: 10
vel_process_noise: 1
vel_process_noise_trail: 0
vel_process_noise_trail_tau: 0
minimum_constraints:
enable: true
rotation:
estimated: [true]
scale:
estimated: [true]
translation:
estimated: [true]
application_mode: weight_matrix
constrain_orbits: false
outlier_screening: # Statistical checks allow for detection of outliers that exceed their confidence intervals
postfit:
max_iterations: 10 # Maximum number of measurements to exclude using postfit checks while iterating filter
sigma_check: true # Enable sigma check
sigma_threshold: 3 # Sigma threshold
prefit:
max_iterations: 2 # Maximum number of measurements to exclude using prefit checks before attempting to filter
omega_test: false # Enable omega-test
sigma_check: true # Enable sigma check
sigma_threshold: 5 # Sigma threshold
orbit_propagation:
integrator_time_step: 60 # Timestep for the integrator, must be smaller than the processing time step, might be adjusted if the processing time step isn't a integer number of time steps
central_force: true
egm_field: true # Acceleration due to the high degree model of the Earth gravity model (exclude degree 0, made by central_force)
egm_degree: 15 # J2 acceleration perturbation due to the Sun and Moon
solid_earth_tide: true # Model accelerations due to solid earth tides
ocean_tide: true # Model accelerations due to ocean tides model
pole_tide_solid: true # Model accelerations due to solid pole tide (degree 2 only)
pole_tide_ocean: true
general_relativity: true
indirect_J2: true
estimation_parameters:
global_models:
eop:
estimated: [true]
sigma: [10,10,1e-9]
eop_rates:
estimated: [true]
sigma: [10]
receivers:
PIVOT:
#clock:
# estimated: [true]
# process_noise: [0]
# sigma: [1e-9]
code_bias:
estimated: [false]
global:
pos:
estimated: [true]
sigma: [1]
process_noise: [0.0]
# process_noise_dt: second
clock:
estimated: [true]
sigma: [1000]
process_noise: [10] # [100]
ambiguities:
estimated: [true]
sigma: [1000]
process_noise: [0]
# process_noise_dt: day
trop:
estimated: [true]
sigma: [0.3]
process_noise: [0.0001]
# process_noise_dt: second
trop_grads:
estimated: [true]
sigma: [0.03]
process_noise: [1.0E-6]
# process_noise_dt: second
ion_stec:
estimated: [true]
sigma: [500]
process_noise: [10]
code_bias:
estimated: [true]
sigma: [20]
process_noise: [0]
# USN7:
# clk:
# estimated: [false] # Set reference (pivot) station clock
# code_bias:
# estimated: [false]
satellites:
global:
clock:
estimated: [true]
sigma: [1000]
process_noise: [1]
tau: [100]
#mu: [10000]
code_bias:
estimated: [true]
sigma: [10]
process_noise: [0]
orbit: # Orbital state
estimated: [true] # [bools] Estimate state in kalman filter
sigma: [10, 10, 10, 0.01] # [floats] Apriori sigma values - if zero, will be initialised using least squares
process_noise: [0]
emp_d_0: { estimated: [true], sigma: [10]}
emp_y_0: { estimated: [true], sigma: [1]}
emp_b_0: { estimated: [true], sigma: [1]}
# emp_d_1: { estimated: [true], sigma: [1]}
# emp_y_1: { estimated: [true], sigma: [1]}
emp_b_1: { estimated: [true], sigma: [1]}
emp_d_2: { estimated: [true], sigma: [1]}
# emp_y_2: { estimated: [true], sigma: [1]}
# emp_b_2: { estimated: [true], sigma: [1]}
# emp_d_3: { estimated: [true], sigma: [1]}
# emp_y_3: { estimated: [true], sigma: [1]}
# emp_b_3: { estimated: [true], sigma: [1]}
# emp_d_4: { estimated: [true], sigma: [1]}
# emp_y_4: { estimated: [true], sigma: [1]}
# emp_b_4: { estimated: [true], sigma: [1]}
mongo: #enable: primary enable: none output_components: primary output_states: primary output_measurements: primary output_test_stats: none output_trace: none delete_history: primary
debug: # instrument: true #output_mincon: true #mincon_filename: preMinconState.bin #mincon_only: true # mincon_only: true
It was found that there was a large error in the orbit accuracy assessment. Are there any corrective measures? Among them I use https://github.com/GeoscienceAustralia/gnssanalysis for accuracy comparison
I found that the program performs backward Kalman data processing. How can I modify the pod.yaml file to improve the accuracy of orbit determination(do post-processing)?
Hello,
I've reviewed the issues you're experiencing with the orbit accuracy assessment using the pod.yaml file and the sample data. It's clear that the inclusion of satellite G04, which was the first GPS BLK-IIIA SV and not fully operational at the time, has led to large errors.
The status of G04 as unhealth is detrimental to the accuracy of the orbit determination. Its exclusion is necessary to maintain the integrity of the data processing and to ensure the accuracy of the results.
For the backward Kalman data processing, please refer to the _smoothed files for detailed information on the backward smoothed run. To further improve the accuracy of orbit determination through post-processing, you will need to use those file in the comparison scripts.
Additionally, for the comparison script you are using, it would be beneficial to include the -h ECF option to correct a potential offset in the ECF reference frame of the orbits by fitting a Helmert transform. Also, using -n daily -n epoch to compare the clocks will help remove an epoch-wise and a daily offset. Implementing these options should enhance the results.
Your updated command line would be :
orbq -i pod_example_201919900.SP3_smoothed igs20624.sp3 -h ECF
clkq -i pod_example_201919900.CLK_smoothed igs20624.clk_30s -n daily -n epoch
I hope these recommendations will assist you in achieving more accurate orbit determinations. Should you need any more help, please don't hesitate to ask.
Best regards, Sebastien