[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