[hamradio-commits] [gnss-sdr] 75/126: Merge branch 'contrib' of https://github.com/odrisci/gnss-sdr into odrisci-contrib

Carles Fernandez carles_fernandez-guest at moszumanska.debian.org
Sat Dec 26 18:38:03 UTC 2015


This is an automated email from the git hooks/post-receive script.

carles_fernandez-guest pushed a commit to branch next
in repository gnss-sdr.

commit 74d42250d8f74c4a1375381d4175bfa4ade8ebfe
Merge: ed89b70 26b18c1
Author: Carles Fernandez <carles.fernandez at gmail.com>
Date:   Mon Nov 30 10:18:09 2015 +0100

    Merge branch 'contrib' of https://github.com/odrisci/gnss-sdr into
    odrisci-contrib
    
    # Conflicts:
    #	src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.cc
    #	src/algorithms/tracking/libs/tracking_discriminators.cc

 CMakeLists.txt                                     |   3 +
 README.md                                          |  39 ++-
 .../galileo_e1_pcps_ambiguous_acquisition.cc       |   4 +
 .../gnuradio_blocks/pcps_acquisition_cc.cc         |  83 +++++-
 .../pcps_acquisition_fine_doppler_cc.cc            |   4 +-
 .../signal_source/adapters/file_signal_source.cc   |  46 +++-
 .../galileo_e1_dll_pll_veml_tracking_cc.cc         |  46 ++--
 .../galileo_e1_dll_pll_veml_tracking_cc.h          |  18 +-
 .../gps_l1_ca_dll_pll_tracking_cc.cc               |   4 +-
 src/algorithms/tracking/libs/CMakeLists.txt        |   1 +
 src/algorithms/tracking/libs/correlator.cc         |  47 ++++
 src/algorithms/tracking/libs/correlator.h          |  31 ++-
 .../tracking/libs/tracking_discriminators.cc       |  20 +-
 .../tracking/libs/tracking_loop_filter.cc          | 284 +++++++++++++++++++++
 .../tracking/libs/tracking_loop_filter.h           |  98 +++++++
 src/core/receiver/gnss_flowgraph.cc                |  74 +++++-
 src/core/system_parameters/gnss_signal.cc          |   2 +-
 src/core/system_parameters/gnss_synchro.h          |   2 +-
 src/tests/CMakeLists.txt                           |   3 +-
 src/tests/arithmetic/tracking_loop_filter_test.cc  | 234 +++++++++++++++++
 .../libs/gps_l1_ca_dll_pll_read_tracking_dump.m    |   7 +-
 21 files changed, 984 insertions(+), 66 deletions(-)

diff --cc src/algorithms/tracking/gnuradio_blocks/galileo_e1_dll_pll_veml_tracking_cc.cc
index 934e00a,0ea9258..83fae8c
--- a/src/algorithms/tracking/gnuradio_blocks/galileo_e1_dll_pll_veml_tracking_cc.cc
+++ b/src/algorithms/tracking/gnuradio_blocks/galileo_e1_dll_pll_veml_tracking_cc.cc
@@@ -210,10 -210,10 +210,10 @@@ void galileo_e1_dll_pll_veml_tracking_c
  
      d_carrier_lock_fail_counter = 0;
      d_rem_code_phase_samples = 0.0;
--    d_rem_carr_phase_rad = 0;
--    d_acc_carrier_phase_rad = 0;
++    d_rem_carr_phase_rad = 0.0;
++    d_acc_carrier_phase_rad = 0.0;
  
--    d_acc_code_phase_secs = 0;
++    d_acc_code_phase_secs = 0.0;
      d_carrier_doppler_hz = d_acq_carrier_doppler_hz;
      d_current_prn_length_samples = d_vector_length;
  
