1
0
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:
Luis Esteve
2012-01-27 11:58:55 +00:00
parent 22925909fd
commit ec57e48f4e
13 changed files with 642 additions and 529 deletions

View File

@@ -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_;

View File

@@ -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;
}

View File

@@ -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*/

View File

@@ -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_);

View File

@@ -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_;