mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-01-12 10:20:32 +00:00
- PCPS Acquisition VOLK optimizations for the carrier wipeoff operation.
-Added galileo E1 tracking matlab plot utility for 32 bits systems git-svn-id: https://svn.code.sf.net/p/gnss-sdr/code/trunk@248 64b25241-fba3-4117-9849-534c7e92360d
This commit is contained in:
parent
bcce5431b7
commit
4859faa245
@ -75,9 +75,9 @@ pcps_acquisition_cc::pcps_acquisition_cc(
|
||||
d_mag = 0;
|
||||
d_input_power = 0.0;
|
||||
|
||||
d_sine_if = new gr_complex[d_fft_size];
|
||||
|
||||
d_fft_codes = (gr_complex*)malloc(sizeof(gr_complex) * d_fft_size);
|
||||
//todo: do something if posix_memalign fails
|
||||
if (posix_memalign((void**)&d_carrier, 16, d_fft_size * sizeof(gr_complex)) == 0){};
|
||||
if (posix_memalign((void**)&d_fft_codes, 16, d_fft_size * sizeof(gr_complex)) == 0){};
|
||||
|
||||
// Direct FFT
|
||||
d_fft_if = new gri_fft_complex(d_fft_size, true);
|
||||
@ -92,8 +92,8 @@ pcps_acquisition_cc::pcps_acquisition_cc(
|
||||
|
||||
pcps_acquisition_cc::~pcps_acquisition_cc()
|
||||
{
|
||||
delete[] d_sine_if;
|
||||
delete[] d_fft_codes;
|
||||
free(d_carrier);
|
||||
free(d_fft_codes);
|
||||
delete d_ifft;
|
||||
delete d_fft_if;
|
||||
|
||||
@ -175,7 +175,6 @@ int pcps_acquisition_cc::general_work(int noutput_items,
|
||||
int acquisition_message = -1; //0=STOP_CHANNEL 1=ACQ_SUCCEES 2=ACQ_FAIL
|
||||
|
||||
//aux vars
|
||||
|
||||
unsigned int i;
|
||||
|
||||
float fft_normalization_factor;
|
||||
@ -199,20 +198,18 @@ int pcps_acquisition_cc::general_work(int noutput_items,
|
||||
{
|
||||
//doppler search steps
|
||||
//Perform the carrier wipe-off
|
||||
complex_exp_gen(d_sine_if, d_freq + doppler, d_fs_in, d_fft_size);
|
||||
for (i = 0; i < d_fft_size; i++)
|
||||
complex_exp_gen(d_carrier, d_freq + doppler, d_fs_in, d_fft_size);
|
||||
|
||||
if (is_unaligned()==true)
|
||||
{
|
||||
d_fft_if->get_inbuf()[i] = in[i] * d_sine_if[i];
|
||||
volk_32fc_x2_multiply_32fc_u(d_fft_if->get_inbuf(), in, d_carrier, d_fft_size);
|
||||
}else{
|
||||
//use directly the input vector
|
||||
volk_32fc_x2_multiply_32fc_a(d_fft_if->get_inbuf(), in, d_carrier, d_fft_size);
|
||||
}
|
||||
|
||||
//3- Perform the FFT-based circular convolution (parallel time search)
|
||||
d_fft_if->execute();
|
||||
// Using plain C++ operations
|
||||
// for (i = 0; i < d_fft_size; i++)
|
||||
// {
|
||||
// d_ifft->get_inbuf()[i] = (d_fft_if->get_outbuf()[i]
|
||||
// * d_fft_codes[i]) / (float)d_fft_size;
|
||||
// }
|
||||
|
||||
// Using SIMD operations with VOLK library
|
||||
volk_32fc_x2_multiply_32fc_a(d_ifft->get_inbuf(), d_fft_if->get_outbuf(), d_fft_codes, d_fft_size);
|
||||
|
@ -101,7 +101,7 @@ private:
|
||||
unsigned int d_sampled_ms;
|
||||
unsigned int d_fft_size;
|
||||
unsigned long int d_sample_counter;
|
||||
gr_complex* d_sine_if;
|
||||
gr_complex* d_carrier;
|
||||
|
||||
gr_complex* d_fft_codes;
|
||||
|
||||
|
@ -0,0 +1,93 @@
|
||||
% /*!
|
||||
% * \file galileo_l1_ca_dll_pll_vml_plot_sample_64bits.m
|
||||
% * \brief Read GNSS-SDR Tracking dump binary file using the provided
|
||||
% function and plot some internal variables
|
||||
% * \author Javier Arribas, 2011. jarribas(at)cttc.es
|
||||
% * -------------------------------------------------------------------------
|
||||
% *
|
||||
% * Copyright (C) 2010-2011 (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/>.
|
||||
% *
|
||||
% * -------------------------------------------------------------------------
|
||||
% */
|
||||
close all;
|
||||
clear all;
|
||||
samplingFreq = 64e6/8; %[Hz]
|
||||
channels=2;
|
||||
%path='/home/javier/workspace/gnss-sdr/trunk/install/';
|
||||
path='/home/javier/workspace/gnss-sdr/trunk/data/';
|
||||
clear PRN_absolute_sample_start;
|
||||
for N=1:1:channels
|
||||
tracking_log_path=[path 'veml_tracking_ch_' num2str(N-1) '.dat'];
|
||||
GNSS_tracking(N)= galileo_e1_dll_pll_veml_read_tracking_dump_32bits(tracking_log_path);
|
||||
end
|
||||
|
||||
% GNSS-SDR format conversion to MATLAB GPS receiver
|
||||
|
||||
for N=1:1:channels
|
||||
trackResults(N).status='T'; %fake track
|
||||
trackResults(N).codeFreq=GNSS_tracking(N).code_freq_hz.';
|
||||
trackResults(N).carrFreq=GNSS_tracking(N).carrier_doppler_hz.';
|
||||
trackResults(N).dllDiscr = GNSS_tracking(N).code_error.';
|
||||
trackResults(N).dllDiscrFilt = GNSS_tracking(N).code_nco.';
|
||||
trackResults(N).pllDiscr = GNSS_tracking(N).carr_error.';
|
||||
trackResults(N).pllDiscrFilt = GNSS_tracking(N).carr_nco.';
|
||||
|
||||
trackResults(N).I_P=GNSS_tracking(N).prompt_I.';
|
||||
trackResults(N).Q_P=GNSS_tracking(N).prompt_Q.';
|
||||
|
||||
trackResults(N).I_VE= GNSS_tracking(N).VE.';
|
||||
trackResults(N).I_E= GNSS_tracking(N).E.';
|
||||
trackResults(N).I_L = GNSS_tracking(N).L.';
|
||||
trackResults(N).I_VL = GNSS_tracking(N).VL.';
|
||||
trackResults(N).Q_VE = zeros(1,length(GNSS_tracking(N).VE));
|
||||
trackResults(N).Q_E = zeros(1,length(GNSS_tracking(N).E));
|
||||
trackResults(N).Q_L =zeros(1,length(GNSS_tracking(N).L));
|
||||
trackResults(N).Q_VL =zeros(1,length(GNSS_tracking(N).VL));
|
||||
trackResults(N).PRN=N; %fake PRN
|
||||
|
||||
% Use original MATLAB tracking plot function
|
||||
settings.numberOfChannels=channels;
|
||||
settings.msToProcess=length(GNSS_tracking(N).E)*4;
|
||||
plotVEMLTracking(N,trackResults,settings)
|
||||
end
|
||||
|
||||
% for N=1:1:channels
|
||||
% % figure;
|
||||
% % plot([GNSS_tracking(N).E,GNSS_tracking(N).P,GNSS_tracking(N).L],'-*');
|
||||
% % title(['Early, Prompt, and Late correlator absolute value output for channel ' num2str(N)']);
|
||||
% % figure;
|
||||
% % plot(GNSS_tracking(N).prompt_I,GNSS_tracking(N).prompt_Q,'+');
|
||||
% % title(['Navigation constellation plot for channel ' num2str(N)]);
|
||||
% % figure;
|
||||
% %
|
||||
% % plot(GNSS_tracking(N).prompt_Q,'r');
|
||||
% % hold on;
|
||||
% % plot(GNSS_tracking(N).prompt_I);
|
||||
% % title(['Navigation symbols I(red) Q(blue) for channel ' num2str(N)]);
|
||||
% %
|
||||
% figure;
|
||||
% t=0:4:length(GNSS_tracking(N).carrier_doppler_hz)*4-1;
|
||||
% t=t/1000;
|
||||
% plot(t,GNSS_tracking(N).carrier_doppler_hz/1000);
|
||||
% xlabel('Time(s)');ylabel('Doppler(KHz)');title(['Doppler frequency channel ' num2str(N)]);
|
||||
% end
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user