mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-11-15 14:25:00 +00:00
moved the calculations related to the local code that is specific to the FPGA to the initialisation phase of the tracking modules to save clock cycles during real-time tracking.
This commit is contained in:
parent
db05be36d1
commit
a6110eb334
@ -228,19 +228,36 @@ GalileoE1DllPllVemlTrackingFpga::GalileoE1DllPllVemlTrackingFpga(
|
|||||||
galileo_e1_code_gen_sinboc11_float(ca_codes_f, pilot_signal, PRN);
|
galileo_e1_code_gen_sinboc11_float(ca_codes_f, pilot_signal, PRN);
|
||||||
galileo_e1_code_gen_sinboc11_float(data_codes_f, data_signal, PRN);
|
galileo_e1_code_gen_sinboc11_float(data_codes_f, data_signal, PRN);
|
||||||
|
|
||||||
|
// The code is generated as a series of 1s and -1s. In order to store the values using only one bit, a -1 is stored as a 0 in the FPGA
|
||||||
for (uint32_t s = 0; s < 2 * GALILEO_E1_B_CODE_LENGTH_CHIPS; s++)
|
for (uint32_t s = 0; s < 2 * GALILEO_E1_B_CODE_LENGTH_CHIPS; s++)
|
||||||
{
|
{
|
||||||
d_ca_codes[static_cast<int32_t>(GALILEO_E1_B_CODE_LENGTH_CHIPS) * 2 * (PRN - 1) + s] = static_cast<int32_t>(ca_codes_f[s]);
|
int32_t tmp_value = static_cast<int32_t>(ca_codes_f[s]);
|
||||||
d_data_codes[static_cast<int32_t>(GALILEO_E1_B_CODE_LENGTH_CHIPS) * 2 * (PRN - 1) + s] = static_cast<int32_t>(data_codes_f[s]);
|
if (tmp_value < 0)
|
||||||
|
{
|
||||||
|
tmp_value = 0;
|
||||||
|
}
|
||||||
|
d_ca_codes[static_cast<int32_t>(GALILEO_E1_B_CODE_LENGTH_CHIPS) * 2 * (PRN - 1) + s] = tmp_value;
|
||||||
|
tmp_value = static_cast<int32_t>(data_codes_f[s]);
|
||||||
|
if (tmp_value < 0)
|
||||||
|
{
|
||||||
|
tmp_value = 0;
|
||||||
|
}
|
||||||
|
d_data_codes[static_cast<int32_t>(GALILEO_E1_B_CODE_LENGTH_CHIPS) * 2 * (PRN - 1) + s] = tmp_value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
galileo_e1_code_gen_sinboc11_float(ca_codes_f, data_signal, PRN);
|
galileo_e1_code_gen_sinboc11_float(ca_codes_f, data_signal, PRN);
|
||||||
|
|
||||||
|
// The code is generated as a series of 1s and -1s. In order to store the values using only one bit, a -1 is stored as a 0 in the FPGA
|
||||||
for (uint32_t s = 0; s < 2 * GALILEO_E1_B_CODE_LENGTH_CHIPS; s++)
|
for (uint32_t s = 0; s < 2 * GALILEO_E1_B_CODE_LENGTH_CHIPS; s++)
|
||||||
{
|
{
|
||||||
d_ca_codes[static_cast<int32_t>(GALILEO_E1_B_CODE_LENGTH_CHIPS) * 2 * (PRN - 1) + s] = static_cast<int32_t>(ca_codes_f[s]);
|
uint32_t tmp_value = static_cast<int32_t>(ca_codes_f[s]);
|
||||||
|
if (tmp_value < 0)
|
||||||
|
{
|
||||||
|
tmp_value = 0;
|
||||||
|
}
|
||||||
|
d_ca_codes[static_cast<int32_t>(GALILEO_E1_B_CODE_LENGTH_CHIPS) * 2 * (PRN - 1) + s] = tmp_value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -212,19 +212,41 @@ GalileoE5aDllPllTrackingFpga::GalileoE5aDllPllTrackingFpga(
|
|||||||
for (uint32_t PRN = 1; PRN <= GALILEO_E5A_NUMBER_OF_CODES; PRN++)
|
for (uint32_t PRN = 1; PRN <= GALILEO_E5A_NUMBER_OF_CODES; PRN++)
|
||||||
{
|
{
|
||||||
galileo_e5_a_code_gen_complex_primary(aux_code, PRN, const_cast<char *>(sig_));
|
galileo_e5_a_code_gen_complex_primary(aux_code, PRN, const_cast<char *>(sig_));
|
||||||
|
|
||||||
if (trk_param_fpga.track_pilot)
|
if (trk_param_fpga.track_pilot)
|
||||||
{
|
{
|
||||||
|
// The code is generated as a series of 1s and -1s. In order to store the values using only one bit, a -1 is stored as a 0 in the FPGA
|
||||||
for (uint32_t s = 0; s < code_length_chips; s++)
|
for (uint32_t s = 0; s < code_length_chips; s++)
|
||||||
{
|
{
|
||||||
d_ca_codes[static_cast<int32_t>(code_length_chips) * (PRN - 1) + s] = static_cast<int32_t>(aux_code[s].imag());
|
int32_t tmp_value = static_cast<int32_t>(aux_code[s].imag());
|
||||||
d_data_codes[static_cast<int32_t>(code_length_chips) * (PRN - 1) + s] = static_cast<int32_t>(aux_code[s].real());
|
if (tmp_value < 0)
|
||||||
|
{
|
||||||
|
tmp_value = 0;
|
||||||
|
}
|
||||||
|
d_ca_codes[static_cast<int32_t>(code_length_chips) * (PRN - 1) + s] = tmp_value;
|
||||||
|
|
||||||
|
tmp_value = static_cast<int32_t>(aux_code[s].real());
|
||||||
|
if (tmp_value < 0)
|
||||||
|
{
|
||||||
|
tmp_value = 0;
|
||||||
|
}
|
||||||
|
d_data_codes[static_cast<int32_t>(code_length_chips) * (PRN - 1) + s] = tmp_value;
|
||||||
|
//d_ca_codes[static_cast<int32_t>(code_length_chips) * (PRN - 1) + s] = static_cast<int32_t>(aux_code[s].imag());
|
||||||
|
//d_data_codes[static_cast<int32_t>(code_length_chips) * (PRN - 1) + s] = static_cast<int32_t>(aux_code[s].real());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// The code is generated as a series of 1s and -1s. In order to store the values using only one bit, a -1 is stored as a 0 in the FPGA
|
||||||
for (uint32_t s = 0; s < code_length_chips; s++)
|
for (uint32_t s = 0; s < code_length_chips; s++)
|
||||||
{
|
{
|
||||||
d_ca_codes[static_cast<int32_t>(code_length_chips) * (PRN - 1) + s] = static_cast<int32_t>(aux_code[s].real());
|
int32_t tmp_value = static_cast<int32_t>(aux_code[s].real());
|
||||||
|
if (tmp_value < 0)
|
||||||
|
{
|
||||||
|
tmp_value = 0;
|
||||||
|
}
|
||||||
|
d_ca_codes[static_cast<int32_t>(code_length_chips) * (PRN - 1) + s] = tmp_value;
|
||||||
|
//d_ca_codes[static_cast<int32_t>(code_length_chips) * (PRN - 1) + s] = static_cast<int32_t>(aux_code[s].real());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -210,6 +210,15 @@ GpsL1CaDllPllTrackingFpga::GpsL1CaDllPllTrackingFpga(
|
|||||||
for (uint32_t PRN = 1; PRN <= NUM_PRNs; PRN++)
|
for (uint32_t PRN = 1; PRN <= NUM_PRNs; PRN++)
|
||||||
{
|
{
|
||||||
gps_l1_ca_code_gen_int(&d_ca_codes[(int32_t(GPS_L1_CA_CODE_LENGTH_CHIPS)) * (PRN - 1)], PRN, 0);
|
gps_l1_ca_code_gen_int(&d_ca_codes[(int32_t(GPS_L1_CA_CODE_LENGTH_CHIPS)) * (PRN - 1)], PRN, 0);
|
||||||
|
|
||||||
|
// The code is generated as a series of 1s and -1s. In order to store the values using only one bit, a -1 is stored as a 0 in the FPGA
|
||||||
|
for (uint32_t k = 0; k < GPS_L1_CA_CODE_LENGTH_CHIPS; k++)
|
||||||
|
{
|
||||||
|
if (d_ca_codes[(int32_t(GPS_L1_CA_CODE_LENGTH_CHIPS)) * (PRN - 1) + k] < 0)
|
||||||
|
{
|
||||||
|
d_ca_codes[(int32_t(GPS_L1_CA_CODE_LENGTH_CHIPS)) * (PRN - 1) + k] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
trk_param_fpga.ca_codes = d_ca_codes;
|
trk_param_fpga.ca_codes = d_ca_codes;
|
||||||
trk_param_fpga.code_length_chips = GPS_L1_CA_CODE_LENGTH_CHIPS;
|
trk_param_fpga.code_length_chips = GPS_L1_CA_CODE_LENGTH_CHIPS;
|
||||||
|
@ -233,18 +233,41 @@ GpsL5DllPllTrackingFpga::GpsL5DllPllTrackingFpga(
|
|||||||
gps_l5q_code_gen_float(tracking_code, PRN);
|
gps_l5q_code_gen_float(tracking_code, PRN);
|
||||||
gps_l5i_code_gen_float(data_code, PRN);
|
gps_l5i_code_gen_float(data_code, PRN);
|
||||||
|
|
||||||
|
// The code is generated as a series of 1s and -1s. In order to store the values using only one bit, a -1 is stored as a 0 in the FPGA
|
||||||
for (uint32_t s = 0; s < code_length_chips; s++)
|
for (uint32_t s = 0; s < code_length_chips; s++)
|
||||||
{
|
{
|
||||||
d_ca_codes[static_cast<int32_t>(code_length_chips) * (PRN - 1) + s] = static_cast<int32_t>(tracking_code[s]);
|
int32_t tmp_value = static_cast<int32_t>(tracking_code[s]);
|
||||||
d_data_codes[static_cast<int32_t>(code_length_chips) * (PRN - 1) + s] = static_cast<int32_t>(data_code[s]);
|
if (tmp_value < 0)
|
||||||
|
{
|
||||||
|
tmp_value = 0;
|
||||||
|
}
|
||||||
|
d_ca_codes[static_cast<int32_t>(code_length_chips) * (PRN - 1) + s] = tmp_value;
|
||||||
|
|
||||||
|
tmp_value = static_cast<int32_t>(data_code[s]);
|
||||||
|
if (tmp_value < 0)
|
||||||
|
{
|
||||||
|
tmp_value = 0;
|
||||||
|
}
|
||||||
|
d_data_codes[static_cast<int32_t>(code_length_chips) * (PRN - 1) + s] = tmp_value;
|
||||||
|
|
||||||
|
//d_ca_codes[static_cast<int32_t>(code_length_chips) * (PRN - 1) + s] = static_cast<int32_t>(tracking_code[s]);
|
||||||
|
//d_data_codes[static_cast<int32_t>(code_length_chips) * (PRN - 1) + s] = static_cast<int32_t>(data_code[s]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gps_l5i_code_gen_float(tracking_code, PRN);
|
gps_l5i_code_gen_float(tracking_code, PRN);
|
||||||
|
|
||||||
|
// The code is generated as a series of 1s and -1s. In order to store the values using only one bit, a -1 is stored as a 0 in the FPGA
|
||||||
for (uint32_t s = 0; s < code_length_chips; s++)
|
for (uint32_t s = 0; s < code_length_chips; s++)
|
||||||
{
|
{
|
||||||
d_ca_codes[static_cast<int32_t>(code_length_chips) * (PRN - 1) + s] = static_cast<int32_t>(tracking_code[s]);
|
int32_t tmp_value = static_cast<int32_t>(tracking_code[s]);
|
||||||
|
if (tmp_value < 0)
|
||||||
|
{
|
||||||
|
tmp_value = 0;
|
||||||
|
}
|
||||||
|
d_ca_codes[static_cast<int32_t>(code_length_chips) * (PRN - 1) + s] = tmp_value;
|
||||||
|
//d_ca_codes[static_cast<int32_t>(code_length_chips) * (PRN - 1) + s] = static_cast<int32_t>(tracking_code[s]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -306,15 +306,15 @@ void Fpga_Multicorrelator_8sc::fpga_configure_tracking_gps_local_code(int32_t PR
|
|||||||
d_map_base[PROG_MEMS_ADDR] = LOCAL_CODE_FPGA_CLEAR_ADDRESS_COUNTER;
|
d_map_base[PROG_MEMS_ADDR] = LOCAL_CODE_FPGA_CLEAR_ADDRESS_COUNTER;
|
||||||
for (k = 0; k < d_code_length_samples; k++)
|
for (k = 0; k < d_code_length_samples; k++)
|
||||||
{
|
{
|
||||||
if (d_ca_codes[(d_code_length_samples * (PRN - 1)) + k] == 1)
|
// if (d_ca_codes[(d_code_length_samples * (PRN - 1)) + k] == 1)
|
||||||
{
|
// {
|
||||||
code_chip = 1;
|
// code_chip = 1;
|
||||||
}
|
// }
|
||||||
else
|
// else
|
||||||
{
|
// {
|
||||||
code_chip = 0;
|
// code_chip = 0;
|
||||||
}
|
// }
|
||||||
|
code_chip = d_ca_codes[(d_code_length_samples * (PRN - 1)) + k];
|
||||||
// copy the local code to the FPGA memory one by one
|
// copy the local code to the FPGA memory one by one
|
||||||
d_map_base[PROG_MEMS_ADDR] = LOCAL_CODE_FPGA_ENABLE_WRITE_MEMORY | code_chip; // | select_fpga_correlator;
|
d_map_base[PROG_MEMS_ADDR] = LOCAL_CODE_FPGA_ENABLE_WRITE_MEMORY | code_chip; // | select_fpga_correlator;
|
||||||
}
|
}
|
||||||
@ -323,14 +323,15 @@ void Fpga_Multicorrelator_8sc::fpga_configure_tracking_gps_local_code(int32_t PR
|
|||||||
d_map_base[PROG_MEMS_ADDR] = LOCAL_CODE_FPGA_CLEAR_ADDRESS_COUNTER;
|
d_map_base[PROG_MEMS_ADDR] = LOCAL_CODE_FPGA_CLEAR_ADDRESS_COUNTER;
|
||||||
for (k = 0; k < d_code_length_samples; k++)
|
for (k = 0; k < d_code_length_samples; k++)
|
||||||
{
|
{
|
||||||
if (d_data_codes[(d_code_length_samples * (PRN - 1)) + k] == 1)
|
// if (d_data_codes[(d_code_length_samples * (PRN - 1)) + k] == 1)
|
||||||
{
|
// {
|
||||||
code_chip = 1;
|
// code_chip = 1;
|
||||||
}
|
// }
|
||||||
else
|
// else
|
||||||
{
|
// {
|
||||||
code_chip = 0;
|
// code_chip = 0;
|
||||||
}
|
// }
|
||||||
|
code_chip = d_data_codes[(d_code_length_samples * (PRN - 1)) + k];
|
||||||
d_map_base[PROG_MEMS_ADDR] = LOCAL_CODE_FPGA_ENABLE_WRITE_MEMORY | code_chip | select_pilot_corelator;
|
d_map_base[PROG_MEMS_ADDR] = LOCAL_CODE_FPGA_ENABLE_WRITE_MEMORY | code_chip | select_pilot_corelator;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user