[hamradio-commits] [gnss-sdr] 168/251: Added missing files

Carles Fernandez carles_fernandez-guest at moszumanska.debian.org
Wed Sep 2 00:22:46 UTC 2015


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

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

commit 8630cf2fbeb3708c2364545fe67ee10ab9295e5a
Author: Javier <jarribas at cttc.es>
Date:   Sat Jun 6 00:36:47 2015 +0200

    Added missing files
---
 .../observables/adapters/mixed_observables.cc      |  94 ++++++++++
 .../observables/adapters/mixed_observables.h       |  91 +++++++++
 .../gnuradio_blocks/mixed_observables_cc.cc        | 205 +++++++++++++++++++++
 .../gnuradio_blocks/mixed_observables_cc.h         |  80 ++++++++
 4 files changed, 470 insertions(+)

diff --git a/src/algorithms/observables/adapters/mixed_observables.cc b/src/algorithms/observables/adapters/mixed_observables.cc
new file mode 100644
index 0000000..9882956
--- /dev/null
+++ b/src/algorithms/observables/adapters/mixed_observables.cc
@@ -0,0 +1,94 @@
+/*!
+ * \file mixed_observables.cc
+ * \brief Implementation of an adapter of a mixed observables block (muti-frequency and multi-system)
+ * to a ObservablesInterface
+ * \author Javier Arribas, 2015. 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 "mixed_observables.h"
+#include "configuration_interface.h"
+#include "mixed_observables_cc.h"
+#include <glog/logging.h>
+
+using google::LogMessage;
+
+MixedObservables::MixedObservables(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)
+{
+    int output_rate_ms;
+    output_rate_ms = configuration->property(role + ".output_rate_ms", 500);
+    std::string default_dump_filename = "./observables.dat";
+    DLOG(INFO) << "role " << role;
+    bool flag_averaging;
+    flag_averaging = configuration->property(role + ".flag_averaging", false);
+    dump_ = configuration->property(role + ".dump", false);
+    dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename);
+    //fs_in_ = configuration->property("GNSS-SDR.internal_fs_hz", 2048000);
+    observables_ = mixed_make_observables_cc(in_streams_, queue_, dump_, dump_filename_, output_rate_ms, flag_averaging);
+    //observables_->set_fs_in(fs_in_);
+    DLOG(INFO) << "pseudorange(" << observables_->unique_id() << ")";
+}
+
+
+MixedObservables::~MixedObservables()
+{}
+
+void MixedObservables::connect(gr::top_block_sptr top_block)
+{
+    if(top_block) { /* top_block is not null */};
+    // Nothing to connect internally
+    DLOG(INFO) << "nothing to connect internally";
+}
+
+
+
+void MixedObservables::disconnect(gr::top_block_sptr top_block)
+{
+    if(top_block) { /* top_block is not null */};
+    // Nothing to disconnect
+}
+
+
+gr::basic_block_sptr MixedObservables::get_left_block()
+{
+    return observables_;
+}
+
+
+gr::basic_block_sptr MixedObservables::get_right_block()
+{
+    return observables_;
+}
+
diff --git a/src/algorithms/observables/adapters/mixed_observables.h b/src/algorithms/observables/adapters/mixed_observables.h
new file mode 100644
index 0000000..cb7ad28
--- /dev/null
+++ b/src/algorithms/observables/adapters/mixed_observables.h
@@ -0,0 +1,91 @@
+/*!
+ * \file mixed_observables.h
+ * \brief Implementation of an adapter of a mixed observables block (muti-frequency and multi-system)
+ * to a ObservablesInterface
+ * \author Javier Arribas, 2015. 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_MIXED_OBSERVABLES_H_
+#define GNSS_SDR_MIXED_OBSERVABLES_H_
+
+#include <string>
+#include <gnuradio/msg_queue.h>
+#include "observables_interface.h"
+#include "mixed_observables_cc.h"
+
+
+class ConfigurationInterface;
+
+/*!
+ * \brief This class implements an ObservablesInterface for mixed observables block (muti-frequency and multi-system)
+ */
+class MixedObservables : public ObservablesInterface
+{
+public:
+    MixedObservables(ConfigurationInterface* configuration,
+                       std::string role,
+                       unsigned int in_streams,
+                       unsigned int out_streams,
+                       boost::shared_ptr<gr::msg_queue> queue);
+    virtual ~MixedObservables();
+    std::string role()
+    {
+        return role_;
+    }
+
+    //!  Returns "Mixed_Observables"
+    std::string implementation()
+    {
+        return "Mixed_Observables";
+    }
+    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();
+    void reset()
+    {
+        return;
+    }
+
+    //! All blocks must have an item_size() function implementation
+    size_t item_size()
+    {
+        return sizeof(gr_complex);
+    }
+
+private:
+    mixed_observables_cc_sptr observables_;
+    bool dump_;
+    //unsigned int fs_in_;
+    std::string dump_filename_;
+    std::string role_;
+    unsigned int in_streams_;
+    unsigned int out_streams_;
+    boost::shared_ptr<gr::msg_queue> queue_;
+};
+
+#endif
diff --git a/src/algorithms/observables/gnuradio_blocks/mixed_observables_cc.cc b/src/algorithms/observables/gnuradio_blocks/mixed_observables_cc.cc
new file mode 100644
index 0000000..b209f6a
--- /dev/null
+++ b/src/algorithms/observables/gnuradio_blocks/mixed_observables_cc.cc
@@ -0,0 +1,205 @@
+/*!
+ * \file mixed_observables_cc.cc
+ * \brief Implementation of the pseudorange computation block for MIXED observables (Multi-frequency and Multi-system)
+ * \author Javier Arribas, 2015. 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 "mixed_observables_cc.h"
+#include <algorithm>
+#include <bitset>
+#include <cmath>
+#include <iostream>
+#include <map>
+#include <sstream>
+#include <vector>
+#include <gnuradio/io_signature.h>
+#include <glog/logging.h>
+#include "control_message_factory.h"
+#include "gnss_synchro.h"
+
+
+using google::LogMessage;
+
+
+mixed_observables_cc_sptr
+mixed_make_observables_cc(unsigned int nchannels, boost::shared_ptr<gr::msg_queue> queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging)
+{
+    return mixed_observables_cc_sptr(new mixed_observables_cc(nchannels, queue, dump, dump_filename, output_rate_ms, flag_averaging));
+}
+
+
+mixed_observables_cc::mixed_observables_cc(unsigned int nchannels, boost::shared_ptr<gr::msg_queue> queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging) :
+		                        gr::block("mixed_observables_cc", gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro)),
+		                        gr::io_signature::make(nchannels, nchannels, sizeof(Gnss_Synchro)))
+{
+    // initialize internal vars
+    d_queue = queue;
+    d_dump = dump;
+    d_nchannels = nchannels;
+    d_output_rate_ms = output_rate_ms;
+    d_dump_filename = dump_filename;
+    d_flag_averaging = flag_averaging;
+
+    // ############# ENABLE DATA FILE LOG #################
+    if (d_dump == true)
+        {
+            if (d_dump_file.is_open() == false)
+                {
+                    try
+                    {
+                            d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit );
+                            d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary);
+                            LOG(INFO) << "Observables dump enabled Log file: " << d_dump_filename.c_str() << std::endl;
+                    }
+                    catch (std::ifstream::failure& e)
+                    {
+                            LOG(WARNING) << "Exception opening observables dump file " << e.what() << std::endl;
+                    }
+                }
+        }
+}
+
+
+
+mixed_observables_cc::~mixed_observables_cc()
+{
+    d_dump_file.close();
+}
+
+
+bool MixedPairCompare_gnss_synchro_Prn_delay_ms(const std::pair<int,Gnss_Synchro>& a, const std::pair<int,Gnss_Synchro>& b)
+{
+    return (a.second.Prn_timestamp_ms) < (b.second.Prn_timestamp_ms);
+}
+
+
+bool MixedPairCompare_gnss_synchro_d_TOW_at_current_symbol(const std::pair<int,Gnss_Synchro>& a, const std::pair<int,Gnss_Synchro>& b)
+{
+    return (a.second.d_TOW_at_current_symbol) < (b.second.d_TOW_at_current_symbol);
+}
+
+
+int mixed_observables_cc::general_work (int noutput_items, gr_vector_int &ninput_items,
+        gr_vector_const_void_star &input_items,	gr_vector_void_star &output_items)
+{
+    Gnss_Synchro **in = (Gnss_Synchro **)  &input_items[0];   // Get the input pointer
+    Gnss_Synchro **out = (Gnss_Synchro **)  &output_items[0]; // Get the output pointer
+
+    Gnss_Synchro current_gnss_synchro[d_nchannels];
+    std::map<int,Gnss_Synchro> current_gnss_synchro_map;
+    std::map<int,Gnss_Synchro>::iterator gnss_synchro_iter;
+
+    /*
+     * 1. Read the GNSS SYNCHRO objects from available channels
+     */
+    for (unsigned int i = 0; i < d_nchannels; i++)
+        {
+            //Copy the telemetry decoder data to local copy
+            current_gnss_synchro[i] = in[i][0];
+            /*
+             * 1.2 Assume no valid pseudoranges
+             */
+            current_gnss_synchro[i].Flag_valid_pseudorange = false;
+            current_gnss_synchro[i].Pseudorange_m = 0.0;
+            if(current_gnss_synchro[i].Signal[0]=='2'){
+				if (current_gnss_synchro[i].Flag_valid_word) //if this channel have valid word
+					{
+						//record the word structure in a map for pseudorange computation
+						current_gnss_synchro_map.insert(std::pair<int, Gnss_Synchro>(current_gnss_synchro[i].Channel_ID, current_gnss_synchro[i]));
+					}
+            }
+        }
+
+    /*
+     * 2. Compute RAW pseudoranges using COMMON RECEPTION TIME algorithm. Use only the valid channels (channels that are tracking a satellite)
+     */
+    if(current_gnss_synchro_map.size() > 0)
+        {
+            /*
+             *  2.1 Use CURRENT set of measurements and find the nearest satellite
+             *  common RX time algorithm
+             */
+            // what is the most recent symbol TOW in the current set? -> this will be the reference symbol
+            gnss_synchro_iter = max_element(current_gnss_synchro_map.begin(), current_gnss_synchro_map.end(), MixedPairCompare_gnss_synchro_d_TOW_at_current_symbol);
+            double d_TOW_reference = gnss_synchro_iter->second.d_TOW_at_current_symbol;
+            double d_ref_PRN_rx_time_ms = gnss_synchro_iter->second.Prn_timestamp_ms;
+            //int reference_channel= gnss_synchro_iter->second.Channel_ID;
+
+            // Now compute RX time differences due to the PRN alignment in the correlators
+            double traveltime_ms;
+            double pseudorange_m;
+            double delta_rx_time_ms;
+            for(gnss_synchro_iter = current_gnss_synchro_map.begin(); gnss_synchro_iter != current_gnss_synchro_map.end(); gnss_synchro_iter++)
+            {
+            	// compute the required symbol history shift in order to match the reference symbol
+            	delta_rx_time_ms = gnss_synchro_iter->second.Prn_timestamp_ms - d_ref_PRN_rx_time_ms;
+            	//compute the pseudorange
+            	traveltime_ms = (d_TOW_reference-gnss_synchro_iter->second.d_TOW_at_current_symbol)*1000.0 + delta_rx_time_ms + GPS_STARTOFFSET_ms;
+            	pseudorange_m = traveltime_ms * GPS_C_m_ms; // [m]
+                // update the pseudorange object
+                current_gnss_synchro[gnss_synchro_iter->second.Channel_ID] = gnss_synchro_iter->second;
+                current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].Pseudorange_m = pseudorange_m;
+                current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].Flag_valid_pseudorange = true;
+                current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].d_TOW_at_current_symbol = round(d_TOW_reference*1000)/1000 + GPS_STARTOFFSET_ms/1000.0;
+                std::cout<<"Pseudorange_m="<<current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].Pseudorange_m<<std::endl;
+                std::cout<<"Signal="<<current_gnss_synchro[gnss_synchro_iter->second.Channel_ID].Signal<<std::endl;
+            }
+        }
+
+    if(d_dump == true)
+        {
+            // MULTIPLEXED FILE RECORDING - Record results to file
+            try
+            {
+                    double tmp_double;
+                    for (unsigned int i = 0; i < d_nchannels; i++)
+                        {
+                            tmp_double = current_gnss_synchro[i].d_TOW_at_current_symbol;
+                            d_dump_file.write((char*)&tmp_double, sizeof(double));
+                            tmp_double = current_gnss_synchro[i].Prn_timestamp_ms;
+                            d_dump_file.write((char*)&tmp_double, sizeof(double));
+                            tmp_double = current_gnss_synchro[i].Pseudorange_m;
+                            d_dump_file.write((char*)&tmp_double, sizeof(double));
+                            tmp_double = (double)(current_gnss_synchro[i].Flag_valid_pseudorange==true);
+                            d_dump_file.write((char*)&tmp_double, sizeof(double));
+                            tmp_double = current_gnss_synchro[i].PRN;
+                            d_dump_file.write((char*)&tmp_double, sizeof(double));
+                        }
+            }
+            catch (const std::ifstream::failure& e)
+            {
+                    LOG(WARNING) << "Exception writing observables dump file " << e.what() << std::endl;
+            }
+        }
+
+    consume_each(1); //one by one
+    for (unsigned int i = 0; i < d_nchannels; i++)
+        {
+            *out[i] = current_gnss_synchro[i];
+        }
+    return 1; // Output the observables
+}
+
diff --git a/src/algorithms/observables/gnuradio_blocks/mixed_observables_cc.h b/src/algorithms/observables/gnuradio_blocks/mixed_observables_cc.h
new file mode 100644
index 0000000..0b2d8bc
--- /dev/null
+++ b/src/algorithms/observables/gnuradio_blocks/mixed_observables_cc.h
@@ -0,0 +1,80 @@
+/*!
+ * \file mixed_observables_cc.h
+ * \brief Interface of the pseudorange computation block for MIXED observables (Multi-frequency and Multi-system)
+ * \author Javier Arribas, 2015. 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_MIXED_OBSERVABLES_CC_H_
+#define	GNSS_SDR_MIXED_OBSERVABLES_CC_H_
+
+#include <fstream>
+#include <queue>
+#include <string>
+#include <utility>
+#include <boost/thread/mutex.hpp>
+#include <boost/thread/thread.hpp>
+#include <gnuradio/block.h>
+#include <gnuradio/msg_queue.h>
+#include "concurrent_queue.h"
+#include "gps_navigation_message.h"
+#include "rinex_printer.h"
+#include "GPS_L1_CA.h"
+#include "gnss_synchro.h"
+
+class mixed_observables_cc;
+
+typedef boost::shared_ptr<mixed_observables_cc> mixed_observables_cc_sptr;
+
+mixed_observables_cc_sptr
+mixed_make_observables_cc(unsigned int n_channels, boost::shared_ptr<gr::msg_queue> queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging);
+
+/*!
+ * \brief This class implements a block that computes MIXED observables (Multi-frequency and Multi-system)
+ */
+class mixed_observables_cc : public gr::block
+{
+public:
+    ~mixed_observables_cc ();
+    int general_work (int noutput_items, gr_vector_int &ninput_items,
+            gr_vector_const_void_star &input_items, gr_vector_void_star &output_items);
+
+private:
+    friend mixed_observables_cc_sptr
+    mixed_make_observables_cc(unsigned int nchannels, boost::shared_ptr<gr::msg_queue> queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging);
+    mixed_observables_cc(unsigned int nchannels, boost::shared_ptr<gr::msg_queue> queue, bool dump, std::string dump_filename, int output_rate_ms, bool flag_averaging);
+
+    // class private vars
+    boost::shared_ptr<gr::msg_queue> d_queue;
+    bool d_dump;
+    bool d_flag_averaging;
+    unsigned int d_nchannels;
+    int d_output_rate_ms;
+    std::string d_dump_filename;
+    std::ofstream d_dump_file;
+};
+
+#endif

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