mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-12-15 12:40:35 +00:00
cleaned unused code and added some comments.
This commit is contained in:
parent
eda3f21fb9
commit
ff024e7292
@ -44,7 +44,8 @@
|
|||||||
#include <complex> // for complex
|
#include <complex> // for complex
|
||||||
#include <cstring> // for memcpy
|
#include <cstring> // for memcpy
|
||||||
|
|
||||||
|
// the following flags are FPGA-specific and they are using arrange the values of the fft of the local code in the way the FPGA
|
||||||
|
// expects. This arrangement is done in the initialisation to avoid consuming unnecessary clock cycles during tracking.
|
||||||
#define QUANT_BITS_LOCAL_CODE 16
|
#define QUANT_BITS_LOCAL_CODE 16
|
||||||
#define SELECT_LSBits 0x0000FFFF // Select the 10 LSbits out of a 20-bit word
|
#define SELECT_LSBits 0x0000FFFF // Select the 10 LSbits out of a 20-bit word
|
||||||
#define SELECT_MSBbits 0xFFFF0000 // Select the 10 MSbits out of a 20-bit word
|
#define SELECT_MSBbits 0xFFFF0000 // Select the 10 MSbits out of a 20-bit word
|
||||||
@ -110,7 +111,6 @@ GalileoE1PcpsAmbiguousAcquisitionFpga::GalileoE1PcpsAmbiguousAcquisitionFpga(
|
|||||||
auto* fft_if = new gr::fft::fft_complex(nsamples_total, true); // Direct FFT
|
auto* fft_if = new gr::fft::fft_complex(nsamples_total, true); // Direct FFT
|
||||||
auto* code = new std::complex<float>[nsamples_total]; // buffer for the local code
|
auto* code = new std::complex<float>[nsamples_total]; // buffer for the local code
|
||||||
auto* fft_codes_padded = static_cast<gr_complex*>(volk_gnsssdr_malloc(nsamples_total * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
|
auto* fft_codes_padded = static_cast<gr_complex*>(volk_gnsssdr_malloc(nsamples_total * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
|
||||||
//d_all_fft_codes_ = new lv_16sc_t[nsamples_total * GALILEO_E1_NUMBER_OF_CODES]; // memory containing all the possible fft codes for PRN 0 to 32
|
|
||||||
d_all_fft_codes_ = new uint32_t[(nsamples_total * GALILEO_E1_NUMBER_OF_CODES)]; // memory containing all the possible fft codes for PRN 0 to 32
|
d_all_fft_codes_ = new uint32_t[(nsamples_total * GALILEO_E1_NUMBER_OF_CODES)]; // memory containing all the possible fft codes for PRN 0 to 32
|
||||||
float max; // temporary maxima search
|
float max; // temporary maxima search
|
||||||
int32_t tmp, tmp2, local_code, fft_data;
|
int32_t tmp, tmp2, local_code, fft_data;
|
||||||
@ -170,9 +170,6 @@ GalileoE1PcpsAmbiguousAcquisitionFpga::GalileoE1PcpsAmbiguousAcquisitionFpga(
|
|||||||
local_code = (tmp & SELECT_LSBits) | ((tmp2 * SHL_CODE_BITS) & SELECT_MSBbits); // put together the real part and the imaginary part
|
local_code = (tmp & SELECT_LSBits) | ((tmp2 * SHL_CODE_BITS) & SELECT_MSBbits); // put together the real part and the imaginary part
|
||||||
fft_data = local_code & SELECT_ALL_CODE_BITS;
|
fft_data = local_code & SELECT_ALL_CODE_BITS;
|
||||||
d_all_fft_codes_[i + (nsamples_total * (PRN - 1))] = fft_data;
|
d_all_fft_codes_[i + (nsamples_total * (PRN - 1))] = fft_data;
|
||||||
|
|
||||||
// d_all_fft_codes_[i + nsamples_total * (PRN - 1)] = lv_16sc_t(static_cast<int32_t>(floor(fft_codes_padded[i].real() * (pow(2, QUANT_BITS_LOCAL_CODE - 1) - 1) / max)),
|
|
||||||
// static_cast<int32_t>(floor(fft_codes_padded[i].imag() * (pow(2, QUANT_BITS_LOCAL_CODE - 1) - 1) / max)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,7 +165,6 @@ private:
|
|||||||
unsigned int in_streams_;
|
unsigned int in_streams_;
|
||||||
unsigned int out_streams_;
|
unsigned int out_streams_;
|
||||||
|
|
||||||
//lv_16sc_t* d_all_fft_codes_; // memory that contains all the code ffts
|
|
||||||
uint32_t* d_all_fft_codes_; // memory that contains all the code ffts
|
uint32_t* d_all_fft_codes_; // memory that contains all the code ffts
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -44,6 +44,8 @@
|
|||||||
#include <complex> // for complex
|
#include <complex> // for complex
|
||||||
#include <cstring> // for strcpy, memcpy
|
#include <cstring> // for strcpy, memcpy
|
||||||
|
|
||||||
|
// the following flags are FPGA-specific and they are using arrange the values of the fft of the local code in the way the FPGA
|
||||||
|
// expects. This arrangement is done in the initialisation to avoid consuming unnecessary clock cycles during tracking.
|
||||||
#define QUANT_BITS_LOCAL_CODE 16
|
#define QUANT_BITS_LOCAL_CODE 16
|
||||||
#define SELECT_LSBits 0x0000FFFF // Select the 10 LSbits out of a 20-bit word
|
#define SELECT_LSBits 0x0000FFFF // Select the 10 LSbits out of a 20-bit word
|
||||||
#define SELECT_MSBbits 0xFFFF0000 // Select the 10 MSbits out of a 20-bit word
|
#define SELECT_MSBbits 0xFFFF0000 // Select the 10 MSbits out of a 20-bit word
|
||||||
@ -110,7 +112,6 @@ GalileoE5aPcpsAcquisitionFpga::GalileoE5aPcpsAcquisitionFpga(ConfigurationInterf
|
|||||||
auto* fft_if = new gr::fft::fft_complex(nsamples_total, true); // Direct FFT
|
auto* fft_if = new gr::fft::fft_complex(nsamples_total, true); // Direct FFT
|
||||||
auto* code = new std::complex<float>[nsamples_total]; // buffer for the local code
|
auto* code = new std::complex<float>[nsamples_total]; // buffer for the local code
|
||||||
auto* fft_codes_padded = static_cast<gr_complex*>(volk_gnsssdr_malloc(nsamples_total * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
|
auto* fft_codes_padded = static_cast<gr_complex*>(volk_gnsssdr_malloc(nsamples_total * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
|
||||||
//d_all_fft_codes_ = new lv_16sc_t[nsamples_total * GALILEO_E5A_NUMBER_OF_CODES]; // memory containing all the possible fft codes for PRN 0 to 32
|
|
||||||
d_all_fft_codes_ = new uint32_t[(nsamples_total * GALILEO_E5A_NUMBER_OF_CODES)]; // memory containing all the possible fft codes for PRN 0 to 32
|
d_all_fft_codes_ = new uint32_t[(nsamples_total * GALILEO_E5A_NUMBER_OF_CODES)]; // memory containing all the possible fft codes for PRN 0 to 32
|
||||||
|
|
||||||
float max; // temporary maxima search
|
float max; // temporary maxima search
|
||||||
@ -171,9 +172,6 @@ GalileoE5aPcpsAcquisitionFpga::GalileoE5aPcpsAcquisitionFpga(ConfigurationInterf
|
|||||||
local_code = (tmp & SELECT_LSBits) | ((tmp2 * SHL_CODE_BITS) & SELECT_MSBbits); // put together the real part and the imaginary part
|
local_code = (tmp & SELECT_LSBits) | ((tmp2 * SHL_CODE_BITS) & SELECT_MSBbits); // put together the real part and the imaginary part
|
||||||
fft_data = local_code & SELECT_ALL_CODE_BITS;
|
fft_data = local_code & SELECT_ALL_CODE_BITS;
|
||||||
d_all_fft_codes_[i + (nsamples_total * (PRN - 1))] = fft_data;
|
d_all_fft_codes_[i + (nsamples_total * (PRN - 1))] = fft_data;
|
||||||
|
|
||||||
// d_all_fft_codes_[i + nsamples_total * (PRN - 1)] = lv_16sc_t(static_cast<int32_t>(floor(fft_codes_padded[i].real() * (pow(2, QUANT_BITS_LOCAL_CODE - 1) - 1) / max)),
|
|
||||||
// static_cast<int32_t>(floor(fft_codes_padded[i].imag() * (pow(2, QUANT_BITS_LOCAL_CODE - 1) - 1) / max)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,7 +182,6 @@ private:
|
|||||||
|
|
||||||
Gnss_Synchro* gnss_synchro_;
|
Gnss_Synchro* gnss_synchro_;
|
||||||
|
|
||||||
//lv_16sc_t* d_all_fft_codes_; // memory that contains all the code ffts
|
|
||||||
uint32_t* d_all_fft_codes_; // memory that contains all the code ffts
|
uint32_t* d_all_fft_codes_; // memory that contains all the code ffts
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -48,6 +48,9 @@
|
|||||||
#include <cstring> // for memcpy
|
#include <cstring> // for memcpy
|
||||||
|
|
||||||
#define NUM_PRNs 32
|
#define NUM_PRNs 32
|
||||||
|
|
||||||
|
// the following flags are FPGA-specific and they are using arrange the values of the fft of the local code in the way the FPGA
|
||||||
|
// expects. This arrangement is done in the initialisation to avoid consuming unnecessary clock cycles during tracking.
|
||||||
#define QUANT_BITS_LOCAL_CODE 16
|
#define QUANT_BITS_LOCAL_CODE 16
|
||||||
#define SELECT_LSBits 0x0000FFFF // Select the 10 LSbits out of a 20-bit word
|
#define SELECT_LSBits 0x0000FFFF // Select the 10 LSbits out of a 20-bit word
|
||||||
#define SELECT_MSBbits 0xFFFF0000 // Select the 10 MSbits out of a 20-bit word
|
#define SELECT_MSBbits 0xFFFF0000 // Select the 10 MSbits out of a 20-bit word
|
||||||
@ -104,7 +107,6 @@ GpsL1CaPcpsAcquisitionFpga::GpsL1CaPcpsAcquisitionFpga(
|
|||||||
// allocate memory to compute all the PRNs and compute all the possible codes
|
// allocate memory to compute all the PRNs and compute all the possible codes
|
||||||
auto* code = new std::complex<float>[nsamples_total]; // buffer for the local code
|
auto* code = new std::complex<float>[nsamples_total]; // buffer for the local code
|
||||||
auto* fft_codes_padded = static_cast<gr_complex*>(volk_gnsssdr_malloc(nsamples_total * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
|
auto* fft_codes_padded = static_cast<gr_complex*>(volk_gnsssdr_malloc(nsamples_total * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
|
||||||
//d_all_fft_codes_ = new lv_16sc_t[nsamples_total * NUM_PRNs]; // memory containing all the possible fft codes for PRN 0 to 32
|
|
||||||
d_all_fft_codes_ = new uint32_t[(nsamples_total * NUM_PRNs)]; // memory containing all the possible fft codes for PRN 0 to 32
|
d_all_fft_codes_ = new uint32_t[(nsamples_total * NUM_PRNs)]; // memory containing all the possible fft codes for PRN 0 to 32
|
||||||
float max;
|
float max;
|
||||||
int32_t tmp, tmp2, local_code, fft_data;
|
int32_t tmp, tmp2, local_code, fft_data;
|
||||||
@ -149,9 +151,6 @@ GpsL1CaPcpsAcquisitionFpga::GpsL1CaPcpsAcquisitionFpga(
|
|||||||
local_code = (tmp & SELECT_LSBits) | ((tmp2 * SHL_CODE_BITS) & SELECT_MSBbits); // put together the real part and the imaginary part
|
local_code = (tmp & SELECT_LSBits) | ((tmp2 * SHL_CODE_BITS) & SELECT_MSBbits); // put together the real part and the imaginary part
|
||||||
fft_data = local_code & SELECT_ALL_CODE_BITS;
|
fft_data = local_code & SELECT_ALL_CODE_BITS;
|
||||||
d_all_fft_codes_[i + (nsamples_total * (PRN - 1))] = fft_data;
|
d_all_fft_codes_[i + (nsamples_total * (PRN - 1))] = fft_data;
|
||||||
|
|
||||||
// d_all_fft_codes_[i + nsamples_total * (PRN - 1)] = lv_16sc_t(static_cast<int32_t>(floor(fft_codes_padded[i].real() * (pow(2, QUANT_BITS_LOCAL_CODE - 1) - 1) / max)),
|
|
||||||
// static_cast<int32_t>(floor(fft_codes_padded[i].imag() * (pow(2, QUANT_BITS_LOCAL_CODE - 1) - 1) / max)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,7 +166,6 @@ private:
|
|||||||
std::string role_;
|
std::string role_;
|
||||||
unsigned int in_streams_;
|
unsigned int in_streams_;
|
||||||
unsigned int out_streams_;
|
unsigned int out_streams_;
|
||||||
//lv_16sc_t* d_all_fft_codes_; // memory that contains all the code ffts
|
|
||||||
uint32_t* d_all_fft_codes_; // memory that contains all the code ffts
|
uint32_t* d_all_fft_codes_; // memory that contains all the code ffts
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -48,6 +48,9 @@
|
|||||||
#include <cstring> // for memcpy
|
#include <cstring> // for memcpy
|
||||||
|
|
||||||
#define NUM_PRNs 32
|
#define NUM_PRNs 32
|
||||||
|
|
||||||
|
// the following flags are FPGA-specific and they are using arrange the values of the fft of the local code in the way the FPGA
|
||||||
|
// expects. This arrangement is done in the initialisation to avoid consuming unnecessary clock cycles during tracking.
|
||||||
#define QUANT_BITS_LOCAL_CODE 16
|
#define QUANT_BITS_LOCAL_CODE 16
|
||||||
#define SELECT_LSBits 0x0000FFFF // Select the 10 LSbits out of a 20-bit word
|
#define SELECT_LSBits 0x0000FFFF // Select the 10 LSbits out of a 20-bit word
|
||||||
#define SELECT_MSBbits 0xFFFF0000 // Select the 10 MSbits out of a 20-bit word
|
#define SELECT_MSBbits 0xFFFF0000 // Select the 10 MSbits out of a 20-bit word
|
||||||
@ -108,7 +111,6 @@ GpsL5iPcpsAcquisitionFpga::GpsL5iPcpsAcquisitionFpga(
|
|||||||
auto* fft_if = new gr::fft::fft_complex(nsamples_total, true); // Direct FFT
|
auto* fft_if = new gr::fft::fft_complex(nsamples_total, true); // Direct FFT
|
||||||
auto* code = new gr_complex[nsamples_total];
|
auto* code = new gr_complex[nsamples_total];
|
||||||
auto* fft_codes_padded = static_cast<gr_complex*>(volk_gnsssdr_malloc(nsamples_total * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
|
auto* fft_codes_padded = static_cast<gr_complex*>(volk_gnsssdr_malloc(nsamples_total * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
|
||||||
//d_all_fft_codes_ = new lv_16sc_t[nsamples_total * NUM_PRNs]; // memory containing all the possible fft codes for PRN 0 to 32
|
|
||||||
d_all_fft_codes_ = new uint32_t[(nsamples_total * NUM_PRNs)]; // memory containing all the possible fft codes for PRN 0 to 32
|
d_all_fft_codes_ = new uint32_t[(nsamples_total * NUM_PRNs)]; // memory containing all the possible fft codes for PRN 0 to 32
|
||||||
|
|
||||||
float max; // temporary maxima search
|
float max; // temporary maxima search
|
||||||
@ -153,9 +155,6 @@ GpsL5iPcpsAcquisitionFpga::GpsL5iPcpsAcquisitionFpga(
|
|||||||
local_code = (tmp & SELECT_LSBits) | ((tmp2 * SHL_CODE_BITS) & SELECT_MSBbits); // put together the real part and the imaginary part
|
local_code = (tmp & SELECT_LSBits) | ((tmp2 * SHL_CODE_BITS) & SELECT_MSBbits); // put together the real part and the imaginary part
|
||||||
fft_data = local_code & SELECT_ALL_CODE_BITS;
|
fft_data = local_code & SELECT_ALL_CODE_BITS;
|
||||||
d_all_fft_codes_[i + (nsamples_total * (PRN - 1))] = fft_data;
|
d_all_fft_codes_[i + (nsamples_total * (PRN - 1))] = fft_data;
|
||||||
|
|
||||||
// d_all_fft_codes_[i + nsamples_total * (PRN - 1)] = lv_16sc_t(static_cast<int32_t>(floor(fft_codes_padded[i].real() * (pow(2, QUANT_BITS_LOCAL_CODE - 1) - 1) / max)),
|
|
||||||
// static_cast<int32_t>(floor(fft_codes_padded[i].imag() * (pow(2, QUANT_BITS_LOCAL_CODE - 1) - 1) / max)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -167,7 +167,6 @@ private:
|
|||||||
unsigned int in_streams_;
|
unsigned int in_streams_;
|
||||||
unsigned int out_streams_;
|
unsigned int out_streams_;
|
||||||
|
|
||||||
//lv_16sc_t* d_all_fft_codes_; // memory that contains all the code ffts
|
|
||||||
uint32_t* d_all_fft_codes_; // memory that contains all the code ffts
|
uint32_t* d_all_fft_codes_; // memory that contains all the code ffts
|
||||||
|
|
||||||
float calculate_threshold(float pfa);
|
float calculate_threshold(float pfa);
|
||||||
|
@ -52,7 +52,7 @@ pcps_acquisition_fpga_sptr pcps_make_acquisition_fpga(pcpsconf_fpga_t conf_)
|
|||||||
pcps_acquisition_fpga::pcps_acquisition_fpga(pcpsconf_fpga_t conf_)
|
pcps_acquisition_fpga::pcps_acquisition_fpga(pcpsconf_fpga_t conf_)
|
||||||
{
|
{
|
||||||
acq_parameters = std::move(conf_);
|
acq_parameters = std::move(conf_);
|
||||||
d_sample_counter = 0ULL; // SAMPLE COUNTER
|
d_sample_counter = 0ULL; // Sample Counter
|
||||||
d_active = false;
|
d_active = false;
|
||||||
d_state = 0;
|
d_state = 0;
|
||||||
d_fft_size = acq_parameters.samples_per_code;
|
d_fft_size = acq_parameters.samples_per_code;
|
||||||
@ -111,8 +111,6 @@ void pcps_acquisition_fpga::init()
|
|||||||
d_input_power = 0.0;
|
d_input_power = 0.0;
|
||||||
|
|
||||||
d_num_doppler_bins = static_cast<uint32_t>(std::ceil(static_cast<double>(static_cast<int32_t>(d_doppler_max) - static_cast<int32_t>(-d_doppler_max)) / static_cast<double>(d_doppler_step))) + 1;
|
d_num_doppler_bins = static_cast<uint32_t>(std::ceil(static_cast<double>(static_cast<int32_t>(d_doppler_max) - static_cast<int32_t>(-d_doppler_max)) / static_cast<double>(d_doppler_step))) + 1;
|
||||||
|
|
||||||
// acquisition_fpga->init();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -323,41 +321,6 @@ void pcps_acquisition_fpga::set_active(bool active)
|
|||||||
d_active = false;
|
d_active = false;
|
||||||
send_negative_acquisition();
|
send_negative_acquisition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// if (d_test_statistics > d_threshold)
|
|
||||||
// {
|
|
||||||
// d_doppler_center_step_two = static_cast<float>(d_gnss_synchro->Acq_doppler_hz);
|
|
||||||
// //acquisition_fpga->open_device();
|
|
||||||
// //boost::chrono::high_resolution_clock::time_point start = boost::chrono::high_resolution_clock::now();
|
|
||||||
//
|
|
||||||
// acquisition_core(d_num_doppler_bins_step2, d_doppler_step2, d_doppler_center_step_two - static_cast<float>(floor(d_num_doppler_bins_step2 / 2.0)) * d_doppler_step2);
|
|
||||||
//
|
|
||||||
// acquisition_fpga->close_device();
|
|
||||||
//
|
|
||||||
// if (d_test_statistics > d_threshold)
|
|
||||||
// {
|
|
||||||
// d_active = false;
|
|
||||||
// send_positive_acquisition();
|
|
||||||
// d_state = 0; // Positive acquisition
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// d_state = 0;
|
|
||||||
// d_active = false;
|
|
||||||
// send_negative_acquisition();
|
|
||||||
// }
|
|
||||||
// //boost::chrono::nanoseconds ns = boost::chrono::high_resolution_clock::now() - start;
|
|
||||||
// //auto val = ns.count();
|
|
||||||
// //std::cout << "Count ns: " << val << std::endl;
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// acquisition_fpga->close_device();
|
|
||||||
// d_state = 0;
|
|
||||||
// d_active = false;
|
|
||||||
// send_negative_acquisition();
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -369,9 +332,3 @@ void pcps_acquisition_fpga::reset_acquisition(void)
|
|||||||
acquisition_fpga->reset_acquisition();
|
acquisition_fpga->reset_acquisition();
|
||||||
acquisition_fpga->close_device();
|
acquisition_fpga->close_device();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//void pcps_acquisition_fpga::read_fpga_total_scale_factor(uint32_t* total_scale_factor, uint32_t* fw_scale_factor)
|
|
||||||
//{
|
|
||||||
// acquisition_fpga->read_fpga_total_scale_factor(total_scale_factor, fw_scale_factor);
|
|
||||||
//}
|
|
||||||
|
@ -231,11 +231,6 @@ public:
|
|||||||
* \brief This funciton triggers a HW reset of the FPGA PL.
|
* \brief This funciton triggers a HW reset of the FPGA PL.
|
||||||
*/
|
*/
|
||||||
void reset_acquisition(void);
|
void reset_acquisition(void);
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief This funciton is only used for the unit tests
|
|
||||||
*/
|
|
||||||
//void read_fpga_total_scale_factor(uint32_t* total_scale_factor, uint32_t* fw_scale_factor);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* GNSS_SDR_PCPS_ACQUISITION_FPGA_H_*/
|
#endif /* GNSS_SDR_PCPS_ACQUISITION_FPGA_H_*/
|
||||||
|
@ -106,19 +106,12 @@ Fpga_Acquisition::Fpga_Acquisition(std::string device_name,
|
|||||||
Fpga_Acquisition::close_device();
|
Fpga_Acquisition::close_device();
|
||||||
d_PRN = 0;
|
d_PRN = 0;
|
||||||
DLOG(INFO) << "Acquisition FPGA class created";
|
DLOG(INFO) << "Acquisition FPGA class created";
|
||||||
//printf("d_excludelimit = %d\n", d_excludelimit);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Fpga_Acquisition::~Fpga_Acquisition() = default;
|
Fpga_Acquisition::~Fpga_Acquisition() = default;
|
||||||
|
|
||||||
|
|
||||||
//bool Fpga_Acquisition::init()
|
|
||||||
//{
|
|
||||||
// return true;
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
bool Fpga_Acquisition::set_local_code(uint32_t PRN)
|
bool Fpga_Acquisition::set_local_code(uint32_t PRN)
|
||||||
{
|
{
|
||||||
// select the code with the chosen PRN
|
// select the code with the chosen PRN
|
||||||
@ -169,8 +162,6 @@ void Fpga_Acquisition::fpga_acquisition_test_register()
|
|||||||
uint32_t writeval = TEST_REG_SANITY_CHECK;
|
uint32_t writeval = TEST_REG_SANITY_CHECK;
|
||||||
uint32_t readval;
|
uint32_t readval;
|
||||||
|
|
||||||
//Fpga_Acquisition::open_device();
|
|
||||||
|
|
||||||
// write value to test register
|
// write value to test register
|
||||||
d_map_base[15] = writeval;
|
d_map_base[15] = writeval;
|
||||||
// read value from test register
|
// read value from test register
|
||||||
@ -184,8 +175,6 @@ void Fpga_Acquisition::fpga_acquisition_test_register()
|
|||||||
{
|
{
|
||||||
LOG(INFO) << "Acquisition test register sanity check success!";
|
LOG(INFO) << "Acquisition test register sanity check success!";
|
||||||
}
|
}
|
||||||
|
|
||||||
//Fpga_Acquisition::close_device();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -293,9 +282,7 @@ void Fpga_Acquisition::read_acquisition_results(uint32_t *max_index,
|
|||||||
readval = d_map_base[7]; // read doppler index -- this read releases the interrupt line
|
readval = d_map_base[7]; // read doppler index -- this read releases the interrupt line
|
||||||
*doppler_index = readval;
|
*doppler_index = readval;
|
||||||
|
|
||||||
readval = d_map_base[15]; // read dummy
|
readval = d_map_base[15]; // read dummy (to be removed)
|
||||||
|
|
||||||
//Fpga_Acquisition::close_device();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -324,9 +311,7 @@ void Fpga_Acquisition::close_device()
|
|||||||
|
|
||||||
void Fpga_Acquisition::reset_acquisition(void)
|
void Fpga_Acquisition::reset_acquisition(void)
|
||||||
{
|
{
|
||||||
//Fpga_Acquisition::open_device();
|
|
||||||
d_map_base[8] = RESET_ACQUISITION; // writing a 2 to d_map_base[8] resets the multicorrelator
|
d_map_base[8] = RESET_ACQUISITION; // writing a 2 to d_map_base[8] resets the multicorrelator
|
||||||
//Fpga_Acquisition::close_device();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -336,8 +321,7 @@ void Fpga_Acquisition::read_fpga_total_scale_factor(uint32_t *total_scale_factor
|
|||||||
uint32_t readval = 0;
|
uint32_t readval = 0;
|
||||||
readval = d_map_base[8];
|
readval = d_map_base[8];
|
||||||
*total_scale_factor = readval;
|
*total_scale_factor = readval;
|
||||||
|
// only the total scale factor is used for the tests (fw scale factor to be removed)
|
||||||
//readval = d_map_base[8];
|
|
||||||
*fw_scale_factor = 0;
|
*fw_scale_factor = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,12 +53,10 @@ public:
|
|||||||
int64_t fs_in,
|
int64_t fs_in,
|
||||||
uint32_t sampled_ms,
|
uint32_t sampled_ms,
|
||||||
uint32_t select_queue,
|
uint32_t select_queue,
|
||||||
//lv_16sc_t *all_fft_codes,
|
|
||||||
uint32_t *all_fft_codes,
|
uint32_t *all_fft_codes,
|
||||||
uint32_t excludelimit);
|
uint32_t excludelimit);
|
||||||
|
|
||||||
~Fpga_Acquisition();
|
~Fpga_Acquisition();
|
||||||
//bool init();
|
|
||||||
bool set_local_code(uint32_t PRN);
|
bool set_local_code(uint32_t PRN);
|
||||||
bool free();
|
bool free();
|
||||||
void set_doppler_sweep(uint32_t num_sweeps, uint32_t doppler_step, int32_t doppler_min);
|
void set_doppler_sweep(uint32_t num_sweeps, uint32_t doppler_step, int32_t doppler_min);
|
||||||
@ -111,9 +109,8 @@ private:
|
|||||||
// data related to the hardware module and the driver
|
// data related to the hardware module and the driver
|
||||||
int32_t d_fd; // driver descriptor
|
int32_t d_fd; // driver descriptor
|
||||||
volatile uint32_t *d_map_base; // driver memory map
|
volatile uint32_t *d_map_base; // driver memory map
|
||||||
//lv_16sc_t *d_all_fft_codes; // memory that contains all the code ffts
|
uint32_t *d_all_fft_codes; // memory that contains all the code ffts
|
||||||
uint32_t *d_all_fft_codes; // memory that contains all the code ffts
|
uint32_t d_vector_length; // number of samples incluing padding and number of ms
|
||||||
uint32_t d_vector_length; // number of samples incluing padding and number of ms
|
|
||||||
uint32_t d_excludelimit;
|
uint32_t d_excludelimit;
|
||||||
uint32_t d_nsamples_total; // number of samples including padding
|
uint32_t d_nsamples_total; // number of samples including padding
|
||||||
uint32_t d_nsamples; // number of samples not including padding
|
uint32_t d_nsamples; // number of samples not including padding
|
||||||
|
@ -48,7 +48,8 @@
|
|||||||
#include <cstring> // for memcpy
|
#include <cstring> // for memcpy
|
||||||
#include <iostream> // for operator<<,
|
#include <iostream> // for operator<<,
|
||||||
|
|
||||||
// the following flag is FPGA-specific and they are using during the local code initialisation in the SW to save CPU cycles during tracking
|
// the following flags are FPGA-specific and they are using arrange the values of the local code in the way the FPGA
|
||||||
|
// expects. This arrangement is done in the initialisation to avoid consuming unnecessary clock cycles during tracking.
|
||||||
#define LOCAL_CODE_FPGA_ENABLE_WRITE_MEMORY 0x0C000000 // flag that enables WE (Write Enable) of the local code FPGA
|
#define LOCAL_CODE_FPGA_ENABLE_WRITE_MEMORY 0x0C000000 // flag that enables WE (Write Enable) of the local code FPGA
|
||||||
#define LOCAL_CODE_FPGA_CORRELATOR_SELECT_COUNT 0x20000000 // flag that selects the writing of the pilot code in the FPGA (as opposed to the data code)
|
#define LOCAL_CODE_FPGA_CORRELATOR_SELECT_COUNT 0x20000000 // flag that selects the writing of the pilot code in the FPGA (as opposed to the data code)
|
||||||
|
|
||||||
|
@ -45,7 +45,8 @@
|
|||||||
#include <cstring> // for memcpy
|
#include <cstring> // for memcpy
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
// the following flag is FPGA-specific and they are using during the local code initialisation in the SW to save CPU cycles during tracking
|
// the following flags are FPGA-specific and they are using arrange the values of the local code in the way the FPGA
|
||||||
|
// expects. This arrangement is done in the initialisation to avoid consuming unnecessary clock cycles during tracking.
|
||||||
#define LOCAL_CODE_FPGA_ENABLE_WRITE_MEMORY 0x0C000000 // flag that enables WE (Write Enable) of the local code FPGA
|
#define LOCAL_CODE_FPGA_ENABLE_WRITE_MEMORY 0x0C000000 // flag that enables WE (Write Enable) of the local code FPGA
|
||||||
#define LOCAL_CODE_FPGA_CORRELATOR_SELECT_COUNT 0x20000000 // flag that selects the writing of the pilot code in the FPGA (as opposed to the data code)
|
#define LOCAL_CODE_FPGA_CORRELATOR_SELECT_COUNT 0x20000000 // flag that selects the writing of the pilot code in the FPGA (as opposed to the data code)
|
||||||
|
|
||||||
@ -238,8 +239,6 @@ GalileoE5aDllPllTrackingFpga::GalileoE5aDllPllTrackingFpga(
|
|||||||
}
|
}
|
||||||
tmp_value = tmp_value | LOCAL_CODE_FPGA_ENABLE_WRITE_MEMORY | LOCAL_CODE_FPGA_CORRELATOR_SELECT_COUNT;
|
tmp_value = tmp_value | LOCAL_CODE_FPGA_ENABLE_WRITE_MEMORY | LOCAL_CODE_FPGA_CORRELATOR_SELECT_COUNT;
|
||||||
d_data_codes[static_cast<int32_t>(code_length_chips) * (PRN - 1) + s] = tmp_value;
|
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
|
||||||
@ -254,7 +253,6 @@ GalileoE5aDllPllTrackingFpga::GalileoE5aDllPllTrackingFpga(
|
|||||||
}
|
}
|
||||||
tmp_value = tmp_value | LOCAL_CODE_FPGA_ENABLE_WRITE_MEMORY;
|
tmp_value = tmp_value | LOCAL_CODE_FPGA_ENABLE_WRITE_MEMORY;
|
||||||
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] = tmp_value;
|
||||||
//d_ca_codes[static_cast<int32_t>(code_length_chips) * (PRN - 1) + s] = static_cast<int32_t>(aux_code[s].real());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,7 +99,6 @@ private:
|
|||||||
std::string role_;
|
std::string role_;
|
||||||
uint32_t in_streams_;
|
uint32_t in_streams_;
|
||||||
uint32_t out_streams_;
|
uint32_t out_streams_;
|
||||||
|
|
||||||
int32_t* d_ca_codes;
|
int32_t* d_ca_codes;
|
||||||
int32_t* d_data_codes;
|
int32_t* d_data_codes;
|
||||||
bool d_track_pilot;
|
bool d_track_pilot;
|
||||||
|
@ -50,7 +50,8 @@
|
|||||||
|
|
||||||
#define NUM_PRNs 32 // total number of PRNs
|
#define NUM_PRNs 32 // total number of PRNs
|
||||||
|
|
||||||
// the following flag is FPGA-specific and they are using during the local code initialisation in the SW to save CPU cycles during tracking
|
// the following flag is FPGA-specific and they are using arrange the values of the local code in the way the FPGA
|
||||||
|
// expects. This arrangement is done in the initialisation to avoid consuming unnecessary clock cycles during tracking.
|
||||||
#define LOCAL_CODE_FPGA_ENABLE_WRITE_MEMORY 0x0C000000 // flag that enables WE (Write Enable) of the local code FPGA
|
#define LOCAL_CODE_FPGA_ENABLE_WRITE_MEMORY 0x0C000000 // flag that enables WE (Write Enable) of the local code FPGA
|
||||||
|
|
||||||
GpsL1CaDllPllTrackingFpga::GpsL1CaDllPllTrackingFpga(
|
GpsL1CaDllPllTrackingFpga::GpsL1CaDllPllTrackingFpga(
|
||||||
|
@ -52,7 +52,8 @@
|
|||||||
|
|
||||||
#define NUM_PRNs 32 // number of PRNS
|
#define NUM_PRNs 32 // number of PRNS
|
||||||
|
|
||||||
// the following flag is FPGA-specific and they are using during the local code initialisation in the SW to save CPU cycles during tracking
|
// the following flags are FPGA-specific and they are using arrange the values of the local code in the way the FPGA
|
||||||
|
// expects. This arrangement is done in the initialisation to avoid consuming unnecessary clock cycles during tracking.
|
||||||
#define LOCAL_CODE_FPGA_ENABLE_WRITE_MEMORY 0x0C000000 // flag that enables WE (Write Enable) of the local code FPGA
|
#define LOCAL_CODE_FPGA_ENABLE_WRITE_MEMORY 0x0C000000 // flag that enables WE (Write Enable) of the local code FPGA
|
||||||
#define LOCAL_CODE_FPGA_CORRELATOR_SELECT_COUNT 0x20000000 // flag that selects the writing of the pilot code in the FPGA (as opposed to the data code)
|
#define LOCAL_CODE_FPGA_CORRELATOR_SELECT_COUNT 0x20000000 // flag that selects the writing of the pilot code in the FPGA (as opposed to the data code)
|
||||||
|
|
||||||
@ -256,9 +257,6 @@ GpsL5DllPllTrackingFpga::GpsL5DllPllTrackingFpga(
|
|||||||
}
|
}
|
||||||
tmp_value = tmp_value | LOCAL_CODE_FPGA_ENABLE_WRITE_MEMORY | LOCAL_CODE_FPGA_CORRELATOR_SELECT_COUNT;
|
tmp_value = tmp_value | LOCAL_CODE_FPGA_ENABLE_WRITE_MEMORY | LOCAL_CODE_FPGA_CORRELATOR_SELECT_COUNT;
|
||||||
d_data_codes[static_cast<int32_t>(code_length_chips) * (PRN - 1) + s] = tmp_value;
|
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
|
||||||
@ -275,7 +273,6 @@ GpsL5DllPllTrackingFpga::GpsL5DllPllTrackingFpga(
|
|||||||
}
|
}
|
||||||
tmp_value = tmp_value | LOCAL_CODE_FPGA_ENABLE_WRITE_MEMORY;
|
tmp_value = tmp_value | LOCAL_CODE_FPGA_ENABLE_WRITE_MEMORY;
|
||||||
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] = tmp_value;
|
||||||
//d_ca_codes[static_cast<int32_t>(code_length_chips) * (PRN - 1) + s] = static_cast<int32_t>(tracking_code[s]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -274,10 +274,6 @@ dll_pll_veml_tracking_fpga::dll_pll_veml_tracking_fpga(const Dll_Pll_Conf_Fpga &
|
|||||||
d_code_loop_filter = Tracking_loop_filter(d_code_period, trk_parameters.dll_bw_hz, trk_parameters.dll_filter_order, false);
|
d_code_loop_filter = Tracking_loop_filter(d_code_period, trk_parameters.dll_bw_hz, trk_parameters.dll_filter_order, false);
|
||||||
printf("trk_parameters.fll_bw_hz = %f trk_parameters.pll_bw_hz = %f trk_parameters.pll_filter_order = %d\n", trk_parameters.fll_bw_hz, trk_parameters.pll_bw_hz, trk_parameters.pll_filter_order);
|
printf("trk_parameters.fll_bw_hz = %f trk_parameters.pll_bw_hz = %f trk_parameters.pll_filter_order = %d\n", trk_parameters.fll_bw_hz, trk_parameters.pll_bw_hz, trk_parameters.pll_filter_order);
|
||||||
d_carrier_loop_filter.set_params(trk_parameters.fll_bw_hz, trk_parameters.pll_bw_hz, trk_parameters.pll_filter_order);
|
d_carrier_loop_filter.set_params(trk_parameters.fll_bw_hz, trk_parameters.pll_bw_hz, trk_parameters.pll_filter_order);
|
||||||
//d_code_loop_filter_old.set_DLL_BW(trk_parameters.dll_bw_hz);
|
|
||||||
//d_carrier_loop_filter_old.set_PLL_BW(trk_parameters.pll_bw_hz);
|
|
||||||
//d_code_loop_filter_old = Tracking_2nd_DLL_filter(static_cast<float>(d_code_period));
|
|
||||||
//d_carrier_loop_filter_old = Tracking_2nd_PLL_filter(static_cast<float>(d_code_period));
|
|
||||||
|
|
||||||
if (d_veml)
|
if (d_veml)
|
||||||
{
|
{
|
||||||
@ -431,7 +427,6 @@ dll_pll_veml_tracking_fpga::dll_pll_veml_tracking_fpga(const Dll_Pll_Conf_Fpga &
|
|||||||
uint32_t multicorr_type = trk_parameters.multicorr_type;
|
uint32_t multicorr_type = trk_parameters.multicorr_type;
|
||||||
multicorrelator_fpga = std::make_shared<Fpga_Multicorrelator_8sc>(d_n_correlator_taps, device_name, device_base, ca_codes, data_codes, d_code_length_chips, trk_parameters.track_pilot, multicorr_type, d_code_samples_per_chip);
|
multicorrelator_fpga = std::make_shared<Fpga_Multicorrelator_8sc>(d_n_correlator_taps, device_name, device_base, ca_codes, data_codes, d_code_length_chips, trk_parameters.track_pilot, multicorr_type, d_code_samples_per_chip);
|
||||||
multicorrelator_fpga->set_output_vectors(d_correlator_outs, d_Prompt_Data);
|
multicorrelator_fpga->set_output_vectors(d_correlator_outs, d_Prompt_Data);
|
||||||
//multicorrelator_fpga->fpga_compute_signal_parameters_in_fpga();
|
|
||||||
d_sample_counter_next = 0ULL;
|
d_sample_counter_next = 0ULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -469,6 +464,11 @@ void dll_pll_veml_tracking_fpga::msg_handler_telemetry_to_trk(const pmt::pmt_t &
|
|||||||
|
|
||||||
void dll_pll_veml_tracking_fpga::start_tracking()
|
void dll_pll_veml_tracking_fpga::start_tracking()
|
||||||
{
|
{
|
||||||
|
// all the calculations that do not require the data from the acquisition module are moved to the
|
||||||
|
// set_gnss_synchro command, which is received with a valid PRN before the acquisition module starts the
|
||||||
|
// acquisition process. This is done to minimize the time between the end of the acquisition process and
|
||||||
|
// the beginning of the tracking process.
|
||||||
|
|
||||||
// correct the code phase according to the delay between acq and trk
|
// correct the code phase according to the delay between acq and trk
|
||||||
d_acq_code_phase_samples = d_acquisition_gnss_synchro->Acq_delay_samples;
|
d_acq_code_phase_samples = d_acquisition_gnss_synchro->Acq_delay_samples;
|
||||||
d_acq_carrier_doppler_hz = d_acquisition_gnss_synchro->Acq_doppler_hz;
|
d_acq_carrier_doppler_hz = d_acquisition_gnss_synchro->Acq_doppler_hz;
|
||||||
@ -479,20 +479,10 @@ void dll_pll_veml_tracking_fpga::start_tracking()
|
|||||||
|
|
||||||
|
|
||||||
// filter initialization
|
// filter initialization
|
||||||
//printf("d_carrier_loop_filter init d_acq_carrier_doppler_hz = %lf\n", d_acq_carrier_doppler_hz);
|
|
||||||
d_carrier_loop_filter.initialize(static_cast<float>(d_acq_carrier_doppler_hz)); // initialize the carrier filter
|
d_carrier_loop_filter.initialize(static_cast<float>(d_acq_carrier_doppler_hz)); // initialize the carrier filter
|
||||||
|
|
||||||
// // DEBUG OUTPUT
|
|
||||||
// std::cout << "Tracking of " << systemName << " " << signal_pretty_name << " signal started on channel " << d_channel << " for satellite " << Gnss_Satellite(systemName, d_acquisition_gnss_synchro->PRN) << std::endl;
|
|
||||||
// DLOG(INFO) << "Starting tracking of satellite " << Gnss_Satellite(systemName, d_acquisition_gnss_synchro->PRN) << " on channel " << d_channel;
|
|
||||||
|
|
||||||
// enable tracking pull-in
|
// enable tracking pull-in
|
||||||
d_state = 1;
|
d_state = 1;
|
||||||
|
|
||||||
//d_pull_in_transitory = true;
|
|
||||||
|
|
||||||
// d_Prompt_buffer_deque.clear();
|
|
||||||
// d_last_prompt = gr_complex(0.0, 0.0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -672,7 +662,6 @@ void dll_pll_veml_tracking_fpga::run_dll_pll()
|
|||||||
// FLL discriminator
|
// FLL discriminator
|
||||||
d_carr_freq_error_hz = fll_four_quadrant_atan(d_P_accu_old, d_P_accu, 0, d_current_correlation_time_s) / GPS_TWO_PI;
|
d_carr_freq_error_hz = fll_four_quadrant_atan(d_P_accu_old, d_P_accu, 0, d_current_correlation_time_s) / GPS_TWO_PI;
|
||||||
d_P_accu_old = d_P_accu;
|
d_P_accu_old = d_P_accu;
|
||||||
//std::cout << "d_carr_freq_error_hz: " << d_carr_freq_error_hz << std::endl;
|
|
||||||
// Carrier discriminator filter
|
// Carrier discriminator filter
|
||||||
if ((d_pull_in_transitory == true and trk_parameters.enable_fll_pull_in == true))
|
if ((d_pull_in_transitory == true and trk_parameters.enable_fll_pull_in == true))
|
||||||
{
|
{
|
||||||
@ -691,10 +680,7 @@ void dll_pll_veml_tracking_fpga::run_dll_pll()
|
|||||||
d_carr_error_filt_hz = d_carrier_loop_filter.get_carrier_error(0, d_carr_phase_error_hz, d_current_correlation_time_s);
|
d_carr_error_filt_hz = d_carrier_loop_filter.get_carrier_error(0, d_carr_phase_error_hz, d_current_correlation_time_s);
|
||||||
}
|
}
|
||||||
|
|
||||||
//// Carrier discriminator filter
|
|
||||||
//d_carr_error_filt_hz = d_carrier_loop_filter_old.get_carrier_nco(d_carr_error_hz);
|
|
||||||
// New carrier Doppler frequency estimation
|
// New carrier Doppler frequency estimation
|
||||||
//d_carrier_doppler_hz = d_acq_carrier_doppler_hz + d_carr_error_filt_hz;
|
|
||||||
d_carrier_doppler_hz = d_carr_error_filt_hz;
|
d_carrier_doppler_hz = d_carr_error_filt_hz;
|
||||||
|
|
||||||
// std::cout << "d_carrier_doppler_hz: " << d_carrier_doppler_hz << std::endl;
|
// std::cout << "d_carrier_doppler_hz: " << d_carrier_doppler_hz << std::endl;
|
||||||
@ -711,7 +697,6 @@ void dll_pll_veml_tracking_fpga::run_dll_pll()
|
|||||||
}
|
}
|
||||||
// Code discriminator filter
|
// Code discriminator filter
|
||||||
d_code_error_filt_chips = d_code_loop_filter.apply(d_code_error_chips); // [chips/second]
|
d_code_error_filt_chips = d_code_loop_filter.apply(d_code_error_chips); // [chips/second]
|
||||||
//d_code_error_filt_chips = d_code_loop_filter_old.get_code_nco(d_code_error_chips); // [chips/second]
|
|
||||||
|
|
||||||
// New code Doppler frequency estimation
|
// New code Doppler frequency estimation
|
||||||
d_code_freq_chips = (1.0 + (d_carrier_doppler_hz / d_signal_carrier_freq)) * d_code_chip_rate - d_code_error_filt_chips;
|
d_code_freq_chips = (1.0 + (d_carrier_doppler_hz / d_signal_carrier_freq)) * d_code_chip_rate - d_code_error_filt_chips;
|
||||||
@ -870,7 +855,6 @@ void dll_pll_veml_tracking_fpga::save_correlation_results()
|
|||||||
{
|
{
|
||||||
d_cloop = true;
|
d_cloop = true;
|
||||||
}
|
}
|
||||||
//printf("d_cloop = %d\n", d_cloop);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1285,25 +1269,18 @@ void dll_pll_veml_tracking_fpga::set_gnss_synchro(Gnss_Synchro *p_gnss_synchro)
|
|||||||
{
|
{
|
||||||
//std::cout << "Acquisition is about to start " << std::endl;
|
//std::cout << "Acquisition is about to start " << std::endl;
|
||||||
|
|
||||||
// When using the FPGA the SW only reads the sample counter during active tracking.
|
// When using the FPGA the SW only reads the sample counter during active tracking in order to spare CPU clock cycles.
|
||||||
// For the temporary pull-in conditions to work the sample_counter in the SW must be
|
|
||||||
// cleared before reading the actual sample counter from the FPGA the first time
|
|
||||||
d_sample_counter = 0;
|
d_sample_counter = 0;
|
||||||
d_sample_counter_next = 0;
|
d_sample_counter_next = 0;
|
||||||
|
|
||||||
d_carrier_phase_rate_step_rad = 0.0;
|
d_carrier_phase_rate_step_rad = 0.0;
|
||||||
|
|
||||||
d_code_ph_history.clear();
|
d_code_ph_history.clear();
|
||||||
|
|
||||||
// DLL/PLL filter initialization
|
// DLL/PLL filter initialization
|
||||||
// the carrier loop filter uses a variable not available until the start_tracking function is called
|
|
||||||
//d_carrier_loop_filter.initialize(static_cast<float>(d_acq_carrier_doppler_hz)); // initialize the carrier filter
|
|
||||||
d_code_loop_filter.initialize(); // initialize the code filter
|
d_code_loop_filter.initialize(); // initialize the code filter
|
||||||
|
|
||||||
|
|
||||||
d_carr_ph_history.clear();
|
d_carr_ph_history.clear();
|
||||||
// DLL/PLL filter initialization
|
|
||||||
//d_carrier_loop_filter_old.initialize(); // initialize the carrier filter
|
|
||||||
//d_code_loop_filter_old.initialize(); // initialize the code filter
|
|
||||||
|
|
||||||
if (systemName == "GPS" and signal_type == "L5")
|
if (systemName == "GPS" and signal_type == "L5")
|
||||||
{
|
{
|
||||||
@ -1328,8 +1305,6 @@ void dll_pll_veml_tracking_fpga::set_gnss_synchro(Gnss_Synchro *p_gnss_synchro)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// call this but in FPGA ???
|
|
||||||
//multicorrelator_cpu.set_local_code_and_taps(d_code_samples_per_chip * d_code_length_chips, d_tracking_code, d_local_code_shift_chips);
|
|
||||||
std::fill_n(d_correlator_outs, d_n_correlator_taps, gr_complex(0.0, 0.0));
|
std::fill_n(d_correlator_outs, d_n_correlator_taps, gr_complex(0.0, 0.0));
|
||||||
|
|
||||||
d_carrier_lock_fail_counter = 0;
|
d_carrier_lock_fail_counter = 0;
|
||||||
@ -1356,11 +1331,6 @@ void dll_pll_veml_tracking_fpga::set_gnss_synchro(Gnss_Synchro *p_gnss_synchro)
|
|||||||
|
|
||||||
d_current_correlation_time_s = d_code_period;
|
d_current_correlation_time_s = d_code_period;
|
||||||
|
|
||||||
//d_code_loop_filter_old.set_DLL_BW(trk_parameters.dll_bw_hz);
|
|
||||||
//d_carrier_loop_filter_old.set_PLL_BW(trk_parameters.pll_bw_hz);
|
|
||||||
//d_carrier_loop_filter_old.set_pdi(static_cast<float>(d_code_period));
|
|
||||||
//d_code_loop_filter_old.set_pdi(static_cast<float>(d_code_period));
|
|
||||||
|
|
||||||
d_code_loop_filter.set_noise_bandwidth(trk_parameters.dll_bw_hz);
|
d_code_loop_filter.set_noise_bandwidth(trk_parameters.dll_bw_hz);
|
||||||
d_code_loop_filter.set_update_interval(d_code_period);
|
d_code_loop_filter.set_update_interval(d_code_period);
|
||||||
|
|
||||||
@ -1784,9 +1754,7 @@ void dll_pll_veml_tracking_fpga::run_state_2(Gnss_Synchro ¤t_synchro_data)
|
|||||||
// UPDATE INTEGRATION TIME
|
// UPDATE INTEGRATION TIME
|
||||||
d_extend_correlation_symbols_count = 0;
|
d_extend_correlation_symbols_count = 0;
|
||||||
d_current_correlation_time_s = static_cast<float>(trk_parameters.extend_correlation_symbols) * static_cast<float>(d_code_period);
|
d_current_correlation_time_s = static_cast<float>(trk_parameters.extend_correlation_symbols) * static_cast<float>(d_code_period);
|
||||||
//float new_correlation_time = static_cast<float>(trk_parameters.extend_correlation_symbols) * static_cast<float>(d_code_period);
|
|
||||||
//d_carrier_loop_filter_old.set_pdi(new_correlation_time);
|
|
||||||
//d_code_loop_filter_old.set_pdi(new_correlation_time);
|
|
||||||
d_state = 3; // next state is the extended correlator integrator
|
d_state = 3; // next state is the extended correlator integrator
|
||||||
LOG(INFO) << "Enabled " << trk_parameters.extend_correlation_symbols * static_cast<int32_t>(d_code_period * 1000.0) << " ms extended correlator in channel "
|
LOG(INFO) << "Enabled " << trk_parameters.extend_correlation_symbols * static_cast<int32_t>(d_code_period * 1000.0) << " ms extended correlator in channel "
|
||||||
<< d_channel
|
<< d_channel
|
||||||
@ -1795,8 +1763,6 @@ void dll_pll_veml_tracking_fpga::run_state_2(Gnss_Synchro ¤t_synchro_data)
|
|||||||
<< d_channel
|
<< d_channel
|
||||||
<< " for satellite " << Gnss_Satellite(systemName, d_acquisition_gnss_synchro->PRN) << std::endl;
|
<< " for satellite " << Gnss_Satellite(systemName, d_acquisition_gnss_synchro->PRN) << std::endl;
|
||||||
// Set narrow taps delay values [chips]
|
// Set narrow taps delay values [chips]
|
||||||
//d_code_loop_filter_old.set_DLL_BW(trk_parameters.dll_bw_narrow_hz);
|
|
||||||
//d_carrier_loop_filter_old.set_PLL_BW(trk_parameters.pll_bw_narrow_hz);
|
|
||||||
d_code_loop_filter.set_update_interval(d_current_correlation_time_s);
|
d_code_loop_filter.set_update_interval(d_current_correlation_time_s);
|
||||||
d_code_loop_filter.set_noise_bandwidth(trk_parameters.dll_bw_narrow_hz);
|
d_code_loop_filter.set_noise_bandwidth(trk_parameters.dll_bw_narrow_hz);
|
||||||
d_carrier_loop_filter.set_params(trk_parameters.fll_bw_hz, trk_parameters.pll_bw_narrow_hz, trk_parameters.pll_filter_order);
|
d_carrier_loop_filter.set_params(trk_parameters.fll_bw_hz, trk_parameters.pll_bw_narrow_hz, trk_parameters.pll_filter_order);
|
||||||
|
@ -33,8 +33,6 @@
|
|||||||
#define GNSS_SDR_DLL_PLL_VEML_TRACKING_FPGA_H
|
#define GNSS_SDR_DLL_PLL_VEML_TRACKING_FPGA_H
|
||||||
|
|
||||||
#include "dll_pll_conf_fpga.h"
|
#include "dll_pll_conf_fpga.h"
|
||||||
//#include "tracking_2nd_DLL_filter.h"
|
|
||||||
//#include "tracking_2nd_PLL_filter.h"
|
|
||||||
#include "tracking_FLL_PLL_filter.h" // for PLL/FLL filter
|
#include "tracking_FLL_PLL_filter.h" // for PLL/FLL filter
|
||||||
#include "tracking_loop_filter.h" // for DLL filter
|
#include "tracking_loop_filter.h" // for DLL filter
|
||||||
#include <boost/circular_buffer.hpp>
|
#include <boost/circular_buffer.hpp>
|
||||||
@ -131,11 +129,6 @@ private:
|
|||||||
float *d_local_code_shift_chips;
|
float *d_local_code_shift_chips;
|
||||||
float *d_prompt_data_shift;
|
float *d_prompt_data_shift;
|
||||||
std::shared_ptr<Fpga_Multicorrelator_8sc> multicorrelator_fpga;
|
std::shared_ptr<Fpga_Multicorrelator_8sc> multicorrelator_fpga;
|
||||||
/* TODO: currently the multicorrelator does not support adding extra correlator
|
|
||||||
with different local code, thus we need extra multicorrelator instance.
|
|
||||||
Implement this functionality inside multicorrelator class
|
|
||||||
as an enhancement to increase the performance
|
|
||||||
*/
|
|
||||||
gr_complex *d_correlator_outs;
|
gr_complex *d_correlator_outs;
|
||||||
gr_complex *d_Very_Early;
|
gr_complex *d_Very_Early;
|
||||||
gr_complex *d_Early;
|
gr_complex *d_Early;
|
||||||
@ -167,13 +160,10 @@ private:
|
|||||||
double d_rem_code_phase_samples;
|
double d_rem_code_phase_samples;
|
||||||
float d_rem_carr_phase_rad;
|
float d_rem_carr_phase_rad;
|
||||||
|
|
||||||
|
// PLL and DLL filter library
|
||||||
Tracking_loop_filter d_code_loop_filter;
|
Tracking_loop_filter d_code_loop_filter;
|
||||||
Tracking_FLL_PLL_filter d_carrier_loop_filter;
|
Tracking_FLL_PLL_filter d_carrier_loop_filter;
|
||||||
|
|
||||||
// PLL and DLL filter library
|
|
||||||
//Tracking_2nd_DLL_filter d_code_loop_filter_old;
|
|
||||||
//Tracking_2nd_PLL_filter d_carrier_loop_filter_old;
|
|
||||||
|
|
||||||
// acquisition
|
// acquisition
|
||||||
double d_acq_code_phase_samples;
|
double d_acq_code_phase_samples;
|
||||||
double d_acq_carrier_doppler_hz;
|
double d_acq_carrier_doppler_hz;
|
||||||
|
@ -300,41 +300,17 @@ uint32_t Fpga_Multicorrelator_8sc::fpga_acquisition_test_register(
|
|||||||
void Fpga_Multicorrelator_8sc::fpga_configure_tracking_gps_local_code(int32_t PRN)
|
void Fpga_Multicorrelator_8sc::fpga_configure_tracking_gps_local_code(int32_t PRN)
|
||||||
{
|
{
|
||||||
uint32_t k;
|
uint32_t k;
|
||||||
//uint32_t code_chip;
|
|
||||||
//uint32_t select_pilot_corelator = LOCAL_CODE_FPGA_CORRELATOR_SELECT_COUNT;
|
|
||||||
|
|
||||||
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)
|
|
||||||
// {
|
|
||||||
// code_chip = 1;
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// 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
|
|
||||||
//d_map_base[PROG_MEMS_ADDR] = LOCAL_CODE_FPGA_ENABLE_WRITE_MEMORY | code_chip; // | select_fpga_correlator;
|
|
||||||
d_map_base[PROG_MEMS_ADDR] = d_ca_codes[(d_code_length_samples * (PRN - 1)) + k];
|
d_map_base[PROG_MEMS_ADDR] = d_ca_codes[(d_code_length_samples * (PRN - 1)) + k];
|
||||||
; // | select_fpga_correlator;
|
|
||||||
}
|
}
|
||||||
if (d_track_pilot)
|
if (d_track_pilot)
|
||||||
{
|
{
|
||||||
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)
|
|
||||||
// {
|
|
||||||
// code_chip = 1;
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// 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] = d_data_codes[(d_code_length_samples * (PRN - 1)) + k];
|
d_map_base[PROG_MEMS_ADDR] = d_data_codes[(d_code_length_samples * (PRN - 1)) + k];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -348,9 +324,7 @@ void Fpga_Multicorrelator_8sc::fpga_compute_code_shift_parameters(void)
|
|||||||
float frac_part; // decimal part
|
float frac_part; // decimal part
|
||||||
int32_t dec_part; // fractional part
|
int32_t dec_part; // fractional part
|
||||||
|
|
||||||
int32_t i;
|
for (uint32_t i = 0; i < d_n_correlators; i++)
|
||||||
|
|
||||||
for (i = 0; i < d_n_correlators; i++)
|
|
||||||
{
|
{
|
||||||
dec_part = floor(d_shifts_chips[i] - d_rem_code_phase_chips);
|
dec_part = floor(d_shifts_chips[i] - d_rem_code_phase_chips);
|
||||||
|
|
||||||
@ -391,8 +365,7 @@ void Fpga_Multicorrelator_8sc::fpga_compute_code_shift_parameters(void)
|
|||||||
|
|
||||||
void Fpga_Multicorrelator_8sc::fpga_configure_code_parameters_in_fpga(void)
|
void Fpga_Multicorrelator_8sc::fpga_configure_code_parameters_in_fpga(void)
|
||||||
{
|
{
|
||||||
int32_t i;
|
for (uint32_t i = 0; i < d_n_correlators; i++)
|
||||||
for (i = 0; i < d_n_correlators; i++)
|
|
||||||
{
|
{
|
||||||
d_map_base[INITIAL_INDEX_REG_BASE_ADDR + i] = d_initial_index[i];
|
d_map_base[INITIAL_INDEX_REG_BASE_ADDR + i] = d_initial_index[i];
|
||||||
d_map_base[INITIAL_INTERP_COUNTER_REG_BASE_ADDR + i] = d_initial_interp_counter[i];
|
d_map_base[INITIAL_INTERP_COUNTER_REG_BASE_ADDR + i] = d_initial_interp_counter[i];
|
||||||
@ -402,8 +375,6 @@ void Fpga_Multicorrelator_8sc::fpga_configure_code_parameters_in_fpga(void)
|
|||||||
d_map_base[INITIAL_INDEX_REG_BASE_ADDR + d_n_correlators] = d_initial_index[d_n_correlators];
|
d_map_base[INITIAL_INDEX_REG_BASE_ADDR + d_n_correlators] = d_initial_index[d_n_correlators];
|
||||||
d_map_base[INITIAL_INTERP_COUNTER_REG_BASE_ADDR + d_n_correlators] = d_initial_interp_counter[d_n_correlators];
|
d_map_base[INITIAL_INTERP_COUNTER_REG_BASE_ADDR + d_n_correlators] = d_initial_interp_counter[d_n_correlators];
|
||||||
}
|
}
|
||||||
|
|
||||||
//d_map_base[CODE_LENGTH_MINUS_1_REG_ADDR] = (d_code_length_samples)-1; // number of samples - 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -461,9 +432,8 @@ void Fpga_Multicorrelator_8sc::read_tracking_gps_results(void)
|
|||||||
{
|
{
|
||||||
int32_t readval_real;
|
int32_t readval_real;
|
||||||
int32_t readval_imag;
|
int32_t readval_imag;
|
||||||
int32_t k;
|
|
||||||
|
|
||||||
for (k = 0; k < d_n_correlators; k++)
|
for (uint32_t k = 0; k < d_n_correlators; k++)
|
||||||
{
|
{
|
||||||
readval_real = d_map_base[RESULT_REG_REAL_BASE_ADDR + k];
|
readval_real = d_map_base[RESULT_REG_REAL_BASE_ADDR + k];
|
||||||
readval_imag = d_map_base[RESULT_REG_IMAG_BASE_ADDR + k];
|
readval_imag = d_map_base[RESULT_REG_IMAG_BASE_ADDR + k];
|
||||||
|
@ -75,7 +75,6 @@ public:
|
|||||||
uint32_t device_base, int32_t *ca_codes, int32_t *data_codes, uint32_t code_length_chips, bool track_pilot, uint32_t multicorr_type, uint32_t code_samples_per_chip);
|
uint32_t device_base, int32_t *ca_codes, int32_t *data_codes, uint32_t code_length_chips, bool track_pilot, uint32_t multicorr_type, uint32_t code_samples_per_chip);
|
||||||
~Fpga_Multicorrelator_8sc();
|
~Fpga_Multicorrelator_8sc();
|
||||||
void set_output_vectors(gr_complex *corr_out, gr_complex *Prompt_Data);
|
void set_output_vectors(gr_complex *corr_out, gr_complex *Prompt_Data);
|
||||||
//void fpga_compute_signal_parameters_in_fpga(void);
|
|
||||||
void set_local_code_and_taps(
|
void set_local_code_and_taps(
|
||||||
float *shifts_chips, float *prompt_data_shift, int32_t PRN);
|
float *shifts_chips, float *prompt_data_shift, int32_t PRN);
|
||||||
void update_local_code();
|
void update_local_code();
|
||||||
|
Loading…
Reference in New Issue
Block a user