mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-11-04 01:03:04 +00:00 
			
		
		
		
	More usage of volk_gnsssdr::vector
This commit is contained in:
		@@ -38,7 +38,7 @@
 | 
				
			|||||||
#include <gnuradio/fft/fft.h>     // for fft_complex
 | 
					#include <gnuradio/fft/fft.h>     // for fft_complex
 | 
				
			||||||
#include <gnuradio/gr_complex.h>  // for gr_complex
 | 
					#include <gnuradio/gr_complex.h>  // for gr_complex
 | 
				
			||||||
#include <volk/volk.h>            // for volk_32fc_conjugate_32fc
 | 
					#include <volk/volk.h>            // for volk_32fc_conjugate_32fc
 | 
				
			||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
 | 
					#include <volk_gnsssdr/volk_gnsssdr_alloc.h>
 | 
				
			||||||
#include <algorithm>  // for copy_n
 | 
					#include <algorithm>  // for copy_n
 | 
				
			||||||
#include <cmath>      // for abs, pow, floor
 | 
					#include <cmath>      // for abs, pow, floor
 | 
				
			||||||
#include <complex>    // for complex
 | 
					#include <complex>    // for complex
 | 
				
			||||||
@@ -99,8 +99,8 @@ GalileoE1PcpsAmbiguousAcquisitionFpga::GalileoE1PcpsAmbiguousAcquisitionFpga(
 | 
				
			|||||||
    // compute all the GALILEO E1 PRN Codes (this is done only once in the class constructor in order to avoid re-computing the PRN codes every time
 | 
					    // compute all the GALILEO E1 PRN Codes (this is done only once in the class constructor in order to avoid re-computing the PRN codes every time
 | 
				
			||||||
    // a channel is assigned)
 | 
					    // a channel is assigned)
 | 
				
			||||||
    auto fft_if = std::unique_ptr<gr::fft::fft_complex>(new gr::fft::fft_complex(nsamples_total, true));  // Direct FFT
 | 
					    auto fft_if = std::unique_ptr<gr::fft::fft_complex>(new gr::fft::fft_complex(nsamples_total, true));  // Direct FFT
 | 
				
			||||||
    std::vector<std::complex<float>> code(nsamples_total);                                                // buffer for the local code
 | 
					    volk_gnsssdr::vector<std::complex<float>> code(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()));
 | 
					    volk_gnsssdr::vector<gr_complex> fft_codes_padded(nsamples_total);
 | 
				
			||||||
    d_all_fft_codes_ = std::vector<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_ = std::vector<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
 | 
				
			||||||
