mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-31 07:13:03 +00:00 
			
		
		
		
	Fix bug in Galileo E1/E5 telemetry decoder
This commit is contained in:
		| @@ -97,7 +97,7 @@ galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs( | |||||||
|                 d_frame_length_symbols = GALILEO_INAV_PAGE_PART_SYMBOLS - GALILEO_INAV_PREAMBLE_LENGTH_BITS; |                 d_frame_length_symbols = GALILEO_INAV_PAGE_PART_SYMBOLS - GALILEO_INAV_PREAMBLE_LENGTH_BITS; | ||||||
|                 CodeLength = GALILEO_INAV_PAGE_PART_SYMBOLS - GALILEO_INAV_PREAMBLE_LENGTH_BITS; |                 CodeLength = GALILEO_INAV_PAGE_PART_SYMBOLS - GALILEO_INAV_PREAMBLE_LENGTH_BITS; | ||||||
|                 DataLength = (CodeLength / nn) - mm; |                 DataLength = (CodeLength / nn) - mm; | ||||||
|                 d_max_symbols_without_valid_frame = GALILEO_INAV_PAGE_PART_SYMBOLS * 10;  //rise alarm 10 seconds without valid tlm |                 d_max_symbols_without_valid_frame = GALILEO_INAV_PAGE_PART_SYMBOLS * 30;  //rise alarm 30 seconds without valid tlm | ||||||
|  |  | ||||||
|                 break; |                 break; | ||||||
|             } |             } | ||||||
| @@ -127,7 +127,7 @@ galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs( | |||||||
|                                 d_secondary_code_samples[i] = -1; |                                 d_secondary_code_samples[i] = -1; | ||||||
|                             } |                             } | ||||||
|                     } |                     } | ||||||
|                 d_max_symbols_without_valid_frame = GALILEO_FNAV_CODES_PER_SYMBOL * GALILEO_FNAV_SYMBOLS_PER_PAGE * 10;  //rise alarm 10 seconds without valid tlm |                 d_max_symbols_without_valid_frame = GALILEO_FNAV_CODES_PER_SYMBOL * GALILEO_FNAV_SYMBOLS_PER_PAGE * 30;  //rise alarm 30 seconds without valid tlm | ||||||
|                 break; |                 break; | ||||||
|             } |             } | ||||||
|         default: |         default: | ||||||
| @@ -532,13 +532,14 @@ int galileo_telemetry_decoder_gs::general_work(int noutput_items __attribute__(( | |||||||
|                                         corr_value += d_preamble_samples[i]; |                                         corr_value += d_preamble_samples[i]; | ||||||
|                                     } |                                     } | ||||||
|                             } |                             } | ||||||
|  |                         if (abs(corr_value) >= d_samples_per_preamble) | ||||||
|  |                             { | ||||||
|  |                                 d_preamble_index = d_sample_counter;  // record the preamble sample stamp | ||||||
|  |                                 DLOG(INFO) << "Preamble detection for Galileo satellite " << this->d_satellite; | ||||||
|  |                                 d_stat = 1;  // enter into frame pre-detection status | ||||||
|  |                             } | ||||||
|                     } |                     } | ||||||
|                 if (abs(corr_value) >= d_samples_per_preamble) |  | ||||||
|                     { |  | ||||||
|                         d_preamble_index = d_sample_counter;  // record the preamble sample stamp |  | ||||||
|                         DLOG(INFO) << "Preamble detection for Galileo satellite " << this->d_satellite; |  | ||||||
|                         d_stat = 1;  // enter into frame pre-detection status |  | ||||||
|                     } |  | ||||||
|                 break; |                 break; | ||||||
|             } |             } | ||||||
|         case 1:  // possible preamble lock |         case 1:  // possible preamble lock | ||||||
| @@ -560,25 +561,32 @@ int galileo_telemetry_decoder_gs::general_work(int noutput_items __attribute__(( | |||||||
|                                         corr_value += d_preamble_samples[i]; |                                         corr_value += d_preamble_samples[i]; | ||||||
|                                     } |                                     } | ||||||
|                             } |                             } | ||||||
|                     } |                         if (abs(corr_value) >= d_samples_per_preamble) | ||||||
|                 if (abs(corr_value) >= d_samples_per_preamble) |  | ||||||
|                     { |  | ||||||
|                         // check preamble separation |  | ||||||
|                         preamble_diff = static_cast<int32_t>(d_sample_counter - d_preamble_index); |  | ||||||
|                         if (abs(preamble_diff - d_preamble_period_symbols) == 0) |  | ||||||
|                             { |                             { | ||||||
|                                 // try to decode frame |                                 // check preamble separation | ||||||
|                                 DLOG(INFO) << "Starting page decoder for Galileo satellite " << this->d_satellite; |                                 preamble_diff = static_cast<int32_t>(d_sample_counter - d_preamble_index); | ||||||
|                                 d_preamble_index = d_sample_counter;  // record the preamble sample stamp |                                 if (abs(preamble_diff - d_preamble_period_symbols) == 0) | ||||||
|                                 d_CRC_error_counter = 0; |  | ||||||
|                                 if (corr_value < 0) flag_PLL_180_deg_phase_locked = true; |  | ||||||
|                                 d_stat = 2; |  | ||||||
|                             } |  | ||||||
|                         else |  | ||||||
|                             { |  | ||||||
|                                 if (preamble_diff > d_preamble_period_symbols) |  | ||||||
|                                     { |                                     { | ||||||
|                                         d_stat = 0;  // start again |                                         // try to decode frame | ||||||
|  |                                         DLOG(INFO) << "Starting page decoder for Galileo satellite " << this->d_satellite; | ||||||
|  |                                         d_preamble_index = d_sample_counter;  // record the preamble sample stamp | ||||||
|  |                                         d_CRC_error_counter = 0; | ||||||
|  |                                         if (corr_value < 0) | ||||||
|  |                                             { | ||||||
|  |                                                 flag_PLL_180_deg_phase_locked = true; | ||||||
|  |                                             } | ||||||
|  |                                         else | ||||||
|  |                                             { | ||||||
|  |                                                 flag_PLL_180_deg_phase_locked = false; | ||||||
|  |                                             } | ||||||
|  |                                         d_stat = 2; | ||||||
|  |                                     } | ||||||
|  |                                 else | ||||||
|  |                                     { | ||||||
|  |                                         if (preamble_diff > d_preamble_period_symbols) | ||||||
|  |                                             { | ||||||
|  |                                                 d_stat = 0;  // start again | ||||||
|  |                                             } | ||||||
|                                     } |                                     } | ||||||
|                             } |                             } | ||||||
|                     } |                     } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Javier Arribas
					Javier Arribas