@@@ -246,20 -246,20 +246,20 @@@ void galileo_e1_dll_pll_veml_tracking_c
      int epl_loop_length_samples;
  
      // unified loop for VE, E, P, L, VL code vectors
 -    code_phase_step_chips = (static_cast<double>(d_code_freq_chips)) / (static_cast<double>(d_fs_in));
 -    code_phase_step_half_chips = (2.0 * static_cast<double>(d_code_freq_chips)) / (static_cast<double>(d_fs_in));
 +    code_phase_step_chips = d_code_freq_chips / (static_cast<double>(d_fs_in));
 +    code_phase_step_half_chips = (2.0 * d_code_freq_chips) / (static_cast<double>(d_fs_in));
  
--    rem_code_phase_half_chips = d_rem_code_phase_samples * (2*d_code_freq_chips / d_fs_in);
 -    tcode_half_chips = - static_cast<double>(rem_code_phase_half_chips);
++    rem_code_phase_half_chips = d_rem_code_phase_samples * (2.0 * d_code_freq_chips / static_cast<double>(d_fs_in));
 +    tcode_half_chips = - rem_code_phase_half_chips;
  
--    early_late_spc_samples = round(d_early_late_spc_chips / code_phase_step_chips);
--    very_early_late_spc_samples = round(d_very_early_late_spc_chips / code_phase_step_chips);
++    early_late_spc_samples = std::round(d_early_late_spc_chips / code_phase_step_chips);
++    very_early_late_spc_samples = std::round(d_very_early_late_spc_chips / code_phase_step_chips);
  
      epl_loop_length_samples = d_current_prn_length_samples + very_early_late_spc_samples * 2;
  
      for (int i = 0; i < epl_loop_length_samples; i++)
          {
--            associated_chip_index = 2 + round(fmod(tcode_half_chips - 2 * d_very_early_late_spc_chips, code_length_half_chips));
++            associated_chip_index = 2 + std::round(std::fmod(tcode_half_chips - 2.0 * d_very_early_late_spc_chips, static_cast<double>(code_length_half_chips)));
              d_very_early_code[i] = d_ca_code[associated_chip_index];
              tcode_half_chips = tcode_half_chips + code_phase_step_half_chips;
          }