@@ -140,7 +140,7 @@ GalileoE1PcpsAmbiguousAcquisitionFpga::GalileoE1PcpsAmbiguousAcquisitionFpga(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            std::copy_n(code.data(), nsamples_total, fft_if->get_inbuf());                            // copy to FFT buffer
 | 
					            std::copy_n(code.data(), nsamples_total, fft_if->get_inbuf());                            // copy to FFT buffer
 | 
				
			||||||
            fft_if->execute();                                                                        // Run the FFT of local code
 | 
					            fft_if->execute();                                                                        // Run the FFT of local code
 | 
				
			||||||
            volk_32fc_conjugate_32fc(fft_codes_padded, fft_if->get_outbuf(), nsamples_total);  // conjugate values
 | 
					            volk_32fc_conjugate_32fc(fft_codes_padded.data(), fft_if->get_outbuf(), nsamples_total);  // conjugate values
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // normalize the code
 | 
					            // normalize the code
 | 
				
			||||||
            max = 0;                                       // initialize maximum value
 | 
					            max = 0;                                       // initialize maximum value
 | 
				
			||||||
@@ -182,9 +182,6 @@ GalileoE1PcpsAmbiguousAcquisitionFpga::GalileoE1PcpsAmbiguousAcquisitionFpga(
 | 
				
			|||||||
    doppler_step_ = 0;
 | 
					    doppler_step_ = 0;
 | 
				
			||||||
    gnss_synchro_ = nullptr;
 | 
					    gnss_synchro_ = nullptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // temporary buffers that we can release
 | 
					 | 
				
			||||||
    volk_gnsssdr_free(fft_codes_padded);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (in_streams_ > 1)
 | 
					    if (in_streams_ > 1)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            LOG(ERROR) << "This implementation only supports one input stream";
 | 
					            LOG(ERROR) << "This implementation only supports one input stream";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,7 +38,7 @@
 | 
				
			|||||||
#include <gnuradio/fft/fft.h>     // for fft_complex
 | 
					#include <gnuradio/fft/fft.h>     // for fft_complex
 | 
				
			||||||
#include <gnuradio/gr_complex.h>  // for gr_complex
 | 
					#include <gnuradio/gr_complex.h>  // for gr_complex
 | 
				
			||||||
#include <volk/volk.h>            // for volk_32fc_conjugate_32fc
 | 
					#include <volk/volk.h>            // for volk_32fc_conjugate_32fc
 | 
				
			||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
 | 
					#include <volk_gnsssdr/volk_gnsssdr_alloc.h>
 | 
				
			||||||
#include <algorithm>  // for copy_n
 | 
					#include <algorithm>  // for copy_n
 | 
				
			||||||
#include <cmath>      // for abs, pow, floor
 | 
					#include <cmath>      // for abs, pow, floor
 | 
				
			||||||
#include <complex>    // for complex
 | 
					#include <complex>    // for complex
 | 
				
			||||||
@@ -100,8 +100,8 @@ GalileoE5aPcpsAcquisitionFpga::GalileoE5aPcpsAcquisitionFpga(ConfigurationInterf
 | 
				
			|||||||
    // compute all the GALILEO E5 PRN Codes (this is done only once in the class constructor in order to avoid re-computing the PRN codes every time
 | 
					    // compute all the GALILEO E5 PRN Codes (this is done only once in the class constructor in order to avoid re-computing the PRN codes every time
 | 
				
			||||||
    // a channel is assigned)
 | 
					    // a channel is assigned)
 | 
				
			||||||
    auto fft_if = std::unique_ptr<gr::fft::fft_complex>(new gr::fft::fft_complex(nsamples_total, true));  // Direct FFT
 | 
					    auto fft_if = std::unique_ptr<gr::fft::fft_complex>(new gr::fft::fft_complex(nsamples_total, true));  // Direct FFT
 | 
				
			||||||
    std::vector<std::complex<float>> code(nsamples_total);                                                // buffer for the local code
 | 
					    volk_gnsssdr::vector<std::complex<float>> code(nsamples_total);
 | 
				
			||||||
    auto* fft_codes_padded = static_cast<gr_complex*>(volk_gnsssdr_malloc(nsamples_total * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
 | 
					    volk_gnsssdr::vector<std::complex<float>> fft_codes_padded(nsamples_total);
 | 
				
			||||||
    d_all_fft_codes_ = std::vector<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_ = std::vector<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
 | 
				
			||||||
@@ -144,7 +144,7 @@ GalileoE5aPcpsAcquisitionFpga::GalileoE5aPcpsAcquisitionFpga(ConfigurationInterf
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            std::copy_n(code.data(), nsamples_total, fft_if->get_inbuf());                            // copy to FFT buffer
 | 
					            std::copy_n(code.data(), nsamples_total, fft_if->get_inbuf());                            // copy to FFT buffer
 | 
				
			||||||
            fft_if->execute();                                                                        // Run the FFT of local code
 | 
					            fft_if->execute();                                                                        // Run the FFT of local code
 | 
				
			||||||
            volk_32fc_conjugate_32fc(fft_codes_padded, fft_if->get_outbuf(), nsamples_total);  // conjugate values
 | 
					            volk_32fc_conjugate_32fc(fft_codes_padded.data(), 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
 | 
					            for (uint32_t i = 0; i < nsamples_total; i++)  // search for maxima
 | 
				
			||||||
@@ -185,9 +185,6 @@ GalileoE5aPcpsAcquisitionFpga::GalileoE5aPcpsAcquisitionFpga(ConfigurationInterf
 | 
				
			|||||||
    doppler_step_ = 0;
 | 
					    doppler_step_ = 0;
 | 
				
			||||||
    gnss_synchro_ = nullptr;
 | 
					    gnss_synchro_ = nullptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // temporary buffers that we can release
 | 
					 | 
				
			||||||
    volk_gnsssdr_free(fft_codes_padded);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (in_streams_ > 1)
 | 
					    if (in_streams_ > 1)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            LOG(ERROR) << "This implementation only supports one input stream";
 | 
					            LOG(ERROR) << "This implementation only supports one input stream";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,7 +41,7 @@
 | 
				
			|||||||
#include <gnuradio/fft/fft.h>
 | 
					#include <gnuradio/fft/fft.h>
 | 
				
			||||||
#include <gnuradio/gr_complex.h>  // for gr_complex
 | 
					#include <gnuradio/gr_complex.h>  // for gr_complex
 | 
				
			||||||
#include <volk/volk.h>            // for volk_32fc_conjugate_32fc
 | 
					#include <volk/volk.h>            // for volk_32fc_conjugate_32fc
 | 
				
			||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
 | 
					#include <volk_gnsssdr/volk_gnsssdr_alloc.h>
 | 
				
			||||||
#include <algorithm>  // for copy_n
 | 
					#include <algorithm>  // for copy_n
 | 
				
			||||||
#include <cmath>      // for abs, pow, floor
 | 
					#include <cmath>      // for abs, pow, floor
 | 
				
			||||||
#include <complex>    // for complex
 | 
					#include <complex>    // for complex
 | 
				
			||||||
@@ -93,8 +93,8 @@ GpsL1CaPcpsAcquisitionFpga::GpsL1CaPcpsAcquisitionFpga(
 | 
				
			|||||||
    // a channel is assigned)
 | 
					    // a channel is assigned)
 | 
				
			||||||
    auto fft_if = std::unique_ptr<gr::fft::fft_complex>(new gr::fft::fft_complex(nsamples_total, true));
 | 
					    auto fft_if = std::unique_ptr<gr::fft::fft_complex>(new gr::fft::fft_complex(nsamples_total, true));
 | 
				
			||||||
    // 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
 | 
				
			||||||
    std::vector<std::complex<float>> code(nsamples_total);  // buffer for the local code
 | 
					    volk_gnsssdr::vector<std::complex<float>> code(nsamples_total);
 | 
				
			||||||
    auto* fft_codes_padded = static_cast<gr_complex*>(volk_gnsssdr_malloc(nsamples_total * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
 | 
					    volk_gnsssdr::vector<std::complex<float>> fft_codes_padded(nsamples_total);
 | 
				
			||||||
    d_all_fft_codes_ = std::vector<uint32_t>(nsamples_total * NUM_PRNs);  // memory containing all the possible fft codes for PRN 0 to 32
 | 
					    d_all_fft_codes_ = std::vector<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;
 | 
					    int32_t tmp;
 | 
				
			||||||
@@ -119,7 +119,7 @@ GpsL1CaPcpsAcquisitionFpga::GpsL1CaPcpsAcquisitionFpga(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            std::copy_n(code.data(), nsamples_total, fft_if->get_inbuf());                            // copy to FFT buffer
 | 
					            std::copy_n(code.data(), nsamples_total, fft_if->get_inbuf());                            // copy to FFT buffer
 | 
				
			||||||
            fft_if->execute();                                                                        // Run the FFT of local code
 | 
					            fft_if->execute();                                                                        // Run the FFT of local code
 | 
				
			||||||
            volk_32fc_conjugate_32fc(fft_codes_padded, fft_if->get_outbuf(), nsamples_total);  // conjugate values
 | 
					            volk_32fc_conjugate_32fc(fft_codes_padded.data(), 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
 | 
					            for (uint32_t i = 0; i < nsamples_total; i++)  // search for maxima
 | 
				
			||||||
@@ -161,9 +161,6 @@ GpsL1CaPcpsAcquisitionFpga::GpsL1CaPcpsAcquisitionFpga(
 | 
				
			|||||||
    doppler_step_ = 0;
 | 
					    doppler_step_ = 0;
 | 
				
			||||||
    gnss_synchro_ = nullptr;
 | 
					    gnss_synchro_ = nullptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // temporary buffers that we can release
 | 
					 | 
				
			||||||
    volk_gnsssdr_free(fft_codes_padded);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (in_streams_ > 1)
 | 
					    if (in_streams_ > 1)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            LOG(ERROR) << "This implementation only supports one input stream";
 | 
					            LOG(ERROR) << "This implementation only supports one input stream";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,7 +41,7 @@
 | 
				
			|||||||
#include <gnuradio/fft/fft.h>     // for fft_complex
 | 
					#include <gnuradio/fft/fft.h>     // for fft_complex
 | 
				
			||||||
#include <gnuradio/gr_complex.h>  // for gr_complex
 | 
					#include <gnuradio/gr_complex.h>  // for gr_complex
 | 
				
			||||||
#include <volk/volk.h>            // for volk_32fc_conjugate_32fc
 | 
					#include <volk/volk.h>            // for volk_32fc_conjugate_32fc
 | 
				
			||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
 | 
					#include <volk_gnsssdr/volk_gnsssdr_alloc.h>
 | 
				
			||||||
#include <algorithm>  // for copy_n
 | 
					#include <algorithm>  // for copy_n
 | 
				
			||||||
#include <cmath>      // for abs, pow, floor
 | 
					#include <cmath>      // for abs, pow, floor
 | 
				
			||||||
#include <complex>    // for complex
 | 
					#include <complex>    // for complex
 | 
				
			||||||
@@ -94,8 +94,8 @@ GpsL2MPcpsAcquisitionFpga::GpsL2MPcpsAcquisitionFpga(
 | 
				
			|||||||
    // a channel is assigned)
 | 
					    // a channel is assigned)
 | 
				
			||||||
    auto fft_if = std::unique_ptr<gr::fft::fft_complex>(new gr::fft::fft_complex(nsamples_total, true));  // Direct FFT
 | 
					    auto fft_if = std::unique_ptr<gr::fft::fft_complex>(new gr::fft::fft_complex(nsamples_total, true));  // Direct FFT
 | 
				
			||||||
    // 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
 | 
				
			||||||
    std::vector<std::complex<float>> code(nsamples_total);  // buffer for the local code
 | 
					    volk_gnsssdr::vector<std::complex<float>> code(nsamples_total);
 | 
				
			||||||
    auto* fft_codes_padded = static_cast<gr_complex*>(volk_gnsssdr_malloc(nsamples_total * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
 | 
					    volk_gnsssdr::vector<std::complex<float>> fft_codes_padded(nsamples_total);
 | 
				
			||||||
    d_all_fft_codes_ = std::vector<uint32_t>(nsamples_total * NUM_PRNs);  // memory containing all the possible fft codes for PRN 0 to 32
 | 
					    d_all_fft_codes_ = std::vector<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
 | 
				
			||||||
@@ -114,7 +114,7 @@ GpsL2MPcpsAcquisitionFpga::GpsL2MPcpsAcquisitionFpga(
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            std::copy_n(code.data(), nsamples_total, fft_if->get_inbuf());                            // copy to FFT buffer
 | 
					            std::copy_n(code.data(), nsamples_total, fft_if->get_inbuf());                            // copy to FFT buffer
 | 
				
			||||||
            fft_if->execute();                                                                        // Run the FFT of local code
 | 
					            fft_if->execute();                                                                        // Run the FFT of local code
 | 
				
			||||||
            volk_32fc_conjugate_32fc(fft_codes_padded, fft_if->get_outbuf(), nsamples_total);  // conjugate values
 | 
					            volk_32fc_conjugate_32fc(fft_codes_padded.data(), fft_if->get_outbuf(), nsamples_total);  // conjugate values
 | 
				
			||||||
            max = 0;                                                                                  // initialize maximum value
 | 
					            max = 0;                                                                                  // initialize maximum value
 | 
				
			||||||
            for (unsigned int i = 0; i < nsamples_total; i++)                                         // search for maxima
 | 
					            for (unsigned int i = 0; i < nsamples_total; i++)                                         // search for maxima
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
@@ -152,9 +152,6 @@ GpsL2MPcpsAcquisitionFpga::GpsL2MPcpsAcquisitionFpga(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    threshold_ = 0.0;
 | 
					    threshold_ = 0.0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // temporary buffers that we can release
 | 
					 | 
				
			||||||
    volk_gnsssdr_free(fft_codes_padded);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (in_streams_ > 1)
 | 
					    if (in_streams_ > 1)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            LOG(ERROR) << "This implementation only supports one input stream";
 | 
					            LOG(ERROR) << "This implementation only supports one input stream";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,7 +41,7 @@
 | 
				
			|||||||
#include <gnuradio/fft/fft.h>     // for fft_complex
 | 
					#include <gnuradio/fft/fft.h>     // for fft_complex
 | 
				
			||||||
#include <gnuradio/gr_complex.h>  // for gr_complex
 | 
					#include <gnuradio/gr_complex.h>  // for gr_complex
 | 
				
			||||||
#include <volk/volk.h>            // for volk_32fc_conjugate_32fc
 | 
					#include <volk/volk.h>            // for volk_32fc_conjugate_32fc
 | 
				
			||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
 | 
					#include <volk_gnsssdr/volk_gnsssdr_alloc.h>
 | 
				
			||||||
#include <algorithm>  // for copy_n
 | 
					#include <algorithm>  // for copy_n
 | 
				
			||||||
#include <cmath>      // for abs, pow, floor
 | 
					#include <cmath>      // for abs, pow, floor
 | 
				
			||||||
#include <complex>    // for complex
 | 
					#include <complex>    // for complex
 | 
				
			||||||
@@ -97,8 +97,8 @@ GpsL5iPcpsAcquisitionFpga::GpsL5iPcpsAcquisitionFpga(
 | 
				
			|||||||
    // compute all the GPS L5 PRN Codes (this is done only once upon the class constructor in order to avoid re-computing the PRN codes every time
 | 
					    // compute all the GPS L5 PRN Codes (this is done only once upon the class constructor in order to avoid re-computing the PRN codes every time
 | 
				
			||||||
    // a channel is assigned)
 | 
					    // a channel is assigned)
 | 
				
			||||||
    auto fft_if = std::unique_ptr<gr::fft::fft_complex>(new gr::fft::fft_complex(nsamples_total, true));  // Direct FFT
 | 
					    auto fft_if = std::unique_ptr<gr::fft::fft_complex>(new gr::fft::fft_complex(nsamples_total, true));  // Direct FFT
 | 
				
			||||||
    std::vector<std::complex<float>> code(nsamples_total);
 | 
					    volk_gnsssdr::vector<std::complex<float>> code(nsamples_total);
 | 
				
			||||||
    auto* fft_codes_padded = static_cast<gr_complex*>(volk_gnsssdr_malloc(nsamples_total * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
 | 
					    volk_gnsssdr::vector<std::complex<float>> fft_codes_padded(nsamples_total);
 | 
				
			||||||
    d_all_fft_codes_ = std::vector<uint32_t>(nsamples_total * NUM_PRNs);  // memory containing all the possible fft codes for PRN 0 to 32
 | 
					    d_all_fft_codes_ = std::vector<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
 | 
				
			||||||
@@ -123,7 +123,7 @@ GpsL5iPcpsAcquisitionFpga::GpsL5iPcpsAcquisitionFpga(
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            std::copy_n(code.data(), nsamples_total, fft_if->get_inbuf());                            // copy to FFT buffer
 | 
					            std::copy_n(code.data(), nsamples_total, fft_if->get_inbuf());                            // copy to FFT buffer
 | 
				
			||||||
            fft_if->execute();                                                                        // Run the FFT of local code
 | 
					            fft_if->execute();                                                                        // Run the FFT of local code
 | 
				
			||||||
            volk_32fc_conjugate_32fc(fft_codes_padded, fft_if->get_outbuf(), nsamples_total);  // conjugate values
 | 
					            volk_32fc_conjugate_32fc(fft_codes_padded.data(), 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
 | 
					            for (uint32_t i = 0; i < nsamples_total; i++)  // search for maxima
 | 
				
			||||||
@@ -164,9 +164,6 @@ GpsL5iPcpsAcquisitionFpga::GpsL5iPcpsAcquisitionFpga(
 | 
				
			|||||||
    doppler_step_ = 0;
 | 
					    doppler_step_ = 0;
 | 
				
			||||||
    gnss_synchro_ = nullptr;
 | 
					    gnss_synchro_ = nullptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // temporary buffers that we can release
 | 
					 | 
				
			||||||
    volk_gnsssdr_free(fft_codes_padded);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (in_streams_ > 1)
 | 
					    if (in_streams_ > 1)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            LOG(ERROR) << "This implementation only supports one input stream";
 | 
					            LOG(ERROR) << "This implementation only supports one input stream";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,7 +42,7 @@
 | 
				
			|||||||
#include "galileo_e1_signal_processing.h"
 | 
					#include "galileo_e1_signal_processing.h"
 | 
				
			||||||
#include "gnss_sdr_flags.h"
 | 
					#include "gnss_sdr_flags.h"
 | 
				
			||||||
#include <glog/logging.h>
 | 
					#include <glog/logging.h>
 | 
				
			||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
 | 
					#include <volk_gnsssdr/volk_gnsssdr_alloc.h>
 | 
				
			||||||
#include <array>
 | 
					#include <array>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GalileoE1DllPllVemlTrackingFpga::GalileoE1DllPllVemlTrackingFpga(
 | 
					GalileoE1DllPllVemlTrackingFpga::GalileoE1DllPllVemlTrackingFpga(
 | 
				
			||||||
@@ -193,19 +193,18 @@ GalileoE1DllPllVemlTrackingFpga::GalileoE1DllPllVemlTrackingFpga(
 | 
				
			|||||||
    //################# PRE-COMPUTE ALL THE CODES #################
 | 
					    //################# PRE-COMPUTE ALL THE CODES #################
 | 
				
			||||||
    uint32_t code_samples_per_chip = 2;
 | 
					    uint32_t code_samples_per_chip = 2;
 | 
				
			||||||
    d_ca_codes = static_cast<int32_t*>(volk_gnsssdr_malloc(static_cast<int32_t>(GALILEO_E1_B_CODE_LENGTH_CHIPS) * code_samples_per_chip * GALILEO_E1_NUMBER_OF_CODES * sizeof(int32_t), volk_gnsssdr_get_alignment()));
 | 
					    d_ca_codes = static_cast<int32_t*>(volk_gnsssdr_malloc(static_cast<int32_t>(GALILEO_E1_B_CODE_LENGTH_CHIPS) * code_samples_per_chip * GALILEO_E1_NUMBER_OF_CODES * sizeof(int32_t), volk_gnsssdr_get_alignment()));
 | 
				
			||||||
    float* ca_codes_f;
 | 
					    volk_gnsssdr::vector<float> ca_codes_f(static_cast<uint32_t>(GALILEO_E1_B_CODE_LENGTH_CHIPS) * code_samples_per_chip);
 | 
				
			||||||
    float* data_codes_f = nullptr;
 | 
					    volk_gnsssdr::vector<float> data_codes_f;
 | 
				
			||||||
    d_data_codes = nullptr;
 | 
					    d_data_codes = nullptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (d_track_pilot)
 | 
					    if (d_track_pilot)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            d_data_codes = static_cast<int32_t*>(volk_gnsssdr_malloc((static_cast<uint32_t>(GALILEO_E1_B_CODE_LENGTH_CHIPS)) * code_samples_per_chip * GALILEO_E1_NUMBER_OF_CODES * sizeof(int32_t), volk_gnsssdr_get_alignment()));
 | 
					            d_data_codes = static_cast<int32_t*>(volk_gnsssdr_malloc((static_cast<uint32_t>(GALILEO_E1_B_CODE_LENGTH_CHIPS)) * code_samples_per_chip * GALILEO_E1_NUMBER_OF_CODES * sizeof(int32_t), volk_gnsssdr_get_alignment()));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    ca_codes_f = static_cast<float*>(volk_gnsssdr_malloc(static_cast<int32_t>(GALILEO_E1_B_CODE_LENGTH_CHIPS) * code_samples_per_chip * sizeof(float), volk_gnsssdr_get_alignment()));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (d_track_pilot)
 | 
					    if (d_track_pilot)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            data_codes_f = static_cast<float*>(volk_gnsssdr_malloc((static_cast<uint32_t>(GALILEO_E1_B_CODE_LENGTH_CHIPS)) * code_samples_per_chip * sizeof(float), volk_gnsssdr_get_alignment()));
 | 
					            data_codes_f.resize(static_cast<uint32_t>(GALILEO_E1_B_CODE_LENGTH_CHIPS) * code_samples_per_chip, 0.0);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (uint32_t PRN = 1; PRN <= GALILEO_E1_NUMBER_OF_CODES; PRN++)
 | 
					    for (uint32_t PRN = 1; PRN <= GALILEO_E1_NUMBER_OF_CODES; PRN++)
 | 
				
			||||||
@@ -214,8 +213,8 @@ GalileoE1DllPllVemlTrackingFpga::GalileoE1DllPllVemlTrackingFpga(
 | 
				
			|||||||
            if (d_track_pilot)
 | 
					            if (d_track_pilot)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    std::array<char, 3> pilot_signal = {'1', 'C', '\0'};
 | 
					                    std::array<char, 3> pilot_signal = {'1', 'C', '\0'};
 | 
				
			||||||
                    galileo_e1_code_gen_sinboc11_float(gsl::span<float>(ca_codes_f, static_cast<int32_t>(GALILEO_E1_B_CODE_LENGTH_CHIPS) * code_samples_per_chip), pilot_signal, PRN);
 | 
					                    galileo_e1_code_gen_sinboc11_float(ca_codes_f, pilot_signal, PRN);
 | 
				
			||||||
                    galileo_e1_code_gen_sinboc11_float(gsl::span<float>(data_codes_f, static_cast<uint32_t>(GALILEO_E1_B_CODE_LENGTH_CHIPS) * code_samples_per_chip), data_signal, PRN);
 | 
					                    galileo_e1_code_gen_sinboc11_float(data_codes_f, data_signal, PRN);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    // The code is generated as a series of 1s and -1s. In order to store the values using only one bit, a -1 is stored as a 0 in the FPGA
 | 
					                    // The code is generated as a series of 1s and -1s. In order to store the values using only one bit, a -1 is stored as a 0 in the FPGA
 | 
				
			||||||
                    for (uint32_t s = 0; s < 2 * GALILEO_E1_B_CODE_LENGTH_CHIPS; s++)
 | 
					                    for (uint32_t s = 0; s < 2 * GALILEO_E1_B_CODE_LENGTH_CHIPS; s++)
 | 
				
			||||||
@@ -238,7 +237,7 @@ GalileoE1DllPllVemlTrackingFpga::GalileoE1DllPllVemlTrackingFpga(
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    galileo_e1_code_gen_sinboc11_float(gsl::span<float>(ca_codes_f, static_cast<int32_t>(GALILEO_E1_B_CODE_LENGTH_CHIPS) * code_samples_per_chip), data_signal, PRN);
 | 
					                    galileo_e1_code_gen_sinboc11_float(ca_codes_f, data_signal, PRN);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    // The code is generated as a series of 1s and -1s. In order to store the values using only one bit, a -1 is stored as a 0 in the FPGA
 | 
					                    // The code is generated as a series of 1s and -1s. In order to store the values using only one bit, a -1 is stored as a 0 in the FPGA
 | 
				
			||||||
                    for (uint32_t s = 0; s < 2 * GALILEO_E1_B_CODE_LENGTH_CHIPS; s++)
 | 
					                    for (uint32_t s = 0; s < 2 * GALILEO_E1_B_CODE_LENGTH_CHIPS; s++)
 | 
				
			||||||
@@ -254,11 +253,6 @@ GalileoE1DllPllVemlTrackingFpga::GalileoE1DllPllVemlTrackingFpga(
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    volk_gnsssdr_free(ca_codes_f);
 | 
					 | 
				
			||||||
    if (d_track_pilot)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            volk_gnsssdr_free(data_codes_f);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    trk_param_fpga.ca_codes = d_ca_codes;
 | 
					    trk_param_fpga.ca_codes = d_ca_codes;
 | 
				
			||||||
    trk_param_fpga.data_codes = d_data_codes;
 | 
					    trk_param_fpga.data_codes = d_data_codes;
 | 
				
			||||||
    trk_param_fpga.code_length_chips = GALILEO_E1_B_CODE_LENGTH_CHIPS;
 | 
					    trk_param_fpga.code_length_chips = GALILEO_E1_B_CODE_LENGTH_CHIPS;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,7 +37,7 @@
 | 
				
			|||||||
#include "galileo_e5_signal_processing.h"
 | 
					#include "galileo_e5_signal_processing.h"
 | 
				
			||||||
#include "gnss_sdr_flags.h"
 | 
					#include "gnss_sdr_flags.h"
 | 
				
			||||||
#include <glog/logging.h>
 | 
					#include <glog/logging.h>
 | 
				
			||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
 | 
					#include <volk_gnsssdr/volk_gnsssdr_alloc.h>
 | 
				
			||||||
#include <array>
 | 
					#include <array>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GalileoE5aDllPllTrackingFpga::GalileoE5aDllPllTrackingFpga(
 | 
					GalileoE5aDllPllTrackingFpga::GalileoE5aDllPllTrackingFpga(
 | 
				
			||||||
@@ -193,7 +193,7 @@ GalileoE5aDllPllTrackingFpga::GalileoE5aDllPllTrackingFpga(
 | 
				
			|||||||
    uint32_t code_samples_per_chip = 1;
 | 
					    uint32_t code_samples_per_chip = 1;
 | 
				
			||||||
    auto code_length_chips = static_cast<uint32_t>(GALILEO_E5A_CODE_LENGTH_CHIPS);
 | 
					    auto code_length_chips = static_cast<uint32_t>(GALILEO_E5A_CODE_LENGTH_CHIPS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    auto *aux_code = static_cast<gr_complex *>(volk_gnsssdr_malloc(sizeof(gr_complex) * code_length_chips * code_samples_per_chip, volk_gnsssdr_get_alignment()));
 | 
					    volk_gnsssdr::vector<gr_complex> aux_code(code_length_chips * code_samples_per_chip, gr_complex(0.0, 0.0));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    d_ca_codes = static_cast<int32_t *>(volk_gnsssdr_malloc(static_cast<int32_t>(code_length_chips) * code_samples_per_chip * GALILEO_E5A_NUMBER_OF_CODES * sizeof(int32_t), volk_gnsssdr_get_alignment()));
 | 
					    d_ca_codes = static_cast<int32_t *>(volk_gnsssdr_malloc(static_cast<int32_t>(code_length_chips) * code_samples_per_chip * GALILEO_E5A_NUMBER_OF_CODES * sizeof(int32_t), volk_gnsssdr_get_alignment()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -205,7 +205,7 @@ GalileoE5aDllPllTrackingFpga::GalileoE5aDllPllTrackingFpga(
 | 
				
			|||||||
    for (uint32_t PRN = 1; PRN <= GALILEO_E5A_NUMBER_OF_CODES; PRN++)
 | 
					    for (uint32_t PRN = 1; PRN <= GALILEO_E5A_NUMBER_OF_CODES; PRN++)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            std::array<char, 3> sig_a = {'5', 'X', '\0'};
 | 
					            std::array<char, 3> sig_a = {'5', 'X', '\0'};
 | 
				
			||||||
            galileo_e5_a_code_gen_complex_primary(gsl::span<gr_complex>(aux_code, code_length_chips * code_samples_per_chip), PRN, sig_a);
 | 
					            galileo_e5_a_code_gen_complex_primary(aux_code, PRN, sig_a);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (trk_param_fpga.track_pilot)
 | 
					            if (trk_param_fpga.track_pilot)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
@@ -245,7 +245,6 @@ GalileoE5aDllPllTrackingFpga::GalileoE5aDllPllTrackingFpga(
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    volk_gnsssdr_free(aux_code);
 | 
					 | 
				
			||||||
    trk_param_fpga.ca_codes = d_ca_codes;
 | 
					    trk_param_fpga.ca_codes = d_ca_codes;
 | 
				
			||||||
    trk_param_fpga.data_codes = d_data_codes;
 | 
					    trk_param_fpga.data_codes = d_data_codes;
 | 
				
			||||||
    trk_param_fpga.code_length_chips = code_length_chips;
 | 
					    trk_param_fpga.code_length_chips = code_length_chips;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,7 +44,7 @@
 | 
				
			|||||||
#include "gnss_synchro.h"
 | 
					#include "gnss_synchro.h"
 | 
				
			||||||
#include "gps_l2c_signal.h"
 | 
					#include "gps_l2c_signal.h"
 | 
				
			||||||
#include <glog/logging.h>
 | 
					#include <glog/logging.h>
 | 
				
			||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
 | 
					#include <volk_gnsssdr/volk_gnsssdr_alloc.h>
 | 
				
			||||||
#include <array>
 | 
					#include <array>
 | 
				
			||||||
#include <cmath>    // for round
 | 
					#include <cmath>    // for round
 | 
				
			||||||
#include <cstring>  // for memcpy
 | 
					#include <cstring>  // for memcpy
 | 
				
			||||||
@@ -123,22 +123,18 @@ GpsL2MDllPllTrackingFpga::GpsL2MDllPllTrackingFpga(
 | 
				
			|||||||
    // GNSS-SDR instantiates the tracking channels i L1, L2, L5, E1, E5a
 | 
					    // GNSS-SDR instantiates the tracking channels i L1, L2, L5, E1, E5a
 | 
				
			||||||
    trk_param_fpga.num_prev_assigned_ch = configuration->property("Channels_1C.count", 0);
 | 
					    trk_param_fpga.num_prev_assigned_ch = configuration->property("Channels_1C.count", 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    volk_gnsssdr::vector<float> ca_codes_f(static_cast<unsigned int>(GPS_L2_M_CODE_LENGTH_CHIPS), 0.0);
 | 
				
			||||||
    auto* ca_codes_f = static_cast<float*>(volk_gnsssdr_malloc(static_cast<unsigned int>(GPS_L2_M_CODE_LENGTH_CHIPS) * sizeof(float), volk_gnsssdr_get_alignment()));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // ################# PRE-COMPUTE ALL THE CODES #################
 | 
					    // ################# PRE-COMPUTE ALL THE CODES #################
 | 
				
			||||||
    d_ca_codes = static_cast<int*>(volk_gnsssdr_malloc(static_cast<int>(GPS_L2_M_CODE_LENGTH_CHIPS * NUM_PRNs) * sizeof(int), volk_gnsssdr_get_alignment()));
 | 
					    d_ca_codes = static_cast<int*>(volk_gnsssdr_malloc(static_cast<int>(GPS_L2_M_CODE_LENGTH_CHIPS * NUM_PRNs) * sizeof(int), volk_gnsssdr_get_alignment()));
 | 
				
			||||||
    for (uint32_t PRN = 1; PRN <= NUM_PRNs; PRN++)
 | 
					    for (uint32_t PRN = 1; PRN <= NUM_PRNs; PRN++)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            gps_l2c_m_code_gen_float(gsl::span<float>(ca_codes_f, static_cast<unsigned int>(GPS_L2_M_CODE_LENGTH_CHIPS)), PRN);
 | 
					            gps_l2c_m_code_gen_float(ca_codes_f, PRN);
 | 
				
			||||||
            for (unsigned int s = 0; s < 2 * static_cast<unsigned int>(GPS_L2_M_CODE_LENGTH_CHIPS); s++)
 | 
					            for (unsigned int s = 0; s < 2 * static_cast<unsigned int>(GPS_L2_M_CODE_LENGTH_CHIPS); s++)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    d_ca_codes[static_cast<int>(GPS_L2_M_CODE_LENGTH_CHIPS) * (PRN - 1) + s] = static_cast<int>(ca_codes_f[s]);
 | 
					                    d_ca_codes[static_cast<int>(GPS_L2_M_CODE_LENGTH_CHIPS) * (PRN - 1) + s] = static_cast<int>(ca_codes_f[s]);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    volk_gnsssdr_free(ca_codes_f);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    trk_param_fpga.ca_codes = d_ca_codes;
 | 
					    trk_param_fpga.ca_codes = d_ca_codes;
 | 
				
			||||||
    trk_param_fpga.code_length_chips = GPS_L2_M_CODE_LENGTH_CHIPS;
 | 
					    trk_param_fpga.code_length_chips = GPS_L2_M_CODE_LENGTH_CHIPS;
 | 
				
			||||||
    trk_param_fpga.code_samples_per_chip = 1;  // 1 sample per chip
 | 
					    trk_param_fpga.code_samples_per_chip = 1;  // 1 sample per chip
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,7 +44,7 @@
 | 
				
			|||||||
#include "gnss_sdr_flags.h"
 | 
					#include "gnss_sdr_flags.h"
 | 
				
			||||||
#include "gps_l5_signal.h"
 | 
					#include "gps_l5_signal.h"
 | 
				
			||||||
#include <glog/logging.h>
 | 
					#include <glog/logging.h>
 | 
				
			||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
 | 
					#include <volk_gnsssdr/volk_gnsssdr_alloc.h>
 | 
				
			||||||
#include <array>
 | 
					#include <array>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GpsL5DllPllTrackingFpga::GpsL5DllPllTrackingFpga(
 | 
					GpsL5DllPllTrackingFpga::GpsL5DllPllTrackingFpga(
 | 
				
			||||||
@@ -193,18 +193,12 @@ GpsL5DllPllTrackingFpga::GpsL5DllPllTrackingFpga(
 | 
				
			|||||||
    uint32_t code_samples_per_chip = 1;
 | 
					    uint32_t code_samples_per_chip = 1;
 | 
				
			||||||
    auto code_length_chips = static_cast<uint32_t>(GPS_L5I_CODE_LENGTH_CHIPS);
 | 
					    auto code_length_chips = static_cast<uint32_t>(GPS_L5I_CODE_LENGTH_CHIPS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    float *tracking_code;
 | 
					    volk_gnsssdr::vector<float> data_code;
 | 
				
			||||||
    float *data_code = nullptr;
 | 
					    volk_gnsssdr::vector<float> tracking_code(code_length_chips, 0.0);
 | 
				
			||||||
 | 
					 | 
				
			||||||
    tracking_code = static_cast<float *>(volk_gnsssdr_malloc(code_length_chips * sizeof(float), volk_gnsssdr_get_alignment()));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (track_pilot)
 | 
					    if (track_pilot)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            data_code = static_cast<float *>(volk_gnsssdr_malloc(code_length_chips * sizeof(float), volk_gnsssdr_get_alignment()));
 | 
					            data_code.resize(code_length_chips, 0.0);
 | 
				
			||||||
            for (uint32_t i = 0; i < code_length_chips; i++)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    data_code[i] = 0.0;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    d_ca_codes = static_cast<int32_t *>(volk_gnsssdr_malloc(static_cast<int32_t>(code_length_chips * NUM_PRNs) * sizeof(int32_t), volk_gnsssdr_get_alignment()));
 | 
					    d_ca_codes = static_cast<int32_t *>(volk_gnsssdr_malloc(static_cast<int32_t>(code_length_chips * NUM_PRNs) * sizeof(int32_t), volk_gnsssdr_get_alignment()));
 | 
				
			||||||
@@ -219,8 +213,8 @@ GpsL5DllPllTrackingFpga::GpsL5DllPllTrackingFpga(
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            if (track_pilot)
 | 
					            if (track_pilot)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    gps_l5q_code_gen_float(gsl::span<float>(tracking_code, code_length_chips), PRN);
 | 
					                    gps_l5q_code_gen_float(tracking_code, PRN);
 | 
				
			||||||
                    gps_l5i_code_gen_float(gsl::span<float>(data_code, code_length_chips), PRN);
 | 
					                    gps_l5i_code_gen_float(data_code, PRN);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    // The code is generated as a series of 1s and -1s. In order to store the values using only one bit, a -1 is stored as a 0 in the FPGA
 | 
					                    // The code is generated as a series of 1s and -1s. In order to store the values using only one bit, a -1 is stored as a 0 in the FPGA
 | 
				
			||||||
                    for (uint32_t s = 0; s < code_length_chips; s++)
 | 
					                    for (uint32_t s = 0; s < code_length_chips; s++)
 | 
				
			||||||
@@ -244,7 +238,7 @@ GpsL5DllPllTrackingFpga::GpsL5DllPllTrackingFpga(
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    gps_l5i_code_gen_float(gsl::span<float>(tracking_code, code_length_chips), PRN);
 | 
					                    gps_l5i_code_gen_float(tracking_code, PRN);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    // The code is generated as a series of 1s and -1s. In order to store the values using only one bit, a -1 is stored as a 0 in the FPGA
 | 
					                    // The code is generated as a series of 1s and -1s. In order to store the values using only one bit, a -1 is stored as a 0 in the FPGA
 | 
				
			||||||
                    for (uint32_t s = 0; s < code_length_chips; s++)
 | 
					                    for (uint32_t s = 0; s < code_length_chips; s++)
 | 
				
			||||||
@@ -260,11 +254,6 @@ GpsL5DllPllTrackingFpga::GpsL5DllPllTrackingFpga(
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    volk_gnsssdr_free(tracking_code);
 | 
					 | 
				
			||||||
    if (track_pilot)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            volk_gnsssdr_free(data_code);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    trk_param_fpga.ca_codes = d_ca_codes;
 | 
					    trk_param_fpga.ca_codes = d_ca_codes;
 | 
				
			||||||
    trk_param_fpga.data_codes = d_data_codes;
 | 
					    trk_param_fpga.data_codes = d_data_codes;
 | 
				
			||||||
    trk_param_fpga.code_length_chips = code_length_chips;
 | 
					    trk_param_fpga.code_length_chips = code_length_chips;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,9 +61,14 @@ const float PHASE_CARR_MAX_DIV_PI = 683565275.5764316;  // 2^(31)/pi
 | 
				
			|||||||
const float TWO_PI = 6.283185307179586;
 | 
					const float TWO_PI = 6.283185307179586;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Fpga_Multicorrelator_8sc::Fpga_Multicorrelator_8sc(int32_t n_correlators,
 | 
					Fpga_Multicorrelator_8sc::Fpga_Multicorrelator_8sc(int32_t n_correlators,
 | 
				
			||||||
    const std::string &device_name, uint32_t dev_file_num, uint32_t num_prev_assigned_ch, int32_t *ca_codes, int32_t *data_codes, uint32_t code_length_chips, bool track_pilot,
 | 
					    const std::string &device_name,
 | 
				
			||||||
 | 
					    uint32_t dev_file_num,
 | 
				
			||||||
 | 
					    uint32_t num_prev_assigned_ch,
 | 
				
			||||||
 | 
					    int32_t *ca_codes,
 | 
				
			||||||
 | 
					    int32_t *data_codes,
 | 
				
			||||||
 | 
					    uint32_t code_length_chips,
 | 
				
			||||||
 | 
					    bool track_pilot,
 | 
				
			||||||
    uint32_t code_samples_per_chip)
 | 
					    uint32_t code_samples_per_chip)
 | 
				
			||||||
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    d_n_correlators = n_correlators;
 | 
					    d_n_correlators = n_correlators;
 | 
				
			||||||
    d_device_name = device_name;
 | 
					    d_device_name = device_name;
 | 
				
			||||||
@@ -77,17 +82,13 @@ Fpga_Multicorrelator_8sc::Fpga_Multicorrelator_8sc(int32_t n_correlators,
 | 
				
			|||||||
    // instantiate variable length vectors
 | 
					    // instantiate variable length vectors
 | 
				
			||||||
    if (d_track_pilot)
 | 
					    if (d_track_pilot)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            d_initial_index = static_cast<uint32_t *>(volk_gnsssdr_malloc(
 | 
					            d_initial_index.reserve(n_correlators + 1);
 | 
				
			||||||
                (n_correlators + 1) * sizeof(uint32_t), volk_gnsssdr_get_alignment()));
 | 
					            d_initial_interp_counter.reserve(n_correlators + 1);
 | 
				
			||||||
            d_initial_interp_counter = static_cast<uint32_t *>(volk_gnsssdr_malloc(
 | 
					 | 
				
			||||||
                (n_correlators + 1) * sizeof(uint32_t), volk_gnsssdr_get_alignment()));
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            d_initial_index = static_cast<uint32_t *>(volk_gnsssdr_malloc(
 | 
					            d_initial_index.reserve(n_correlators);
 | 
				
			||||||
                n_correlators * sizeof(uint32_t), volk_gnsssdr_get_alignment()));
 | 
					            d_initial_interp_counter.reserve(n_correlators);
 | 
				
			||||||
            d_initial_interp_counter = static_cast<uint32_t *>(volk_gnsssdr_malloc(
 | 
					 | 
				
			||||||
                n_correlators * sizeof(uint32_t), volk_gnsssdr_get_alignment()));
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    d_shifts_chips = nullptr;
 | 
					    d_shifts_chips = nullptr;
 | 
				
			||||||
    d_prompt_data_shift = nullptr;
 | 
					    d_prompt_data_shift = nullptr;
 | 
				
			||||||
@@ -109,8 +110,6 @@ Fpga_Multicorrelator_8sc::Fpga_Multicorrelator_8sc(int32_t n_correlators,
 | 
				
			|||||||
    d_data_codes = data_codes;
 | 
					    d_data_codes = data_codes;
 | 
				
			||||||
    d_code_samples_per_chip = code_samples_per_chip;
 | 
					    d_code_samples_per_chip = code_samples_per_chip;
 | 
				
			||||||
    d_code_length_samples = d_code_length_chips * d_code_samples_per_chip;
 | 
					    d_code_length_samples = d_code_length_chips * d_code_samples_per_chip;
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    d_secondary_code_enabled = false;
 | 
					    d_secondary_code_enabled = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    DLOG(INFO) << "TRACKING FPGA CLASS CREATED";
 | 
					    DLOG(INFO) << "TRACKING FPGA CLASS CREATED";
 | 
				
			||||||
@@ -120,14 +119,6 @@ Fpga_Multicorrelator_8sc::Fpga_Multicorrelator_8sc(int32_t n_correlators,
 | 
				
			|||||||
Fpga_Multicorrelator_8sc::~Fpga_Multicorrelator_8sc()
 | 
					Fpga_Multicorrelator_8sc::~Fpga_Multicorrelator_8sc()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    close_device();
 | 
					    close_device();
 | 
				
			||||||
    if (d_initial_index != nullptr)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            volk_gnsssdr_free(d_initial_index);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    if (d_initial_interp_counter != nullptr)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            volk_gnsssdr_free(d_initial_interp_counter);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -219,20 +210,6 @@ bool Fpga_Multicorrelator_8sc::free()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    // unlock the channel
 | 
					    // unlock the channel
 | 
				
			||||||
    Fpga_Multicorrelator_8sc::unlock_channel();
 | 
					    Fpga_Multicorrelator_8sc::unlock_channel();
 | 
				
			||||||
 | 
					 | 
				
			||||||
    // free the FPGA dynamically created variables
 | 
					 | 
				
			||||||
    if (d_initial_index != nullptr)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            volk_gnsssdr_free(d_initial_index);
 | 
					 | 
				
			||||||
            d_initial_index = nullptr;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (d_initial_interp_counter != nullptr)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            volk_gnsssdr_free(d_initial_interp_counter);
 | 
					 | 
				
			||||||
            d_initial_interp_counter = nullptr;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -305,7 +282,6 @@ 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;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    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++)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -339,7 +315,6 @@ void Fpga_Multicorrelator_8sc::fpga_compute_code_shift_parameters()
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            d_initial_index[i] = dec_part;
 | 
					            d_initial_index[i] = dec_part;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
            frac_part = fmod(d_shifts_chips[i] - d_rem_code_phase_chips, 1.0);
 | 
					            frac_part = fmod(d_shifts_chips[i] - d_rem_code_phase_chips, 1.0);
 | 
				
			||||||
            if (frac_part < 0)
 | 
					            if (frac_part < 0)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
@@ -464,7 +439,6 @@ void Fpga_Multicorrelator_8sc::unlock_channel()
 | 
				
			|||||||
    // unlock the channel to let the next samples go through
 | 
					    // unlock the channel to let the next samples go through
 | 
				
			||||||
    d_map_base[drop_samples_reg_addr] = drop_samples;  // unlock the channel and disable secondary codes
 | 
					    d_map_base[drop_samples_reg_addr] = drop_samples;  // unlock the channel and disable secondary codes
 | 
				
			||||||
    d_map_base[stop_tracking_reg_addr] = 1;            // set the tracking module back to idle
 | 
					    d_map_base[stop_tracking_reg_addr] = 1;            // set the tracking module back to idle
 | 
				
			||||||
 | 
					 | 
				
			||||||
    d_secondary_code_enabled = false;
 | 
					    d_secondary_code_enabled = false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -498,12 +472,14 @@ void Fpga_Multicorrelator_8sc::set_secondary_code_lengths(uint32_t secondary_cod
 | 
				
			|||||||
    d_map_base[secondary_code_lengths_reg_addr] = secondary_code_length_1_minus_1 * 256 + secondary_code_length_0_minus_1;
 | 
					    d_map_base[secondary_code_lengths_reg_addr] = secondary_code_length_1_minus_1 * 256 + secondary_code_length_0_minus_1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Fpga_Multicorrelator_8sc::update_prn_code_length(uint32_t first_prn_length, uint32_t next_prn_length)
 | 
					void Fpga_Multicorrelator_8sc::update_prn_code_length(uint32_t first_prn_length, uint32_t next_prn_length)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    d_map_base[first_prn_length_minus_1_reg_addr] = first_prn_length - 1;
 | 
					    d_map_base[first_prn_length_minus_1_reg_addr] = first_prn_length - 1;
 | 
				
			||||||
    d_map_base[next_prn_length_minus_1_reg_addr] = next_prn_length - 1;
 | 
					    d_map_base[next_prn_length_minus_1_reg_addr] = next_prn_length - 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Fpga_Multicorrelator_8sc::initialize_secondary_code(uint32_t secondary_code, std::string *secondary_code_string)
 | 
					void Fpga_Multicorrelator_8sc::initialize_secondary_code(uint32_t secondary_code, std::string *secondary_code_string)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    uint32_t secondary_code_length;
 | 
					    uint32_t secondary_code_length;
 | 
				
			||||||
@@ -566,12 +542,14 @@ void Fpga_Multicorrelator_8sc::write_secondary_code(uint32_t secondary_code_leng
 | 
				
			|||||||
    d_map_base[reg_addr] = write_val;
 | 
					    d_map_base[reg_addr] = write_val;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Fpga_Multicorrelator_8sc::enable_secondary_codes()
 | 
					void Fpga_Multicorrelator_8sc::enable_secondary_codes()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    d_map_base[drop_samples_reg_addr] = init_secondary_code_addresses | enable_secondary_code;  // enable secondary codes and clear secondary code indices
 | 
					    d_map_base[drop_samples_reg_addr] = init_secondary_code_addresses | enable_secondary_code;  // enable secondary codes and clear secondary code indices
 | 
				
			||||||
    d_secondary_code_enabled = true;
 | 
					    d_secondary_code_enabled = true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Fpga_Multicorrelator_8sc::disable_secondary_codes()
 | 
					void Fpga_Multicorrelator_8sc::disable_secondary_codes()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    // this function is to be called before starting the tracking process in order to disable the secondary codes by default
 | 
					    // this function is to be called before starting the tracking process in order to disable the secondary codes by default
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,6 +38,7 @@
 | 
				
			|||||||
#define GNSS_SDR_FPGA_MULTICORRELATOR_H_
 | 
					#define GNSS_SDR_FPGA_MULTICORRELATOR_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <gnuradio/block.h>
 | 
					#include <gnuradio/block.h>
 | 
				
			||||||
 | 
					#include <volk_gnsssdr/volk_gnsssdr_alloc.h>
 | 
				
			||||||
#include <cstdint>
 | 
					#include <cstdint>
 | 
				
			||||||
#include <string>
 | 
					#include <string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -86,9 +87,11 @@ public:
 | 
				
			|||||||
     * \brief Perform a multicorrelation
 | 
					     * \brief Perform a multicorrelation
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    void Carrier_wipeoff_multicorrelator_resampler(
 | 
					    void Carrier_wipeoff_multicorrelator_resampler(
 | 
				
			||||||
        float rem_carrier_phase_in_rad, float phase_step_rad,
 | 
					        float rem_carrier_phase_in_rad,
 | 
				
			||||||
 | 
					        float phase_step_rad,
 | 
				
			||||||
        float carrier_phase_rate_step_rad,
 | 
					        float carrier_phase_rate_step_rad,
 | 
				
			||||||
        float rem_code_phase_chips, float code_phase_step_chips,
 | 
					        float rem_code_phase_chips,
 | 
				
			||||||
 | 
					        float code_phase_step_chips,
 | 
				
			||||||
        float code_phase_rate_step_chips,
 | 
					        float code_phase_rate_step_chips,
 | 
				
			||||||
        int32_t signal_length_samples);
 | 
					        int32_t signal_length_samples);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -226,8 +229,8 @@ private:
 | 
				
			|||||||
    bool d_track_pilot;
 | 
					    bool d_track_pilot;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // configuration data computed in the format that the FPGA expects
 | 
					    // configuration data computed in the format that the FPGA expects
 | 
				
			||||||
    uint32_t *d_initial_index;
 | 
					    volk_gnsssdr::vector<uint32_t> d_initial_index;
 | 
				
			||||||
    uint32_t *d_initial_interp_counter;
 | 
					    volk_gnsssdr::vector<uint32_t> d_initial_interp_counter;
 | 
				
			||||||
    uint32_t d_code_phase_step_chips_num;
 | 
					    uint32_t d_code_phase_step_chips_num;
 | 
				
			||||||
    uint32_t d_code_phase_rate_step_chips_num;
 | 
					    uint32_t d_code_phase_rate_step_chips_num;
 | 
				
			||||||
    int32_t d_rem_carr_phase_rad_int;
 | 
					    int32_t d_rem_carr_phase_rad_int;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user