[hamradio-commits] [gnss-sdr] 83/149: tracking dll pll cAid can work now with gr_complex and cshort just setting the data imput type in config file. All the internal receiver signal chain can work in complex short for the first time. Speed improvement using custom gnss-sdr volk kernels for cshort data input types.

Carles Fernandez carles_fernandez-guest at moszumanska.debian.org
Sat Feb 6 19:43:05 UTC 2016


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 5a716840ab12e9ec782a2622dac7e0f5654817a2
Author: Javier Arribas <javiarribas at gmail.com>
Date:   Tue Jan 19 18:37:30 2016 +0100

    tracking dll pll cAid can work now with gr_complex and cshort just
    setting the data imput type in config file. All the internal receiver
    signal chain can work in complex short for the first time. Speed
    improvement using custom gnss-sdr volk kernels for cshort data input
    types.
---
 conf/gnss-sdr_Hybrid_byte_sim.conf                 |  31 ++--
 .../data_type_adapter/adapters/CMakeLists.txt      |   1 +
 .../data_type_adapter/adapters/ibyte_to_cshort.cc  | 109 ++++++++++++++
 .../data_type_adapter/adapters/ibyte_to_cshort.h   |  91 ++++++++++++
 .../gnuradio_blocks/CMakeLists.txt                 |   1 +
 .../interleaved_byte_to_complex_short.cc           |  71 +++++++++
 .../interleaved_byte_to_complex_short.h            |  59 ++++++++
 src/algorithms/tracking/adapters/CMakeLists.txt    |   1 -
 .../adapters/gps_l1_ca_dll_pll_c_aid_tracking.cc   | 111 ++++++++++++--
 .../adapters/gps_l1_ca_dll_pll_c_aid_tracking.h    |   5 +-
 .../gps_l1_ca_dll_pll_c_aid_tracking_16sc.cc       | 159 ---------------------
 .../gps_l1_ca_dll_pll_c_aid_tracking_16sc.h        | 114 ---------------
 .../tracking/gnuradio_blocks/CMakeLists.txt        |   2 +-
 ...c.cc => gps_l1_ca_dll_pll_c_aid_tracking_sc.cc} |  46 +++---
 ..._cc.h => gps_l1_ca_dll_pll_c_aid_tracking_sc.h} |  31 ++--
 .../tracking/libs/cpu_multicorrelator_16sc.cc      |   6 +-
 src/core/receiver/gnss_block_factory.cc            |  20 +--
 17 files changed, 498 insertions(+), 360 deletions(-)

diff --git a/conf/gnss-sdr_Hybrid_byte_sim.conf b/conf/gnss-sdr_Hybrid_byte_sim.conf
index 4e4d558..1e99f74 100644
--- a/conf/gnss-sdr_Hybrid_byte_sim.conf
+++ b/conf/gnss-sdr_Hybrid_byte_sim.conf
@@ -56,7 +56,10 @@ SignalConditioner.implementation=Signal_Conditioner
 ;######### DATA_TYPE_ADAPTER CONFIG ############
 ;## Changes the type of input data. Please disable it in this version.
 ;#implementation: [Pass_Through] disables this block
-DataTypeAdapter.implementation=Ibyte_To_Complex
+DataTypeAdapter.implementation=Ibyte_To_Cshort
+DataTypeAdapter.dump=false
+;#dump_filename: Log path and filename.
+DataTypeAdapter.dump_filename=../data/DataTypeAdapter.dat
 
 ;######### INPUT_FILTER CONFIG ############
 ;## Filter the input data. Can be combined with frequency translation for IF signals
@@ -81,10 +84,10 @@ InputFilter.dump_filename=../data/input_filter.dat
 ;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
 
 ;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
-InputFilter.input_item_type=gr_complex
+InputFilter.input_item_type=cshort
 
 ;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
-InputFilter.output_item_type=gr_complex
+InputFilter.output_item_type=cshort
 
 ;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
 InputFilter.taps_item_type=float
@@ -146,8 +149,8 @@ Resampler.dump=false
 ;#dump_filename: Log path and filename.
 Resampler.dump_filename=../data/resampler.dat
 
-;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Resampler.item_type=gr_complex
+;#item_type: Type and resolution for each of the signal samples.
+Resampler.item_type=cshort
 
 ;#sample_freq_in: the sample frequency of the input signal
 Resampler.sample_freq_in=4000000
@@ -164,6 +167,10 @@ Channels_1B.count=0
 ;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
 Channels.in_acquisition=1
 
+
+;#IMPORTANT: When cshort is used as input type for Acq and Trk, please set the Channel type to cshort here
+;#item_type: Type and resolution for each of the signal samples.
+Channel.item_type=cshort
 ;#signal:
 ;#if the option is disabled by default is assigned "1C" GPS L1 C/A
 Channel1.signal=1C
@@ -190,7 +197,7 @@ Acquisition_1C.dump=false
 ;#filename: Log path and filename
 Acquisition_1C.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1C.item_type=gr_complex
+Acquisition_1C.item_type=cshort
 ;#if: Signal intermediate frequency in [Hz]
 Acquisition_1C.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
@@ -214,7 +221,7 @@ Acquisition_1B.dump=false
 ;#filename: Log path and filename
 Acquisition_1B.dump_filename=./acq_dump.dat
 ;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
-Acquisition_1B.item_type=gr_complex
+Acquisition_1B.item_type=cshort
 ;#if: Signal intermediate frequency in [Hz]
 Acquisition_1B.if=0
 ;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
@@ -233,15 +240,15 @@ Acquisition_1B.doppler_step=125
 ;######### TRACKING GPS CONFIG ############
 
 ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
-Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking_16sc
+Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
-Tracking_1C.item_type=gr_complex
+Tracking_1C.item_type=cshort
 
 ;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1C.if=0
 
 ;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
-Tracking_1C.dump=true
+Tracking_1C.dump=false
 
 ;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
 Tracking_1C.dump_filename=../data/epl_tracking_ch_
@@ -263,7 +270,7 @@ Tracking_1C.order=3;
 ;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
 Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
 ;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
-Tracking_1B.item_type=gr_complex
+Tracking_1B.item_type=cshort
 
 ;#sampling_frequency: Signal Intermediate Frequency in [Hz]
 Tracking_1B.if=0
@@ -311,7 +318,7 @@ TelemetryDecoder_1B.decimation_factor=1;
 Observables.implementation=GPS_L1_CA_Observables
 
 ;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
-Observables.dump=true
+Observables.dump=false
 
 ;#dump_filename: Log path and filename.
 Observables.dump_filename=./observables.dat
diff --git a/src/algorithms/data_type_adapter/adapters/CMakeLists.txt b/src/algorithms/data_type_adapter/adapters/CMakeLists.txt
index 86acfaf..ee0c65e 100644
--- a/src/algorithms/data_type_adapter/adapters/CMakeLists.txt
+++ b/src/algorithms/data_type_adapter/adapters/CMakeLists.txt
@@ -21,6 +21,7 @@ set(DATATYPE_ADAPTER_SOURCES
     byte_to_short.cc
     ibyte_to_cbyte.cc
     ibyte_to_complex.cc
+    ibyte_to_cshort.cc
     ishort_to_cshort.cc
 	ishort_to_complex.cc 
 	 )
