mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-11-24 02:54:54 +00:00
Major changes in flowgraph, configuration file and channel. Added gnss_signal class.
git-svn-id: https://svn.code.sf.net/p/gnss-sdr/code/trunk@146 64b25241-fba3-4117-9849-534c7e92360d
This commit is contained in:
@@ -69,6 +69,7 @@ public:
|
||||
gr_basic_block_sptr get_left_block();
|
||||
gr_basic_block_sptr get_right_block();
|
||||
|
||||
void set_synchro(Gnss_Synchro p_gnss_synchro);
|
||||
void set_satellite(Gnss_Satellite satellite);
|
||||
void set_channel(unsigned int channel);
|
||||
void set_threshold(float threshold);
|
||||
@@ -92,6 +93,7 @@ private:
|
||||
size_t item_size_;
|
||||
std::string item_type_;
|
||||
unsigned int vector_length_;
|
||||
Gnss_Synchro* gnss_synchro_;
|
||||
Gnss_Satellite gnss_satellite_;
|
||||
//unsigned int satellite_;
|
||||
unsigned int channel_;
|
||||
|
||||
@@ -71,11 +71,13 @@ gps_l1_ca_pcps_acquisition_cc::gps_l1_ca_pcps_acquisition_cc(
|
||||
d_doppler_max = doppler_max;
|
||||
d_satellite = Gnss_Satellite();
|
||||
d_fft_size = d_sampled_ms * d_samples_per_ms;
|
||||
d_doppler_freq = 0.0;
|
||||
d_code_phase = 0;
|
||||
//d_doppler_freq = 0.0;
|
||||
//d_code_phase = 0;
|
||||
d_mag = 0;
|
||||
d_input_power = 0.0;
|
||||
|
||||
d_gnss_synchro = new Gnss_Synchro();
|
||||
|
||||
d_sine_if = new gr_complex[d_fft_size];
|
||||
|
||||
d_fft_codes = (gr_complex*)malloc(sizeof(gr_complex) * d_samples_per_ms);
|
||||
@@ -102,11 +104,13 @@ gps_l1_ca_pcps_acquisition_cc::gps_l1_ca_pcps_acquisition_cc(
|
||||
|
||||
gps_l1_ca_pcps_acquisition_cc::~gps_l1_ca_pcps_acquisition_cc()
|
||||
{
|
||||
delete d_gnss_synchro;
|
||||
delete[] d_sine_if;
|
||||
delete[] d_fft_codes;
|
||||
delete d_ifft;
|
||||
delete d_fft_if;
|
||||
|
||||
|
||||
if (d_dump)
|
||||
{
|
||||
d_dump_file.close();
|
||||
@@ -119,8 +123,11 @@ gps_l1_ca_pcps_acquisition_cc::~gps_l1_ca_pcps_acquisition_cc()
|
||||
void gps_l1_ca_pcps_acquisition_cc::set_satellite(Gnss_Satellite satellite)
|
||||
{
|
||||
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
|
||||
d_code_phase = 0;
|
||||
d_doppler_freq = 0;
|
||||
// ¿qué diferencia hay con d_satellite=satellite; ?
|
||||
d_gnss_synchro->Acq_delay_samples=0.0;
|
||||
d_gnss_synchro->Acq_doppler_hz=0.0;
|
||||
//d_code_phase = 0;
|
||||
//d_doppler_freq = 0;
|
||||
d_mag = 0.0;
|
||||
d_input_power = 0.0;
|
||||
|
||||
@@ -135,9 +142,6 @@ void gps_l1_ca_pcps_acquisition_cc::set_satellite(Gnss_Satellite satellite)
|
||||
//TODO Optimize it ! try conj()
|
||||
for (unsigned int i = 0; i < d_fft_size; i++)
|
||||
{
|
||||
//d_fft_codes[i] = std::complex<float>(
|
||||
// d_fft_if->get_outbuf()[i].real(),
|
||||
// -d_fft_if->get_outbuf()[i].imag());
|
||||
d_fft_codes[i] = std::complex<float>(conj(d_fft_if->get_outbuf()[i]));
|
||||
d_fft_codes[i] = d_fft_codes[i] / (float)d_fft_size; //to correct the scale factor introduced by FFTW
|
||||
}
|
||||
@@ -160,12 +164,6 @@ void gps_l1_ca_pcps_acquisition_cc::set_satellite(Gnss_Satellite satellite)
|
||||
|
||||
|
||||
|
||||
|
||||
signed int gps_l1_ca_pcps_acquisition_cc::prn_code_phase()
|
||||
{
|
||||
return d_code_phase;
|
||||
}
|
||||
|
||||
int gps_l1_ca_pcps_acquisition_cc::general_work(int noutput_items,
|
||||
gr_vector_int &ninput_items, gr_vector_const_void_star &input_items,
|
||||
gr_vector_void_star &output_items)
|
||||
@@ -193,8 +191,10 @@ int gps_l1_ca_pcps_acquisition_cc::general_work(int noutput_items,
|
||||
|
||||
//restart acquisition variables
|
||||
|
||||
d_code_phase = 0;
|
||||
d_doppler_freq = 0;
|
||||
d_gnss_synchro->Acq_delay_samples=0.0;
|
||||
d_gnss_synchro->Acq_doppler_hz=0.0;
|
||||
//d_code_phase = 0;
|
||||
//d_doppler_freq = 0;
|
||||
d_mag = 0.0;
|
||||
d_input_power = 0.0;
|
||||
|
||||
@@ -278,8 +278,10 @@ int gps_l1_ca_pcps_acquisition_cc::general_work(int noutput_items,
|
||||
if (d_mag < magt)
|
||||
{
|
||||
d_mag = magt;
|
||||
d_code_phase = indext;
|
||||
d_doppler_freq = doppler;
|
||||
d_gnss_synchro->Acq_delay_samples= (double)indext;
|
||||
d_gnss_synchro->Acq_doppler_hz= (double)doppler;
|
||||
//d_code_phase = indext;
|
||||
//d_doppler_freq = doppler;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -299,8 +301,8 @@ int gps_l1_ca_pcps_acquisition_cc::general_work(int noutput_items,
|
||||
DLOG(INFO) << "sample_stamp " << d_sample_counter;
|
||||
DLOG(INFO) << "test statistics value " << d_test_statistics;
|
||||
DLOG(INFO) << "test statistics threshold " << d_threshold;
|
||||
DLOG(INFO) << "code phase " << d_code_phase;
|
||||
DLOG(INFO) << "doppler " << d_doppler_freq;
|
||||
DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples;
|
||||
DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz;
|
||||
DLOG(INFO) << "magnitude " << d_mag;
|
||||
DLOG(INFO) << "input signal power " << d_input_power;
|
||||
}
|
||||
@@ -311,8 +313,8 @@ int gps_l1_ca_pcps_acquisition_cc::general_work(int noutput_items,
|
||||
DLOG(INFO) << "sample_stamp " << d_sample_counter;
|
||||
DLOG(INFO) << "test statistics value " << d_test_statistics;
|
||||
DLOG(INFO) << "test statistics threshold " << d_threshold;
|
||||
DLOG(INFO) << "code phase " << d_code_phase;
|
||||
DLOG(INFO) << "doppler " << d_doppler_freq;
|
||||
DLOG(INFO) << "code phase " << d_gnss_synchro->Acq_delay_samples;
|
||||
DLOG(INFO) << "doppler " << d_gnss_synchro->Acq_doppler_hz;
|
||||
DLOG(INFO) << "magnitude " << d_mag;
|
||||
DLOG(INFO) << "input signal power " << d_input_power;
|
||||
}
|
||||
|
||||
@@ -44,128 +44,135 @@
|
||||
#include <boost/thread/thread.hpp>
|
||||
#include "concurrent_queue.h"
|
||||
#include "gnss_satellite.h"
|
||||
|
||||
#include "gnss_synchro.h"
|
||||
|
||||
class gps_l1_ca_pcps_acquisition_cc;
|
||||
typedef boost::shared_ptr<gps_l1_ca_pcps_acquisition_cc>
|
||||
gps_l1_ca_pcps_acquisition_cc_sptr;
|
||||
gps_l1_ca_pcps_acquisition_cc_sptr;
|
||||
gps_l1_ca_pcps_acquisition_cc_sptr
|
||||
gps_l1_ca_pcps_make_acquisition_cc(unsigned int sampled_ms,
|
||||
unsigned int doppler_max, long freq, long fs_in, int samples_per_ms,
|
||||
gr_msg_queue_sptr queue, bool dump, std::string dump_filename);
|
||||
unsigned int doppler_max, long freq, long fs_in, int samples_per_ms,
|
||||
gr_msg_queue_sptr queue, bool dump, std::string dump_filename);
|
||||
|
||||
/*!
|
||||
* \brief This class implements a PCPS acquisition block for GPS L1 C/A
|
||||
*/
|
||||
class gps_l1_ca_pcps_acquisition_cc: public gr_block
|
||||
{
|
||||
class gps_l1_ca_pcps_acquisition_cc: public gr_block {
|
||||
|
||||
private:
|
||||
|
||||
friend gps_l1_ca_pcps_acquisition_cc_sptr
|
||||
gps_l1_ca_pcps_make_acquisition_cc(unsigned int sampled_ms,
|
||||
unsigned int doppler_max, long freq, long fs_in,
|
||||
int samples_per_ms, gr_msg_queue_sptr queue, bool dump,
|
||||
std::string dump_filename);
|
||||
friend gps_l1_ca_pcps_acquisition_cc_sptr
|
||||
gps_l1_ca_pcps_make_acquisition_cc(unsigned int sampled_ms,
|
||||
unsigned int doppler_max, long freq, long fs_in,
|
||||
int samples_per_ms, gr_msg_queue_sptr queue, bool dump,
|
||||
std::string dump_filename);
|
||||
|
||||
gps_l1_ca_pcps_acquisition_cc(unsigned int sampled_ms,
|
||||
unsigned int doppler_max, long freq, long fs_in,
|
||||
int samples_per_ms, gr_msg_queue_sptr queue, bool dump,
|
||||
std::string dump_filename);
|
||||
gps_l1_ca_pcps_acquisition_cc(unsigned int sampled_ms,
|
||||
unsigned int doppler_max, long freq, long fs_in,
|
||||
int samples_per_ms, gr_msg_queue_sptr queue, bool dump,
|
||||
std::string dump_filename);
|
||||
|
||||
void calculate_magnitudes(gr_complex* fft_begin, int doppler_shift,
|
||||
int doppler_offset);
|
||||
void calculate_magnitudes(gr_complex* fft_begin, int doppler_shift,
|
||||
int doppler_offset);
|
||||
|
||||
long d_fs_in;
|
||||
long d_freq;
|
||||
int d_samples_per_ms;
|
||||
unsigned int d_doppler_resolution;
|
||||
Gnss_Satellite d_satellite;
|
||||
float d_threshold;
|
||||
std::string d_satellite_str;
|
||||
unsigned int d_doppler_max;
|
||||
unsigned int d_doppler_step;
|
||||
unsigned int d_sampled_ms;
|
||||
unsigned int d_fft_size;
|
||||
unsigned long int d_sample_counter;
|
||||
unsigned long int d_acq_sample_stamp;
|
||||
gr_complex* d_sine_if;
|
||||
long d_fs_in;
|
||||
long d_freq;
|
||||
int d_samples_per_ms;
|
||||
unsigned int d_doppler_resolution;
|
||||
Gnss_Satellite d_satellite;
|
||||
float d_threshold;
|
||||
std::string d_satellite_str;
|
||||
unsigned int d_doppler_max;
|
||||
unsigned int d_doppler_step;
|
||||
unsigned int d_sampled_ms;
|
||||
unsigned int d_fft_size;
|
||||
unsigned long int d_sample_counter;
|
||||
unsigned long int d_acq_sample_stamp;
|
||||
gr_complex* d_sine_if;
|
||||
|
||||
gr_complex* d_fft_codes;
|
||||
gr_complex* d_fft_codes;
|
||||
|
||||
gri_fft_complex* d_fft_if;
|
||||
gri_fft_complex* d_fft_if;
|
||||
|
||||
gri_fft_complex* d_ifft;
|
||||
gri_fft_complex* d_ifft;
|
||||
|
||||
unsigned int d_code_phase;
|
||||
float d_doppler_freq;
|
||||
float d_mag;
|
||||
float d_input_power;
|
||||
float d_test_statistics;
|
||||
Gnss_Synchro *d_gnss_synchro;
|
||||
unsigned int d_code_phase;
|
||||
float d_doppler_freq;
|
||||
float d_mag;
|
||||
float d_input_power;
|
||||
float d_test_statistics;
|
||||
|
||||
gr_msg_queue_sptr d_queue;
|
||||
concurrent_queue<int> *d_channel_internal_queue;
|
||||
std::ofstream d_dump_file;
|
||||
gr_msg_queue_sptr d_queue;
|
||||
concurrent_queue<int> *d_channel_internal_queue;
|
||||
std::ofstream d_dump_file;
|
||||
|
||||
bool d_active;
|
||||
bool d_dump;
|
||||
unsigned int d_channel;
|
||||
std::string d_dump_filename;
|
||||
bool d_active;
|
||||
bool d_dump;
|
||||
unsigned int d_channel;
|
||||
std::string d_dump_filename;
|
||||
|
||||
public:
|
||||
|
||||
~gps_l1_ca_pcps_acquisition_cc();
|
||||
~gps_l1_ca_pcps_acquisition_cc();
|
||||
|
||||
signed int prn_code_phase();
|
||||
float doppler_freq()
|
||||
{
|
||||
return d_doppler_freq;
|
||||
}
|
||||
unsigned int mag()
|
||||
{
|
||||
return d_mag;
|
||||
}
|
||||
void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro)
|
||||
{
|
||||
d_gnss_synchro = p_gnss_synchro;
|
||||
}
|
||||
signed int prn_code_phase()
|
||||
{
|
||||
return d_code_phase;
|
||||
}
|
||||
float doppler_freq()
|
||||
{
|
||||
return d_doppler_freq;
|
||||
}
|
||||
unsigned int mag()
|
||||
{
|
||||
return d_mag;
|
||||
}
|
||||
|
||||
unsigned long int get_sample_stamp()
|
||||
{
|
||||
return d_acq_sample_stamp;
|
||||
}
|
||||
unsigned long int get_sample_stamp()
|
||||
{
|
||||
return d_acq_sample_stamp;
|
||||
}
|
||||
|
||||
void set_satellite(Gnss_Satellite satellite);
|
||||
void set_satellite(Gnss_Satellite satellite);
|
||||
|
||||
void set_active(bool active)
|
||||
{
|
||||
d_active = active;
|
||||
}
|
||||
void set_active(bool active)
|
||||
{
|
||||
d_active = active;
|
||||
}
|
||||
|
||||
void set_channel(unsigned int channel)
|
||||
{
|
||||
d_channel = channel;
|
||||
}
|
||||
void set_channel(unsigned int channel)
|
||||
{
|
||||
d_channel = channel;
|
||||
}
|
||||
|
||||
void set_threshold(float threshold)
|
||||
{
|
||||
d_threshold = threshold;
|
||||
}
|
||||
void set_threshold(float threshold)
|
||||
{
|
||||
d_threshold = threshold;
|
||||
}
|
||||
|
||||
void set_doppler_max(unsigned int doppler_max)
|
||||
{
|
||||
d_doppler_max = doppler_max;
|
||||
}
|
||||
void set_doppler_max(unsigned int doppler_max)
|
||||
{
|
||||
d_doppler_max = doppler_max;
|
||||
}
|
||||
|
||||
void set_doppler_step(unsigned int doppler_step)
|
||||
{
|
||||
d_doppler_step = doppler_step;
|
||||
}
|
||||
void set_doppler_step(unsigned int doppler_step)
|
||||
{
|
||||
d_doppler_step = doppler_step;
|
||||
}
|
||||
|
||||
void set_channel_queue(concurrent_queue<int> *channel_internal_queue)
|
||||
{
|
||||
d_channel_internal_queue = channel_internal_queue;
|
||||
}
|
||||
void set_channel_queue(concurrent_queue<int> *channel_internal_queue)
|
||||
{
|
||||
d_channel_internal_queue = channel_internal_queue;
|
||||
}
|
||||
|
||||
int general_work(int noutput_items, gr_vector_int &ninput_items,
|
||||
gr_vector_const_void_star &input_items,
|
||||
gr_vector_void_star &output_items);
|
||||
int general_work(int noutput_items, gr_vector_int &ninput_items,
|
||||
gr_vector_const_void_star &input_items,
|
||||
gr_vector_void_star &output_items);
|
||||
};
|
||||
|
||||
#endif /* GNSS_SDR_GPS_L1_CA_PCPS_ACQUISITION_CC_H*/
|
||||
|
||||
@@ -87,6 +87,7 @@ Channel::Channel(ConfigurationInterface *configuration, unsigned int channel,
|
||||
connected_ = false;
|
||||
message_ = 0;
|
||||
gnss_satellite_ = Gnss_Satellite();
|
||||
gnss_signal_ = Gnss_Signal();
|
||||
}
|
||||
|
||||
|
||||
@@ -168,9 +169,9 @@ gr_basic_block_sptr Channel::get_right_block()
|
||||
|
||||
|
||||
|
||||
void Channel::set_satellite(Gnss_Satellite satellite)
|
||||
void Channel::set_signal(Gnss_Signal gnss_signal)
|
||||
{
|
||||
gnss_satellite_ = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
|
||||
gnss_satellite_ = gnss_signal.get_satellite();
|
||||
acq_->set_satellite(gnss_satellite_);
|
||||
trk_->set_satellite(gnss_satellite_);
|
||||
nav_->set_satellite(gnss_satellite_);
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#include "gps_l1_ca_channel_fsm.h"
|
||||
#include "control_message_factory.h"
|
||||
#include "concurrent_queue.h"
|
||||
#include "gnss_signal.h"
|
||||
|
||||
|
||||
class ConfigurationInterface;
|
||||
@@ -78,7 +79,7 @@ public:
|
||||
|
||||
size_t item_size(){ return 0; }
|
||||
|
||||
Gnss_Satellite get_satellite() const { return gnss_satellite_; }
|
||||
Gnss_Signal get_signal() const { return gnss_signal_; }
|
||||
|
||||
AcquisitionInterface* acquisition(){ return acq_; }
|
||||
|
||||
@@ -87,7 +88,7 @@ public:
|
||||
TelemetryDecoderInterface* telemetry(){ return nav_; }
|
||||
|
||||
void start_acquisition();
|
||||
void set_satellite(Gnss_Satellite satellite);
|
||||
void set_signal(Gnss_Signal gnss_signal_);
|
||||
void start();
|
||||
|
||||
/*!
|
||||
@@ -108,6 +109,7 @@ private:
|
||||
|
||||
unsigned int channel_;
|
||||
Gnss_Satellite gnss_satellite_;
|
||||
Gnss_Signal gnss_signal_;
|
||||
bool connected_;
|
||||
bool stop_;
|
||||
int message_;
|
||||
|
||||
Reference in New Issue
Block a user