Introducing Gnss_Satellite into the receiver

git-svn-id: https://svn.code.sf.net/p/gnss-sdr/code/trunk@130 64b25241-fba3-4117-9849-534c7e92360d
This commit is contained in:
Carles Fernandez 2012-01-19 07:35:49 +00:00
parent 115b36c722
commit d9aff36247
8 changed files with 112 additions and 33 deletions

View File

@ -292,7 +292,7 @@ void gps_l1_ca_gps_sdr_acquisition_cc::calculate_magnitudes(
d_ifft->execute(); // inverse FFT of the result = convolution in time d_ifft->execute(); // inverse FFT of the result = convolution in time
x86_gr_complex_mag(d_ifft->get_outbuf(), d_fft_size); // d_ifft->get_outbuf()=|abs(·)|^2 x86_gr_complex_mag(d_ifft->get_outbuf(), d_fft_size); // d_ifft->get_outbuf()=|abs(·)|^2
x86_float_max((float*)d_ifft->get_outbuf(), &indext, &magt, d_fft_size); // find max of |abs(·)|^2 -> index and magt x86_float_max((float*)d_ifft->get_outbuf(), &indext, &magt, d_fft_size); // find max of |abs(á)|^2 -> index and magt
if (magt > d_mag) if (magt > d_mag)
{ // if the magnitude is > threshold { // if the magnitude is > threshold
@ -306,7 +306,7 @@ void gps_l1_ca_gps_sdr_acquisition_cc::calculate_magnitudes(
memcpy(d_best_magnitudes, d_ifft->get_outbuf(), sizeof(float) memcpy(d_best_magnitudes, d_ifft->get_outbuf(), sizeof(float)
* d_fft_size); * d_fft_size);
// Remove the maximum and its neighbours to calculate the mean // Remove the maximum and its neighbors to calculate the mean
((float*)d_ifft->get_outbuf())[indext] = 0.0; ((float*)d_ifft->get_outbuf())[indext] = 0.0;
if (indext != 0) if (indext != 0)
{ {

View File

@ -86,6 +86,7 @@ Channel::Channel(ConfigurationInterface *configuration, unsigned int channel,
connected_ = false; connected_ = false;
message_ = 0; message_ = 0;
gnss_satellite_ = Gnss_Satellite();
} }
@ -96,6 +97,7 @@ Channel::~Channel()
delete trk_; delete trk_;
delete nav_; delete nav_;
delete pass_through_; delete pass_through_;
//delete gnss_satellite_;
} }
@ -166,12 +168,12 @@ gr_basic_block_sptr Channel::get_right_block()
void Channel::set_satellite(unsigned int satellite) void Channel::set_satellite(Gnss_Satellite satellite)
{ {
satellite_ = satellite; gnss_satellite_ = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
acq_->set_satellite(satellite); acq_->set_satellite(satellite.get_PRN());
trk_->set_satellite(satellite); trk_->set_satellite(satellite.get_PRN());
nav_->set_satellite(satellite); nav_->set_satellite(satellite.get_PRN());
} }
@ -236,14 +238,14 @@ void Channel::process_channel_messages()
case 1: case 1:
LOG_AT_LEVEL(INFO) << "Channel " << channel_ LOG_AT_LEVEL(INFO) << "Channel " << channel_
<< " ACQ SUCCESS satellite " << satellite_; << " ACQ SUCCESS satellite " << gnss_satellite_;
channel_fsm_.Event_gps_valid_acquisition(); channel_fsm_.Event_gps_valid_acquisition();
break; break;
case 2: case 2:
LOG_AT_LEVEL(INFO) << "Channel " << channel_ LOG_AT_LEVEL(INFO) << "Channel " << channel_
<< " ACQ FAILED satellite " << satellite_; << " ACQ FAILED satellite " << gnss_satellite_;
if (repeat_ == true) if (repeat_ == true)
{ {
channel_fsm_.Event_gps_failed_acquisition_repeat(); channel_fsm_.Event_gps_failed_acquisition_repeat();
@ -256,7 +258,7 @@ void Channel::process_channel_messages()
case 3: case 3:
LOG_AT_LEVEL(INFO) << "Channel " << channel_ LOG_AT_LEVEL(INFO) << "Channel " << channel_
<< " TRACKING FAILED satellite " << satellite_ << " TRACKING FAILED satellite " << gnss_satellite_
<< ", reacquisition."; << ", reacquisition.";
channel_fsm_.Event_gps_failed_tracking(); channel_fsm_.Event_gps_failed_tracking();
break; break;

View File

@ -42,6 +42,7 @@
#include "control_message_factory.h" #include "control_message_factory.h"
#include "concurrent_queue.h" #include "concurrent_queue.h"
class ConfigurationInterface; class ConfigurationInterface;
class AcquisitionInterface; class AcquisitionInterface;
class TrackingInterface; class TrackingInterface;
@ -77,7 +78,7 @@ public:
size_t item_size(){ return 0; } size_t item_size(){ return 0; }
unsigned int satellite(){ return satellite_; } Gnss_Satellite satellite() const { return gnss_satellite_; }
AcquisitionInterface* acquisition(){ return acq_; } AcquisitionInterface* acquisition(){ return acq_; }
@ -86,7 +87,7 @@ public:
TelemetryDecoderInterface* telemetry(){ return nav_; } TelemetryDecoderInterface* telemetry(){ return nav_; }
void start_acquisition(); void start_acquisition();
void set_satellite(unsigned int satellite); void set_satellite(Gnss_Satellite satellite);
void start(); void start();
/*! /*!
@ -106,7 +107,7 @@ private:
std::string implementation_; std::string implementation_;
unsigned int channel_; unsigned int channel_;
unsigned int satellite_; Gnss_Satellite gnss_satellite_;
bool connected_; bool connected_;
bool stop_; bool stop_;
int message_; int message_;

View File

@ -38,6 +38,7 @@
#define GNSS_SDR_CHANNEL_INTERFACE_H_ #define GNSS_SDR_CHANNEL_INTERFACE_H_
#include "gnss_block_interface.h" #include "gnss_block_interface.h"
#include "gnss_satellite.h"
/*! /*!
* \brief This abstract class represents an interface to a channel GNSS block. * \brief This abstract class represents an interface to a channel GNSS block.
@ -52,9 +53,9 @@ class ChannelInterface: public GNSSBlockInterface
public: public:
virtual unsigned int satellite() = 0; virtual Gnss_Satellite satellite() const = 0;
virtual void start_acquisition() = 0; virtual void start_acquisition() = 0;
virtual void set_satellite(unsigned int) = 0; virtual void set_satellite(Gnss_Satellite) = 0;
virtual void start() = 0; virtual void start() = 0;
virtual void stop() = 0; virtual void stop() = 0;
}; };

View File

@ -38,11 +38,13 @@
#include <boost/lexical_cast.hpp> #include <boost/lexical_cast.hpp>
#include <glog/log_severity.h> #include <glog/log_severity.h>
#include <glog/logging.h> #include <glog/logging.h>
#include <set>
#include "configuration_interface.h" #include "configuration_interface.h"
#include "gnss_block_interface.h" #include "gnss_block_interface.h"
#include "channel_interface.h" #include "channel_interface.h"
#include "gnss_block_factory.h" #include "gnss_block_factory.h"
using google::LogMessage; using google::LogMessage;
GNSSFlowgraph::GNSSFlowgraph(ConfigurationInterface *configuration, GNSSFlowgraph::GNSSFlowgraph(ConfigurationInterface *configuration,
@ -54,7 +56,7 @@ GNSSFlowgraph::GNSSFlowgraph(ConfigurationInterface *configuration,
blocks_ = new std::vector<GNSSBlockInterface*>(); blocks_ = new std::vector<GNSSBlockInterface*>();
block_factory_ = new GNSSBlockFactory(); block_factory_ = new GNSSBlockFactory();
queue_ = queue; queue_ = queue;
available_GPS_satellites_IDs_ = new std::list<unsigned int>(); available_GPS_satellites_IDs_ = new std::list<Gnss_Satellite>();
init(); init();
} }
@ -449,26 +451,43 @@ void GNSSFlowgraph::set_satellites_list()
* \TODO Describe GNSS satellites more nicely, with RINEX notation * \TODO Describe GNSS satellites more nicely, with RINEX notation
* See http://igscb.jpl.nasa.gov/igscb/data/format/rinex301.pdf (page 5) * See http://igscb.jpl.nasa.gov/igscb/data/format/rinex301.pdf (page 5)
*/ */
for (unsigned int id = 1; id < 33; id++) std::set<unsigned int> available_gps_prn = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23 , 25, 26, 27, 28, 29, 30,
31, 32};
std::set<unsigned int>::iterator available_gps_prn_iter;
for (available_gps_prn_iter = available_gps_prn.begin();
available_gps_prn_iter != available_gps_prn.end();
available_gps_prn_iter++)
{ {
available_GPS_satellites_IDs_->push_back(id); sv = Gnss_Satellite(std::string("GPS"), *available_gps_prn_iter);
std::cout << *available_gps_prn_iter << std::endl;
available_GPS_satellites_IDs_->push_back(sv);
} }
std::list<unsigned int>::iterator it = // for (unsigned int id = 1; id < 33; id++)
// {
// available_GPS_satellites_IDs_->push_back(id);
// }
std::list<Gnss_Satellite>::iterator it =
available_GPS_satellites_IDs_->begin(); available_GPS_satellites_IDs_->begin();
for (unsigned int i = 0; i < channels_count_; i++) for (unsigned int i = 0; i < channels_count_; i++)
{ {
unsigned int sat = configuration_->property("Acquisition" unsigned int sat = configuration_->property("Acquisition" + boost::lexical_cast<std::string>(i) + ".satellite", 0);
+ boost::lexical_cast<std::string>(i) + ".satellite", 0); if ((sat == 0) || (sat == it->get_PRN())) // 0 = not PRN in configuration file
if ((sat == 0) || (sat==*it)) // 0 = not PRN in configuration file
{ {
it++; it++;
} }
else else
{ {
available_GPS_satellites_IDs_->remove(sat); sv = Gnss_Satellite(std::string("GPS"), it->get_PRN());
available_GPS_satellites_IDs_->insert(it, sat); available_GPS_satellites_IDs_->remove(sv);
available_GPS_satellites_IDs_->insert(it, sv);
} }
} }

View File

@ -41,6 +41,7 @@
#include <gnuradio/gr_top_block.h> #include <gnuradio/gr_top_block.h>
#include <gnuradio/gr_msg_queue.h> #include <gnuradio/gr_msg_queue.h>
#include "GPS_L1_CA.h" #include "GPS_L1_CA.h"
#include "gnss_satellite.h"
class GNSSBlockInterface; class GNSSBlockInterface;
class ChannelInterface; class ChannelInterface;
@ -133,8 +134,10 @@ private:
gr_top_block_sptr top_block_; gr_top_block_sptr top_block_;
gr_msg_queue_sptr queue_; gr_msg_queue_sptr queue_;
std::list<unsigned int>* available_GPS_satellites_IDs_; std::list<Gnss_Satellite>* available_GPS_satellites_IDs_;
std::queue<unsigned int>* available_Galileo_satellites_IDs_; std::queue<unsigned int>* available_Galileo_satellites_IDs_;
Gnss_Satellite sv;
}; };
#endif /*GNSS_SDR_GNSS_FLOWGRAPH_H_*/ #endif /*GNSS_SDR_GNSS_FLOWGRAPH_H_*/

View File

@ -27,6 +27,7 @@
* *
* ------------------------------------------------------------------------- * -------------------------------------------------------------------------
*/ */
#include "gnss_satellite.h" #include "gnss_satellite.h"
#include <glog/log_severity.h> #include <glog/log_severity.h>
#include <glog/logging.h> #include <glog/logging.h>
@ -65,10 +66,31 @@ void Gnss_Satellite::reset()
PRN = 0; PRN = 0;
system = std::string(""); system = std::string("");
block = std::string(""); block = std::string("");
rf_link = 0;
} }
std::ostream& operator<<(std::ostream &out, const Gnss_Satellite &sat) // output
{
//std::string psystem = sat::get_system()
out << sat.get_system() << " PRN " << sat.get_PRN() << " (Block " << sat.get_block() << ")";
return out;
}
bool operator== (const Gnss_Satellite &sat1, const Gnss_Satellite &sat2)
{
bool equal = false;
if (sat1.get_system().compare(sat2.get_system()) == 0)
{
if (sat1.get_PRN() == (sat2.get_PRN()))
{
equal = true;
}
}
return equal;
}
void Gnss_Satellite::set_system(std::string system_) void Gnss_Satellite::set_system(std::string system_)
@ -158,7 +180,7 @@ void Gnss_Satellite::set_PRN(unsigned int PRN_)
unsigned int Gnss_Satellite::get_PRN() unsigned int Gnss_Satellite::get_PRN() const
{ {
// Get satellite's PRN // Get satellite's PRN
unsigned int PRN_; unsigned int PRN_;
@ -171,7 +193,7 @@ unsigned int Gnss_Satellite::get_PRN()
std::string Gnss_Satellite::get_system() std::string Gnss_Satellite::get_system() const
{ {
// Get the satellite system {"GPS", "GLONASS", "SBAS", "Galileo", "Compass"} // Get the satellite system {"GPS", "GLONASS", "SBAS", "Galileo", "Compass"}
std::string system_; std::string system_;
@ -183,7 +205,7 @@ std::string Gnss_Satellite::get_system()
std::string Gnss_Satellite::get_block() std::string Gnss_Satellite::get_block() const
{ {
// Get the satellite block // Get the satellite block
std::string block_; std::string block_;
@ -312,78 +334,103 @@ void Gnss_Satellite::set_block(std::string system_, unsigned int PRN_ )
switch ( PRN_ ) switch ( PRN_ )
{ {
// info from http://www.sdcm.ru/smglo/grupglo?version=eng&site=extern // info from http://www.sdcm.ru/smglo/grupglo?version=eng&site=extern
// See also http://www.glonass-center.ru/en/GLONASS/
case 1 : case 1 :
block = std::string("1"); //Plane 1 block = std::string("1"); //Plane 1
rf_link = 1;
break; break;
case 2 : case 2 :
block = std::string("-4"); //Plane 1 block = std::string("-4"); //Plane 1
rf_link = -4;
break; break;
case 3 : case 3 :
block = std::string("5"); //Plane 1 block = std::string("5"); //Plane 1
rf_link = 5;
break; break;
case 4 : case 4 :
block = std::string("6"); //Plane 1 block = std::string("6"); //Plane 1
rf_link = 6;
break; break;
case 5 : case 5 :
block = std::string("1"); //Plane 1 block = std::string("1"); //Plane 1
rf_link = 1;
break; break;
case 6 : case 6 :
block = std::string("-4"); //Plane 1 block = std::string("-4"); //Plane 1
rf_link = -4;
break; break;
case 7 : case 7 :
block = std::string("5"); //Plane 1 block = std::string("5"); //Plane 1
rf_link = 5;
break; break;
case 8 : case 8 :
block = std::string("6"); //Plane 1 block = std::string("6"); //Plane 1
rf_link = 6;
break; break;
case 9 : case 9 :
block = std::string("-2"); //Plane 2 block = std::string("-2"); //Plane 2
rf_link = -2;
break; break;
case 10 : case 10 :
block = std::string("-7"); //Plane 2 block = std::string("-7"); //Plane 2
rf_link = -7;
break; break;
case 11 : case 11 :
block = std::string("0"); //Plane 2 block = std::string("0"); //Plane 2
rf_link = 0;
break; break;
case 12 : case 12 :
block = std::string("-1"); //Plane 2 block = std::string("-1"); //Plane 2
rf_link = -1;
break; break;
case 13 : case 13 :
block = std::string("-2"); //Plane 2 block = std::string("-2"); //Plane 2
rf_link = -2;
break; break;
case 14 : case 14 :
block = std::string("-7"); //Plane 2 block = std::string("-7"); //Plane 2
rf_link = -7;
break; break;
case 15 : case 15 :
block = std::string("0"); //Plane 2 block = std::string("0"); //Plane 2
rf_link = 0;
break; break;
case 16 : case 16 :
block = std::string("-1"); //Plane 2 block = std::string("-1"); //Plane 2
rf_link = -1;
break; break;
case 17 : case 17 :
block = std::string("4"); //Plane 3 block = std::string("4"); //Plane 3
rf_link = 4;
break; break;
case 18 : case 18 :
block = std::string("-3"); //Plane 3 block = std::string("-3"); //Plane 3
rf_link = -3;
break; break;
case 19 : case 19 :
block = std::string("3"); //Plane 3 block = std::string("3"); //Plane 3
rf_link = 3;
break; break;
case 20 : case 20 :
block = std::string("2"); //Plane 3 block = std::string("2"); //Plane 3
rf_link = 2;
break; break;
case 21 : case 21 :
block = std::string("4"); //Plane 3 block = std::string("4"); //Plane 3
rf_link = 4;
break; break;
case 22 : case 22 :
block = std::string("-3"); //Plane 3 block = std::string("-3"); //Plane 3
rf_link = -3;
break; break;
case 23 : case 23 :
block = std::string("3"); //Plane 3 block = std::string("3"); //Plane 3
rf_link = 3;
break; break;
case 24 : case 24 :
block = std::string("2"); //Plane 3 block = std::string("2"); //Plane 3
rf_link = 2;
break; break;
default : default :
block = std::string("Unknown"); block = std::string("Unknown");
@ -416,8 +463,10 @@ void Gnss_Satellite::set_block(std::string system_, unsigned int PRN_ )
switch ( PRN_ ) switch ( PRN_ )
{ {
case 11 : case 11 :
block = std::string("IOV"); // Launched from French Guiana at 10:30 GMT on October 21, 2011 block = std::string("IOV"); // PFM, the ProtoFlight Model (GSAT0101), launched from French Guiana at 10:30 GMT on October 21, 2011
break; break;
case 12 :
block =std::string("IOV"); // Galileo In-Orbit Validation (IOV) satellite FM2 (Flight Model 2) also known as GSAT0102, launched the same day
default: default:
block = std::string("Unknown"); block = std::string("Unknown");
} }

View File

@ -34,6 +34,7 @@
#include <string> #include <string>
#include <set> #include <set>
#include <iostream>
/* /*
* \brief This class represents a GNSS satellite. * \brief This class represents a GNSS satellite.
@ -47,18 +48,21 @@ public:
Gnss_Satellite(); //!< Default Constructor. Gnss_Satellite(); //!< Default Constructor.
Gnss_Satellite(std::string system_, unsigned int PRN_); //!< Concrete GNSS satellite Constructor. Gnss_Satellite(std::string system_, unsigned int PRN_); //!< Concrete GNSS satellite Constructor.
~Gnss_Satellite(); //!< Default Destructor. ~Gnss_Satellite(); //!< Default Destructor.
unsigned int get_PRN(); //!< Gets satellite's PRN unsigned int get_PRN() const; //!< Gets satellite's PRN
std::string get_system(); //!< Gets the satellite system {"GPS", "GLONASS", "SBAS", "Galileo", "Compass"} std::string get_system() const; //!< Gets the satellite system {"GPS", "GLONASS", "SBAS", "Galileo", "Compass"}
std::string get_block(); //!< Gets the satellite block. If GPS, returns {"IIA", "IIR", "IIR-M", "IIF"} std::string get_block() const; //!< Gets the satellite block. If GPS, returns {"IIA", "IIR", "IIR-M", "IIF"}
friend bool operator== (const Gnss_Satellite &, const Gnss_Satellite &); // operator== for comparison
friend std::ostream& operator<<(std::ostream &, const Gnss_Satellite &); // operator<< for pretty printing
private: private:
unsigned int PRN; unsigned int PRN;
std::string system; std::string system;
std::string block; std::string block;
signed int rf_link;
void set_system(std::string system); // Sets the satellite system {"GPS", "GLONASS", "SBAS", "Galileo", "Compass"}. Returns 1 if success. void set_system(std::string system); // Sets the satellite system {"GPS", "GLONASS", "SBAS", "Galileo", "Compass"}. Returns 1 if success.
void set_PRN(unsigned int PRN); // Sets satellite's PRN void set_PRN(unsigned int PRN); // Sets satellite's PRN
void set_block(std::string system_, unsigned int PRN_ ); void set_block(std::string system_, unsigned int PRN_ );
std::set<std::string> system_set; // = {"GPS", "GLONASS", "SBAS", "Galileo", "Compass"}; std::set<std::string> system_set; // = {"GPS", "GLONASS", "SBAS", "Galileo", "Compass"};
void reset(); void reset();
}; };
#endif #endif