diff --git a/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition_fpga.cc b/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition_fpga.cc
index 94558ef76..9f2b53e59 100644
--- a/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition_fpga.cc
+++ b/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition_fpga.cc
@@ -28,7 +28,7 @@
* along with GNSS-SDR. If not, see .
*
* -------------------------------------------------------------------------
- */
+ */
#include "galileo_e1_pcps_ambiguous_acquisition_fpga.h"
#include "Galileo_E1.h"
@@ -62,13 +62,13 @@ GalileoE1PcpsAmbiguousAcquisitionFpga::GalileoE1PcpsAmbiguousAcquisitionFpga(
// item_type_ = configuration_->property(role + ".item_type", default_item_type);
- int64_t fs_in_deprecated = configuration_->property("GNSS-SDR.internal_fs_hz", 4000000);
- int64_t fs_in = configuration_->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated);
+ int64_t fs_in_deprecated = configuration_->property("GNSS-SDR.internal_fs_hz", 4000000);
+ int64_t fs_in = configuration_->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated);
float downsampling_factor = configuration_->property(role + ".downsampling_factor", 4.0);
acq_parameters.downsampling_factor = downsampling_factor;
- fs_in = fs_in/downsampling_factor;
+ fs_in = fs_in / downsampling_factor;
acq_parameters.fs_in = fs_in;
@@ -85,7 +85,7 @@ GalileoE1PcpsAmbiguousAcquisitionFpga::GalileoE1PcpsAmbiguousAcquisitionFpga(
acq_parameters.code_length = code_length;
// The FPGA can only use FFT lengths that are a power of two.
- float nbits = ceilf(log2f((float)code_length*2));
+ float nbits = ceilf(log2f((float)code_length * 2));
uint32_t nsamples_total = pow(2, nbits);
uint32_t select_queue_Fpga = configuration_->property(role + ".select_queue_Fpga", 0);
@@ -107,58 +107,56 @@ GalileoE1PcpsAmbiguousAcquisitionFpga::GalileoE1PcpsAmbiguousAcquisitionFpga(
for (uint32_t PRN = 1; PRN <= GALILEO_E1_NUMBER_OF_CODES; PRN++)
{
+ bool cboc = false; // cboc is set to 0 when using the FPGA
- bool cboc = false; // cboc is set to 0 when using the FPGA
+ if (acquire_pilot_ == true)
+ {
+ //set local signal generator to Galileo E1 pilot component (1C)
+ char pilot_signal[3] = "1C";
+ galileo_e1_code_gen_complex_sampled(code, pilot_signal,
+ cboc, PRN, fs_in, 0, false);
+ }
+ else
+ {
+ char data_signal[3] = "1B";
+ galileo_e1_code_gen_complex_sampled(code, data_signal,
+ cboc, PRN, fs_in, 0, false);
+ }
- if (acquire_pilot_ == true)
- {
- //set local signal generator to Galileo E1 pilot component (1C)
- char pilot_signal[3] = "1C";
- galileo_e1_code_gen_complex_sampled(code, pilot_signal,
- cboc, PRN, fs_in, 0, false);
- }
- else
- {
- char data_signal[3] = "1B";
- galileo_e1_code_gen_complex_sampled(code, data_signal,
- cboc, PRN, fs_in, 0, false);
- }
-
- for (uint32_t s = code_length; s < 2*code_length; s++)
- {
- code[s] = code[s - code_length];
- }
+ for (uint32_t s = code_length; s < 2 * code_length; s++)
+ {
+ code[s] = code[s - code_length];
+ }
- // fill in zero padding
- for (uint32_t s = 2*code_length; s < nsamples_total; s++)
- {
- code[s] = std::complex(static_cast(0,0));
- }
+ // fill in zero padding
+ for (uint32_t s = 2 * code_length; s < nsamples_total; s++)
+ {
+ code[s] = std::complex(static_cast(0, 0));
+ }
- memcpy(fft_if->get_inbuf(), code, sizeof(gr_complex) * nsamples_total); // copy to FFT buffer
- fft_if->execute(); // Run the FFT of local code
- volk_32fc_conjugate_32fc(fft_codes_padded, fft_if->get_outbuf(), nsamples_total); // conjugate values
-
- // normalize the code
- max = 0; // initialize maximum value
- for (uint32_t i = 0; i < nsamples_total; i++) // search for maxima
- {
- if (std::abs(fft_codes_padded[i].real()) > max)
- {
- max = std::abs(fft_codes_padded[i].real());
- }
- if (std::abs(fft_codes_padded[i].imag()) > max)
- {
- max = std::abs(fft_codes_padded[i].imag());
- }
- }
- for (uint32_t i = 0; i < nsamples_total; i++) // map the FFT to the dynamic range of the fixed point values an copy to buffer containing all FFTs
- {
- d_all_fft_codes_[i + nsamples_total * (PRN - 1)] = lv_16sc_t(static_cast(floor(fft_codes_padded[i].real() * (pow(2, 9) - 1) / max)),
- static_cast(floor(fft_codes_padded[i].imag() * (pow(2, 9) - 1) / max)));
- }
+ memcpy(fft_if->get_inbuf(), code, sizeof(gr_complex) * nsamples_total); // copy to FFT buffer
+ fft_if->execute(); // Run the FFT of local code
+ volk_32fc_conjugate_32fc(fft_codes_padded, fft_if->get_outbuf(), nsamples_total); // conjugate values
+ // normalize the code
+ max = 0; // initialize maximum value
+ for (uint32_t i = 0; i < nsamples_total; i++) // search for maxima
+ {
+ if (std::abs(fft_codes_padded[i].real()) > max)
+ {
+ max = std::abs(fft_codes_padded[i].real());
+ }
+ if (std::abs(fft_codes_padded[i].imag()) > max)
+ {
+ max = std::abs(fft_codes_padded[i].imag());
+ }
+ }
+ for (uint32_t i = 0; i < nsamples_total; i++) // map the FFT to the dynamic range of the fixed point values an copy to buffer containing all FFTs
+ {
+ d_all_fft_codes_[i + nsamples_total * (PRN - 1)] = lv_16sc_t(static_cast(floor(fft_codes_padded[i].real() * (pow(2, 9) - 1) / max)),
+ static_cast(floor(fft_codes_padded[i].imag() * (pow(2, 9) - 1) / max)));
+ }
}
acq_parameters.all_fft_codes = d_all_fft_codes_;
@@ -188,8 +186,8 @@ GalileoE1PcpsAmbiguousAcquisitionFpga::~GalileoE1PcpsAmbiguousAcquisitionFpga()
void GalileoE1PcpsAmbiguousAcquisitionFpga::stop_acquisition()
{
- // this command causes the SW to reset the HW.
- acquisition_fpga_->reset_acquisition();
+ // this command causes the SW to reset the HW.
+ acquisition_fpga_->reset_acquisition();
}
diff --git a/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition_fpga.h b/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition_fpga.h
index 550c6f159..428f13210 100644
--- a/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition_fpga.h
+++ b/src/algorithms/acquisition/adapters/galileo_e1_pcps_ambiguous_acquisition_fpga.h
@@ -28,7 +28,7 @@
* along with GNSS-SDR. If not, see .
*
* -------------------------------------------------------------------------
- */
+ */
#ifndef GNSS_SDR_GALILEO_E1_PCPS_AMBIGUOUS_ACQUISITION_FPGA_H_
#define GNSS_SDR_GALILEO_E1_PCPS_AMBIGUOUS_ACQUISITION_FPGA_H_
@@ -135,10 +135,10 @@ public:
*/
void set_state(int state) override;
- /*!
+ /*!
* \brief Stop running acquisition
*/
- void stop_acquisition() override;
+ void stop_acquisition() override;
void set_resampler_latency(uint32_t latency_samples __attribute__((unused))) override{};
diff --git a/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition_fpga.cc b/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition_fpga.cc
index 15a11df57..69520f1a9 100644
--- a/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition_fpga.cc
+++ b/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition_fpga.cc
@@ -27,7 +27,7 @@
* along with GNSS-SDR. If not, see .
*
* -------------------------------------------------------------------------
- */
+ */
#include "galileo_e5a_pcps_acquisition_fpga.h"
#include "Galileo_E5a.h"
@@ -55,12 +55,12 @@ GalileoE5aPcpsAcquisitionFpga::GalileoE5aPcpsAcquisitionFpga(ConfigurationInterf
DLOG(INFO) << "Role " << role;
- int64_t fs_in_deprecated = configuration_->property("GNSS-SDR.internal_fs_hz", 32000000);
- int64_t fs_in = configuration_->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated);
+ int64_t fs_in_deprecated = configuration_->property("GNSS-SDR.internal_fs_hz", 32000000);
+ int64_t fs_in = configuration_->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated);
float downsampling_factor = configuration_->property(role + ".downsampling_factor", 1.0);
acq_parameters.downsampling_factor = downsampling_factor;
- fs_in = fs_in/downsampling_factor;
+ fs_in = fs_in / downsampling_factor;
acq_parameters.fs_in = fs_in;
@@ -82,7 +82,7 @@ GalileoE5aPcpsAcquisitionFpga::GalileoE5aPcpsAcquisitionFpga(ConfigurationInterf
acq_parameters.code_length = code_length;
// The FPGA can only use FFT lengths that are a power of two.
- float nbits = ceilf(log2f((float)code_length*2));
+ float nbits = ceilf(log2f((float)code_length * 2));
uint32_t nsamples_total = pow(2, nbits);
uint32_t select_queue_Fpga = configuration_->property(role + ".select_queue_Fpga", 1);
acq_parameters.select_queue_Fpga = select_queue_Fpga;
@@ -122,13 +122,13 @@ GalileoE5aPcpsAcquisitionFpga::GalileoE5aPcpsAcquisitionFpga(ConfigurationInterf
galileo_e5_a_code_gen_complex_sampled(code, signal_, PRN, fs_in, 0);
- for (uint32_t s = code_length; s < 2*code_length; s++)
+ for (uint32_t s = code_length; s < 2 * code_length; s++)
{
code[s] = code[s - code_length];
}
// fill in zero padding
- for (uint32_t s = 2*code_length; s < nsamples_total; s++)
+ for (uint32_t s = 2 * code_length; s < nsamples_total; s++)
{
code[s] = std::complex(0.0, 0.0);
}
@@ -137,7 +137,7 @@ GalileoE5aPcpsAcquisitionFpga::GalileoE5aPcpsAcquisitionFpga(ConfigurationInterf
fft_if->execute(); // Run the FFT of local code
volk_32fc_conjugate_32fc(fft_codes_padded, fft_if->get_outbuf(), nsamples_total); // conjugate values
- max = 0; // initialize maximum value
+ max = 0; // initialize maximum value
for (uint32_t i = 0; i < nsamples_total; i++) // search for maxima
{
if (std::abs(fft_codes_padded[i].real()) > max)
@@ -173,7 +173,6 @@ GalileoE5aPcpsAcquisitionFpga::GalileoE5aPcpsAcquisitionFpga(ConfigurationInterf
delete[] code;
delete fft_if;
delete[] fft_codes_padded;
-
}
@@ -185,8 +184,8 @@ GalileoE5aPcpsAcquisitionFpga::~GalileoE5aPcpsAcquisitionFpga()
void GalileoE5aPcpsAcquisitionFpga::stop_acquisition()
{
- // this command causes the SW to reset the HW.
- acquisition_fpga_->reset_acquisition();
+ // this command causes the SW to reset the HW.
+ acquisition_fpga_->reset_acquisition();
}
@@ -255,13 +254,13 @@ void GalileoE5aPcpsAcquisitionFpga::set_state(int state)
void GalileoE5aPcpsAcquisitionFpga::connect(gr::top_block_sptr top_block)
{
- // nothing to connect
+ // nothing to connect
}
void GalileoE5aPcpsAcquisitionFpga::disconnect(gr::top_block_sptr top_block)
{
- // nothing to connect
+ // nothing to connect
}
diff --git a/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition_fpga.h b/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition_fpga.h
index d53d62076..8e8a08972 100644
--- a/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition_fpga.h
+++ b/src/algorithms/acquisition/adapters/galileo_e5a_pcps_acquisition_fpga.h
@@ -145,7 +145,6 @@ public:
void set_resampler_latency(uint32_t latency_samples __attribute__((unused))) override{};
private:
-
ConfigurationInterface* configuration_;
pcps_acquisition_fpga_sptr acquisition_fpga_;
diff --git a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition_fpga.cc b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition_fpga.cc
index 365270199..dabf94a15 100644
--- a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition_fpga.cc
+++ b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition_fpga.cc
@@ -32,7 +32,7 @@
* along with GNSS-SDR. If not, see .
*
* -------------------------------------------------------------------------
- */
+ */
#include "gps_l1_ca_pcps_acquisition_fpga.h"
#include "GPS_L1_CA.h"
@@ -63,13 +63,13 @@ GpsL1CaPcpsAcquisitionFpga::GpsL1CaPcpsAcquisitionFpga(
DLOG(INFO) << "role " << role;
- int64_t fs_in_deprecated = configuration_->property("GNSS-SDR.internal_fs_hz", 2048000);
- int64_t fs_in = configuration_->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated);
+ int64_t fs_in_deprecated = configuration_->property("GNSS-SDR.internal_fs_hz", 2048000);
+ int64_t fs_in = configuration_->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated);
float downsampling_factor = configuration_->property(role + ".downsampling_factor", 4.0);
acq_parameters.downsampling_factor = downsampling_factor;
- fs_in = fs_in/downsampling_factor;
+ fs_in = fs_in / downsampling_factor;
acq_parameters.fs_in = fs_in;
doppler_max_ = configuration_->property(role + ".doppler_max", 5000);
@@ -80,7 +80,7 @@ GpsL1CaPcpsAcquisitionFpga::GpsL1CaPcpsAcquisitionFpga(
auto code_length = static_cast(std::round(static_cast(fs_in) / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS)));
acq_parameters.code_length = code_length;
// The FPGA can only use FFT lengths that are a power of two.
- float nbits = ceilf(log2f((float)code_length*2));
+ float nbits = ceilf(log2f((float)code_length * 2));
uint32_t nsamples_total = pow(2, nbits);
uint32_t select_queue_Fpga = configuration_->property(role + ".select_queue_Fpga", 0);
acq_parameters.select_queue_Fpga = select_queue_Fpga;
@@ -102,23 +102,23 @@ GpsL1CaPcpsAcquisitionFpga::GpsL1CaPcpsAcquisitionFpga(
for (uint32_t PRN = 1; PRN <= NUM_PRNs; PRN++)
{
gps_l1_ca_code_gen_complex_sampled(code, PRN, fs_in, 0); // generate PRN code
-
- for (uint32_t s = code_length; s < 2*code_length; s++)
+
+ for (uint32_t s = code_length; s < 2 * code_length; s++)
{
code[s] = code[s - code_length];
}
// fill in zero padding
- for (uint32_t s = 2*code_length; s < nsamples_total; s++)
+ for (uint32_t s = 2 * code_length; s < nsamples_total; s++)
{
code[s] = std::complex(0.0, 0.0);
}
- memcpy(fft_if->get_inbuf(), code, sizeof(gr_complex) * nsamples_total); // copy to FFT buffer
+ memcpy(fft_if->get_inbuf(), code, sizeof(gr_complex) * nsamples_total); // copy to FFT buffer
fft_if->execute(); // Run the FFT of local code
volk_32fc_conjugate_32fc(fft_codes_padded, fft_if->get_outbuf(), nsamples_total); // conjugate values
- max = 0; // initialize maximum value
+ max = 0; // initialize maximum value
for (uint32_t i = 0; i < nsamples_total; i++) // search for maxima
{
if (std::abs(fft_codes_padded[i].real()) > max)
@@ -135,7 +135,6 @@ GpsL1CaPcpsAcquisitionFpga::GpsL1CaPcpsAcquisitionFpga(
d_all_fft_codes_[i + nsamples_total * (PRN - 1)] = lv_16sc_t(static_cast(floor(fft_codes_padded[i].real() * (pow(2, 9) - 1) / max)),
static_cast(floor(fft_codes_padded[i].imag() * (pow(2, 9) - 1) / max)));
}
-
}
//acq_parameters
@@ -155,7 +154,6 @@ GpsL1CaPcpsAcquisitionFpga::GpsL1CaPcpsAcquisitionFpga(
delete[] code;
delete fft_if;
delete[] fft_codes_padded;
-
}
@@ -167,8 +165,8 @@ GpsL1CaPcpsAcquisitionFpga::~GpsL1CaPcpsAcquisitionFpga()
void GpsL1CaPcpsAcquisitionFpga::stop_acquisition()
{
- // this command causes the SW to reset the HW.
- acquisition_fpga_->reset_acquisition();
+ // this command causes the SW to reset the HW.
+ acquisition_fpga_->reset_acquisition();
}
@@ -227,7 +225,7 @@ void GpsL1CaPcpsAcquisitionFpga::set_local_code()
void GpsL1CaPcpsAcquisitionFpga::reset()
{
- // this function starts the acquisition process
+ // this function starts the acquisition process
acquisition_fpga_->set_active(true);
}
diff --git a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition_fpga.h b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition_fpga.h
index 93e2456b9..7d91f04d0 100644
--- a/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition_fpga.h
+++ b/src/algorithms/acquisition/adapters/gps_l1_ca_pcps_acquisition_fpga.h
@@ -32,7 +32,7 @@
* along with GNSS-SDR. If not, see .
*
* -------------------------------------------------------------------------
- */
+ */
#ifndef GNSS_SDR_GPS_L1_CA_PCPS_ACQUISITION_FPGA_H_
#define GNSS_SDR_GPS_L1_CA_PCPS_ACQUISITION_FPGA_H_
diff --git a/src/algorithms/acquisition/adapters/gps_l5i_pcps_acquisition_fpga.cc b/src/algorithms/acquisition/adapters/gps_l5i_pcps_acquisition_fpga.cc
index be7cb07fc..04e30c63c 100644
--- a/src/algorithms/acquisition/adapters/gps_l5i_pcps_acquisition_fpga.cc
+++ b/src/algorithms/acquisition/adapters/gps_l5i_pcps_acquisition_fpga.cc
@@ -59,13 +59,13 @@ GpsL5iPcpsAcquisitionFpga::GpsL5iPcpsAcquisitionFpga(
LOG(INFO) << "role " << role;
- int64_t fs_in_deprecated = configuration_->property("GNSS-SDR.internal_fs_hz", 2048000);
- int64_t fs_in = configuration_->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated);
+ int64_t fs_in_deprecated = configuration_->property("GNSS-SDR.internal_fs_hz", 2048000);
+ int64_t fs_in = configuration_->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated);
float downsampling_factor = configuration_->property(role + ".downsampling_factor", 1.0);
acq_parameters.downsampling_factor = downsampling_factor;
- fs_in = fs_in/downsampling_factor;
+ fs_in = fs_in / downsampling_factor;
acq_parameters.fs_in = fs_in;
@@ -79,14 +79,14 @@ GpsL5iPcpsAcquisitionFpga::GpsL5iPcpsAcquisitionFpga(
auto code_length = static_cast(std::round(static_cast(fs_in) / (GPS_L5I_CODE_RATE_HZ / static_cast(GPS_L5I_CODE_LENGTH_CHIPS))));
acq_parameters.code_length = code_length;
// The FPGA can only use FFT lengths that are a power of two.
- float nbits = ceilf(log2f((float)code_length*2));
+ float nbits = ceilf(log2f((float)code_length * 2));
uint32_t nsamples_total = pow(2, nbits);
uint32_t select_queue_Fpga = configuration_->property(role + ".select_queue_Fpga", 1);
acq_parameters.select_queue_Fpga = select_queue_Fpga;
std::string default_device_name = "/dev/uio0";
std::string device_name = configuration_->property(role + ".devicename", default_device_name);
acq_parameters.device_name = device_name;
- acq_parameters.samples_per_ms = nsamples_total/sampled_ms;
+ acq_parameters.samples_per_ms = nsamples_total / sampled_ms;
acq_parameters.samples_per_code = nsamples_total;
acq_parameters.excludelimit = static_cast(ceil((1.0 / GPS_L5I_CODE_RATE_HZ) * static_cast(acq_parameters.fs_in)));
@@ -100,41 +100,41 @@ GpsL5iPcpsAcquisitionFpga::GpsL5iPcpsAcquisitionFpga(
float max; // temporary maxima search
for (uint32_t PRN = 1; PRN <= NUM_PRNs; PRN++)
- {
- gps_l5i_code_gen_complex_sampled(code, PRN, fs_in);
+ {
+ gps_l5i_code_gen_complex_sampled(code, PRN, fs_in);
- for (uint32_t s = code_length; s < 2*code_length; s++)
- {
- code[s] = code[s - code_length];
- }
+ for (uint32_t s = code_length; s < 2 * code_length; s++)
+ {
+ code[s] = code[s - code_length];
+ }
- for (uint32_t s = 2*code_length; s < nsamples_total; s++)
- {
- // fill in zero padding
- code[s] = std::complex(static_cast(0,0));
- }
- memcpy(fft_if->get_inbuf(), code, sizeof(gr_complex) * nsamples_total); // copy to FFT buffer
- fft_if->execute(); // Run the FFT of local code
- volk_32fc_conjugate_32fc(fft_codes_padded, fft_if->get_outbuf(), nsamples_total); // conjugate values
+ for (uint32_t s = 2 * code_length; s < nsamples_total; s++)
+ {
+ // fill in zero padding
+ code[s] = std::complex(static_cast(0, 0));
+ }
+ memcpy(fft_if->get_inbuf(), code, sizeof(gr_complex) * nsamples_total); // copy to FFT buffer
+ fft_if->execute(); // Run the FFT of local code
+ volk_32fc_conjugate_32fc(fft_codes_padded, fft_if->get_outbuf(), nsamples_total); // conjugate values
- max = 0; // initialize maximum value
- for (uint32_t i = 0; i < nsamples_total; i++) // search for maxima
- {
- if (std::abs(fft_codes_padded[i].real()) > max)
- {
- max = std::abs(fft_codes_padded[i].real());
- }
- if (std::abs(fft_codes_padded[i].imag()) > max)
- {
- max = std::abs(fft_codes_padded[i].imag());
- }
- }
- for (uint32_t i = 0; i < nsamples_total; i++) // map the FFT to the dynamic range of the fixed point values an copy to buffer containing all FFTs
- {
- d_all_fft_codes_[i + nsamples_total * (PRN - 1)] = lv_16sc_t(static_cast(floor(fft_codes_padded[i].real() * (pow(2, 9) - 1) / max)),
- static_cast(floor(fft_codes_padded[i].imag() * (pow(2, 9) - 1) / max)));
- }
- }
+ max = 0; // initialize maximum value
+ for (uint32_t i = 0; i < nsamples_total; i++) // search for maxima
+ {
+ if (std::abs(fft_codes_padded[i].real()) > max)
+ {
+ max = std::abs(fft_codes_padded[i].real());
+ }
+ if (std::abs(fft_codes_padded[i].imag()) > max)
+ {
+ max = std::abs(fft_codes_padded[i].imag());
+ }
+ }
+ for (uint32_t i = 0; i < nsamples_total; i++) // map the FFT to the dynamic range of the fixed point values an copy to buffer containing all FFTs
+ {
+ d_all_fft_codes_[i + nsamples_total * (PRN - 1)] = lv_16sc_t(static_cast(floor(fft_codes_padded[i].real() * (pow(2, 9) - 1) / max)),
+ static_cast(floor(fft_codes_padded[i].imag() * (pow(2, 9) - 1) / max)));
+ }
+ }
//acq_parameters
acq_parameters.all_fft_codes = d_all_fft_codes_;
@@ -153,7 +153,6 @@ GpsL5iPcpsAcquisitionFpga::GpsL5iPcpsAcquisitionFpga(
delete[] code;
delete fft_if;
delete[] fft_codes_padded;
-
}
@@ -166,8 +165,8 @@ GpsL5iPcpsAcquisitionFpga::~GpsL5iPcpsAcquisitionFpga()
void GpsL5iPcpsAcquisitionFpga::stop_acquisition()
{
- // this command causes the SW to reset the HW.
- acquisition_fpga_->reset_acquisition();
+ // this command causes the SW to reset the HW.
+ acquisition_fpga_->reset_acquisition();
}
diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fpga.cc b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fpga.cc
index 091092c89..8aed78c5a 100644
--- a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fpga.cc
+++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fpga.cc
@@ -32,7 +32,7 @@
* along with GNSS-SDR. If not, see .
*
* -------------------------------------------------------------------------
- */
+ */
#include "pcps_acquisition_fpga.h"
@@ -77,7 +77,6 @@ pcps_acquisition_fpga::pcps_acquisition_fpga(pcpsconf_fpga_t conf_) : gr::block(
acquisition_fpga = std::make_shared(acq_parameters.device_name, acq_parameters.code_length, acq_parameters.doppler_max, d_fft_size,
acq_parameters.fs_in, acq_parameters.sampled_ms, acq_parameters.select_queue_Fpga, acq_parameters.all_fft_codes, acq_parameters.excludelimit);
-
}
@@ -105,9 +104,9 @@ void pcps_acquisition_fpga::init()
d_mag = 0.0;
d_input_power = 0.0;
- d_num_doppler_bins = static_cast(std::ceil(static_cast(static_cast(acq_parameters.doppler_max) - static_cast(-acq_parameters.doppler_max)) / static_cast(d_doppler_step))) + 1;
+ d_num_doppler_bins = static_cast(std::ceil(static_cast(static_cast(acq_parameters.doppler_max) - static_cast(-acq_parameters.doppler_max)) / static_cast(d_doppler_step))) + 1;
- acquisition_fpga->init();
+ acquisition_fpga->init();
}
@@ -171,7 +170,6 @@ void pcps_acquisition_fpga::send_negative_acquisition()
void pcps_acquisition_fpga::set_active(bool active)
{
-
d_active = active;
// initialize acquisition algorithm
@@ -203,47 +201,44 @@ void pcps_acquisition_fpga::set_active(bool active)
acquisition_fpga->read_acquisition_results(&indext, &firstpeak, &secondpeak, &initial_sample, &d_input_power, &d_doppler_index, &total_block_exp);
if (total_block_exp > d_total_block_exp)
- {
- // if the attenuation factor of the FPGA FFT-IFFT is smaller than the reference attenuation factor then we need to update the reference attenuation factor
- std::cout << "changing blk exp..... d_total_block_exp = " << d_total_block_exp << " total_block_exp = " << total_block_exp << " chan = " << d_channel << std::endl;
- d_total_block_exp = total_block_exp;
+ {
+ // if the attenuation factor of the FPGA FFT-IFFT is smaller than the reference attenuation factor then we need to update the reference attenuation factor
+ std::cout << "changing blk exp..... d_total_block_exp = " << d_total_block_exp << " total_block_exp = " << total_block_exp << " chan = " << d_channel << std::endl;
+ d_total_block_exp = total_block_exp;
+ }
- }
+ doppler = -static_cast(acq_parameters.doppler_max) + d_doppler_step * (d_doppler_index - 1);
- doppler = -static_cast(acq_parameters.doppler_max) + d_doppler_step * (d_doppler_index - 1);
-
- if (secondpeak > 0)
- {
- d_test_statistics = firstpeak/secondpeak;
- }
- else
- {
- d_test_statistics = 0.0;
- }
+ if (secondpeak > 0)
+ {
+ d_test_statistics = firstpeak / secondpeak;
+ }
+ else
+ {
+ d_test_statistics = 0.0;
+ }
d_gnss_synchro->Acq_doppler_hz = static_cast(doppler);
d_sample_counter = initial_sample;
if (d_select_queue_Fpga == 0)
- {
- if (d_downsampling_factor > 1)
- {
-
- d_gnss_synchro->Acq_delay_samples = static_cast(d_downsampling_factor*(indext));
- d_gnss_synchro->Acq_samplestamp_samples = d_downsampling_factor*d_sample_counter - 44; //33; //41; //+ 81*0.5; // delay due to the downsampling filter in the acquisition
-
- }
- else
- {
- d_gnss_synchro->Acq_delay_samples = static_cast(indext);
- d_gnss_synchro->Acq_samplestamp_samples = d_sample_counter; // delay due to the downsampling filter in the acquisition
+ {
+ if (d_downsampling_factor > 1)
+ {
+ d_gnss_synchro->Acq_delay_samples = static_cast(d_downsampling_factor * (indext));
+ d_gnss_synchro->Acq_samplestamp_samples = d_downsampling_factor * d_sample_counter - 44; //33; //41; //+ 81*0.5; // delay due to the downsampling filter in the acquisition
+ }
+ else
+ {
+ d_gnss_synchro->Acq_delay_samples = static_cast(indext);
+ d_gnss_synchro->Acq_samplestamp_samples = d_sample_counter; // delay due to the downsampling filter in the acquisition
+ }
}
- }
else
- {
- d_gnss_synchro->Acq_delay_samples = static_cast(indext);
- d_gnss_synchro->Acq_samplestamp_samples = d_sample_counter; // delay due to the downsampling filter in the acquisition
- }
+ {
+ d_gnss_synchro->Acq_delay_samples = static_cast(indext);
+ d_gnss_synchro->Acq_samplestamp_samples = d_sample_counter; // delay due to the downsampling filter in the acquisition
+ }
if (d_test_statistics > d_threshold)
{
@@ -270,14 +265,11 @@ int pcps_acquisition_fpga::general_work(int noutput_items __attribute__((unused)
void pcps_acquisition_fpga::reset_acquisition(void)
{
- // this function triggers a HW reset of the FPGA PL.
- acquisition_fpga->reset_acquisition();
+ // this function triggers a HW reset of the FPGA PL.
+ acquisition_fpga->reset_acquisition();
}
-void pcps_acquisition_fpga::read_fpga_total_scale_factor(uint32_t *total_scale_factor, uint32_t *fw_scale_factor)
+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);
+ acquisition_fpga->read_fpga_total_scale_factor(total_scale_factor, fw_scale_factor);
}
-
-
-
diff --git a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fpga.h b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fpga.h
index a08cd5363..bdb83a257 100644
--- a/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fpga.h
+++ b/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fpga.h
@@ -39,7 +39,7 @@
* along with GNSS-SDR. If not, see .
*
* -------------------------------------------------------------------------
- */
+ */
#ifndef GNSS_SDR_PCPS_ACQUISITION_FPGA_H_
#define GNSS_SDR_PCPS_ACQUISITION_FPGA_H_
@@ -216,7 +216,7 @@ public:
/*!
* \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);
+ void read_fpga_total_scale_factor(uint32_t* total_scale_factor, uint32_t* fw_scale_factor);
};
#endif /* GNSS_SDR_PCPS_ACQUISITION_FPGA_H_*/
diff --git a/src/algorithms/acquisition/libs/fpga_acquisition.cc b/src/algorithms/acquisition/libs/fpga_acquisition.cc
index 9a14f779a..979fd47ea 100644
--- a/src/algorithms/acquisition/libs/fpga_acquisition.cc
+++ b/src/algorithms/acquisition/libs/fpga_acquisition.cc
@@ -31,7 +31,7 @@
* along with GNSS-SDR. If not, see .
*
* -------------------------------------------------------------------------
- */
+ */
#include "fpga_acquisition.h"
#include "GPS_L1_CA.h"
@@ -43,7 +43,6 @@
#include
-
// FPGA register parameters
#define PAGE_SIZE 0x10000 // default page size for the multicorrelator memory map
#define MAX_PHASE_STEP_RAD 0.999999999534339 // 1 - pow(2,-31);
@@ -58,10 +57,10 @@
#define SELECT_MSB 0XFF00 // value to select the most significant byte
#define SELECT_16_BITS 0xFFFF // value to select 16 bits
#define SHL_8_BITS 256 // value used to shift a value 8 bits to the left
-#define SELECT_LSBits 0x000003FF // Select the 10 LSbits out of a 20-bit word
-#define SELECT_MSBbits 0x000FFC00 // Select the 10 MSbits out of a 20-bit word
-#define SELECT_ALL_CODE_BITS 0x000FFFFF // Select a 20 bit word
-#define SHL_CODE_BITS 1024 // shift left by 10 bits
+#define SELECT_LSBits 0x000003FF // Select the 10 LSbits out of a 20-bit word
+#define SELECT_MSBbits 0x000FFC00 // Select the 10 MSbits out of a 20-bit word
+#define SELECT_ALL_CODE_BITS 0x000FFFFF // Select a 20 bit word
+#define SHL_CODE_BITS 1024 // shift left by 10 bits
bool fpga_acquisition::init()
@@ -73,7 +72,7 @@ bool fpga_acquisition::init()
bool fpga_acquisition::set_local_code(uint32_t PRN)
{
// select the code with the chosen PRN
- d_PRN = PRN;
+ d_PRN = PRN;
return true;
}
@@ -82,7 +81,6 @@ void fpga_acquisition::write_local_code()
{
fpga_acquisition::fpga_configure_acquisition_local_code(
&d_all_fft_codes[d_nsamples_total * (d_PRN - 1)]);
-
}
fpga_acquisition::fpga_acquisition(std::string device_name,
@@ -91,7 +89,7 @@ fpga_acquisition::fpga_acquisition(std::string device_name,
uint32_t nsamples_total, int64_t fs_in,
uint32_t sampled_ms, uint32_t select_queue,
lv_16sc_t *all_fft_codes,
- uint32_t excludelimit)
+ uint32_t excludelimit)
{
uint32_t vector_length = nsamples_total;
@@ -116,7 +114,6 @@ fpga_acquisition::fpga_acquisition(std::string device_name,
d_PRN = 0;
DLOG(INFO) << "Acquisition FPGA class created";
-
}
void fpga_acquisition::open_device()
@@ -135,12 +132,10 @@ void fpga_acquisition::open_device()
LOG(WARNING) << "Cannot map the FPGA acquisition module into user memory";
std::cout << "Acq: cannot map deviceio" << d_device_name << std::endl;
}
-
}
fpga_acquisition::~fpga_acquisition()
{
-
}
@@ -152,7 +147,6 @@ bool fpga_acquisition::free()
void fpga_acquisition::fpga_acquisition_test_register()
{
-
// sanity check : check test register
uint32_t writeval = TEST_REG_SANITY_CHECK;
uint32_t readval;
@@ -190,14 +184,12 @@ void fpga_acquisition::fpga_configure_acquisition_local_code(lv_16sc_t fft_local
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;
d_map_base[6] = fft_data;
-
}
}
void fpga_acquisition::run_acquisition(void)
{
-
// enable interrupts
int32_t reenable = 1;
int32_t disable_int = 0;
@@ -212,67 +204,63 @@ void fpga_acquisition::run_acquisition(void)
nb = read(d_fd, &irq_count, sizeof(irq_count));
if (nb != sizeof(irq_count))
{
- std::cout << "acquisition module Read failed to retrieve 4 bytes!" << std::endl;
- std::cout << "acquisition module Interrupt number " << irq_count << std::endl;
+ std::cout << "acquisition module Read failed to retrieve 4 bytes!" << std::endl;
+ std::cout << "acquisition module Interrupt number " << irq_count << std::endl;
}
write(d_fd, reinterpret_cast(&disable_int), sizeof(int32_t));
-
}
void fpga_acquisition::set_block_exp(uint32_t total_block_exp)
{
- d_map_base[11] = total_block_exp;
+ d_map_base[11] = total_block_exp;
}
void fpga_acquisition::set_doppler_sweep(uint32_t num_sweeps)
{
+ float phase_step_rad_real;
+ float phase_step_rad_int_temp;
+ int32_t phase_step_rad_int;
+ int32_t doppler = static_cast(-d_doppler_max);
+ float phase_step_rad = GPS_TWO_PI * (doppler) / static_cast(d_fs_in);
+ // The doppler step can never be outside the range -pi to +pi, otherwise there would be aliasing
+ // The FPGA expects phase_step_rad between -1 (-pi) to +1 (+pi)
+ // The FPGA also expects the phase to be negative since it produces cos(x) -j*sin(x)
+ phase_step_rad_real = phase_step_rad / (GPS_TWO_PI / 2);
- float phase_step_rad_real;
- float phase_step_rad_int_temp;
- int32_t phase_step_rad_int;
- int32_t doppler = static_cast(-d_doppler_max);
- float phase_step_rad = GPS_TWO_PI * (doppler) / static_cast(d_fs_in);
- // The doppler step can never be outside the range -pi to +pi, otherwise there would be aliasing
- // The FPGA expects phase_step_rad between -1 (-pi) to +1 (+pi)
- // The FPGA also expects the phase to be negative since it produces cos(x) -j*sin(x)
- phase_step_rad_real = phase_step_rad / (GPS_TWO_PI / 2);
-
- // avoid saturation of the fixed point representation in the fpga
- // (only the positive value can saturate due to the 2's complement representation)
- if (phase_step_rad_real >= 1.0)
- {
- phase_step_rad_real = MAX_PHASE_STEP_RAD;
- }
- phase_step_rad_int_temp = phase_step_rad_real * POW_2_2; // * 2^2
- phase_step_rad_int = static_cast(phase_step_rad_int_temp * (POW_2_29)); // * 2^29 (in total it makes x2^31 in two steps to avoid the warnings
- d_map_base[3] = phase_step_rad_int;
-
- // repeat the calculation with the doppler step
- doppler = static_cast(d_doppler_step);
- phase_step_rad = GPS_TWO_PI * (doppler) / static_cast(d_fs_in);
- phase_step_rad_real = phase_step_rad / (GPS_TWO_PI / 2);
- if (phase_step_rad_real >= 1.0)
- {
- phase_step_rad_real = MAX_PHASE_STEP_RAD;
- }
- phase_step_rad_int_temp = phase_step_rad_real * POW_2_2; // * 2^2
- phase_step_rad_int = static_cast(phase_step_rad_int_temp * (POW_2_29)); // * 2^29 (in total it makes x2^31 in two steps to avoid the warnings
- d_map_base[4] = phase_step_rad_int;
- d_map_base[5] = num_sweeps;
+ // avoid saturation of the fixed point representation in the fpga
+ // (only the positive value can saturate due to the 2's complement representation)
+ if (phase_step_rad_real >= 1.0)
+ {
+ phase_step_rad_real = MAX_PHASE_STEP_RAD;
+ }
+ phase_step_rad_int_temp = phase_step_rad_real * POW_2_2; // * 2^2
+ phase_step_rad_int = static_cast(phase_step_rad_int_temp * (POW_2_29)); // * 2^29 (in total it makes x2^31 in two steps to avoid the warnings
+ d_map_base[3] = phase_step_rad_int;
+ // repeat the calculation with the doppler step
+ doppler = static_cast(d_doppler_step);
+ phase_step_rad = GPS_TWO_PI * (doppler) / static_cast(d_fs_in);
+ phase_step_rad_real = phase_step_rad / (GPS_TWO_PI / 2);
+ if (phase_step_rad_real >= 1.0)
+ {
+ phase_step_rad_real = MAX_PHASE_STEP_RAD;
+ }
+ phase_step_rad_int_temp = phase_step_rad_real * POW_2_2; // * 2^2
+ phase_step_rad_int = static_cast(phase_step_rad_int_temp * (POW_2_29)); // * 2^29 (in total it makes x2^31 in two steps to avoid the warnings
+ d_map_base[4] = phase_step_rad_int;
+ d_map_base[5] = num_sweeps;
}
void fpga_acquisition::configure_acquisition()
{
- fpga_acquisition::open_device();
+ fpga_acquisition::open_device();
d_map_base[0] = d_select_queue;
d_map_base[1] = d_vector_length;
d_map_base[2] = d_nsamples;
d_map_base[7] = static_cast(log2(static_cast(d_vector_length))); // log2 FFTlength
d_map_base[12] = d_excludelimit;
-
}
@@ -303,7 +291,6 @@ void fpga_acquisition::set_phase_step(uint32_t doppler_index)
void fpga_acquisition::read_acquisition_results(uint32_t *max_index,
float *firstpeak, float *secondpeak, uint64_t *initial_sample, float *power_sum, uint32_t *doppler_index, uint32_t *total_blk_exp)
{
-
uint64_t initial_sample_tmp = 0;
uint32_t readval = 0;
uint64_t readval_long = 0;
@@ -313,7 +300,7 @@ void fpga_acquisition::read_acquisition_results(uint32_t *max_index,
initial_sample_tmp = readval;
readval_long = d_map_base[2];
- readval_long_shifted = readval_long << 32; // 2^32
+ readval_long_shifted = readval_long << 32; // 2^32
initial_sample_tmp = initial_sample_tmp + readval_long_shifted; // 2^32
*initial_sample = initial_sample_tmp;
@@ -335,10 +322,9 @@ void fpga_acquisition::read_acquisition_results(uint32_t *max_index,
readval = d_map_base[7]; // read doppler index -- this read releases the interrupt line
*doppler_index = readval;
- readval = d_map_base[15]; // read dummy
+ readval = d_map_base[15]; // read dummy
fpga_acquisition::close_device();
-
}
@@ -367,7 +353,7 @@ void fpga_acquisition::close_device()
void fpga_acquisition::reset_acquisition(void)
{
- fpga_acquisition::open_device();
+ fpga_acquisition::open_device();
d_map_base[8] = RESET_ACQUISITION; // writing a 2 to d_map_base[8] resets the multicorrelator
fpga_acquisition::close_device();
}
@@ -376,19 +362,17 @@ void fpga_acquisition::reset_acquisition(void)
// this function is only used for the unit tests
void fpga_acquisition::read_fpga_total_scale_factor(uint32_t *total_scale_factor, uint32_t *fw_scale_factor)
{
+ uint32_t readval = 0;
+ readval = d_map_base[8];
+ *total_scale_factor = readval;
- uint32_t readval = 0;
- readval = d_map_base[8];
- *total_scale_factor = readval;
-
- //readval = d_map_base[8];
- *fw_scale_factor = 0;
-
+ //readval = d_map_base[8];
+ *fw_scale_factor = 0;
}
void fpga_acquisition::read_result_valid(uint32_t *result_valid)
{
- uint32_t readval = 0;
- readval = d_map_base[0];
- *result_valid = readval;
+ uint32_t readval = 0;
+ readval = d_map_base[0];
+ *result_valid = readval;
}
diff --git a/src/algorithms/acquisition/libs/fpga_acquisition.h b/src/algorithms/acquisition/libs/fpga_acquisition.h
index ff599f4ff..6140e9ade 100644
--- a/src/algorithms/acquisition/libs/fpga_acquisition.h
+++ b/src/algorithms/acquisition/libs/fpga_acquisition.h
@@ -54,7 +54,7 @@ public:
uint32_t sampled_ms,
uint32_t select_queue,
lv_16sc_t *all_fft_codes,
- uint32_t excludelimit);
+ uint32_t excludelimit);
~fpga_acquisition();
bool init();
@@ -113,18 +113,17 @@ private:
lv_16sc_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_excludelimit;
- uint32_t d_nsamples_total; // number of samples including padding
- uint32_t d_nsamples; // number of samples not including padding
- uint32_t d_select_queue; // queue selection
- std::string d_device_name; // HW device name
- uint32_t d_doppler_max; // max doppler
- uint32_t d_doppler_step; // doppler step
- uint32_t d_PRN; // PRN
+ uint32_t d_nsamples_total; // number of samples including padding
+ uint32_t d_nsamples; // number of samples not including padding
+ uint32_t d_select_queue; // queue selection
+ std::string d_device_name; // HW device name
+ uint32_t d_doppler_max; // max doppler
+ uint32_t d_doppler_step; // doppler step
+ uint32_t d_PRN; // PRN
// FPGA private functions
void fpga_acquisition_test_register(void);
void fpga_configure_acquisition_local_code(lv_16sc_t fft_local_code[]);
void read_result_valid(uint32_t *result_valid);
-
};
#endif /* GNSS_SDR_FPGA_ACQUISITION_H_ */
diff --git a/src/algorithms/libs/gnss_sdr_fpga_sample_counter.cc b/src/algorithms/libs/gnss_sdr_fpga_sample_counter.cc
index 9a5427c60..51f3a6547 100644
--- a/src/algorithms/libs/gnss_sdr_fpga_sample_counter.cc
+++ b/src/algorithms/libs/gnss_sdr_fpga_sample_counter.cc
@@ -251,7 +251,7 @@ void gnss_sdr_fpga_sample_counter::close_device()
auto *aux = const_cast(map_base);
if (munmap(static_cast(aux), PAGE_SIZE) == -1)
{
- std::cout << "Failed to unmap memory uio" << std::endl;
+ std::cout << "Failed to unmap memory uio" << std::endl;
}
close(fd);
}
@@ -270,8 +270,8 @@ uint32_t gnss_sdr_fpga_sample_counter::wait_for_interrupt_and_read_counter()
nb = read(fd, &irq_count, sizeof(irq_count));
if (nb != sizeof(irq_count))
{
- std::cout << "fpga sample counter module read failed to retrieve 4 bytes!" << std::endl;
- std::cout << "fpga sample counter module interrupt number " << irq_count << std::endl;
+ std::cout << "fpga sample counter module read failed to retrieve 4 bytes!" << std::endl;
+ std::cout << "fpga sample counter module interrupt number " << irq_count << std::endl;
}
// it is a rising edge interrupt, the interrupt does not need to be acknowledged
diff --git a/src/algorithms/libs/gnss_sdr_fpga_sample_counter.h b/src/algorithms/libs/gnss_sdr_fpga_sample_counter.h
index 3ec323e6a..a11a94be5 100644
--- a/src/algorithms/libs/gnss_sdr_fpga_sample_counter.h
+++ b/src/algorithms/libs/gnss_sdr_fpga_sample_counter.h
@@ -66,9 +66,9 @@ private:
uint32_t current_days; // Receiver time in days since the beginning of the run
int32_t report_interval_ms;
bool flag_enable_send_msg;
- int32_t fd; // driver descriptor
- volatile uint32_t *map_base; // driver memory map
- std::string device_name = "/dev/uio2"; // HW device name
+ int32_t fd; // driver descriptor
+ volatile uint32_t *map_base; // driver memory map
+ std::string device_name = "/dev/uio2"; // HW device name
public:
friend gnss_sdr_fpga_sample_counter_sptr gnss_sdr_make_fpga_sample_counter(double _fs, int32_t _interval_ms);
diff --git a/src/algorithms/tracking/adapters/galileo_e5a_dll_pll_tracking_fpga.cc b/src/algorithms/tracking/adapters/galileo_e5a_dll_pll_tracking_fpga.cc
index cb054c87c..f66c967bd 100644
--- a/src/algorithms/tracking/adapters/galileo_e5a_dll_pll_tracking_fpga.cc
+++ b/src/algorithms/tracking/adapters/galileo_e5a_dll_pll_tracking_fpga.cc
@@ -55,7 +55,6 @@ GalileoE5aDllPllTrackingFpga::GalileoE5aDllPllTrackingFpga(
ConfigurationInterface *configuration, const std::string &role,
unsigned int in_streams, unsigned int out_streams) : role_(role), in_streams_(in_streams), out_streams_(out_streams)
{
-
Dll_Pll_Conf_Fpga trk_param_fpga = Dll_Pll_Conf_Fpga();
DLOG(INFO) << "role " << role;
//################# CONFIGURATION PARAMETERS ########################
@@ -138,15 +137,6 @@ GalileoE5aDllPllTrackingFpga::GalileoE5aDllPllTrackingFpga(
auto *aux_code = static_cast(volk_gnsssdr_malloc(sizeof(gr_complex) * code_length_chips * code_samples_per_chip, volk_gnsssdr_get_alignment()));
- float *tracking_code;
- float *data_code;
-
- if (trk_param_fpga.track_pilot)
- {
- data_code = static_cast(volk_gnsssdr_malloc(code_samples_per_chip * code_length_chips * sizeof(float), volk_gnsssdr_get_alignment()));
- }
- tracking_code = static_cast(volk_gnsssdr_malloc(code_samples_per_chip * code_length_chips * sizeof(float), volk_gnsssdr_get_alignment()));
-
d_ca_codes = static_cast(volk_gnsssdr_malloc(static_cast(code_length_chips) * code_samples_per_chip * GALILEO_E5A_NUMBER_OF_CODES * sizeof(int32_t), volk_gnsssdr_get_alignment()));
if (trk_param_fpga.track_pilot)
@@ -160,37 +150,22 @@ GalileoE5aDllPllTrackingFpga::GalileoE5aDllPllTrackingFpga(
galileo_e5_a_code_gen_complex_primary(aux_code, PRN, const_cast(sig_));
if (trk_param_fpga.track_pilot)
{
- for (uint32_t i = 0; i < code_length_chips; i++)
- {
- tracking_code[i] = aux_code[i].imag();
- data_code[i] = aux_code[i].real();
- }
for (uint32_t s = 0; s < code_length_chips; s++)
{
- d_ca_codes[static_cast(code_length_chips) * (PRN - 1) + s] = static_cast(tracking_code[s]);
- d_data_codes[static_cast(code_length_chips) * (PRN - 1) + s] = static_cast(data_code[s]);
+ d_ca_codes[static_cast(code_length_chips) * (PRN - 1) + s] = static_cast(aux_code[s].imag());
+ d_data_codes[static_cast(code_length_chips) * (PRN - 1) + s] = static_cast(aux_code[s].real());
}
}
else
{
- for (uint32_t i = 0; i < code_length_chips; i++)
- {
- tracking_code[i] = aux_code[i].real();
- }
-
for (uint32_t s = 0; s < code_length_chips; s++)
{
- d_ca_codes[static_cast(code_length_chips) * (PRN - 1) + s] = static_cast(tracking_code[s]);
+ d_ca_codes[static_cast(code_length_chips) * (PRN - 1) + s] = static_cast(aux_code[s].real());
}
}
}
volk_gnsssdr_free(aux_code);
- volk_gnsssdr_free(tracking_code);
- if (trk_param_fpga.track_pilot)
- {
- volk_gnsssdr_free(data_code);
- }
trk_param_fpga.ca_codes = d_ca_codes;
trk_param_fpga.data_codes = d_data_codes;
trk_param_fpga.code_length_chips = code_length_chips;
diff --git a/src/algorithms/tracking/adapters/gps_l5_dll_pll_tracking_fpga.cc b/src/algorithms/tracking/adapters/gps_l5_dll_pll_tracking_fpga.cc
index d51415471..764a69a97 100644
--- a/src/algorithms/tracking/adapters/gps_l5_dll_pll_tracking_fpga.cc
+++ b/src/algorithms/tracking/adapters/gps_l5_dll_pll_tracking_fpga.cc
@@ -153,7 +153,7 @@ GpsL5DllPllTrackingFpga::GpsL5DllPllTrackingFpga(
for (uint32_t PRN = 1; PRN <= NUM_PRNs; PRN++)
{
- if (track_pilot)
+ if (trk_param_fpga.track_pilot)
{
gps_l5q_code_gen_float(tracking_code, PRN);
gps_l5i_code_gen_float(data_code, PRN);
diff --git a/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.cc b/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.cc
index 691990ced..fe944d612 100644
--- a/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.cc
+++ b/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.cc
@@ -36,21 +36,21 @@
*/
#include "dll_pll_veml_tracking_fpga.h"
-#include "tracking_discriminators.h"
-#include "lock_detectors.h"
-#include "control_message_factory.h"
-#include "MATH_CONSTANTS.h"
-#include "Galileo_E1.h"
-#include "galileo_e1_signal_processing.h"
-#include "Galileo_E5a.h"
-#include "galileo_e5_signal_processing.h"
#include "GPS_L1_CA.h"
-#include "gps_sdr_signal_processing.h"
#include "GPS_L2C.h"
-#include "gps_l2c_signal.h"
#include "GPS_L5.h"
-#include "gps_l5_signal.h"
+#include "Galileo_E1.h"
+#include "Galileo_E5a.h"
+#include "MATH_CONSTANTS.h"
+#include "control_message_factory.h"
+#include "galileo_e1_signal_processing.h"
+#include "galileo_e5_signal_processing.h"
#include "gnss_sdr_create_directory.h"
+#include "gps_l2c_signal.h"
+#include "gps_l5_signal.h"
+#include "gps_sdr_signal_processing.h"
+#include "lock_detectors.h"
+#include "tracking_discriminators.h"
#include
#include
#include
@@ -60,8 +60,8 @@
#include
#include
#include
-#include
#include
+#include
using google::LogMessage;
@@ -72,7 +72,7 @@ dll_pll_veml_tracking_fpga_sptr dll_pll_veml_make_tracking_fpga(const Dll_Pll_Co
dll_pll_veml_tracking_fpga::dll_pll_veml_tracking_fpga(const Dll_Pll_Conf_Fpga &conf_) : gr::block("dll_pll_veml_tracking_fpga", gr::io_signature::make(0, 0, sizeof(lv_16sc_t)),
- gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
+ gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
{
trk_parameters = conf_;
// Telemetry bit synchronization message port input
@@ -326,7 +326,7 @@ dll_pll_veml_tracking_fpga::dll_pll_veml_tracking_fpga(const Dll_Pll_Conf_Fpga &
trk_parameters.extend_correlation_symbols = 1;
}
- // --- Initializations ---
+ // --- Initializations ---
// Initial code frequency basis of NCO
d_code_freq_chips = d_code_chip_rate;
// Residual code phase (in chips)
@@ -423,14 +423,11 @@ dll_pll_veml_tracking_fpga::dll_pll_veml_tracking_fpga(const Dll_Pll_Conf_Fpga &
uint32_t multicorr_type = trk_parameters.multicorr_type;
multicorrelator_fpga = std::make_shared(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);
-
-
}
void dll_pll_veml_tracking_fpga::start_tracking()
{
-
// 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_carrier_doppler_hz = d_acquisition_gnss_synchro->Acq_doppler_hz;
@@ -508,7 +505,6 @@ void dll_pll_veml_tracking_fpga::start_tracking()
d_cloop = true;
d_Prompt_buffer_deque.clear();
d_last_prompt = gr_complex(0.0, 0.0);
-
}
@@ -553,13 +549,11 @@ dll_pll_veml_tracking_fpga::~dll_pll_veml_tracking_fpga()
{
LOG(WARNING) << "Exception in destructor " << ex.what();
}
-
}
bool dll_pll_veml_tracking_fpga::acquire_secondary()
{
-
// ******* preamble correlation ********
int32_t corr_value = 0;
for (uint32_t i = 0; i < d_secondary_code_length; i++)
@@ -596,13 +590,11 @@ bool dll_pll_veml_tracking_fpga::acquire_secondary()
{
return false;
}
-
}
bool dll_pll_veml_tracking_fpga::cn0_and_tracking_lock_status(double coh_integration_time_s)
{
-
// ####### CN0 ESTIMATION AND LOCK DETECTORS ######
if (d_cn0_estimation_counter < trk_parameters.cn0_samples)
@@ -642,7 +634,6 @@ bool dll_pll_veml_tracking_fpga::cn0_and_tracking_lock_status(double coh_integra
return true;
}
}
-
}
@@ -654,25 +645,20 @@ bool dll_pll_veml_tracking_fpga::cn0_and_tracking_lock_status(double coh_integra
//void dll_pll_veml_tracking_fpga::do_correlation_step(const gr_complex *input_samples)
void dll_pll_veml_tracking_fpga::do_correlation_step(void)
{
+ // // ################# CARRIER WIPEOFF AND CORRELATORS ##############################
-// // ################# CARRIER WIPEOFF AND CORRELATORS ##############################
-
- multicorrelator_fpga->Carrier_wipeoff_multicorrelator_resampler(
+ multicorrelator_fpga->Carrier_wipeoff_multicorrelator_resampler(
d_rem_carr_phase_rad,
- d_carrier_phase_step_rad, d_carrier_phase_rate_step_rad,
- static_cast(d_rem_code_phase_chips) * static_cast(d_code_samples_per_chip),
- static_cast(d_code_phase_step_chips) * static_cast(d_code_samples_per_chip),
- static_cast(d_code_phase_rate_step_chips) * static_cast(d_code_samples_per_chip),
+ d_carrier_phase_step_rad, d_carrier_phase_rate_step_rad,
+ static_cast(d_rem_code_phase_chips) * static_cast(d_code_samples_per_chip),
+ static_cast(d_code_phase_step_chips) * static_cast(d_code_samples_per_chip),
+ static_cast(d_code_phase_rate_step_chips) * static_cast(d_code_samples_per_chip),
d_current_prn_length_samples);
-
-
-
}
void dll_pll_veml_tracking_fpga::run_dll_pll()
{
-
// ################## PLL ##########################################################
// PLL discriminator
if (d_cloop)
@@ -707,13 +693,11 @@ void dll_pll_veml_tracking_fpga::run_dll_pll()
// 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;
-
}
void dll_pll_veml_tracking_fpga::clear_tracking_vars()
{
-
std::fill_n(d_correlator_outs, d_n_correlator_taps, gr_complex(0.0, 0.0));
if (trk_parameters.track_pilot) d_Prompt_Data[0] = gr_complex(0.0, 0.0);
d_carr_error_hz = 0.0;
@@ -727,13 +711,11 @@ void dll_pll_veml_tracking_fpga::clear_tracking_vars()
d_code_phase_rate_step_chips = 0.0;
d_carr_ph_history.clear();
d_code_ph_history.clear();
-
}
void dll_pll_veml_tracking_fpga::update_tracking_vars()
{
-
T_chip_seconds = 1.0 / d_code_freq_chips;
T_prn_seconds = T_chip_seconds * static_cast(d_code_length_chips);
@@ -800,13 +782,11 @@ void dll_pll_veml_tracking_fpga::update_tracking_vars()
// remnant code phase [chips]
d_rem_code_phase_samples = K_blk_samples - static_cast(d_current_prn_length_samples); // rounding error < 1 sample
d_rem_code_phase_chips = d_code_freq_chips * d_rem_code_phase_samples / trk_parameters.fs_in;
-
}
void dll_pll_veml_tracking_fpga::save_correlation_results()
{
-
if (d_secondary)
{
if (d_secondary_code_string->at(d_current_symbol) == '0')
@@ -853,13 +833,11 @@ void dll_pll_veml_tracking_fpga::save_correlation_results()
d_cloop = false;
else
d_cloop = true;
-
}
void dll_pll_veml_tracking_fpga::log_data(bool integrating)
{
-
if (d_dump)
{
// Dump results to file
@@ -980,13 +958,11 @@ void dll_pll_veml_tracking_fpga::log_data(bool integrating)
LOG(WARNING) << "Exception writing trk dump file " << e.what();
}
}
-
}
int32_t dll_pll_veml_tracking_fpga::save_matfile()
{
-
// READ DUMP FILE
std::ifstream::pos_type size;
int32_t number_of_double_vars = 1;
@@ -1228,13 +1204,11 @@ int32_t dll_pll_veml_tracking_fpga::save_matfile()
delete[] aux2;
delete[] PRN;
return 0;
-
}
void dll_pll_veml_tracking_fpga::set_channel(uint32_t channel)
{
-
d_channel = channel;
multicorrelator_fpga->set_channel(d_channel);
LOG(INFO) << "Tracking Channel set to " << d_channel;
@@ -1261,7 +1235,6 @@ void dll_pll_veml_tracking_fpga::set_channel(uint32_t channel)
}
}
}
-
}
@@ -1279,8 +1252,6 @@ void dll_pll_veml_tracking_fpga::stop_tracking()
int dll_pll_veml_tracking_fpga::general_work(int noutput_items __attribute__((unused)), gr_vector_int &ninput_items,
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
{
-
-
Gnss_Synchro **out = reinterpret_cast(&output_items[0]);
Gnss_Synchro current_synchro_data = Gnss_Synchro();
@@ -1296,33 +1267,33 @@ int dll_pll_veml_tracking_fpga::general_work(int noutput_items __attribute__((un
}
case 1: // Pull-in
{
- int64_t acq_trk_diff_samples;
- double acq_trk_diff_seconds;
- double delta_trk_to_acq_prn_start_samples;
+ int64_t acq_trk_diff_samples;
+ double acq_trk_diff_seconds;
+ double delta_trk_to_acq_prn_start_samples;
multicorrelator_fpga->lock_channel();
uint64_t counter_value = multicorrelator_fpga->read_sample_counter();
uint64_t absolute_samples_offset;
if (counter_value > (d_acq_sample_stamp + d_acq_code_phase_samples))
- {
- // Signal alignment (skip samples until the incoming signal is aligned with local replica)
- acq_trk_diff_samples = static_cast(counter_value) - static_cast(d_acq_sample_stamp);
- acq_trk_diff_seconds = static_cast(acq_trk_diff_samples) / trk_parameters.fs_in;
- delta_trk_to_acq_prn_start_samples = static_cast(acq_trk_diff_samples) - d_acq_code_phase_samples;
+ {
+ // Signal alignment (skip samples until the incoming signal is aligned with local replica)
+ acq_trk_diff_samples = static_cast(counter_value) - static_cast(d_acq_sample_stamp);
+ acq_trk_diff_seconds = static_cast(acq_trk_diff_samples) / trk_parameters.fs_in;
+ delta_trk_to_acq_prn_start_samples = static_cast(acq_trk_diff_samples) - d_acq_code_phase_samples;
- uint32_t num_frames = ceil((delta_trk_to_acq_prn_start_samples) / d_correlation_length_samples);
- absolute_samples_offset = static_cast(d_acq_code_phase_samples + d_acq_sample_stamp + num_frames * d_correlation_length_samples);
- }
+ uint32_t num_frames = ceil((delta_trk_to_acq_prn_start_samples) / d_correlation_length_samples);
+ absolute_samples_offset = static_cast(d_acq_code_phase_samples + d_acq_sample_stamp + num_frames * d_correlation_length_samples);
+ }
else
- {
- // test mode
+ {
+ // test mode
- acq_trk_diff_samples = - static_cast(counter_value) + static_cast(d_acq_sample_stamp);
- acq_trk_diff_seconds = static_cast(acq_trk_diff_samples) / trk_parameters.fs_in;
- delta_trk_to_acq_prn_start_samples = static_cast(acq_trk_diff_samples) + d_acq_code_phase_samples;
+ acq_trk_diff_samples = -static_cast(counter_value) + static_cast(d_acq_sample_stamp);
+ acq_trk_diff_seconds = static_cast(acq_trk_diff_samples) / trk_parameters.fs_in;
+ delta_trk_to_acq_prn_start_samples = static_cast(acq_trk_diff_samples) + d_acq_code_phase_samples;
- absolute_samples_offset = static_cast(delta_trk_to_acq_prn_start_samples);
- }
+ absolute_samples_offset = static_cast(delta_trk_to_acq_prn_start_samples);
+ }
multicorrelator_fpga->set_initial_sample(absolute_samples_offset);
d_absolute_samples_offset = absolute_samples_offset;
d_sample_counter = absolute_samples_offset;
@@ -1357,13 +1328,12 @@ int dll_pll_veml_tracking_fpga::general_work(int noutput_items __attribute__((un
// don't leave the HW module blocking the signal path before the first sample arrives
// start the first tracking process
- run_state_2(current_synchro_data);
+ run_state_2(current_synchro_data);
break;
-
}
case 2: // Wide tracking and symbol synchronization
{
- run_state_2(current_synchro_data);
+ run_state_2(current_synchro_data);
break;
}
case 3: // coherent integration (correlation time extension)
@@ -1497,9 +1467,9 @@ int dll_pll_veml_tracking_fpga::general_work(int noutput_items __attribute__((un
if (current_synchro_data.Flag_valid_symbol_output)
{
current_synchro_data.fs = static_cast(trk_parameters.fs_in);
- // two choices for the reporting of the sample counter:
- // either the sample counter position that should be (d_sample_counter_next)
- //or the sample counter corresponding to the number of samples that the FPGA actually consumed.
+ // two choices for the reporting of the sample counter:
+ // either the sample counter position that should be (d_sample_counter_next)
+ //or the sample counter corresponding to the number of samples that the FPGA actually consumed.
current_synchro_data.Tracking_sample_counter = d_sample_counter_next;
*out[0] = current_synchro_data;
return 1;
@@ -1678,7 +1648,6 @@ void dll_pll_veml_tracking_fpga::run_state_2(Gnss_Synchro ¤t_synchro_data)
}
}
}
-
}
diff --git a/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.h b/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.h
index c0411b142..a280c2cad 100644
--- a/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.h
+++ b/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking_fpga.h
@@ -44,7 +44,6 @@
#include