diff --git a/src/algorithms/data_type_adapter/adapters/ibyte_to_cshort.cc b/src/algorithms/data_type_adapter/adapters/ibyte_to_cshort.cc
new file mode 100644
index 0000000..2934f14
--- /dev/null
+++ b/src/algorithms/data_type_adapter/adapters/ibyte_to_cshort.cc
@@ -0,0 +1,109 @@
+/*!
+ * \file ibyte_to_cshort.cc
+ * \brief Adapts an I/Q interleaved short integer (16 bits) sample stream
+ * to a gr_complex (float) stream
+ * \author Carles Fernandez-Prades, cfernandez(at)cttc.es
+ *
+ * -------------------------------------------------------------------------
+ *
+ * Copyright (C) 2010-2015  (see AUTHORS file for a list of contributors)
+ *
+ * GNSS-SDR is a software defined Global Navigation
+ *          Satellite Systems receiver
+ *
+ * This file is part of GNSS-SDR.
+ *
+ * GNSS-SDR is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GNSS-SDR is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "ibyte_to_cshort.h"
+#include <glog/logging.h>
+#include <volk/volk.h>
+#include "configuration_interface.h"
+
+using google::LogMessage;
+
+IbyteToCshort::IbyteToCshort(ConfigurationInterface* configuration, std::string role,
+        unsigned int in_streams, unsigned int out_streams,
+        boost::shared_ptr<gr::msg_queue> queue) :
+                config_(configuration), role_(role), in_streams_(in_streams),
+                out_streams_(out_streams), queue_(queue)
+{
+
+    std::string default_input_item_type = "byte";
+    std::string default_output_item_type = "cshort";
+    std::string default_dump_filename = "../data/input_filter.dat";
+
+    DLOG(INFO) << "role " << role_;
+
+    input_item_type_ = config_->property(role_ + ".input_item_type",
+                                         default_input_item_type);
+
+    dump_ = config_->property(role_ + ".dump", false);
+    dump_filename_ = config_->property(role_ + ".dump_filename",
+                                       default_dump_filename);
+
+    size_t item_size = sizeof(lv_16sc_t);
+
+    interleaved_byte_to_complex_short_ = make_interleaved_byte_to_complex_short();
+
+    DLOG(INFO) << "data_type_adapter_(" << interleaved_byte_to_complex_short_->unique_id()<<")";
+
+    if (dump_)
+        {
+            DLOG(INFO) << "Dumping output into file " << dump_filename_;
+            file_sink_ = gr::blocks::file_sink::make(item_size, dump_filename_.c_str());
+        }
+
+}
+
+
+IbyteToCshort::~IbyteToCshort()
+{}
+
+
+void IbyteToCshort::connect(gr::top_block_sptr top_block)
+{
+    if (dump_)
+        {
+            top_block->connect(interleaved_byte_to_complex_short_, 0, file_sink_, 0);
+        }
+}
+
+
+void IbyteToCshort::disconnect(gr::top_block_sptr top_block)
+{
+    if (dump_)
+        {
+            top_block->disconnect(interleaved_byte_to_complex_short_, 0, file_sink_, 0);
+        }
+}
+
+
+
+gr::basic_block_sptr IbyteToCshort::get_left_block()
+{
+    return interleaved_byte_to_complex_short_;
+}
+
+
+
+gr::basic_block_sptr IbyteToCshort::get_right_block()
+{
+    return interleaved_byte_to_complex_short_;
+}
+
+
diff --git a/src/algorithms/data_type_adapter/adapters/ibyte_to_cshort.h b/src/algorithms/data_type_adapter/adapters/ibyte_to_cshort.h
new file mode 100644
index 0000000..0d15a9b
--- /dev/null
+++ b/src/algorithms/data_type_adapter/adapters/ibyte_to_cshort.h
@@ -0,0 +1,91 @@
+/*!
+ * \file ibyte_to_cshort.h
+ * \brief Adapts a short interleaved sample stream into a std::complex<short> stream
+ * \author Carles Fernandez-Prades, cfernandez(at)cttc.es
+ *
+ * -------------------------------------------------------------------------
+ *
+ * Copyright (C) 2010-2015  (see AUTHORS file for a list of contributors)
+ *
+ * GNSS-SDR is a software defined Global Navigation
+ *          Satellite Systems receiver
+ *
+ * This file is part of GNSS-SDR.
+ *
+ * GNSS-SDR is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GNSS-SDR is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#ifndef GNSS_SDR_IBYTE_TO_CSHORT_H_
+#define GNSS_SDR_IBYTE_TO_CSHORT_H_
+
+#include <string>
+#include <gnuradio/blocks/file_sink.h>
+#include <gnuradio/msg_queue.h>
+#include "gnss_block_interface.h"
+#include "interleaved_byte_to_complex_short.h"
+
+
+
+class ConfigurationInterface;
+
+/*!
+ * \brief Adapts a short integer (16 bits) interleaved sample stream into a std::complex<short> stream
+ *
+ */
+class IbyteToCshort: public GNSSBlockInterface
+{
+public:
+    IbyteToCshort(ConfigurationInterface* configuration,
+            std::string role, unsigned int in_streams,
+            unsigned int out_streams, boost::shared_ptr<gr::msg_queue> queue);
+
+    virtual ~IbyteToCshort();
+
+    std::string role()
+    {
+        return role_;
+    }
+    //! Returns "Ibyte_To_Cshort"
+    std::string implementation()
+    {
+        return "Ibyte_To_Cshort";
+    }
+    size_t item_size()
+    {
+        return 0;
+    }
+
+    void connect(gr::top_block_sptr top_block);
+    void disconnect(gr::top_block_sptr top_block);
+    gr::basic_block_sptr get_left_block();
+    gr::basic_block_sptr get_right_block();
+
+private:
+    interleaved_byte_to_complex_short_sptr interleaved_byte_to_complex_short_;
+    ConfigurationInterface* config_;
+    bool dump_;
+    std::string dump_filename_;
+    std::string input_item_type_;
+    std::string output_item_type_;
+    std::string role_;
+    unsigned int in_streams_;
+    unsigned int out_streams_;
+    boost::shared_ptr<gr::msg_queue> queue_;
+    gr::blocks::file_sink::sptr file_sink_;
+};
+
+#endif
+
diff --git a/src/algorithms/data_type_adapter/gnuradio_blocks/CMakeLists.txt b/src/algorithms/data_type_adapter/gnuradio_blocks/CMakeLists.txt
index 0646a27..64eb317 100644
--- a/src/algorithms/data_type_adapter/gnuradio_blocks/CMakeLists.txt
+++ b/src/algorithms/data_type_adapter/gnuradio_blocks/CMakeLists.txt
@@ -20,6 +20,7 @@
 set(DATA_TYPE_GR_BLOCKS_SOURCES 
      interleaved_byte_to_complex_byte.cc
      interleaved_short_to_complex_short.cc
+     interleaved_byte_to_complex_short.cc
 )
 
 include_directories(
diff --git a/src/algorithms/data_type_adapter/gnuradio_blocks/interleaved_byte_to_complex_short.cc b/src/algorithms/data_type_adapter/gnuradio_blocks/interleaved_byte_to_complex_short.cc
new file mode 100644
index 0000000..273c512
--- /dev/null
+++ b/src/algorithms/data_type_adapter/gnuradio_blocks/interleaved_byte_to_complex_short.cc
@@ -0,0 +1,71 @@
+/*!
+ * \file interleaved_byte_to_complex_short.cc
+ * \brief Adapts a byte (8-bits) interleaved sample stream into a std::complex<short> stream
+ * \author Javier Arribas (jarribas(at)cttc.es)
+ *
+ * -------------------------------------------------------------------------
+ *
+ * Copyright (C) 2010-2015  (see AUTHORS file for a list of contributors)
+ *
+ * GNSS-SDR is a software defined Global Navigation
+ *          Satellite Systems receiver
+ *
+ * This file is part of GNSS-SDR.
+ *
+ * GNSS-SDR is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GNSS-SDR is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * -------------------------------------------------------------------------
+ */
+
+
+#include "interleaved_byte_to_complex_short.h"
+#include <gnuradio/io_signature.h>
+#include <volk/volk.h>
+
+
+interleaved_byte_to_complex_short_sptr make_interleaved_byte_to_complex_short()
+{
+    return interleaved_byte_to_complex_short_sptr(new interleaved_byte_to_complex_short());
+}
+
+
+
+interleaved_byte_to_complex_short::interleaved_byte_to_complex_short() : sync_decimator("interleaved_byte_to_complex_short",
+                        gr::io_signature::make (1, 1, sizeof(int8_t)),
+                        gr::io_signature::make (1, 1, sizeof(lv_16sc_t)), // lv_16sc_t is a Volk's typedef for std::complex<short int>
+                        2)
+{
+    const int alignment_multiple = volk_get_alignment() / sizeof(lv_16sc_t);
+    set_alignment(std::max(1, alignment_multiple));
+}
+
+
+int interleaved_byte_to_complex_short::work(int noutput_items,
+        gr_vector_const_void_star &input_items,
+        gr_vector_void_star &output_items)
+{
+    const int8_t *in = (const int8_t *) input_items[0];
+    lv_16sc_t *out = (lv_16sc_t *) output_items[0];
+    // This could be put into a Volk kernel
+    int8_t real_part;
+    int8_t imag_part;
+    for(int number = 0; number < noutput_items; number++)
+        {
+            // lv_cmake(r, i) defined at volk/volk_complex.h
+            real_part = *in++;
+            imag_part = *in++;
+            *out++ = lv_cmake((int16_t)real_part, (int16_t)imag_part);
+        }
+    return noutput_items;
+}
diff --git a/src/algorithms/data_type_adapter/gnuradio_blocks/interleaved_byte_to_complex_short.h b/src/algorithms/data_type_adapter/gnuradio_blocks/interleaved_byte_to_complex_short.h
new file mode 100644
index 0000000..386e1fd
--- /dev/null
+++ b/src/algorithms/data_type_adapter/gnuradio_blocks/interleaved_byte_to_complex_short.h
@@ -0,0 +1,59 @@
+/*!
+ * \file interleaved_byte_to_complex_short.h
+ * \brief Adapts a byte (8-bits) interleaved sample stream into a std::complex<short> stream
+ * \author Javier Arribas (jarribas(at)cttc.es)
+ *
+ * -------------------------------------------------------------------------
+ *
+ * Copyright (C) 2010-2015  (see AUTHORS file for a list of contributors)
+ *
+ * GNSS-SDR is a software defined Global Navigation
+ *          Satellite Systems receiver
+ *
+ * This file is part of GNSS-SDR.
+ *
+ * GNSS-SDR is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GNSS-SDR is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#ifndef GNSS_SDR_INTERLEAVED_BYTE_TO_COMPLEX_SHORT_H_
+#define GNSS_SDR_INTERLEAVED_BYTE_TO_COMPLEX_SHORT_H_
+
+#include <boost/shared_ptr.hpp>
+#include <gnuradio/sync_decimator.h>
+
+class interleaved_byte_to_complex_short;
+
+typedef boost::shared_ptr<interleaved_byte_to_complex_short> interleaved_byte_to_complex_short_sptr;
+
+interleaved_byte_to_complex_short_sptr make_interleaved_byte_to_complex_short();
+
+/*!
+ * \brief This class adapts a short (16-bits) interleaved sample stream
+ * into a std::complex<short> stream
+ */
+class interleaved_byte_to_complex_short : public gr::sync_decimator
+{
+private:
+    friend interleaved_byte_to_complex_short_sptr make_interleaved_byte_to_complex_short();
+public:
+    interleaved_byte_to_complex_short();
+
+    int work(int noutput_items,
+            gr_vector_const_void_star &input_items,
+            gr_vector_void_star &output_items);
+};
+
+#endif
diff --git a/src/algorithms/tracking/adapters/CMakeLists.txt b/src/algorithms/tracking/adapters/CMakeLists.txt
index 831286d..11b83df 100644
--- a/src/algorithms/tracking/adapters/CMakeLists.txt
+++ b/src/algorithms/tracking/adapters/CMakeLists.txt
@@ -32,7 +32,6 @@ set(TRACKING_ADAPTER_SOURCES
      gps_l1_ca_tcp_connector_tracking.cc
      galileo_e5a_dll_pll_tracking.cc
      gps_l2_m_dll_pll_tracking.cc
-     gps_l1_ca_dll_pll_c_aid_tracking_16sc.cc
      ${OPT_TRACKING_ADAPTERS}
 )
  
diff --git a/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_c_aid_tracking.cc b/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_c_aid_tracking.cc
index 08e24f8..436c68e 100644
--- a/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_c_aid_tracking.cc
+++ b/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_c_aid_tracking.cc
@@ -58,12 +58,11 @@ GpsL1CaDllPllCAidTracking::GpsL1CaDllPllCAidTracking(
     int f_if;
     bool dump;
     std::string dump_filename;
-    std::string item_type;
     std::string default_item_type = "gr_complex";
     float pll_bw_hz;
     float dll_bw_hz;
     float early_late_space_chips;
-    item_type = configuration->property(role + ".item_type", default_item_type);
+    item_type_ = configuration->property(role + ".item_type", default_item_type);
     //vector_length = configuration->property(role + ".vector_length", 2048);
     fs_in = configuration->property("GNSS-SDR.internal_fs_hz", 2048000);
     f_if = configuration->property(role + ".if", 0);
@@ -77,10 +76,10 @@ GpsL1CaDllPllCAidTracking::GpsL1CaDllPllCAidTracking(
     vector_length = std::round(fs_in / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS));
 
     //################# MAKE TRACKING GNURadio object ###################
-    if (item_type.compare("gr_complex") == 0)
+    if (item_type_.compare("gr_complex") == 0)
         {
             item_size_ = sizeof(gr_complex);
-            tracking_ = gps_l1_ca_dll_pll_c_aid_make_tracking_cc(
+            tracking_cc = gps_l1_ca_dll_pll_c_aid_make_tracking_cc(
                     f_if,
                     fs_in,
                     vector_length,
@@ -90,15 +89,28 @@ GpsL1CaDllPllCAidTracking::GpsL1CaDllPllCAidTracking(
                     pll_bw_hz,
                     dll_bw_hz,
                     early_late_space_chips);
-        }
-    else
+            DLOG(INFO) << "tracking(" << tracking_cc->unique_id() << ")";
+    }else if(item_type_.compare("cshort") == 0)
+    	{
+        item_size_ = sizeof(lv_16sc_t);
+        tracking_sc = gps_l1_ca_dll_pll_c_aid_make_tracking_sc(
+                f_if,
+                fs_in,
+                vector_length,
+                queue_,
+                dump,
+                dump_filename,
+                pll_bw_hz,
+                dll_bw_hz,
+                early_late_space_chips);
+        DLOG(INFO) << "tracking(" << tracking_sc->unique_id() << ")";
+    }else
         {
             item_size_ = sizeof(gr_complex);
-            LOG(WARNING) << item_type << " unknown tracking item type.";
+            LOG(WARNING) << item_type_ << " unknown tracking item type.";
         }
     channel_ = 0;
     channel_internal_queue_ = 0;
-    DLOG(INFO) << "tracking(" << tracking_->unique_id() << ")";
 }
 
 
@@ -108,7 +120,19 @@ GpsL1CaDllPllCAidTracking::~GpsL1CaDllPllCAidTracking()
 
 void GpsL1CaDllPllCAidTracking::start_tracking()
 {
-    tracking_->start_tracking();
+
+    if (item_type_.compare("gr_complex") == 0)
+        {
+            tracking_cc->start_tracking();
+        }
+    else if (item_type_.compare("cshort") == 0)
+        {
+            tracking_sc->start_tracking();
+        }
+    else
+        {
+            LOG(WARNING) << item_type_ << " unknown tracking item type";
+        }
 }
 
 /*
@@ -117,7 +141,19 @@ void GpsL1CaDllPllCAidTracking::start_tracking()
 void GpsL1CaDllPllCAidTracking::set_channel(unsigned int channel)
 {
     channel_ = channel;
-    tracking_->set_channel(channel);
+
+    if (item_type_.compare("gr_complex") == 0)
+        {
+            tracking_cc->set_channel(channel);
+        }
+    else if (item_type_.compare("cshort") == 0)
+        {
+            tracking_sc->set_channel(channel);
+        }
+    else
+        {
+            LOG(WARNING) << item_type_ << " unknown tracking item type";
+        }
 }
 
 /*
@@ -127,12 +163,35 @@ void GpsL1CaDllPllCAidTracking::set_channel_queue(
         concurrent_queue<int> *channel_internal_queue)
 {
     channel_internal_queue_ = channel_internal_queue;
-    tracking_->set_channel_queue(channel_internal_queue_);
+
+    if (item_type_.compare("gr_complex") == 0)
+        {
+            tracking_cc->set_channel_queue(channel_internal_queue_);
+        }
+    else if (item_type_.compare("cshort") == 0)
+        {
+            tracking_sc->set_channel_queue(channel_internal_queue_);
+        }
+    else
+        {
+            LOG(WARNING) << item_type_ << " unknown tracking item type";
+        }
 }
 
 void GpsL1CaDllPllCAidTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro)
 {
-    tracking_->set_gnss_synchro(p_gnss_synchro);
+    if (item_type_.compare("gr_complex") == 0)
+        {
+            tracking_cc->set_gnss_synchro(p_gnss_synchro);
+        }
+    else if (item_type_.compare("cshort") == 0)
+        {
+            tracking_sc->set_gnss_synchro(p_gnss_synchro);
+        }
+    else
+        {
+            LOG(WARNING) << item_type_ << " unknown tracking item type";
+        }
 }
 
 void GpsL1CaDllPllCAidTracking::connect(gr::top_block_sptr top_block)
@@ -149,11 +208,35 @@ void GpsL1CaDllPllCAidTracking::disconnect(gr::top_block_sptr top_block)
 
 gr::basic_block_sptr GpsL1CaDllPllCAidTracking::get_left_block()
 {
-    return tracking_;
+    if (item_type_.compare("gr_complex") == 0)
+        {
+            return tracking_cc;
+        }
+    else if (item_type_.compare("cshort") == 0)
+        {
+            return tracking_sc;
+        }
+    else
+        {
+            LOG(WARNING) << item_type_ << " unknown tracking item type";
+            return nullptr;
+        }
 }
 
 gr::basic_block_sptr GpsL1CaDllPllCAidTracking::get_right_block()
 {
-    return tracking_;
+    if (item_type_.compare("gr_complex") == 0)
+        {
+            return tracking_cc;
+        }
+    else if (item_type_.compare("cshort") == 0)
+        {
+            return tracking_sc;
+        }
+    else
+        {
+            LOG(WARNING) << item_type_ << " unknown tracking item type";
+            return nullptr;
+        }
 }
 
diff --git a/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_c_aid_tracking.h b/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_c_aid_tracking.h
index d643df5..efb5325 100644
--- a/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_c_aid_tracking.h
+++ b/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_c_aid_tracking.h
@@ -42,6 +42,7 @@
 #include <gnuradio/msg_queue.h>
 #include "tracking_interface.h"
 #include "gps_l1_ca_dll_pll_c_aid_tracking_cc.h"
+#include "gps_l1_ca_dll_pll_c_aid_tracking_sc.h"
 
 
 class ConfigurationInterface;
@@ -101,8 +102,10 @@ public:
     void start_tracking();
 
 private:
-    gps_l1_ca_dll_pll_c_aid_tracking_cc_sptr tracking_;
+    gps_l1_ca_dll_pll_c_aid_tracking_cc_sptr tracking_cc;
+    gps_l1_ca_dll_pll_c_aid_tracking_sc_sptr tracking_sc;
     size_t item_size_;
+    std::string item_type_;
     unsigned int channel_;
     std::string role_;
     unsigned int in_streams_;
diff --git a/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_c_aid_tracking_16sc.cc b/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_c_aid_tracking_16sc.cc
deleted file mode 100644
index c89158b..0000000
--- a/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_c_aid_tracking_16sc.cc
+++ /dev/null
@@ -1,159 +0,0 @@
-/*!
- * \file gps_l1_ca_dll_pll_c_aid_tracking_16sc.cc
- * \brief Implementation of an adapter of a DLL+PLL tracking loop block
- * for GPS L1 C/A to a TrackingInterface
- * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com
- *         Javier Arribas, 2011. jarribas(at)cttc.es
- *
- * Code DLL + carrier PLL according to the algorithms described in:
- * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen,
- * A Software-Defined GPS and Galileo Receiver. A Single-Frequency
- * Approach, Birkhauser, 2007
- *
- * -------------------------------------------------------------------------
- *
- * Copyright (C) 2010-2015  (see AUTHORS file for a list of contributors)
- *
- * GNSS-SDR is a software defined Global Navigation
- *          Satellite Systems receiver
- *
- * This file is part of GNSS-SDR.
- *
- * GNSS-SDR is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GNSS-SDR is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
- *
- * -------------------------------------------------------------------------
- */
-
-
-#include "gps_l1_ca_dll_pll_c_aid_tracking_16sc.h"
-#include <glog/logging.h>
-#include "GPS_L1_CA.h"
-#include "configuration_interface.h"
-
-
-using google::LogMessage;
-
-GpsL1CaDllPllCAidTracking16sc::GpsL1CaDllPllCAidTracking16sc(
-        ConfigurationInterface* configuration, std::string role,
-        unsigned int in_streams, unsigned int out_streams,
-        boost::shared_ptr<gr::msg_queue> queue) :
-                role_(role), in_streams_(in_streams), out_streams_(out_streams),
-                queue_(queue)
-{
-    DLOG(INFO) << "role " << role;
-    //################# CONFIGURATION PARAMETERS ########################
-    int fs_in;
-    int vector_length;
-    int f_if;
-    bool dump;
-    std::string dump_filename;
-    std::string item_type;
-    std::string default_item_type = "gr_complex";
-    float pll_bw_hz;
-    float dll_bw_hz;
-    float early_late_space_chips;
-    item_type = configuration->property(role + ".item_type", default_item_type);
-    //vector_length = configuration->property(role + ".vector_length", 2048);
-    fs_in = configuration->property("GNSS-SDR.internal_fs_hz", 2048000);
-    f_if = configuration->property(role + ".if", 0);
-    dump = configuration->property(role + ".dump", false);
-    pll_bw_hz = configuration->property(role + ".pll_bw_hz", 50.0);
-    dll_bw_hz = configuration->property(role + ".dll_bw_hz", 2.0);
-    early_late_space_chips = configuration->property(role + ".early_late_space_chips", 0.5);
-    std::string default_dump_filename = "./track_ch";
-    dump_filename = configuration->property(role + ".dump_filename",
-            default_dump_filename); //unused!
-    vector_length = std::round(fs_in / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS));
-
-    //################# MAKE TRACKING GNURadio object ###################
-    if (item_type.compare("gr_complex") == 0)
-        {
-            item_size_ = sizeof(gr_complex);
-            tracking_ = gps_l1_ca_dll_pll_c_aid_make_tracking_16sc_cc(
-                    f_if,
-                    fs_in,
-                    vector_length,
-                    queue_,
-                    dump,
-                    dump_filename,
-                    pll_bw_hz,
-                    dll_bw_hz,
-                    early_late_space_chips);
-        }
-    else
-        {
-            item_size_ = sizeof(gr_complex);
-            LOG(WARNING) << item_type << " unknown tracking item type.";
-        }
-    channel_ = 0;
-    channel_internal_queue_ = 0;
-    DLOG(INFO) << "tracking(" << tracking_->unique_id() << ")";
-}
-
-
-GpsL1CaDllPllCAidTracking16sc::~GpsL1CaDllPllCAidTracking16sc()
-{}
-
-
-void GpsL1CaDllPllCAidTracking16sc::start_tracking()
-{
-    tracking_->start_tracking();
-}
-
-/*
- * Set tracking channel unique ID
- */
-void GpsL1CaDllPllCAidTracking16sc::set_channel(unsigned int channel)
-{
-    channel_ = channel;
-    tracking_->set_channel(channel);
-}
-
-/*
- * Set tracking channel internal queue
- */
-void GpsL1CaDllPllCAidTracking16sc::set_channel_queue(
-        concurrent_queue<int> *channel_internal_queue)
-{
-    channel_internal_queue_ = channel_internal_queue;
-    tracking_->set_channel_queue(channel_internal_queue_);
-}
-
-void GpsL1CaDllPllCAidTracking16sc::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro)
-{
-    tracking_->set_gnss_synchro(p_gnss_synchro);
-}
-
-void GpsL1CaDllPllCAidTracking16sc::connect(gr::top_block_sptr top_block)
-{
-	if(top_block) { /* top_block is not null */};
-	//nothing to connect, now the tracking uses gr_sync_decimator
-}
-
-void GpsL1CaDllPllCAidTracking16sc::disconnect(gr::top_block_sptr top_block)
-{
-	if(top_block) { /* top_block is not null */};
-	//nothing to disconnect, now the tracking uses gr_sync_decimator
-}
-
-gr::basic_block_sptr GpsL1CaDllPllCAidTracking16sc::get_left_block()
-{
-    return tracking_;
-}
-
-gr::basic_block_sptr GpsL1CaDllPllCAidTracking16sc::get_right_block()
-{
-    return tracking_;
-}
-
diff --git a/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_c_aid_tracking_16sc.h b/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_c_aid_tracking_16sc.h
deleted file mode 100644
index eb95c7c..0000000
--- a/src/algorithms/tracking/adapters/gps_l1_ca_dll_pll_c_aid_tracking_16sc.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*!
- * \file gps_l1_ca_dll_pll_c_aid_tracking_16sc.h
- * \brief  Interface of an adapter of a DLL+PLL tracking loop block
- * for GPS L1 C/A to a TrackingInterface
- * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com
- *         Javier Arribas, 2011. jarribas(at)cttc.es
- *
- * Code DLL + carrier PLL according to the algorithms described in:
- * K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen,
- * A Software-Defined GPS and Galileo Receiver. A Single-Frequency
- * Approach, Birkha user, 2007
- *
- * -------------------------------------------------------------------------
- *
- * Copyright (C) 2010-2015  (see AUTHORS file for a list of contributors)
- *
- * GNSS-SDR is a software defined Global Navigation
- *          Satellite Systems receiver
- *
- * This file is part of GNSS-SDR.
- *
- * GNSS-SDR is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GNSS-SDR is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
- *
- * -------------------------------------------------------------------------
- */
-
-#ifndef GNSS_SDR_GPS_L1_CA_DLL_PLL_C_AID_TRACKING_16SC_H_
-#define GNSS_SDR_GPS_L1_CA_DLL_PLL_C_AID_TRACKING_16SC_H_
-
-#include <string>
-#include <gnuradio/msg_queue.h>
-#include "tracking_interface.h"
-#include "gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc.h"
-
-
-class ConfigurationInterface;
-
-/*!
- * \brief This class implements a code DLL + carrier PLL tracking loop
- */
-class GpsL1CaDllPllCAidTracking16sc : public TrackingInterface
-{
-public:
-
-  GpsL1CaDllPllCAidTracking16sc(ConfigurationInterface* configuration,
-            std::string role,
-            unsigned int in_streams,
-            unsigned int out_streams,
-            boost::shared_ptr<gr::msg_queue> queue);
-
-    virtual ~GpsL1CaDllPllCAidTracking16sc();
-
-    std::string role()
-    {
-        return role_;
-    }
-
-    //! Returns "gps_l1_ca_dll_pll_c_aid_tracking_16sc"
-    std::string implementation()
-    {
-        return "gps_l1_ca_dll_pll_c_aid_tracking_16sc";
-    }
-    size_t item_size()
-    {
-        return item_size_;
-    }
-
-    void connect(gr::top_block_sptr top_block);
-    void disconnect(gr::top_block_sptr top_block);
-    gr::basic_block_sptr get_left_block();
-    gr::basic_block_sptr get_right_block();
-
-
-    /*!
-     * \brief Set tracking channel unique ID
-     */
-    void set_channel(unsigned int channel);
-
-    /*!
-     * \brief Set acquisition/tracking common Gnss_Synchro object pointer
-     * to efficiently exchange synchronization data between acquisition and tracking blocks
-     */
-    void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro);
-
-    /*!
-     * \brief Set tracking channel internal queue
-     */
-    void set_channel_queue(concurrent_queue<int> *channel_internal_queue);
-
-    void start_tracking();
-
-private:
-    gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc_sptr tracking_;
-    size_t item_size_;
-    unsigned int channel_;
-    std::string role_;
-    unsigned int in_streams_;
-    unsigned int out_streams_;
-    boost::shared_ptr<gr::msg_queue> queue_;
-    concurrent_queue<int> *channel_internal_queue_;
-};
-
-#endif // GNSS_SDR_GPS_L1_CA_DLL_PLL_C_AID_TRACKING_16SC_H_
diff --git a/src/algorithms/tracking/gnuradio_blocks/CMakeLists.txt b/src/algorithms/tracking/gnuradio_blocks/CMakeLists.txt
index 46e71b7..357e0ae 100644
--- a/src/algorithms/tracking/gnuradio_blocks/CMakeLists.txt
+++ b/src/algorithms/tracking/gnuradio_blocks/CMakeLists.txt
@@ -33,7 +33,7 @@ set(TRACKING_GR_BLOCKS_SOURCES
      galileo_e5a_dll_pll_tracking_cc.cc
      gps_l2_m_dll_pll_tracking_cc.cc
      gps_l1_ca_dll_pll_c_aid_tracking_cc.cc
-     gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc.cc
+     gps_l1_ca_dll_pll_c_aid_tracking_sc.cc
      ${OPT_TRACKING_BLOCKS}   
 )
 
diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc.cc b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_sc.cc
similarity index 93%
rename from src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc.cc
rename to src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_sc.cc
index ce45da8..d74738e 100644
--- a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc.cc
+++ b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_sc.cc
@@ -1,5 +1,5 @@
 /*!
- * \file gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc.cc
+ * \file gps_l1_ca_dll_pll_c_aid_tracking_sc.cc
  * \brief Implementation of a code DLL + carrier PLL tracking block
  * \author Javier Arribas, 2015. jarribas(at)cttc.es
  *
@@ -28,7 +28,7 @@
  * -------------------------------------------------------------------------
  */
 
-#include "gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc.h"
+#include "gps_l1_ca_dll_pll_c_aid_tracking_sc.h"
 #include <cmath>
 #include <iostream>
 #include <memory>
@@ -56,8 +56,8 @@
 
 using google::LogMessage;
 
-gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc_sptr
-gps_l1_ca_dll_pll_c_aid_make_tracking_16sc_cc(
+gps_l1_ca_dll_pll_c_aid_tracking_sc_sptr
+gps_l1_ca_dll_pll_c_aid_make_tracking_sc(
         long if_freq,
         long fs_in,
         unsigned int vector_length,
@@ -68,13 +68,13 @@ gps_l1_ca_dll_pll_c_aid_make_tracking_16sc_cc(
         float dll_bw_hz,
         float early_late_space_chips)
 {
-    return gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc_sptr(new gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc(if_freq,
+    return gps_l1_ca_dll_pll_c_aid_tracking_sc_sptr(new gps_l1_ca_dll_pll_c_aid_tracking_sc(if_freq,
             fs_in, vector_length, queue, dump, dump_filename, pll_bw_hz, dll_bw_hz, early_late_space_chips));
 }
 
 
 
-void gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc::forecast (int noutput_items,
+void gps_l1_ca_dll_pll_c_aid_tracking_sc::forecast (int noutput_items,
         gr_vector_int &ninput_items_required)
 {
     if (noutput_items != 0)
@@ -85,7 +85,7 @@ void gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc::forecast (int noutput_items,
 
 
 
-gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc::gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc(
+gps_l1_ca_dll_pll_c_aid_tracking_sc::gps_l1_ca_dll_pll_c_aid_tracking_sc(
         long if_freq,
         long fs_in,
         unsigned int vector_length,
@@ -95,7 +95,7 @@ gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc::gps_l1_ca_dll_pll_c_aid_tracking_16sc_
         float pll_bw_hz,
         float dll_bw_hz,
         float early_late_space_chips) :
-        gr::block("gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)),
+        gr::block("gps_l1_ca_dll_pll_c_aid_tracking_sc", gr::io_signature::make(1, 1, sizeof(lv_16sc_t)),
                 gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
 {
     // initialize internal vars
@@ -119,8 +119,6 @@ gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc::gps_l1_ca_dll_pll_c_aid_tracking_16sc_
     d_ca_code = static_cast<gr_complex*>(volk_malloc(static_cast<int>(GPS_L1_CA_CODE_LENGTH_CHIPS) * sizeof(gr_complex), volk_get_alignment()));
     d_ca_code_16sc = static_cast<lv_16sc_t*>(volk_malloc(static_cast<int>(GPS_L1_CA_CODE_LENGTH_CHIPS) * sizeof(lv_16sc_t), volk_get_alignment()));
 
-    d_in_16sc = static_cast<lv_16sc_t*>(volk_malloc(2 * d_vector_length * sizeof(lv_16sc_t), volk_get_alignment()));
-
     // correlator outputs (scalar)
     d_n_correlator_taps = 3; // Early, Prompt, and Late
 
@@ -185,7 +183,7 @@ gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc::gps_l1_ca_dll_pll_c_aid_tracking_16sc_
 }
 
 
-void gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc::start_tracking()
+void gps_l1_ca_dll_pll_c_aid_tracking_sc::start_tracking()
 {
     /*
      *  correct the code phase according to the delay between acq and trk
@@ -272,14 +270,12 @@ void gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc::start_tracking()
 }
 
 
-gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc::~gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc()
+gps_l1_ca_dll_pll_c_aid_tracking_sc::~gps_l1_ca_dll_pll_c_aid_tracking_sc()
 {
     d_dump_file.close();
 
     volk_free(d_local_code_shift_chips);
     volk_free(d_ca_code);
-
-    volk_free(d_in_16sc);
     volk_free(d_ca_code_16sc);
     volk_free(d_correlator_outs_16sc);
 
@@ -289,11 +285,11 @@ gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc::~gps_l1_ca_dll_pll_c_aid_tracking_16sc
 
 
 
-int gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc::general_work (int noutput_items, gr_vector_int &ninput_items,
+int gps_l1_ca_dll_pll_c_aid_tracking_sc::general_work (int noutput_items, gr_vector_int &ninput_items,
         gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
 {
     // Block input data and block output stream pointers
-    const gr_complex* in = (gr_complex*) input_items[0]; //PRN start block alignment
+    const lv_16sc_t* in = (lv_16sc_t*) input_items[0]; //PRN start block alignment
     Gnss_Synchro **out = (Gnss_Synchro **) &output_items[0];
 
     // GNSS_SYNCHRO OBJECT to interchange data between tracking->telemetry_decoder
@@ -334,16 +330,16 @@ int gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc::general_work (int noutput_items, g
             // ################# CARRIER WIPEOFF AND CORRELATORS ##############################
             // perform carrier wipe-off and compute Early, Prompt and Late correlation
 
-            volk_gnsssdr_32fc_convert_16ic(d_in_16sc,in,d_correlation_length_samples);
+            //volk_gnsssdr_32fc_convert_16ic(d_in_16sc,in,d_correlation_length_samples);
             //std::cout << std::fixed << std::setw( 11 ) << std::setprecision( 6 );
-            //std::cout<<"in="<<in[0]<<" in 16sc="<<d_in_16sc[0]<<std::endl;
+            //std::cout<<"in="<<in[0]<<std::endl;
 
-            multicorrelator_cpu_16sc.set_input_output_vectors(d_correlator_outs_16sc,d_in_16sc);
+            multicorrelator_cpu_16sc.set_input_output_vectors(d_correlator_outs_16sc,in);
             multicorrelator_cpu_16sc.Carrier_wipeoff_multicorrelator_resampler(d_rem_carrier_phase_rad, d_carrier_phase_step_rad, d_rem_code_phase_chips, d_code_phase_step_chips, d_correlation_length_samples);
 
-            //std::cout<<"E float="<<d_correlator_outs[0]<<" E 16sc="<<d_correlator_outs_16sc[0]<<std::endl;
-            //std::cout<<"P float="<<d_correlator_outs[1]<<" P 16sc="<<d_correlator_outs_16sc[1]<<std::endl;
-            //std::cout<<"L float="<<d_correlator_outs[2]<<" L 16sc="<<d_correlator_outs_16sc[2]<<std::endl;
+            //std::cout<<"E 16sc="<<d_correlator_outs_16sc[0]<<std::endl;
+            //std::cout<<"P 16sc="<<d_correlator_outs_16sc[1]<<std::endl;
+            //std::cout<<"L 16sc="<<d_correlator_outs_16sc[2]<<std::endl;
 
             //std::cout<<std::endl;
             // UPDATE INTEGRATION TIME
@@ -576,7 +572,7 @@ int gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc::general_work (int noutput_items, g
     return 1; //output tracking result ALWAYS even in the case of d_enable_tracking==false
 }
 
-void gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc::set_channel(unsigned int channel)
+void gps_l1_ca_dll_pll_c_aid_tracking_sc::set_channel(unsigned int channel)
 {
     d_channel = channel;
     LOG(INFO) << "Tracking Channel set to " << d_channel;
@@ -601,12 +597,12 @@ void gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc::set_channel(unsigned int channel)
         }
 }
 
-void gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc::set_channel_queue(concurrent_queue<int> *channel_internal_queue)
+void gps_l1_ca_dll_pll_c_aid_tracking_sc::set_channel_queue(concurrent_queue<int> *channel_internal_queue)
 {
     d_channel_internal_queue = channel_internal_queue;
 }
 
-void gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro)
+void gps_l1_ca_dll_pll_c_aid_tracking_sc::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro)
 {
     d_acquisition_gnss_synchro = p_gnss_synchro;
 }
diff --git a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc.h b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_sc.h
similarity index 86%
rename from src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc.h
rename to src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_sc.h
index b49c99e..adfccfb 100644
--- a/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc.h
+++ b/src/algorithms/tracking/gnuradio_blocks/gps_l1_ca_dll_pll_c_aid_tracking_sc.h
@@ -1,5 +1,5 @@
 /*!
- * \file gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc.h
+ * \file gps_l1_ca_dll_pll_c_aid_tracking_sc.h
  * \brief Interface of a code DLL + carrier PLL tracking block
  * \author Carlos Aviles, 2010. carlos.avilesr(at)googlemail.com
  *         Javier Arribas, 2011. jarribas(at)cttc.es
@@ -34,8 +34,8 @@
  * -------------------------------------------------------------------------
  */
 
-#ifndef GNSS_SDR_GPS_L1_CA_DLL_PLL_C_AID_TRACKING_16SC_CC_H
-#define	GNSS_SDR_GPS_L1_CA_DLL_PLL_C_AID_TRACKING_16SC_CC_H
+#ifndef GNSS_SDR_GPS_L1_CA_DLL_PLL_C_AID_TRACKING_SC_H
+#define	GNSS_SDR_GPS_L1_CA_DLL_PLL_C_AID_TRACKING_SC_H
 
 #include <fstream>
 #include <queue>
@@ -51,16 +51,15 @@
 #include "gnss_synchro.h"
 #include "tracking_2nd_DLL_filter.h"
 #include "tracking_FLL_PLL_filter.h"
-#include "cpu_multicorrelator.h"
 #include "cpu_multicorrelator_16sc.h"
 
-class gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc;
+class gps_l1_ca_dll_pll_c_aid_tracking_sc;
 
-typedef boost::shared_ptr<gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc>
-        gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc_sptr;
+typedef boost::shared_ptr<gps_l1_ca_dll_pll_c_aid_tracking_sc>
+        gps_l1_ca_dll_pll_c_aid_tracking_sc_sptr;
 
-gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc_sptr
-gps_l1_ca_dll_pll_c_aid_make_tracking_16sc_cc(long if_freq,
+gps_l1_ca_dll_pll_c_aid_tracking_sc_sptr
+gps_l1_ca_dll_pll_c_aid_make_tracking_sc(long if_freq,
                                    long fs_in, unsigned
                                    int vector_length,
                                    boost::shared_ptr<gr::msg_queue> queue,
@@ -75,10 +74,10 @@ gps_l1_ca_dll_pll_c_aid_make_tracking_16sc_cc(long if_freq,
 /*!
  * \brief This class implements a DLL + PLL tracking loop block
  */
-class gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc: public gr::block
+class gps_l1_ca_dll_pll_c_aid_tracking_sc: public gr::block
 {
 public:
-    ~gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc();
+    ~gps_l1_ca_dll_pll_c_aid_tracking_sc();
 
     void set_channel(unsigned int channel);
     void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro);
@@ -91,8 +90,8 @@ public:
     void forecast (int noutput_items, gr_vector_int &ninput_items_required);
 
 private:
-    friend gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc_sptr
-    gps_l1_ca_dll_pll_c_aid_make_tracking_16sc_cc(long if_freq,
+    friend gps_l1_ca_dll_pll_c_aid_tracking_sc_sptr
+    gps_l1_ca_dll_pll_c_aid_make_tracking_sc(long if_freq,
             long fs_in, unsigned
             int vector_length,
             boost::shared_ptr<gr::msg_queue> queue,
@@ -102,7 +101,7 @@ private:
             float dll_bw_hz,
             float early_late_space_chips);
 
-    gps_l1_ca_dll_pll_c_aid_tracking_16sc_cc(long if_freq,
+    gps_l1_ca_dll_pll_c_aid_tracking_sc(long if_freq,
             long fs_in, unsigned
             int vector_length,
             boost::shared_ptr<gr::msg_queue> queue,
@@ -127,8 +126,6 @@ private:
     double d_early_late_spc_chips;
     int d_n_correlator_taps;
 
-    lv_16sc_t* d_in_16sc;
-
     gr_complex* d_ca_code;
     lv_16sc_t* d_ca_code_16sc;
     float* d_local_code_shift_chips;
@@ -186,4 +183,4 @@ private:
     std::string sys;
 };
 
-#endif //GNSS_SDR_GPS_L1_CA_DLL_PLL_C_AID_TRACKING_16SC_CC_H
+#endif //GNSS_SDR_GPS_L1_CA_DLL_PLL_C_AID_TRACKING_SC_H
diff --git a/src/algorithms/tracking/libs/cpu_multicorrelator_16sc.cc b/src/algorithms/tracking/libs/cpu_multicorrelator_16sc.cc
index a82977d..5bef792 100644
--- a/src/algorithms/tracking/libs/cpu_multicorrelator_16sc.cc
+++ b/src/algorithms/tracking/libs/cpu_multicorrelator_16sc.cc
@@ -99,8 +99,8 @@ void cpu_multicorrelator_16sc::update_local_code(int correlator_length_samples,f
 			tmp_code_phases_chips,
 			code_phase_step_chips,
 			correlator_length_samples,
-			d_code_length_chips,
-			d_n_correlators);
+			d_n_correlators,
+			d_code_length_chips);
 
 	volk_free(tmp_code_phases_chips);
 
@@ -148,7 +148,7 @@ bool cpu_multicorrelator_16sc::Carrier_wipeoff_multicorrelator_resampler(
     //std::cout<<"d_sig_doppler_wiped 16sc="<<d_sig_doppler_wiped[23]<<std::endl;
     update_local_code(signal_length_samples, rem_code_phase_chips, code_phase_step_chips);
 
-    volk_gnsssdr_16ic_x2_dot_prod_16ic_xn(d_corr_out, d_sig_doppler_wiped, (const lv_16sc_t**)d_local_codes_resampled, signal_length_samples, d_n_correlators);
+    volk_gnsssdr_16ic_x2_dot_prod_16ic_xn(d_corr_out, d_sig_doppler_wiped, (const lv_16sc_t**)d_local_codes_resampled, d_n_correlators,  signal_length_samples);
 
     //for (int current_correlator_tap = 0; current_correlator_tap < d_n_correlators; current_correlator_tap++)
     //    {
diff --git a/src/core/receiver/gnss_block_factory.cc b/src/core/receiver/gnss_block_factory.cc
index fa9e5b4..e0c3bd4 100644
--- a/src/core/receiver/gnss_block_factory.cc
+++ b/src/core/receiver/gnss_block_factory.cc
@@ -57,6 +57,7 @@
 #include "array_signal_conditioner.h"
 #include "byte_to_short.h"
 #include "ibyte_to_cbyte.h"
+#include "ibyte_to_cshort.h"
 #include "ibyte_to_complex.h"
 #include "ishort_to_cshort.h"
 #include "ishort_to_complex.h"
@@ -79,7 +80,6 @@
 #include "galileo_e5a_noncoherent_iq_acquisition_caf.h"
 #include "gps_l1_ca_dll_pll_tracking.h"
 #include "gps_l1_ca_dll_pll_c_aid_tracking.h"
-#include "gps_l1_ca_dll_pll_c_aid_tracking_16sc.h"
 #include "gps_l1_ca_dll_pll_optim_tracking.h"
 #include "gps_l1_ca_dll_fll_pll_tracking.h"
 #include "gps_l1_ca_tcp_connector_tracking.h"
@@ -1170,6 +1170,12 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetBlock(
                     out_streams, queue));
             block = std::move(block_);
         }
+    else if (implementation.compare("Ibyte_To_Cshort") == 0)
+        {
+            std::unique_ptr<GNSSBlockInterface>block_(new IbyteToCshort(configuration.get(), role, in_streams,
+                    out_streams, queue));
+            block = std::move(block_);
+        }
     else if (implementation.compare("Ibyte_To_Complex") == 0)
         {
             std::unique_ptr<GNSSBlockInterface>block_(new IbyteToComplex(configuration.get(), role, in_streams,
@@ -1319,12 +1325,6 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetBlock(
                     out_streams, queue));
             block = std::move(block_);
         }
-    else if (implementation.compare("GPS_L1_CA_DLL_PLL_C_Aid_Tracking_16sc") == 0)
-        {
-            std::unique_ptr<TrackingInterface> block_(new GpsL1CaDllPllCAidTracking16sc(configuration.get(), role, in_streams,
-                    out_streams, queue));
-            block = std::move(block_);
-        }
     else if (implementation.compare("GPS_L1_CA_DLL_PLL_Optim_Tracking") == 0)
         {
             std::unique_ptr<GNSSBlockInterface> block_(new GpsL1CaDllPllOptimTracking(configuration.get(), role, in_streams,
@@ -1596,12 +1596,6 @@ std::unique_ptr<TrackingInterface> GNSSBlockFactory::GetTrkBlock(
                     out_streams, queue));
             block = std::move(block_);
         }
-    else if (implementation.compare("GPS_L1_CA_DLL_PLL_C_Aid_Tracking_16sc") == 0)
-        {
-            std::unique_ptr<TrackingInterface> block_(new GpsL1CaDllPllCAidTracking16sc(configuration.get(), role, in_streams,
-                    out_streams, queue));
-            block = std::move(block_);
-        }
     else if (implementation.compare("GPS_L1_CA_DLL_PLL_Optim_Tracking") == 0)
         {
             std::unique_ptr<TrackingInterface> block_(new GpsL1CaDllPllOptimTracking(configuration.get(), role, in_streams,

-- 
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