@@@ -273,7 -273,7 +273,7 @@@
  void galileo_e1_dll_pll_veml_tracking_cc::update_local_carrier()
  {
      float sin_f, cos_f;
--    float phase_step_rad = static_cast<float>(2 * GALILEO_PI) * d_carrier_doppler_hz / static_cast<float>(d_fs_in);
++    float phase_step_rad = static_cast<float>(2.0 * GALILEO_PI) * d_carrier_doppler_hz / static_cast<float>(d_fs_in);
      int phase_step_rad_i = gr::fxpt::float_to_fixed(phase_step_rad);
      int phase_rad_i = gr::fxpt::float_to_fixed(d_rem_carr_phase_rad);
  
@@@ -310,11 -310,10 +310,10 @@@ galileo_e1_dll_pll_veml_tracking_cc::~g
  int galileo_e1_dll_pll_veml_tracking_cc::general_work (int noutput_items,gr_vector_int &ninput_items,
          gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
  {
- 	double carr_error_hz = 0.0;
- 	double carr_error_filt_hz = 0.0;
- 	double code_error_chips = 0.0;
- 	double code_error_filt_chips = 0.0;
- 
 -    float carr_error_hz;
 -    float carr_error_filt_hz;
 -    float code_error_chips;
 -    float code_error_filt_chips;
++    double carr_error_hz = 0.0;
++    double carr_error_filt_hz = 0.0;
++    double code_error_chips = 0.0;
++    double code_error_filt_chips = 0.0;
  
      if (d_enable_tracking == true)
          {
@@@ -324,11 -323,11 +323,11 @@@
                       * Signal alignment (skip samples until the incoming signal is aligned with local replica)
                       */
                      int samples_offset;
 -                    float acq_trk_shif_correction_samples;
 +                    double acq_trk_shif_correction_samples;
                      int acq_to_trk_delay_samples;
                      acq_to_trk_delay_samples = d_sample_counter - d_acq_sample_stamp;
--                    acq_trk_shif_correction_samples = d_current_prn_length_samples - fmod(static_cast<float>(acq_to_trk_delay_samples), static_cast<float>(d_current_prn_length_samples));
--                    samples_offset = round(d_acq_code_phase_samples + acq_trk_shif_correction_samples);
++                    acq_trk_shif_correction_samples = static_cast<double>(d_current_prn_length_samples) - static_cast<double>(std::fmod(static_cast<double>(acq_to_trk_delay_samples), static_cast<double>(d_current_prn_length_samples)));
++                    samples_offset = static_cast<int>(std::round(d_acq_code_phase_samples + acq_trk_shif_correction_samples));
                      d_sample_counter = d_sample_counter + samples_offset; //count for the processed samples
                      d_pull_in = false;
                      consume_each(samples_offset); //shift input to perform alignment with local replica
@@@ -365,7 -364,7 +364,7 @@@
  
              // ################## PLL ##########################################################
              // PLL discriminator
--            carr_error_hz = pll_cloop_two_quadrant_atan(*d_Prompt) / static_cast<float>(GPS_TWO_PI);
++            carr_error_hz = pll_cloop_two_quadrant_atan(*d_Prompt) / static_cast<double>(GPS_TWO_PI);
              // Carrier discriminator filter
              carr_error_filt_hz = d_carrier_loop_filter.get_carrier_nco(carr_error_hz);
              // New carrier Doppler frequency estimation
@@@ -373,10 -372,10 +372,10 @@@
              // New code Doppler frequency estimation
              d_code_freq_chips = Galileo_E1_CODE_CHIP_RATE_HZ + ((d_carrier_doppler_hz * Galileo_E1_CODE_CHIP_RATE_HZ) / Galileo_E1_FREQ_HZ);
              //carrier phase accumulator for (K) Doppler estimation
 -            d_acc_carrier_phase_rad = d_acc_carrier_phase_rad + GPS_TWO_PI * d_carrier_doppler_hz * Galileo_E1_CODE_PERIOD;
 +            d_acc_carrier_phase_rad -= GPS_TWO_PI * d_carrier_doppler_hz * Galileo_E1_CODE_PERIOD;
              //remnant carrier phase to prevent overflow in the code NCO
              d_rem_carr_phase_rad = d_rem_carr_phase_rad + GPS_TWO_PI * d_carrier_doppler_hz * Galileo_E1_CODE_PERIOD;
--            d_rem_carr_phase_rad = fmod(d_rem_carr_phase_rad, GPS_TWO_PI);
++            d_rem_carr_phase_rad = std::fmod(d_rem_carr_phase_rad, GPS_TWO_PI);
  
              // ################## DLL ##########################################################
              // DLL discriminator
@@@ -400,7 -399,7 +399,7 @@@
              T_prn_seconds = T_chip_seconds * Galileo_E1_B_CODE_LENGTH_CHIPS;
              T_prn_samples = T_prn_seconds * static_cast<double>(d_fs_in);
              K_blk_samples = T_prn_samples + d_rem_code_phase_samples + code_error_filt_secs * static_cast<double>(d_fs_in);
--            d_current_prn_length_samples = round(K_blk_samples); //round to a discrete samples
++            d_current_prn_length_samples = static_cast<int>(std::round(K_blk_samples)); //round to a discrete samples
              //d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample
  
              // ####### CN0 ESTIMATION AND LOCK DETECTORS ######
@@@ -457,7 -456,7 +456,7 @@@
              // Tracking_timestamp_secs is aligned with the CURRENT PRN start sample (Hybridization OK!, but some glitches??)
              current_synchro_data.Tracking_timestamp_secs = (static_cast<double>(d_sample_counter) + static_cast<double>(d_rem_code_phase_samples)) / static_cast<double>(d_fs_in);
              //compute remnant code phase samples AFTER the Tracking timestamp
--            d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; //rounding error < 1 sample
++            d_rem_code_phase_samples = K_blk_samples - static_cast<double>(d_current_prn_length_samples); //rounding error < 1 sample
  
              // This tracking block aligns the Tracking_timestamp_secs with the start sample of the PRN, thus, Code_phase_secs=0
              current_synchro_data.Code_phase_secs = 0;
@@@ -472,10 -471,10 +471,9 @@@
               *  \todo The stop timer has to be moved to the signal source!
               */
              // stream to collect cout calls to improve thread safety
--            std::stringstream tmp_str_stream;
--            if (floor(d_sample_counter / d_fs_in) != d_last_seg)
++            if (std::floor(d_sample_counter / d_fs_in) != d_last_seg)
                  {
--                    d_last_seg = floor(d_sample_counter / d_fs_in);
++                    d_last_seg = std::floor(d_sample_counter / d_fs_in);
  
                      if (d_channel == 0)
                          {
@@@ -498,9 -497,9 +496,9 @@@
      	 */
      	// stream to collect cout calls to improve thread safety
      	std::stringstream tmp_str_stream;
--    	if (floor(d_sample_counter / d_fs_in) != d_last_seg)
++    	if (std::floor(d_sample_counter / d_fs_in) != d_last_seg)
      	{
--    		d_last_seg = floor(d_sample_counter / d_fs_in);
++    		d_last_seg = std::floor(d_sample_counter / d_fs_in);
  
      		if (d_channel == 0)
      		{
diff --cc src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.cc
index 07d64b9,5027cbf..b75505e
--- a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.cc
+++ b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_tracking_cc.cc
@@@ -422,9 -422,9 +422,9 @@@ int Gps_L1_Ca_Dll_Pll_Tracking_cc::gene
              // New code Doppler frequency estimation
              d_code_freq_chips = GPS_L1_CA_CODE_RATE_HZ + ((d_carrier_doppler_hz * GPS_L1_CA_CODE_RATE_HZ) / GPS_L1_FREQ_HZ);
              //carrier phase accumulator for (K) doppler estimation
 -            d_acc_carrier_phase_rad = d_acc_carrier_phase_rad + GPS_TWO_PI * d_carrier_doppler_hz * GPS_L1_CA_CODE_PERIOD;
 +            d_acc_carrier_phase_rad -= GPS_TWO_PI * d_carrier_doppler_hz * GPS_L1_CA_CODE_PERIOD;
              //remanent carrier phase to prevent overflow in the code NCO
-             d_rem_carr_phase_rad = d_rem_carr_phase_rad + GPS_TWO_PI * d_carrier_doppler_hz * GPS_L1_CA_CODE_PERIOD;
+             d_rem_carr_phase_rad = d_rem_carr_phase_rad + GPS_TWO_PI * ( d_if_freq + d_carrier_doppler_hz ) * GPS_L1_CA_CODE_PERIOD;
              d_rem_carr_phase_rad = fmod(d_rem_carr_phase_rad, GPS_TWO_PI);
  
              // ################## DLL ##########################################################
diff --cc src/algorithms/tracking/libs/correlator.h
index 38d2d9b,a5f2f66..aebd198
--- a/src/algorithms/tracking/libs/correlator.h
+++ b/src/algorithms/tracking/libs/correlator.h
@@@ -56,17 -56,43 +56,44 @@@
  class Correlator
  {
  public:
++    Correlator();
++    ~Correlator();
      void Carrier_wipeoff_and_EPL_generic(int signal_length_samples, const gr_complex* input, gr_complex* carrier, gr_complex* E_code, gr_complex* P_code, gr_complex* L_code, gr_complex* E_out, gr_complex* P_out, gr_complex* L_out);
      void Carrier_wipeoff_and_EPL_volk(int signal_length_samples, const gr_complex* input, gr_complex* carrier, gr_complex* E_code, gr_complex* P_code, gr_complex* L_code, gr_complex* E_out, gr_complex* P_out, gr_complex* L_out);
      void Carrier_wipeoff_and_VEPL_volk(int signal_length_samples, const gr_complex* input, gr_complex* carrier, gr_complex* VE_code, gr_complex* E_code, gr_complex* P_code, gr_complex* L_code, gr_complex* VL_code, gr_complex* VE_out, gr_complex* E_out, gr_complex* P_out, gr_complex* L_out, gr_complex* VL_out);
      // void Carrier_wipeoff_and_EPL_volk_IQ(int prn_length_samples,int integration_time ,const gr_complex* input, gr_complex* carrier, gr_complex* E_code, gr_complex* P_code, gr_complex* L_code, gr_complex* P_data_code, gr_complex* E_out, gr_complex* P_out, gr_complex* L_out, gr_complex* P_data_out);
      void Carrier_wipeoff_and_EPL_volk_IQ(int signal_length_samples, const gr_complex* input, gr_complex* carrier, gr_complex* E_code, gr_complex* P_code, gr_complex* L_code, gr_complex* P_data_code, gr_complex* E_out, gr_complex* P_out, gr_complex* L_out, gr_complex* P_data_out);
--    Correlator();
--    ~Correlator();
 -#if USING_VOLK_CW_EPL_CORR_CUSTOM
 -    void Carrier_wipeoff_and_EPL_volk_custom(int signal_length_samples, const gr_complex* input, gr_complex* carrier, gr_complex* E_code, gr_complex* P_code, gr_complex* L_code, gr_complex* E_out, gr_complex* P_out, gr_complex* L_out);
 -#endif
+ 
+     void Carrier_rotate_and_EPL_volk(int signal_length_samples,
+             const gr_complex* input,
+             gr_complex *phase_as_complex,
+             gr_complex phase_inc_as_complex,
+             const gr_complex* E_code,
+             const gr_complex* P_code,
+             const gr_complex* L_code,
+             gr_complex* E_out,
+             gr_complex* P_out,
+             gr_complex* L_out );
+ 
+     void Carrier_rotate_and_VEPL_volk(int signal_length_samples,
+             const gr_complex* input,
+             gr_complex *phase_as_complex,
+             gr_complex phase_inc_as_complex,
+             const gr_complex* VE_code,
+             const gr_complex* E_code,
+             const gr_complex* P_code,
+             const gr_complex* L_code,
+             const gr_complex* VL_code,
+             gr_complex* VE_out,
+             gr_complex* E_out,
+             gr_complex* P_out,
+             gr_complex* L_out,
+             gr_complex* VL_out );
+ 
 +#if USING_VOLK_CW_EPL_CORR_CUSTOM
 +    void Carrier_wipeoff_and_EPL_volk_custom(int signal_length_samples, const gr_complex* input, gr_complex* carrier, gr_complex* E_code, gr_complex* P_code, gr_complex* L_code, gr_complex* E_out, gr_complex* P_out, gr_complex* L_out);
 +#endif
 +
  private:
      unsigned long next_power_2(unsigned long v);
  };
diff --cc src/algorithms/tracking/libs/tracking_discriminators.cc
index 1aaa100,106b3a3..72b51a5
--- a/src/algorithms/tracking/libs/tracking_discriminators.cc
+++ b/src/algorithms/tracking/libs/tracking_discriminators.cc
@@@ -91,17 -91,24 +91,24 @@@ double pll_cloop_two_quadrant_atan(gr_c
  /*
   * DLL Noncoherent Early minus Late envelope normalized discriminator:
   * \f{equation}
-- * 	error=\frac{E-L}{E+L},
++ * 	error=\frac{1}{2}\frac{E-L}{E+L},
   * \f}
   * where \f$E=\sqrt{I_{ES}^2+Q_{ES}^2}\f$ is the Early correlator output absolute value and
   * \f$L=\sqrt{I_{LS}^2+Q_{LS}^2}\f$ is the Late correlator output absolute value. The output is in [chips].
   */
 -float dll_nc_e_minus_l_normalized(gr_complex early_s1, gr_complex late_s1)
 +double dll_nc_e_minus_l_normalized(gr_complex early_s1, gr_complex late_s1)
  {
 -    float P_early, P_late;
 +    double P_early, P_late;
      P_early = std::abs(early_s1);
      P_late  = std::abs(late_s1);
-     return 0.5*(P_early - P_late) / ((P_early + P_late));
+     if( P_early + P_late == 0.0 )
 -    {
 -        return 0.0;
 -    }
++        {
++            return 0.0;
++        }
+     else
 -    {
 -        return (P_early - P_late) / ((P_early + P_late));
 -    }
++        {
++            return 0.5 * (P_early - P_late) / ((P_early + P_late));
++        }
  }
  
  /*
@@@ -113,10 -120,10 +120,17 @@@
   * where \f$E=\sqrt{I_{VE}^2+Q_{VE}^2+I_{E}^2+Q_{E}^2}\f$ and
   * \f$L=\sqrt{I_{VL}^2+Q_{VL}^2+I_{L}^2+Q_{L}^2}\f$ . The output is in [chips].
   */
 -float dll_nc_vemlp_normalized(gr_complex very_early_s1, gr_complex early_s1, gr_complex late_s1, gr_complex very_late_s1)
 +double dll_nc_vemlp_normalized(gr_complex very_early_s1, gr_complex early_s1, gr_complex late_s1, gr_complex very_late_s1)
  {
 -    float P_early, P_late;
 +    double P_early, P_late;
      P_early = std::sqrt(std::norm(very_early_s1) + std::norm(early_s1));
      P_late  = std::sqrt(std::norm(very_late_s1) + std::norm(late_s1));
--    return (P_early - P_late) / ((P_early + P_late));
++    if( P_early + P_late == 0.0 )
++        {
++            return 0.0;
++        }
++    else
++        {
++            return (P_early - P_late) / ((P_early + P_late));
++        }
  }
diff --cc src/core/receiver/gnss_flowgraph.cc
index 1d1c142,3cdacde..00af053
--- a/src/core/receiver/gnss_flowgraph.cc
+++ b/src/core/receiver/gnss_flowgraph.cc
@@@ -34,10 -34,10 +34,13 @@@
  
  #include "gnss_flowgraph.h"
  #include "unistd.h"
++
++#include <algorithm>
  #include <exception>
  #include <iostream>
  #include <set>
  #include <boost/lexical_cast.hpp>
++#include <boost/tokenizer.hpp>
  #include <glog/logging.h>
  #include "configuration_interface.h"
  #include "gnss_block_interface.h"
diff --cc src/core/system_parameters/gnss_signal.cc
index 3230c10,feba0e7..399a6a9
--- a/src/core/system_parameters/gnss_signal.cc
+++ b/src/core/system_parameters/gnss_signal.cc
@@@ -73,7 -73,7 +73,7 @@@ bool operator==(const Gnss_Signal &sig1
  
      if (sig1.get_satellite() == sig2.get_satellite())
          {
-             if (sig1.get_signal_str().compare(sig1.get_signal_str()))
 -            if (sig1.get_signal_str().compare(sig1.get_signal_str())==0)
++            if (sig1.get_signal_str().compare(sig1.get_signal_str()) == 0)
                  {
                      equal = true;
                  }
diff --cc src/core/system_parameters/gnss_synchro.h
index 9c603f9,df688e1..59aed13
--- a/src/core/system_parameters/gnss_synchro.h
+++ b/src/core/system_parameters/gnss_synchro.h
@@@ -32,8 -32,7 +32,8 @@@
  #define GNSS_SDR_GNSS_SYNCHRO_H_
  
  #include "gnss_signal.h"
- #include <deque>
+ 
 +
  /*!
   * \brief This is the class that contains the information that is shared
   * by the processing blocks.

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-hamradio/gnss-sdr.git



More information about the pkg-hamradio-commits mailing list