mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-12-15 04:30:33 +00:00
updated the tracking pull-in test for the FPGA. To be tested.
This commit is contained in:
parent
41faa311f7
commit
0d9b08df70
@ -496,12 +496,14 @@ void GalileoE1PcpsAmbiguousAcquisitionFpga::set_single_doppler_flag(unsigned int
|
||||
}
|
||||
// this function is only used for the unit tests
|
||||
void GalileoE1PcpsAmbiguousAcquisitionFpga::read_acquisition_results(uint32_t *max_index,
|
||||
float *max_magnitude, uint64_t *initial_sample, float *power_sum, uint32_t *doppler_index)
|
||||
float *max_magnitude, float *second_magnitude, uint64_t *initial_sample, uint32_t *doppler_index, uint32_t *total_fft_scaling_factor)
|
||||
|
||||
{
|
||||
acquisition_fpga_->read_acquisition_results(max_index, max_magnitude,
|
||||
initial_sample, power_sum, doppler_index);
|
||||
acquisition_fpga_->read_acquisition_results(max_index, max_magnitude, second_magnitude,
|
||||
initial_sample, doppler_index, total_fft_scaling_factor);
|
||||
}
|
||||
|
||||
|
||||
// this function is only used for the unit tests
|
||||
void GalileoE1PcpsAmbiguousAcquisitionFpga::reset_acquisition(void)
|
||||
{
|
||||
|
@ -144,7 +144,8 @@ public:
|
||||
* \brief This function is only used in the unit tests
|
||||
*/
|
||||
void read_acquisition_results(uint32_t *max_index,
|
||||
float *max_magnitude, uint64_t *initial_sample, float *power_sum, uint32_t *doppler_index);
|
||||
float *max_magnitude, float *second_magnitude, uint64_t *initial_sample, uint32_t *doppler_index, uint32_t *total_fft_scaling_factor);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function is only used in the unit tests
|
||||
|
@ -380,10 +380,11 @@ void GalileoE5aPcpsAcquisitionFpga::set_single_doppler_flag(unsigned int single_
|
||||
}
|
||||
// this function is only used for the unit tests
|
||||
void GalileoE5aPcpsAcquisitionFpga::read_acquisition_results(uint32_t *max_index,
|
||||
float *max_magnitude, uint64_t *initial_sample, float *power_sum, uint32_t *doppler_index)
|
||||
float *max_magnitude, float *second_magnitude, uint64_t *initial_sample, uint32_t *doppler_index, uint32_t *total_fft_scaling_factor)
|
||||
|
||||
{
|
||||
acquisition_fpga_->read_acquisition_results(max_index, max_magnitude,
|
||||
initial_sample, power_sum, doppler_index);
|
||||
acquisition_fpga_->read_acquisition_results(max_index, max_magnitude, second_magnitude,
|
||||
initial_sample, doppler_index, total_fft_scaling_factor);
|
||||
}
|
||||
|
||||
// this function is only used for the unit tests
|
||||
|
@ -132,7 +132,8 @@ public:
|
||||
* \brief This function is only used in the unit tests
|
||||
*/
|
||||
void read_acquisition_results(uint32_t *max_index,
|
||||
float *max_magnitude, uint64_t *initial_sample, float *power_sum, uint32_t *doppler_index);
|
||||
float *max_magnitude, float *second_magnitude, uint64_t *initial_sample, uint32_t *doppler_index, uint32_t *total_fft_scaling_factor);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function is only used in the unit tests
|
||||
|
@ -283,10 +283,11 @@ void GpsL1CaPcpsAcquisitionFpga::set_single_doppler_flag(unsigned int single_dop
|
||||
}
|
||||
// this function is only used for the unit tests
|
||||
void GpsL1CaPcpsAcquisitionFpga::read_acquisition_results(uint32_t *max_index,
|
||||
float *max_magnitude, uint64_t *initial_sample, float *power_sum, uint32_t *doppler_index)
|
||||
float *max_magnitude, float *second_magnitude, uint64_t *initial_sample, uint32_t *doppler_index, uint32_t *total_fft_scaling_factor)
|
||||
|
||||
{
|
||||
acquisition_fpga_->read_acquisition_results(max_index, max_magnitude,
|
||||
initial_sample, power_sum, doppler_index);
|
||||
acquisition_fpga_->read_acquisition_results(max_index, max_magnitude, second_magnitude,
|
||||
initial_sample, doppler_index, total_fft_scaling_factor);
|
||||
}
|
||||
|
||||
// this function is only used for the unit tests
|
||||
|
@ -142,7 +142,7 @@ public:
|
||||
* \brief This function is only used in the unit tests
|
||||
*/
|
||||
void read_acquisition_results(uint32_t *max_index,
|
||||
float *max_magnitude, uint64_t *initial_sample, float *power_sum, uint32_t *doppler_index);
|
||||
float *max_magnitude, float *second_magnitude, uint64_t *initial_sample, uint32_t *doppler_index, uint32_t *total_fft_scaling_factor);
|
||||
|
||||
/*!
|
||||
* \brief This function is only used in the unit tests
|
||||
|
@ -351,12 +351,15 @@ void GpsL5iPcpsAcquisitionFpga::set_single_doppler_flag(unsigned int single_dopp
|
||||
}
|
||||
// this function is only used for the unit tests
|
||||
void GpsL5iPcpsAcquisitionFpga::read_acquisition_results(uint32_t *max_index,
|
||||
float *max_magnitude, uint64_t *initial_sample, float *power_sum, uint32_t *doppler_index)
|
||||
float *max_magnitude, float *second_magnitude, uint64_t *initial_sample, uint32_t *doppler_index, uint32_t *total_fft_scaling_factor)
|
||||
|
||||
{
|
||||
acquisition_fpga_->read_acquisition_results(max_index, max_magnitude,
|
||||
initial_sample, power_sum, doppler_index);
|
||||
acquisition_fpga_->read_acquisition_results(max_index, max_magnitude, second_magnitude,
|
||||
initial_sample, doppler_index, total_fft_scaling_factor);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// this function is only used for the unit tests
|
||||
void GpsL5iPcpsAcquisitionFpga::reset_acquisition(void)
|
||||
{
|
||||
|
@ -142,7 +142,8 @@ public:
|
||||
* \brief This function is only used in the unit tests
|
||||
*/
|
||||
void read_acquisition_results(uint32_t *max_index,
|
||||
float *max_magnitude, uint64_t *initial_sample, float *power_sum, uint32_t *doppler_index);
|
||||
float *max_magnitude, float *second_magnitude, uint64_t *initial_sample, uint32_t *doppler_index, uint32_t *total_fft_scaling_factor);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function is only used in the unit tests
|
||||
|
@ -461,8 +461,12 @@ void pcps_acquisition_fpga::set_single_doppler_flag(unsigned int single_doppler_
|
||||
|
||||
// this function is only used for the unit tests
|
||||
void pcps_acquisition_fpga::read_acquisition_results(uint32_t *max_index,
|
||||
float *max_magnitude, uint64_t *initial_sample, float *power_sum, uint32_t *doppler_index)
|
||||
float *max_magnitude, float *second_magnitude, uint64_t *initial_sample, uint32_t *doppler_index, uint32_t *total_fft_scaling_factor)
|
||||
{
|
||||
float input_power; // not used
|
||||
acquisition_fpga->read_acquisition_results(max_index, max_magnitude, second_magnitude, initial_sample, &input_power, doppler_index, total_fft_scaling_factor);
|
||||
|
||||
|
||||
// acquisition_fpga->read_acquisition_results(max_index, max_magnitude,
|
||||
// initial_sample, power_sum, doppler_index);
|
||||
}
|
||||
|
@ -246,7 +246,8 @@ public:
|
||||
* \brief This funciton is only used for the unit tests
|
||||
*/
|
||||
void read_acquisition_results(uint32_t *max_index,
|
||||
float *max_magnitude, uint64_t *initial_sample, float *power_sum, uint32_t *doppler_index);
|
||||
float *max_magnitude, float *second_magnitude, uint64_t *initial_sample, uint32_t *doppler_index, uint32_t *total_fft_scaling_factor);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This funciton is only used for the unit tests
|
||||
|
@ -1051,19 +1051,23 @@ bool HybridObservablesTestFpga::acquire_signal()
|
||||
|
||||
if (implementation.compare("GPS_L1_CA_DLL_PLL_Tracking_Fpga") == 0)
|
||||
{
|
||||
acquisition_GpsL1Ca_Fpga->read_acquisition_results(&max_index_iteration, &max_magnitude_iteration,&initial_sample_iteration, &power_sum_iteration, &doppler_index_iteration);
|
||||
// UPDATE!
|
||||
//acquisition_GpsL1Ca_Fpga->read_acquisition_results(&max_index_iteration, &max_magnitude_iteration,&initial_sample_iteration, &power_sum_iteration, &doppler_index_iteration);
|
||||
}
|
||||
else if (implementation.compare("Galileo_E1_DLL_PLL_VEML_Tracking_Fpga") == 0)
|
||||
{
|
||||
acquisition_GpsE1_Fpga->read_acquisition_results(&max_index_iteration, &max_magnitude_iteration,&initial_sample_iteration, &power_sum_iteration, &doppler_index_iteration);
|
||||
// UPDATE!
|
||||
//acquisition_GpsE1_Fpga->read_acquisition_results(&max_index_iteration, &max_magnitude_iteration,&initial_sample_iteration, &power_sum_iteration, &doppler_index_iteration);
|
||||
}
|
||||
else if (implementation.compare("Galileo_E5a_DLL_PLL_Tracking_Fpga") == 0)
|
||||
{
|
||||
acquisition_GpsE5a_Fpga->read_acquisition_results(&max_index_iteration, &max_magnitude_iteration,&initial_sample_iteration, &power_sum_iteration, &doppler_index_iteration);
|
||||
// UPDATE!
|
||||
//acquisition_GpsE5a_Fpga->read_acquisition_results(&max_index_iteration, &max_magnitude_iteration,&initial_sample_iteration, &power_sum_iteration, &doppler_index_iteration);
|
||||
}
|
||||
else if (implementation.compare("GPS_L5_DLL_PLL_Tracking_Fpga") == 0)
|
||||
{
|
||||
acquisition_GpsL5_Fpga->read_acquisition_results(&max_index_iteration, &max_magnitude_iteration,&initial_sample_iteration, &power_sum_iteration, &doppler_index_iteration);
|
||||
// UPDATE!
|
||||
//acquisition_GpsL5_Fpga->read_acquisition_results(&max_index_iteration, &max_magnitude_iteration,&initial_sample_iteration, &power_sum_iteration, &doppler_index_iteration);
|
||||
}
|
||||
|
||||
result_table[PRN][doppler_num][0] = max_magnitude_iteration;
|
||||
|
@ -1041,27 +1041,30 @@ bool TrackingPullInTestFpga::acquire_signal(int SV_ID)
|
||||
|
||||
int num_doppler_steps = (2*acq_doppler_max)/acq_doppler_step + 1;
|
||||
|
||||
float result_table[MAX_PRN_IDX][num_doppler_steps][4];
|
||||
float result_table[MAX_PRN_IDX][num_doppler_steps][3];
|
||||
|
||||
for (unsigned int PRN = 1; PRN < MAX_PRN_IDX; PRN++)
|
||||
{
|
||||
|
||||
uint32_t max_index = 0;
|
||||
float max_magnitude = 0.0;
|
||||
float second_magnitude = 0.0;
|
||||
uint64_t initial_sample = 0;
|
||||
float power_sum = 0;
|
||||
//float power_sum = 0;
|
||||
uint32_t doppler_index = 0;
|
||||
|
||||
uint32_t max_index_iteration;
|
||||
uint32_t total_fft_scaling_factor;
|
||||
uint32_t fw_fft_scaling_factor;
|
||||
float max_magnitude_iteration;
|
||||
float second_magnitude_iteration;
|
||||
uint64_t initial_sample_iteration;
|
||||
float power_sum_iteration;
|
||||
//float power_sum_iteration;
|
||||
uint32_t doppler_index_iteration;
|
||||
int doppler_shift_selected;
|
||||
int doppler_num = 0;
|
||||
|
||||
|
||||
for (int doppler_shift = -acq_doppler_max;doppler_shift <= acq_doppler_max;doppler_shift = doppler_shift + acq_doppler_step)
|
||||
{
|
||||
tmp_gnss_synchro.PRN = PRN;
|
||||
@ -1181,45 +1184,45 @@ bool TrackingPullInTestFpga::acquire_signal(int SV_ID)
|
||||
|
||||
if (implementation.compare("GPS_L1_CA_DLL_PLL_Tracking_Fpga") == 0)
|
||||
{
|
||||
acquisition_GpsL1Ca_Fpga->read_acquisition_results(&max_index_iteration, &max_magnitude_iteration,&initial_sample_iteration, &power_sum_iteration, &doppler_index_iteration);
|
||||
acquisition_GpsL1Ca_Fpga->read_fpga_total_scale_factor(&total_fft_scaling_factor, &fw_fft_scaling_factor);
|
||||
acquisition_GpsL1Ca_Fpga->read_acquisition_results(&max_index_iteration, &max_magnitude_iteration, &second_magnitude_iteration, &initial_sample_iteration, &doppler_index_iteration, &total_fft_scaling_factor);
|
||||
//acquisition_GpsL1Ca_Fpga->read_fpga_total_scale_factor(&total_fft_scaling_factor, &fw_fft_scaling_factor);
|
||||
}
|
||||
else if (implementation.compare("Galileo_E1_DLL_PLL_VEML_Tracking_Fpga") == 0)
|
||||
{
|
||||
acquisition_GpsE1_Fpga->read_acquisition_results(&max_index_iteration, &max_magnitude_iteration,&initial_sample_iteration, &power_sum_iteration, &doppler_index_iteration);
|
||||
acquisition_GpsE1_Fpga->read_fpga_total_scale_factor(&total_fft_scaling_factor, &fw_fft_scaling_factor);
|
||||
acquisition_GpsE1_Fpga->read_acquisition_results(&max_index_iteration, &max_magnitude_iteration, &second_magnitude_iteration, &initial_sample_iteration, &doppler_index_iteration, &total_fft_scaling_factor);
|
||||
//acquisition_GpsE1_Fpga->read_fpga_total_scale_factor(&total_fft_scaling_factor, &fw_fft_scaling_factor);
|
||||
}
|
||||
else if (implementation.compare("Galileo_E5a_DLL_PLL_Tracking_Fpga") == 0)
|
||||
{
|
||||
acquisition_GpsE5a_Fpga->read_acquisition_results(&max_index_iteration, &max_magnitude_iteration,&initial_sample_iteration, &power_sum_iteration, &doppler_index_iteration);
|
||||
acquisition_GpsE5a_Fpga->read_fpga_total_scale_factor(&total_fft_scaling_factor, &fw_fft_scaling_factor);
|
||||
acquisition_GpsE5a_Fpga->read_acquisition_results(&max_index_iteration, &max_magnitude_iteration, &second_magnitude_iteration, &initial_sample_iteration, &doppler_index_iteration, &total_fft_scaling_factor);
|
||||
//acquisition_GpsE5a_Fpga->read_fpga_total_scale_factor(&total_fft_scaling_factor, &fw_fft_scaling_factor);
|
||||
}
|
||||
else if (implementation.compare("GPS_L5_DLL_PLL_Tracking_Fpga") == 0)
|
||||
{
|
||||
acquisition_GpsL5_Fpga->read_acquisition_results(&max_index_iteration, &max_magnitude_iteration,&initial_sample_iteration, &power_sum_iteration, &doppler_index_iteration);
|
||||
acquisition_GpsL5_Fpga->read_fpga_total_scale_factor(&total_fft_scaling_factor, &fw_fft_scaling_factor);
|
||||
acquisition_GpsL5_Fpga->read_acquisition_results(&max_index_iteration, &max_magnitude_iteration, &second_magnitude_iteration, &initial_sample_iteration, &doppler_index_iteration, &total_fft_scaling_factor);
|
||||
//acquisition_GpsL5_Fpga->read_fpga_total_scale_factor(&total_fft_scaling_factor, &fw_fft_scaling_factor);
|
||||
}
|
||||
|
||||
result_table[PRN][doppler_num][0] = max_magnitude_iteration;
|
||||
result_table[PRN][doppler_num][1] = power_sum_iteration;
|
||||
result_table[PRN][doppler_num][1] = second_magnitude_iteration;
|
||||
result_table[PRN][doppler_num][2] = total_fft_scaling_factor;
|
||||
result_table[PRN][doppler_num][3] = fw_fft_scaling_factor;
|
||||
doppler_num = doppler_num + 1;
|
||||
|
||||
if (max_magnitude_iteration > max_magnitude)
|
||||
{
|
||||
max_index = max_index_iteration;
|
||||
max_magnitude = max_magnitude_iteration;
|
||||
second_magnitude = second_magnitude_iteration;
|
||||
initial_sample = initial_sample_iteration;
|
||||
power_sum = power_sum_iteration;
|
||||
doppler_index = doppler_index_iteration;
|
||||
doppler_shift_selected = doppler_shift;
|
||||
}
|
||||
top_block->stop();
|
||||
}
|
||||
|
||||
power_sum = (power_sum - max_magnitude) / (fft_size - 1);
|
||||
float test_statistics = (max_magnitude / power_sum);
|
||||
//power_sum = (power_sum - max_magnitude) / (fft_size - 1);
|
||||
//float test_statistics = (max_magnitude / power_sum);
|
||||
float test_statistics = max_magnitude/second_magnitude;
|
||||
float threshold = config->property("Acquisition.threshold", FLAGS_external_signal_acquisition_threshold);
|
||||
if (test_statistics > threshold)
|
||||
{
|
||||
@ -1239,10 +1242,10 @@ bool TrackingPullInTestFpga::acquire_signal(int SV_ID)
|
||||
|
||||
uint32_t max_index = 0;
|
||||
uint32_t total_fft_scaling_factor;
|
||||
uint32_t fw_fft_scaling_factor;
|
||||
//uint32_t fw_fft_scaling_factor;
|
||||
float max_magnitude = 0.0;
|
||||
uint64_t initial_sample = 0;
|
||||
float power_sum = 0;
|
||||
float second_magnitude = 0;
|
||||
float peak_to_power = 0;
|
||||
float test_statistics;
|
||||
uint32_t doppler_index = 0;
|
||||
@ -1256,18 +1259,19 @@ bool TrackingPullInTestFpga::acquire_signal(int SV_ID)
|
||||
for (int doppler_shift = -acq_doppler_max;doppler_shift <= acq_doppler_max;doppler_shift = doppler_shift + acq_doppler_step)
|
||||
{
|
||||
max_magnitude = result_table[PRN][doppler_num][0];
|
||||
power_sum = result_table[PRN][doppler_num][1];
|
||||
second_magnitude = result_table[PRN][doppler_num][1];
|
||||
total_fft_scaling_factor = result_table[PRN][doppler_num][2];
|
||||
fw_fft_scaling_factor = result_table[PRN][doppler_num][3];
|
||||
//fw_fft_scaling_factor = result_table[PRN][doppler_num][3];
|
||||
doppler_num = doppler_num + 1;
|
||||
|
||||
std::cout << "==================== Doppler shift " << doppler_shift << std::endl;
|
||||
std::cout << "Max magnitude = " << max_magnitude << "Power sum = " << power_sum << std::endl;
|
||||
std::cout << "FFT total scaling factor = " << total_fft_scaling_factor << " FW FFT scaling factor = " << fw_fft_scaling_factor << std::endl;
|
||||
peak_to_power = max_magnitude/power_sum;
|
||||
power_sum = (power_sum - max_magnitude) / (fft_size - 1);
|
||||
test_statistics = (max_magnitude / power_sum);
|
||||
std::cout << "peak to power = " << peak_to_power << " test_statistics = " << test_statistics << std::endl;
|
||||
std::cout << "Max magnitude = " << max_magnitude << std::endl;
|
||||
std::cout << "Second magnitude = " << second_magnitude << std::endl;
|
||||
std::cout << "FFT total scaling factor = " << total_fft_scaling_factor << std::endl;
|
||||
//peak_to_power = max_magnitude/power_sum;
|
||||
//power_sum = (power_sum - max_magnitude) / (fft_size - 1);
|
||||
test_statistics = (max_magnitude / second_magnitude);
|
||||
std::cout << " test_statistics = " << test_statistics << std::endl;
|
||||
}
|
||||
int dummy_val;
|
||||
std::cout << "Enter a value to continue";
|
||||
|
Loading…
Reference in New Issue
Block a user