Implement Galileo E1B I/NAV navigation decoding

This commit is contained in:
2026-07-31 00:15:34 +03:00
parent 2a6ccfc23d
commit 814a788b36
104 changed files with 6351 additions and 10 deletions
+211
View File
@@ -0,0 +1,211 @@
{
"decoder_truth_inputs": [],
"icd": "Galileo OS SIS ICD Issue 2.2, November 2025",
"signalsim_commit": "80b262113e77c4482ca9f5cbfef9bcada402ed28",
"sample_file": "/home/onur/Desktop/galileo/verification/vectors/signalsim/navigation_multisat/navigation_multisat_iq8.bin",
"sample_sha256": "b38393b32eec2df53f9813ea7ff8f13e5e0fc72fa5cb7fb910a2b8f907a56a6e",
"sample_count": 131758308,
"sampling_frequency_hz": 4092000.0,
"intermediate_frequency_hz": 1023000.0,
"satellites": {
"1": {
"prn": 1,
"acquisition_detected": true,
"acquisition_time_s": 0.1004119270000956,
"raw_doppler_hz": 1750.0,
"expected_doppler_hz": 1828.0,
"start_sample_timestamp": 90995,
"tracking_epoch_count": 16088,
"tracking_time_s": 13.650105177999649,
"tracking_final_state": "PLL_TRACK",
"tracking_reacquisition_requests": 10,
"tracking_lock_timestamp": 107363,
"prompt_epoch_count": 8044,
"first_synchronized_symbol_timestamp": 4428515,
"first_page_sync_timestamp": 4428515,
"first_crc_valid_page_timestamp": 4428515,
"page_parts": 31,
"pages": 15,
"crc_passes": 15,
"crc_failures": 0,
"fec_failures": 0,
"received_word_types": [
1,
2,
3,
4,
5,
6
],
"missing_ephemeris_word_types": [],
"complete_ephemeris": true,
"ephemeris_iod_nav": 29,
"first_complete_ephemeris_timestamp": 61716515,
"clock_parameters": true,
"health_valid": true,
"data_valid": true,
"decoding_time_s": 1.260811995001859
},
"4": {
"prn": 4,
"acquisition_detected": true,
"acquisition_time_s": 0.08580062900000485,
"raw_doppler_hz": 2250.0,
"expected_doppler_hz": 2171.0,
"start_sample_timestamp": 86819,
"tracking_epoch_count": 16088,
"tracking_time_s": 13.877967087995785,
"tracking_final_state": "PLL_TRACK",
"tracking_reacquisition_requests": 61,
"tracking_lock_timestamp": 103187,
"prompt_epoch_count": 8044,
"first_synchronized_symbol_timestamp": 12624707,
"first_page_sync_timestamp": 12624707,
"first_crc_valid_page_timestamp": 12624707,
"page_parts": 29,
"pages": 14,
"crc_passes": 14,
"crc_failures": 0,
"fec_failures": 0,
"received_word_types": [
1,
2,
3,
4,
5,
6
],
"missing_ephemeris_word_types": [],
"complete_ephemeris": true,
"ephemeris_iod_nav": 30,
"first_complete_ephemeris_timestamp": 61728707,
"clock_parameters": true,
"health_valid": true,
"data_valid": true,
"decoding_time_s": 1.3411525530027575
},
"19": {
"prn": 19,
"acquisition_detected": true,
"acquisition_time_s": 0.0836479790013982,
"raw_doppler_hz": -250.0,
"expected_doppler_hz": -367.0,
"start_sample_timestamp": 87566,
"tracking_epoch_count": 16088,
"tracking_time_s": 13.9836710640011,
"tracking_final_state": "PLL_TRACK",
"tracking_reacquisition_requests": 406,
"tracking_lock_timestamp": 103934,
"prompt_epoch_count": 8044,
"first_synchronized_symbol_timestamp": 16684718,
"first_page_sync_timestamp": 16684718,
"first_crc_valid_page_timestamp": 20776718,
"page_parts": 28,
"pages": 13,
"crc_passes": 13,
"crc_failures": 0,
"fec_failures": 0,
"received_word_types": [
2,
3,
4,
5,
6
],
"missing_ephemeris_word_types": [
1
],
"complete_ephemeris": false,
"ephemeris_iod_nav": null,
"first_complete_ephemeris_timestamp": null,
"clock_parameters": true,
"health_valid": false,
"data_valid": false,
"decoding_time_s": 1.2081766550036264
},
"21": {
"prn": 21,
"acquisition_detected": true,
"acquisition_time_s": 0.08741291100159287,
"raw_doppler_hz": -750.0,
"expected_doppler_hz": -712.0,
"start_sample_timestamp": 93628,
"tracking_epoch_count": 16088,
"tracking_time_s": 13.982213923998643,
"tracking_final_state": "PLL_TRACK",
"tracking_reacquisition_requests": 259,
"tracking_lock_timestamp": 101812,
"prompt_epoch_count": 8044,
"first_synchronized_symbol_timestamp": 12598780,
"first_page_sync_timestamp": 12598780,
"first_crc_valid_page_timestamp": 12598780,
"page_parts": 29,
"pages": 14,
"crc_passes": 14,
"crc_failures": 0,
"fec_failures": 0,
"received_word_types": [
1,
2,
3,
4,
5,
6
],
"missing_ephemeris_word_types": [],
"complete_ephemeris": true,
"ephemeris_iod_nav": 29,
"first_complete_ephemeris_timestamp": 61702780,
"clock_parameters": true,
"health_valid": true,
"data_valid": true,
"decoding_time_s": 1.231179278001946
},
"27": {
"prn": 27,
"acquisition_detected": true,
"acquisition_time_s": 0.08157938700605882,
"raw_doppler_hz": -2750.0,
"expected_doppler_hz": -2637.0,
"start_sample_timestamp": 88014,
"tracking_epoch_count": 16088,
"tracking_time_s": 13.978430488001322,
"tracking_final_state": "PLL_TRACK",
"tracking_reacquisition_requests": 0,
"tracking_lock_timestamp": 96198,
"prompt_epoch_count": 8044,
"first_synchronized_symbol_timestamp": 12642270,
"first_page_sync_timestamp": 12642270,
"first_crc_valid_page_timestamp": 12642270,
"page_parts": 29,
"pages": 14,
"crc_passes": 14,
"crc_failures": 0,
"fec_failures": 0,
"received_word_types": [
1,
2,
3,
4,
5,
6
],
"missing_ephemeris_word_types": [],
"complete_ephemeris": true,
"ephemeris_iod_nav": 29,
"first_complete_ephemeris_timestamp": 61746270,
"clock_parameters": true,
"health_valid": true,
"data_valid": true,
"decoding_time_s": 1.2002744679994066
}
},
"galileo_time": {
"week_number": 1138,
"time_of_week_s": 554765,
"page_start_sample_timestamp": 69930270,
"source_word_type": 6,
"valid": true
},
"navigation_ready": true
}
+11
View File
@@ -0,0 +1,11 @@
# Galileo I/NAV collection report
The standalone decoder consumed tracked E1B prompts only; simulator ephemeris and time truth were not inputs.
| PRN | Tracking | Symbol sync | Page sync | CRC pages | Complete ephemeris | Clock | Time | Ready |
| --: | -------: | ----------: | --------: | --------: | -----------------: | ----: | ---: | ----: |
| 1 | PLL_TRACK | True | 31 | 15 | True | True | True | True |
| 4 | PLL_TRACK | True | 29 | 14 | True | True | True | True |
| 19 | PLL_TRACK | True | 28 | 13 | False | True | True | False |
| 21 | PLL_TRACK | True | 29 | 14 | True | True | True | True |
| 27 | PLL_TRACK | True | 29 | 14 | True | True | True | True |
+747
View File
@@ -0,0 +1,747 @@
{
"comparison_stage": "post_decode_only",
"truth_injected_into_decoder": false,
"rinex_source": "/home/onur/Desktop/galileo/signalsim/SignalSim/EphData/BRDC00IGS_R_20211700000_01D_MN.rnx",
"satellites": {
"1": {
"rinex_epoch": "2021 06 19 10 10 00",
"fields": {
"toe_s": {
"decoded_raw_integer": 9250,
"decoded_scaled_value": 555000.0,
"simulator_truth_value": 555000.0,
"absolute_error": 0.0,
"expected_quantization_step": 60.0,
"pass": true
},
"toc_s": {
"decoded_raw_integer": 9250,
"decoded_scaled_value": 555000.0,
"simulator_truth_value": 555000.0,
"absolute_error": 0.0,
"expected_quantization_step": 60.0,
"pass": true
},
"mean_anomaly_rad": {
"decoded_raw_integer": 1205435370,
"decoded_scaled_value": 1.763453196161098,
"simulator_truth_value": 1.763453196161,
"absolute_error": 9.792167077193881e-14,
"expected_quantization_step": 1.4629180792671596e-09,
"pass": true
},
"eccentricity": {
"decoded_raw_integer": 686593,
"decoded_scaled_value": 7.992994505912066e-05,
"simulator_truth_value": 7.992994505912e-05,
"absolute_error": 6.505213034913027e-19,
"expected_quantization_step": 1.1641532182693481e-10,
"pass": true
},
"sqrt_a": {
"decoded_raw_integer": 2852441455,
"decoded_scaled_value": 5440.600309371948,
"simulator_truth_value": 5440.600309372,
"absolute_error": 5.184119800105691e-11,
"expected_quantization_step": 1.9073486328125e-06,
"pass": true
},
"omega0_rad": {
"decoded_raw_integer": 124271520,
"decoded_scaled_value": 0.1817990533460104,
"simulator_truth_value": 0.181799053346,
"absolute_error": 1.0408340855860843e-14,
"expected_quantization_step": 1.4629180792671596e-09,
"pass": true
},
"inclination_rad": {
"decoded_raw_integer": 668564212,
"decoded_scaled_value": 0.9780546728858021,
"simulator_truth_value": 0.9780546728858,
"absolute_error": 2.1094237467877974e-15,
"expected_quantization_step": 1.4629180792671596e-09,
"pass": true
},
"argument_of_perigee_rad": {
"decoded_raw_integer": -1020394408,
"decoded_scaled_value": -1.4927534274463103,
"simulator_truth_value": -1.492753427446,
"absolute_error": 3.1041835768519377e-13,
"expected_quantization_step": 1.4629180792671596e-09,
"pass": true
},
"inclination_rate_rad_s": {
"decoded_raw_integer": 278,
"decoded_scaled_value": 9.928985010651132e-11,
"simulator_truth_value": 9.928985010651e-11,
"absolute_error": 1.3183191012563879e-24,
"expected_quantization_step": 3.571577341960839e-13,
"pass": true
},
"omega_dot_rad_s": {
"decoded_raw_integer": -16266,
"decoded_scaled_value": -5.809527704433501e-09,
"simulator_truth_value": -5.809527704434e-09,
"absolute_error": 4.996170899820287e-22,
"expected_quantization_step": 3.571577341960839e-13,
"pass": true
},
"delta_n_rad_s": {
"decoded_raw_integer": 9200,
"decoded_scaled_value": 3.2858511546039716e-09,
"simulator_truth_value": 3.285851154604e-09,
"absolute_error": 2.8537731133079455e-23,
"expected_quantization_step": 3.571577341960839e-13,
"pass": true
},
"cuc_rad": {
"decoded_raw_integer": 2269,
"decoded_scaled_value": 4.2263418436050415e-06,
"simulator_truth_value": 4.226341843605e-06,
"absolute_error": 4.1504614415460717e-20,
"expected_quantization_step": 1.862645149230957e-09,
"pass": true
},
"cus_rad": {
"decoded_raw_integer": 2357,
"decoded_scaled_value": 4.390254616737366e-06,
"simulator_truth_value": 4.390254616737e-06,
"absolute_error": 3.6591823321385775e-19,
"expected_quantization_step": 1.862645149230957e-09,
"pass": true
},
"crc_m": {
"decoded_raw_integer": 8197,
"decoded_scaled_value": 256.15625,
"simulator_truth_value": 256.15625,
"absolute_error": 0.0,
"expected_quantization_step": 0.03125,
"pass": true
},
"crs_m": {
"decoded_raw_integer": 2918,
"decoded_scaled_value": 91.1875,
"simulator_truth_value": 91.1875,
"absolute_error": 0.0,
"expected_quantization_step": 0.03125,
"pass": true
},
"cic_rad": {
"decoded_raw_integer": 8,
"decoded_scaled_value": 1.4901161193847656e-08,
"simulator_truth_value": 1.490116119385e-08,
"absolute_error": 2.3425754947501744e-21,
"expected_quantization_step": 1.862645149230957e-09,
"pass": true
},
"cis_rad": {
"decoded_raw_integer": -31,
"decoded_scaled_value": -5.774199962615967e-08,
"simulator_truth_value": -5.774199962616e-08,
"absolute_error": 3.3087224502121107e-22,
"expected_quantization_step": 1.862645149230957e-09,
"pass": true
},
"clock_bias_s": {
"decoded_raw_integer": -19455572,
"decoded_scaled_value": -0.001132463337853551,
"simulator_truth_value": -0.001132463337854,
"absolute_error": 4.490765398434959e-16,
"expected_quantization_step": 5.820766091346741e-11,
"pass": true
},
"clock_drift_s_per_s": {
"decoded_raw_integer": -561,
"decoded_scaled_value": -7.972289495228324e-12,
"simulator_truth_value": -7.972289495228e-12,
"absolute_error": 3.2473301391241907e-25,
"expected_quantization_step": 1.4210854715202004e-14,
"pass": true
},
"clock_drift_rate_s_per_s2": {
"decoded_raw_integer": 0,
"decoded_scaled_value": 0.0,
"simulator_truth_value": 0.0,
"absolute_error": 0.0,
"expected_quantization_step": 1.734723475976807e-18,
"pass": true
},
"iod_nav": {
"decoded_raw_integer": 29,
"decoded_scaled_value": 29,
"simulator_truth_value": 29,
"absolute_error": 0,
"expected_quantization_step": 1,
"pass": true
},
"health": {
"decoded_raw_integer": 0,
"decoded_scaled_value": true,
"simulator_truth_value": 0,
"absolute_error": 0,
"expected_quantization_step": 1,
"pass": true
}
},
"pass": true
},
"4": {
"rinex_epoch": "2021 06 19 10 20 00",
"fields": {
"toe_s": {
"decoded_raw_integer": 9260,
"decoded_scaled_value": 555600.0,
"simulator_truth_value": 555600.0,
"absolute_error": 0.0,
"expected_quantization_step": 60.0,
"pass": true
},
"toc_s": {
"decoded_raw_integer": 9260,
"decoded_scaled_value": 555600.0,
"simulator_truth_value": 555600.0,
"absolute_error": 0.0,
"expected_quantization_step": 60.0,
"pass": true
},
"mean_anomaly_rad": {
"decoded_raw_integer": 2014577905,
"decoded_scaled_value": 2.9471624393166582,
"simulator_truth_value": 2.947162439317,
"absolute_error": 3.419486915845482e-13,
"expected_quantization_step": 1.4629180792671596e-09,
"pass": true
},
"eccentricity": {
"decoded_raw_integer": 2815972,
"decoded_scaled_value": 0.0003278222866356373,
"simulator_truth_value": 0.0003278222866356,
"absolute_error": 3.729655473350135e-17,
"expected_quantization_step": 1.1641532182693481e-10,
"pass": true
},
"sqrt_a": {
"decoded_raw_integer": 2852451617,
"decoded_scaled_value": 5440.619691848755,
"simulator_truth_value": 5440.619691849,
"absolute_error": 2.455635694786906e-10,
"expected_quantization_step": 1.9073486328125e-06,
"pass": true
},
"omega0_rad": {
"decoded_raw_integer": -1310031890,
"decoded_scaled_value": -1.916469336297527,
"simulator_truth_value": -1.916469336298,
"absolute_error": 4.731770530952417e-13,
"expected_quantization_step": 1.4629180792671596e-09,
"pass": true
},
"inclination_rad": {
"decoded_raw_integer": 652573009,
"decoded_scaled_value": 0.9546608529078708,
"simulator_truth_value": 0.9546608529079,
"absolute_error": 2.919886554764162e-14,
"expected_quantization_step": 1.4629180792671596e-09,
"pass": true
},
"argument_of_perigee_rad": {
"decoded_raw_integer": -888300143,
"decoded_scaled_value": -1.2995103390103033,
"simulator_truth_value": -1.29951033901,
"absolute_error": 3.0331293032759277e-13,
"expected_quantization_step": 1.4629180792671596e-09,
"pass": true
},
"inclination_rate_rad_s": {
"decoded_raw_integer": -651,
"decoded_scaled_value": -2.3250968496165061e-10,
"simulator_truth_value": -2.325096849617e-10,
"absolute_error": 4.939819220590112e-23,
"expected_quantization_step": 3.571577341960839e-13,
"pass": true
},
"omega_dot_rad_s": {
"decoded_raw_integer": -16173,
"decoded_scaled_value": -5.7763120351532645e-09,
"simulator_truth_value": -5.776312035153e-09,
"absolute_error": 2.6469779601696886e-22,
"expected_quantization_step": 3.571577341960839e-13,
"pass": true
},
"delta_n_rad_s": {
"decoded_raw_integer": 9495,
"decoded_scaled_value": 3.3912126861918165e-09,
"simulator_truth_value": 3.391212686192e-09,
"absolute_error": 1.8363409598677214e-22,
"expected_quantization_step": 3.571577341960839e-13,
"pass": true
},
"cuc_rad": {
"decoded_raw_integer": -1908,
"decoded_scaled_value": -3.553926944732666e-06,
"simulator_truth_value": -3.553926944733e-06,
"absolute_error": 3.341544976918215e-19,
"expected_quantization_step": 1.862645149230957e-09,
"pass": true
},
"cus_rad": {
"decoded_raw_integer": 4287,
"decoded_scaled_value": 7.985159754753113e-06,
"simulator_truth_value": 7.985159754753e-06,
"absolute_error": 1.1350241493207625e-19,
"expected_quantization_step": 1.862645149230957e-09,
"pass": true
},
"crc_m": {
"decoded_raw_integer": 5176,
"decoded_scaled_value": 161.75,
"simulator_truth_value": 161.75,
"absolute_error": 0.0,
"expected_quantization_step": 0.03125,
"pass": true
},
"crs_m": {
"decoded_raw_integer": -2345,
"decoded_scaled_value": -73.28125,
"simulator_truth_value": -73.28125,
"absolute_error": 0.0,
"expected_quantization_step": 0.03125,
"pass": true
},
"cic_rad": {
"decoded_raw_integer": 11,
"decoded_scaled_value": 2.0489096641540527e-08,
"simulator_truth_value": 2.048909664154e-08,
"absolute_error": 5.260868695837256e-22,
"expected_quantization_step": 1.862645149230957e-09,
"pass": true
},
"cis_rad": {
"decoded_raw_integer": 29,
"decoded_scaled_value": 5.4016709327697754e-08,
"simulator_truth_value": 5.40167093277e-08,
"absolute_error": 2.243313821243811e-21,
"expected_quantization_step": 1.862645149230957e-09,
"pass": true
},
"clock_bias_s": {
"decoded_raw_integer": -13668906,
"decoded_scaled_value": -0.0007956350455060601,
"simulator_truth_value": -0.0007956350455061,
"absolute_error": 3.9898639947466563e-17,
"expected_quantization_step": 5.820766091346741e-11,
"pass": true
},
"clock_drift_s_per_s": {
"decoded_raw_integer": -566,
"decoded_scaled_value": -8.043343768804334e-12,
"simulator_truth_value": -8.043343768804e-12,
"absolute_error": 3.3442653671577486e-25,
"expected_quantization_step": 1.4210854715202004e-14,
"pass": true
},
"clock_drift_rate_s_per_s2": {
"decoded_raw_integer": 0,
"decoded_scaled_value": 0.0,
"simulator_truth_value": 0.0,
"absolute_error": 0.0,
"expected_quantization_step": 1.734723475976807e-18,
"pass": true
},
"iod_nav": {
"decoded_raw_integer": 30,
"decoded_scaled_value": 30,
"simulator_truth_value": 30,
"absolute_error": 0,
"expected_quantization_step": 1,
"pass": true
},
"health": {
"decoded_raw_integer": 0,
"decoded_scaled_value": true,
"simulator_truth_value": 0,
"absolute_error": 0,
"expected_quantization_step": 1,
"pass": true
}
},
"pass": true
},
"21": {
"rinex_epoch": "2021 06 19 10 10 00",
"fields": {
"toe_s": {
"decoded_raw_integer": 9250,
"decoded_scaled_value": 555000.0,
"simulator_truth_value": 555000.0,
"absolute_error": 0.0,
"expected_quantization_step": 60.0,
"pass": true
},
"toc_s": {
"decoded_raw_integer": 9250,
"decoded_scaled_value": 555000.0,
"simulator_truth_value": 555000.0,
"absolute_error": 0.0,
"expected_quantization_step": 60.0,
"pass": true
},
"mean_anomaly_rad": {
"decoded_raw_integer": -1911018410,
"decoded_scaled_value": -2.7956633818013814,
"simulator_truth_value": -2.795663381801,
"absolute_error": 3.814726312612038e-13,
"expected_quantization_step": 1.4629180792671596e-09,
"pass": true
},
"eccentricity": {
"decoded_raw_integer": 333012,
"decoded_scaled_value": 3.8767699152231216e-05,
"simulator_truth_value": 3.876769915223e-05,
"absolute_error": 1.2197274440461925e-18,
"expected_quantization_step": 1.1641532182693481e-10,
"pass": true
},
"sqrt_a": {
"decoded_raw_integer": 2852447998,
"decoded_scaled_value": 5440.612789154053,
"simulator_truth_value": 5440.612789154,
"absolute_error": 5.275069270282984e-11,
"expected_quantization_step": 1.9073486328125e-06,
"pass": true
},
"omega0_rad": {
"decoded_raw_integer": 122320949,
"decoded_scaled_value": 0.1789455277652162,
"simulator_truth_value": 0.1789455277652,
"absolute_error": 1.6181500583911657e-14,
"expected_quantization_step": 1.4629180792671596e-09,
"pass": true
},
"inclination_rad": {
"decoded_raw_integer": 668272202,
"decoded_scaled_value": 0.9776274861774753,
"simulator_truth_value": 0.9776274861775,
"absolute_error": 2.4646951146678475e-14,
"expected_quantization_step": 1.4629180792671596e-09,
"pass": true
},
"argument_of_perigee_rad": {
"decoded_raw_integer": -1683591646,
"decoded_scaled_value": -2.4629566570365555,
"simulator_truth_value": -2.462956657037,
"absolute_error": 4.445332990599127e-13,
"expected_quantization_step": 1.4629180792671596e-09,
"pass": true
},
"inclination_rate_rad_s": {
"decoded_raw_integer": 390,
"decoded_scaled_value": 1.392915163364727e-10,
"simulator_truth_value": 1.392915163365e-10,
"absolute_error": 2.7296960214249913e-23,
"expected_quantization_step": 3.571577341960839e-13,
"pass": true
},
"omega_dot_rad_s": {
"decoded_raw_integer": -16427,
"decoded_scaled_value": -5.86703009963907e-09,
"simulator_truth_value": -5.867030099639e-09,
"absolute_error": 6.948317145445432e-23,
"expected_quantization_step": 3.571577341960839e-13,
"pass": true
},
"delta_n_rad_s": {
"decoded_raw_integer": 9206,
"decoded_scaled_value": 3.2879941010091484e-09,
"simulator_truth_value": 3.287994101009e-09,
"absolute_error": 1.4847891995326847e-22,
"expected_quantization_step": 3.571577341960839e-13,
"pass": true
},
"cuc_rad": {
"decoded_raw_integer": 2375,
"decoded_scaled_value": 4.423782229423523e-06,
"simulator_truth_value": 4.423782229424e-06,
"absolute_error": 4.768795493041711e-19,
"expected_quantization_step": 1.862645149230957e-09,
"pass": true
},
"cus_rad": {
"decoded_raw_integer": 2474,
"decoded_scaled_value": 4.608184099197388e-06,
"simulator_truth_value": 4.608184099197e-06,
"absolute_error": 3.8794108984246956e-19,
"expected_quantization_step": 1.862645149230957e-09,
"pass": true
},
"crc_m": {
"decoded_raw_integer": 7939,
"decoded_scaled_value": 248.09375,
"simulator_truth_value": 248.09375,
"absolute_error": 0.0,
"expected_quantization_step": 0.03125,
"pass": true
},
"crs_m": {
"decoded_raw_integer": 3018,
"decoded_scaled_value": 94.3125,
"simulator_truth_value": 94.3125,
"absolute_error": 0.0,
"expected_quantization_step": 0.03125,
"pass": true
},
"cic_rad": {
"decoded_raw_integer": 71,
"decoded_scaled_value": 1.3224780559539795e-07,
"simulator_truth_value": 1.322478055954e-07,
"absolute_error": 2.0381730293306602e-21,
"expected_quantization_step": 1.862645149230957e-09,
"pass": true
},
"cis_rad": {
"decoded_raw_integer": 15,
"decoded_scaled_value": 2.7939677238464355e-08,
"simulator_truth_value": 2.793967723846e-08,
"absolute_error": 4.354278744479138e-21,
"expected_quantization_step": 1.862645149230957e-09,
"pass": true
},
"clock_bias_s": {
"decoded_raw_integer": -11536773,
"decoded_scaled_value": -0.0006715285708196461,
"simulator_truth_value": -0.0006715285708196,
"absolute_error": 4.607859233063394e-17,
"expected_quantization_step": 5.820766091346741e-11,
"pass": true
},
"clock_drift_s_per_s": {
"decoded_raw_integer": -147,
"decoded_scaled_value": -2.0889956431346945e-12,
"simulator_truth_value": -2.088995643135e-12,
"absolute_error": 3.053459683057075e-25,
"expected_quantization_step": 1.4210854715202004e-14,
"pass": true
},
"clock_drift_rate_s_per_s2": {
"decoded_raw_integer": 0,
"decoded_scaled_value": 0.0,
"simulator_truth_value": 0.0,
"absolute_error": 0.0,
"expected_quantization_step": 1.734723475976807e-18,
"pass": true
},
"iod_nav": {
"decoded_raw_integer": 29,
"decoded_scaled_value": 29,
"simulator_truth_value": 29,
"absolute_error": 0,
"expected_quantization_step": 1,
"pass": true
},
"health": {
"decoded_raw_integer": 0,
"decoded_scaled_value": true,
"simulator_truth_value": 0,
"absolute_error": 0,
"expected_quantization_step": 1,
"pass": true
}
},
"pass": true
},
"27": {
"rinex_epoch": "2021 06 19 10 10 00",
"fields": {
"toe_s": {
"decoded_raw_integer": 9250,
"decoded_scaled_value": 555000.0,
"simulator_truth_value": 555000.0,
"absolute_error": 0.0,
"expected_quantization_step": 60.0,
"pass": true
},
"toc_s": {
"decoded_raw_integer": 9250,
"decoded_scaled_value": 555000.0,
"simulator_truth_value": 555000.0,
"absolute_error": 0.0,
"expected_quantization_step": 60.0,
"pass": true
},
"mean_anomaly_rad": {
"decoded_raw_integer": 1962316831,
"decoded_scaled_value": 2.8707087693201396,
"simulator_truth_value": 2.87070876932,
"absolute_error": 1.3944401189291966e-13,
"expected_quantization_step": 1.4629180792671596e-09,
"pass": true
},
"eccentricity": {
"decoded_raw_integer": 1367381,
"decoded_scaled_value": 0.00015918409917503595,
"simulator_truth_value": 0.000159184099175,
"absolute_error": 3.594130201789447e-17,
"expected_quantization_step": 1.1641532182693481e-10,
"pass": true
},
"sqrt_a": {
"decoded_raw_integer": 2852446803,
"decoded_scaled_value": 5440.6105098724365,
"simulator_truth_value": 5440.610509872,
"absolute_error": 4.3655745685100555e-10,
"expected_quantization_step": 1.9073486328125e-06,
"pass": true
},
"omega0_rad": {
"decoded_raw_integer": 122319142,
"decoded_scaled_value": 0.17894288427224694,
"simulator_truth_value": 0.1789428842722,
"absolute_error": 4.693467836602849e-14,
"expected_quantization_step": 1.4629180792671596e-09,
"pass": true
},
"inclination_rad": {
"decoded_raw_integer": 668253077,
"decoded_scaled_value": 0.9775995078692093,
"simulator_truth_value": 0.9775995078692,
"absolute_error": 9.325873406851315e-15,
"expected_quantization_step": 1.4629180792671596e-09,
"pass": true
},
"argument_of_perigee_rad": {
"decoded_raw_integer": -720614090,
"decoded_scaled_value": -1.0541993804356522,
"simulator_truth_value": -1.054199380436,
"absolute_error": 3.4772185131259903e-13,
"expected_quantization_step": 1.4629180792671596e-09,
"pass": true
},
"inclination_rate_rad_s": {
"decoded_raw_integer": 639,
"decoded_scaled_value": 2.282237921512976e-10,
"simulator_truth_value": 2.282237921513e-10,
"absolute_error": 2.4039936552322367e-24,
"expected_quantization_step": 3.571577341960839e-13,
"pass": true
},
"omega_dot_rad_s": {
"decoded_raw_integer": -16281,
"decoded_scaled_value": -5.8148850704464415e-09,
"simulator_truth_value": -5.814885070446e-09,
"absolute_error": 4.417144471033168e-22,
"expected_quantization_step": 3.571577341960839e-13,
"pass": true
},
"delta_n_rad_s": {
"decoded_raw_integer": 9286,
"decoded_scaled_value": 3.316566719744835e-09,
"simulator_truth_value": 3.316566719745e-09,
"absolute_error": 1.6502253220432902e-22,
"expected_quantization_step": 3.571577341960839e-13,
"pass": true
},
"cuc_rad": {
"decoded_raw_integer": 2485,
"decoded_scaled_value": 4.628673195838928e-06,
"simulator_truth_value": 4.628673195839e-06,
"absolute_error": 7.199780051661553e-20,
"expected_quantization_step": 1.862645149230957e-09,
"pass": true
},
"cus_rad": {
"decoded_raw_integer": 2415,
"decoded_scaled_value": 4.498288035392761e-06,
"simulator_truth_value": 4.498288035393e-06,
"absolute_error": 2.388632911257127e-19,
"expected_quantization_step": 1.862645149230957e-09,
"pass": true
},
"crc_m": {
"decoded_raw_integer": 8032,
"decoded_scaled_value": 251.0,
"simulator_truth_value": 251.0,
"absolute_error": 0.0,
"expected_quantization_step": 0.03125,
"pass": true
},
"crs_m": {
"decoded_raw_integer": 3123,
"decoded_scaled_value": 97.59375,
"simulator_truth_value": 97.59375,
"absolute_error": 0.0,
"expected_quantization_step": 0.03125,
"pass": true
},
"cic_rad": {
"decoded_raw_integer": -27,
"decoded_scaled_value": -5.029141902923584e-08,
"simulator_truth_value": -5.029141902924e-08,
"absolute_error": 4.162372842366835e-21,
"expected_quantization_step": 1.862645149230957e-09,
"pass": true
},
"cis_rad": {
"decoded_raw_integer": 66,
"decoded_scaled_value": 1.2293457984924316e-07,
"simulator_truth_value": 1.229345798492e-07,
"absolute_error": 4.317221053036762e-20,
"expected_quantization_step": 1.862645149230957e-09,
"pass": true
},
"clock_bias_s": {
"decoded_raw_integer": -988889,
"decoded_scaled_value": -5.756091559305787e-05,
"simulator_truth_value": -5.756091559306e-05,
"absolute_error": 2.1277467635028025e-18,
"expected_quantization_step": 5.820766091346741e-11,
"pass": true
},
"clock_drift_s_per_s": {
"decoded_raw_integer": -581,
"decoded_scaled_value": -8.256506589532364e-12,
"simulator_truth_value": -8.256506589532e-12,
"absolute_error": 3.6350710512584224e-25,
"expected_quantization_step": 1.4210854715202004e-14,
"pass": true
},
"clock_drift_rate_s_per_s2": {
"decoded_raw_integer": 0,
"decoded_scaled_value": 0.0,
"simulator_truth_value": 0.0,
"absolute_error": 0.0,
"expected_quantization_step": 1.734723475976807e-18,
"pass": true
},
"iod_nav": {
"decoded_raw_integer": 29,
"decoded_scaled_value": 29,
"simulator_truth_value": 29,
"absolute_error": 0,
"expected_quantization_step": 1,
"pass": true
},
"health": {
"decoded_raw_integer": 0,
"decoded_scaled_value": true,
"simulator_truth_value": 0,
"absolute_error": 0,
"expected_quantization_step": 1,
"pass": true
}
},
"pass": true
}
},
"galileo_time": {
"decoded_week_number": 1138,
"simulator_truth_week_number": 1138,
"week_absolute_error": 0,
"decoded_time_of_week_s": 554765,
"simulator_truth_time_of_week_s": 554765,
"time_of_week_absolute_error_s": 0,
"expected_quantization_step_s": 1,
"leap_seconds_from_rinex": 18,
"pass": true
},
"overall_pass": true
}
+14
View File
@@ -0,0 +1,14 @@
# I/NAV decoded-field truth comparison
Truth was applied only after standalone RF-to-page decoding and ephemeris assembly.
| PRN | RINEX epoch | Fields | Result |
| --: | --- | --: | ---: |
| 1 | 2021 06 19 10 10 00 | 22 | PASS |
| 4 | 2021 06 19 10 20 00 | 22 | PASS |
| 21 | 2021 06 19 10 10 00 | 22 | PASS |
| 27 | 2021 06 19 10 10 00 | 22 | PASS |
## Galileo system time
Decoded GST week/TOW: 1138/554765 s; independently expected 1138/554765 s. Result: **PASS**.
+35
View File
@@ -0,0 +1,35 @@
# Navigation readiness review
## Gate result
The standalone receiver path decoded SignalSim RF samples without consuming
simulator ephemeris, satellite states, transmit times, receiver truth, or RINEX
fields. The RINEX source was opened only by a separate post-decode comparison.
The reproducible `navigation_multisat` vector contains 131,758,308 complex IQ8
samples (32.2 s at 4.092 MHz), SHA-256
`b38393b32eec2df53f9813ea7ff8f13e5e0fc72fa5cb7fb910a2b8f907a56a6e`.
| Criterion | Evidence | Result |
| --- | --- | ---: |
| E1B prompts and raw symbols from tracked RF | Five `prompt_epochs.npz`, `soft_symbols.npy`, and `hard_symbols.bin` artifact sets | PASS |
| Stable symbol and page synchronization | Repeated 250-symbol sync confirmation; 146 synchronized page parts | PASS |
| Deinterleaving | Official Annex D.2 coded vector plus RF pages | PASS |
| Soft-decision FEC | Independent Annex D.2 vector; all 70 received pages FEC-valid | PASS |
| CRC | Independent CRC-24Q check vector; 70 pass, 0 fail | PASS |
| Critical words | Types 1–6 decoded and typed | PASS |
| Complete ephemeris | PRNs 1, 4, 21, and 27; atomic matching IODnav sets | PASS |
| Satellite clock | Word 4 clock polynomial for all four complete satellites | PASS |
| Galileo time | GST week 1138, TOW 554765 s from tracked page data | PASS |
| Health and validity | Four complete satellites report usable E1B health and DVS | PASS |
| Independent truth comparison | Every ephemeris/clock field within 0.5 broadcast LSB; GST within its 1 s resolution | PASS |
| Reproducible artifacts | Prompt, symbol, page, FEC, CRC, word, ephemeris and summary evidence per PRN | PASS |
| Decoder truth isolation | Collection report records `decoder_truth_inputs: []` | PASS |
PRN 19 deliberately demonstrates the incomplete-data behavior: it received
word types 2–6 but not word 1 during the observation, so no ephemeris was
fabricated or committed. The other four satellites satisfy the readiness gate.
PVT has not been implemented or started in this milestone.
NAVIGATION DATA READY FOR PVT
@@ -0,0 +1,211 @@
{
"decoder_truth_inputs": [],
"icd": "Galileo OS SIS ICD Issue 2.2, November 2025",
"signalsim_commit": "80b262113e77c4482ca9f5cbfef9bcada402ed28",
"sample_file": "/home/onur/Desktop/galileo/verification/vectors/signalsim/navigation_multisat/navigation_multisat_iq8.bin",
"sample_sha256": "b38393b32eec2df53f9813ea7ff8f13e5e0fc72fa5cb7fb910a2b8f907a56a6e",
"sample_count": 131758308,
"sampling_frequency_hz": 4092000.0,
"intermediate_frequency_hz": 1023000.0,
"satellites": {
"1": {
"prn": 1,
"acquisition_detected": true,
"acquisition_time_s": 0.1004119270000956,
"raw_doppler_hz": 1750.0,
"expected_doppler_hz": 1828.0,
"start_sample_timestamp": 90995,
"tracking_epoch_count": 16088,
"tracking_time_s": 13.650105177999649,
"tracking_final_state": "PLL_TRACK",
"tracking_reacquisition_requests": 10,
"tracking_lock_timestamp": 107363,
"prompt_epoch_count": 8044,
"first_synchronized_symbol_timestamp": 4428515,
"first_page_sync_timestamp": 4428515,
"first_crc_valid_page_timestamp": 4428515,
"page_parts": 31,
"pages": 15,
"crc_passes": 15,
"crc_failures": 0,
"fec_failures": 0,
"received_word_types": [
1,
2,
3,
4,
5,
6
],
"missing_ephemeris_word_types": [],
"complete_ephemeris": true,
"ephemeris_iod_nav": 29,
"first_complete_ephemeris_timestamp": 61716515,
"clock_parameters": true,
"health_valid": true,
"data_valid": true,
"decoding_time_s": 1.260811995001859
},
"4": {
"prn": 4,
"acquisition_detected": true,
"acquisition_time_s": 0.08580062900000485,
"raw_doppler_hz": 2250.0,
"expected_doppler_hz": 2171.0,
"start_sample_timestamp": 86819,
"tracking_epoch_count": 16088,
"tracking_time_s": 13.877967087995785,
"tracking_final_state": "PLL_TRACK",
"tracking_reacquisition_requests": 61,
"tracking_lock_timestamp": 103187,
"prompt_epoch_count": 8044,
"first_synchronized_symbol_timestamp": 12624707,
"first_page_sync_timestamp": 12624707,
"first_crc_valid_page_timestamp": 12624707,
"page_parts": 29,
"pages": 14,
"crc_passes": 14,
"crc_failures": 0,
"fec_failures": 0,
"received_word_types": [
1,
2,
3,
4,
5,
6
],
"missing_ephemeris_word_types": [],
"complete_ephemeris": true,
"ephemeris_iod_nav": 30,
"first_complete_ephemeris_timestamp": 61728707,
"clock_parameters": true,
"health_valid": true,
"data_valid": true,
"decoding_time_s": 1.3411525530027575
},
"19": {
"prn": 19,
"acquisition_detected": true,
"acquisition_time_s": 0.0836479790013982,
"raw_doppler_hz": -250.0,
"expected_doppler_hz": -367.0,
"start_sample_timestamp": 87566,
"tracking_epoch_count": 16088,
"tracking_time_s": 13.9836710640011,
"tracking_final_state": "PLL_TRACK",
"tracking_reacquisition_requests": 406,
"tracking_lock_timestamp": 103934,
"prompt_epoch_count": 8044,
"first_synchronized_symbol_timestamp": 16684718,
"first_page_sync_timestamp": 16684718,
"first_crc_valid_page_timestamp": 20776718,
"page_parts": 28,
"pages": 13,
"crc_passes": 13,
"crc_failures": 0,
"fec_failures": 0,
"received_word_types": [
2,
3,
4,
5,
6
],
"missing_ephemeris_word_types": [
1
],
"complete_ephemeris": false,
"ephemeris_iod_nav": null,
"first_complete_ephemeris_timestamp": null,
"clock_parameters": true,
"health_valid": false,
"data_valid": false,
"decoding_time_s": 1.2081766550036264
},
"21": {
"prn": 21,
"acquisition_detected": true,
"acquisition_time_s": 0.08741291100159287,
"raw_doppler_hz": -750.0,
"expected_doppler_hz": -712.0,
"start_sample_timestamp": 93628,
"tracking_epoch_count": 16088,
"tracking_time_s": 13.982213923998643,
"tracking_final_state": "PLL_TRACK",
"tracking_reacquisition_requests": 259,
"tracking_lock_timestamp": 101812,
"prompt_epoch_count": 8044,
"first_synchronized_symbol_timestamp": 12598780,
"first_page_sync_timestamp": 12598780,
"first_crc_valid_page_timestamp": 12598780,
"page_parts": 29,
"pages": 14,
"crc_passes": 14,
"crc_failures": 0,
"fec_failures": 0,
"received_word_types": [
1,
2,
3,
4,
5,
6
],
"missing_ephemeris_word_types": [],
"complete_ephemeris": true,
"ephemeris_iod_nav": 29,
"first_complete_ephemeris_timestamp": 61702780,
"clock_parameters": true,
"health_valid": true,
"data_valid": true,
"decoding_time_s": 1.231179278001946
},
"27": {
"prn": 27,
"acquisition_detected": true,
"acquisition_time_s": 0.08157938700605882,
"raw_doppler_hz": -2750.0,
"expected_doppler_hz": -2637.0,
"start_sample_timestamp": 88014,
"tracking_epoch_count": 16088,
"tracking_time_s": 13.978430488001322,
"tracking_final_state": "PLL_TRACK",
"tracking_reacquisition_requests": 0,
"tracking_lock_timestamp": 96198,
"prompt_epoch_count": 8044,
"first_synchronized_symbol_timestamp": 12642270,
"first_page_sync_timestamp": 12642270,
"first_crc_valid_page_timestamp": 12642270,
"page_parts": 29,
"pages": 14,
"crc_passes": 14,
"crc_failures": 0,
"fec_failures": 0,
"received_word_types": [
1,
2,
3,
4,
5,
6
],
"missing_ephemeris_word_types": [],
"complete_ephemeris": true,
"ephemeris_iod_nav": 29,
"first_complete_ephemeris_timestamp": 61746270,
"clock_parameters": true,
"health_valid": true,
"data_valid": true,
"decoding_time_s": 1.2002744679994066
}
},
"galileo_time": {
"week_number": 1138,
"time_of_week_s": 554765,
"page_start_sample_timestamp": 69930270,
"source_word_type": 6,
"valid": true
},
"navigation_ready": true
}
@@ -0,0 +1,11 @@
# Galileo I/NAV collection report
The standalone decoder consumed tracked E1B prompts only; simulator ephemeris and time truth were not inputs.
| PRN | Tracking | Symbol sync | Page sync | CRC pages | Complete ephemeris | Clock | Time | Ready |
| --: | -------: | ----------: | --------: | --------: | -----------------: | ----: | ---: | ----: |
| 1 | PLL_TRACK | True | 31 | 15 | True | True | True | True |
| 4 | PLL_TRACK | True | 29 | 14 | True | True | True | True |
| 19 | PLL_TRACK | True | 28 | 13 | False | True | True | False |
| 21 | PLL_TRACK | True | 29 | 14 | True | True | True | True |
| 27 | PLL_TRACK | True | 29 | 14 | True | True | True | True |