CGGTTS
Rust package to manipulate CGGTTS (BIPM) data files
CGGTTS is specified by BIPM, Paris (Bureau International des Poids & des Mesures) and is dedicated to GNSS Time Transfer, Common View, Two Way Satellites time transfers.
Supported version: 2E.
Older CGGTTS format are rejected by this library.
Cggtts file analysis
Retrieve data from a local CGGTTS compliant file:
- File name must follow naming conventions, refer to specifications
let cggtts = from_file;
prinln!;
prinln!;
println!;
println!; // refer to 'System Delays' section
assert_eq!; // basic session
let mut cggtts = from_file;
prinln!;
prinln!;
assert_eq!; // dual carrier session
Data analysis
Measurements are stored within the list of CggttsTracks
let cggtts = from_file;
let track = cggtts.get_track;
prinln!;
println!;
println!;
prinln!;
CggttsTracks are easily manipulated
let t = cggtts.pop; // grab 1
assert_eq!; // consumed
assert_eq!;
assert_eq!;
CGGTTS production
Using the basic constructor gets you started quickly
let mut cggtts = new;
cggtts.set_lab_agency;
cggtts.set_nb_channels;
// Antenna phase center coordinates [m]
// is specified in IRTF spatial referencing
cggtts.set_antenna_coordinates;
println!;
assert_eq!; // system delays is not specified
assert_eq!; // not enough information
cggtts.to_file.unwrap; // produce a CGGTTS
Add some measurements to a Cggtts
let mut track = new; // basic track
// customize a little
track.set_azimuth;
track.set_elevation;
track.set_duration; // standard
cggtts.add_track;
Add ionospheric parameters estimates
// read some data
let cggtts = from_file;
assert_eq!; // yes
// add some data
let mut track = new; // basic track
// customize
track.set_duration; // respect standard
track.set_refsys_srsys; // got some data
cggtts.push_track; // ionospheric_parameters not provided
// will get blanked out on this line
let params = ; // see (msio, smsi, isg) specifications
track.set_ionospheric_parameters);
cggtts.push_track;
cggtts.to_file; // fully populated
System delays
When we refer to system delays we refer to propagation induced delays.
In Cggtts files, delays are always specified in [ns].
Ths library manipulates delays in seconds, but converts them
back to [ns] in file operations.
Definitions
+--------+ +---------- system ---------+ +++++++++++
+ + cable +------+ + counter +
+ ANT + ------------> + RCVR + -------------------> + DUT +
+--------+ +------+ + +
^ + +
+++++++ -------------------| ref_dly + +
+ REF + --------------------------------------------> + REF +
+++++++ +++++++++++
-
"total" delay is defined as ANT + cable + A + B
-
(A+B) is defined as internal delay, propagation delay inside the receiver & the antenna
-
in case we do not have the (A+B) granularity, we then refer to (A+B)=system delay
-
cable delay refers to the RF cable delay
-
ref delay is the time offset between the time reference (whose name is "Reference" field), and the receiver internal clock
-
internal (A+B) or system delay are mutually exclusive. User is expected to use either one of them.
In case user specifies both, this lib will not crash but prefer (A+B) (advaced system definition) -
when internal (A+B) delay or system delay is provided, the standard expects a Ref delay too. In case the user did not specify a Ref delay, we set it to 0 ns to still have a valid Cggtts generated.
Case of Dual Frequency CGGTTS
In dual frequency context (two carriers), total, system, internal should be specified for each carrier frequency.
cable and ref delays are not tied to a carrier frequency.
Delays and CGGTTS production interface
This library provdes an easy to use interface to specify your system when publishing a CGGTTS:
(A) basic use: system delays are not known
let mut cggtts = new; // default
assert_eq!; // no specifications
(A*) basic use: usually the RF cable delay is easilly determined.
let mut cggtts = new; // default
cggtts.set_cable_delay; // [s] !!
assert_eq!; // that's a starting point
cggtts.to_file;
This definition does not match a standard definition. To still generate a standardized CGGTTS, the lib in this context declares a single frequency TOTAL DELAY of 10 ns.
(A**) basic use: total delay is known. Total delay is always tied to a GNSS constellation, like intermediate & advanced examples down below. In case you don't know, use the default constructor:
let mut cggtts = new; // default
cggtts.set_cable_delay; // [s] !!
let mut delay = default; // default
delay.delays.push; // [s]!!
assert_eq!;
(B) intermediate use: system delay is known and we know the RF cable delay. System delay is always tied to a constellation:
let mut cggtts = new; // default
cggtts.set_cable_delay; // [s] !!
let delay = new;
cggtts.set_system_delay;
assert_eq!;
cggtts.to_file;
(B*) same hypothesis but in a dual frequency context. Therefore we specify a delay for each carrier frequency:
let mut cggtts = new; // default
cggtts.set_cable_delay; // [s] !!
let delay = new;
cggtts.set_system_delay;
assert_eq!;
cggtts.to_file;
(C) advance use: (A+B) intrinsic delays are known
let mut cggtts = new; // default
cggtts.set_cable_delay; // [s] !!
let delay = new;
cggtts.set_internal_delay;
assert_eq!;
cggtts.to_file;