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
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 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)
* 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;
if (indext != 0)
{

View File

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

View File

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

View File

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

View File

@ -38,11 +38,13 @@
#include <boost/lexical_cast.hpp>
#include <glog/log_severity.h>
#include <glog/logging.h>
#include <set>
#include "configuration_interface.h"
#include "gnss_block_interface.h"
#include "channel_interface.h"
#include "gnss_block_factory.h"
using google::LogMessage;
GNSSFlowgraph::GNSSFlowgraph(ConfigurationInterface *configuration,
@ -54,7 +56,7 @@ GNSSFlowgraph::GNSSFlowgraph(ConfigurationInterface *configuration,
blocks_ = new std::vector<GNSSBlockInterface*>();
block_factory_ = new GNSSBlockFactory();
queue_ = queue;
available_GPS_satellites_IDs_ = new std::list<unsigned int>();
available_GPS_satellites_IDs_ = new std::list<Gnss_Satellite>();
init();
}
@ -449,26 +451,43 @@ void GNSSFlowgraph::set_satellites_list()
* \TODO Describe GNSS satellites more nicely, with RINEX notation
* 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();
for (unsigned int i = 0; i < channels_count_; i++)
{
unsigned int sat = configuration_->property("Acquisition"
+ boost::lexical_cast<std::string>(i) + ".satellite", 0);
if ((sat == 0) || (sat==*it)) // 0 = not PRN in configuration file
unsigned int sat = configuration_->property("Acquisition" + boost::lexical_cast<std::string>(i) + ".satellite", 0);
if ((sat == 0) || (sat == it->get_PRN())) // 0 = not PRN in configuration file
{
it++;
}
else
{
available_GPS_satellites_IDs_->remove(sat);
available_GPS_satellites_IDs_->insert(it, sat);
sv = Gnss_Satellite(std::string("GPS"), it->get_PRN());
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_msg_queue.h>
#include "GPS_L1_CA.h"
#include "gnss_satellite.h"
class GNSSBlockInterface;
class ChannelInterface;
@ -133,8 +134,10 @@ private:
gr_top_block_sptr top_block_;
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_;
Gnss_Satellite sv;
};
#endif /*GNSS_SDR_GNSS_FLOWGRAPH_H_*/

View File

@ -27,6 +27,7 @@
*
* -------------------------------------------------------------------------
*/
#include "gnss_satellite.h"
#include <glog/log_severity.h>
#include <glog/logging.h>
@ -65,10 +66,31 @@ void Gnss_Satellite::reset()
PRN = 0;
system = 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_)
@ -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
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"}
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
std::string block_;
@ -312,78 +334,103 @@ void Gnss_Satellite::set_block(std::string system_, unsigned int PRN_ )
switch ( PRN_ )
{
// info from http://www.sdcm.ru/smglo/grupglo?version=eng&site=extern
// See also http://www.glonass-center.ru/en/GLONASS/
case 1 :
block = std::string("1"); //Plane 1
rf_link = 1;
break;
case 2 :
block = std::string("-4"); //Plane 1
rf_link = -4;
break;
case 3 :
block = std::string("5"); //Plane 1
rf_link = 5;
break;
case 4 :
block = std::string("6"); //Plane 1
rf_link = 6;
break;
case 5 :
block = std::string("1"); //Plane 1
rf_link = 1;
break;
case 6 :
block = std::string("-4"); //Plane 1
rf_link = -4;
break;
case 7 :
block = std::string("5"); //Plane 1
rf_link = 5;
break;
case 8 :
block = std::string("6"); //Plane 1
rf_link = 6;
break;
case 9 :
block = std::string("-2"); //Plane 2
rf_link = -2;
break;
case 10 :
block = std::string("-7"); //Plane 2
rf_link = -7;
break;
case 11 :
block = std::string("0"); //Plane 2
rf_link = 0;
break;
case 12 :
block = std::string("-1"); //Plane 2
rf_link = -1;
break;
case 13 :
block = std::string("-2"); //Plane 2
rf_link = -2;
break;
case 14 :
block = std::string("-7"); //Plane 2
rf_link = -7;
break;
case 15 :
block = std::string("0"); //Plane 2
rf_link = 0;
break;
case 16 :
block = std::string("-1"); //Plane 2
rf_link = -1;
break;
case 17 :
block = std::string("4"); //Plane 3
rf_link = 4;
break;
case 18 :
block = std::string("-3"); //Plane 3
rf_link = -3;
break;
case 19 :
block = std::string("3"); //Plane 3
rf_link = 3;
break;
case 20 :
block = std::string("2"); //Plane 3
rf_link = 2;
break;
case 21 :
block = std::string("4"); //Plane 3
rf_link = 4;
break;
case 22 :
block = std::string("-3"); //Plane 3
rf_link = -3;
break;
case 23 :
block = std::string("3"); //Plane 3
rf_link = 3;
break;
case 24 :
block = std::string("2"); //Plane 3
rf_link = 2;
break;
default :
block = std::string("Unknown");
@ -416,8 +463,10 @@ void Gnss_Satellite::set_block(std::string system_, unsigned int PRN_ )
switch ( PRN_ )
{
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;
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:
block = std::string("Unknown");
}

View File

@ -34,6 +34,7 @@
#include <string>
#include <set>
#include <iostream>
/*
* \brief This class represents a GNSS satellite.
@ -47,18 +48,21 @@ public:
Gnss_Satellite(); //!< Default Constructor.
Gnss_Satellite(std::string system_, unsigned int PRN_); //!< Concrete GNSS satellite Constructor.
~Gnss_Satellite(); //!< Default Destructor.
unsigned int get_PRN(); //!< Gets satellite's PRN
std::string get_system(); //!< 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"}
unsigned int get_PRN() const; //!< Gets satellite's PRN
std::string get_system() const; //!< Gets the satellite system {"GPS", "GLONASS", "SBAS", "Galileo", "Compass"}
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:
unsigned int PRN;
std::string system;
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_PRN(unsigned int PRN); // Sets satellite's PRN
void set_block(std::string system_, unsigned int PRN_ );
std::set<std::string> system_set; // = {"GPS", "GLONASS", "SBAS", "Galileo", "Compass"};
void reset();
};
#endif