mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-03-04 10:38:17 +00:00
Add Matlab parsing and plotting functions for Kalman filter tracking block
This commit is contained in:
parent
e42467a068
commit
0fd98b0379
63
conf/gnss-sdr-kalman-bayes.conf
Normal file
63
conf/gnss-sdr-kalman-bayes.conf
Normal file
@ -0,0 +1,63 @@
|
||||
[GNSS-SDR]
|
||||
|
||||
;######### GLOBAL OPTIONS ##################
|
||||
;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
|
||||
GNSS-SDR.internal_fs_sps=2000000
|
||||
GNSS-SDR.internal_fs_hz=2000000
|
||||
|
||||
;######### SIGNAL_SOURCE CONFIG ############
|
||||
SignalSource.implementation=File_Signal_Source
|
||||
SignalSource.filename=/home/glamountain/gnss-sdr/data/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat
|
||||
SignalSource.item_type=ishort
|
||||
SignalSource.sampling_frequency=4000000
|
||||
SignalSource.freq=1575420000
|
||||
SignalSource.samples=0
|
||||
|
||||
;######### SIGNAL_CONDITIONER CONFIG ############
|
||||
SignalConditioner.implementation=Signal_Conditioner
|
||||
DataTypeAdapter.implementation=Ishort_To_Complex
|
||||
InputFilter.implementation=Pass_Through
|
||||
InputFilter.item_type=gr_complex
|
||||
Resampler.implementation=Direct_Resampler
|
||||
Resampler.sample_freq_in=4000000
|
||||
Resampler.sample_freq_out=2000000
|
||||
Resampler.item_type=gr_complex
|
||||
|
||||
;######### CHANNELS GLOBAL CONFIG ############
|
||||
Channels_1C.count=8
|
||||
Channels.in_acquisition=1
|
||||
Channel.signal=1C
|
||||
|
||||
;######### ACQUISITION GLOBAL CONFIG ############
|
||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||
Acquisition_1C.item_type=gr_complex
|
||||
Acquisition_1C.threshold=0.008
|
||||
Acquisition_1C.doppler_max=10000
|
||||
Acquisition_1C.doppler_step=250
|
||||
Acquisition_1C.dump=false
|
||||
Acquisition_1C.dump_filename=../data/kalman/acq_dump
|
||||
|
||||
;######### TRACKING GLOBAL CONFIG ############
|
||||
Tracking_1C.implementation=GPS_L1_CA_KF_Tracking
|
||||
Tracking_1C.item_type=gr_complex
|
||||
Tracking_1C.pll_bw_hz=40.0;
|
||||
Tracking_1C.dll_bw_hz=4.0;
|
||||
Tracking_1C.order=3;
|
||||
Tracking_1C.dump=true
|
||||
Tracking_1C.dump_filename=../data/kalman/epl_tracking_ch_
|
||||
Tracking_1C.bce_run = true;
|
||||
Tracking_1C.p_transient = 0;
|
||||
Tracking_1C.s_transient = 100;
|
||||
|
||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||
|
||||
;######### OBSERVABLES CONFIG ############
|
||||
Observables.implementation=GPS_L1_CA_Observables
|
||||
|
||||
;######### PVT CONFIG ############
|
||||
PVT.implementation=GPS_L1_CA_PVT
|
||||
PVT.averaging_depth=100
|
||||
PVT.flag_averaging=true
|
||||
PVT.output_rate_ms=10
|
||||
PVT.display_rate_ms=500
|
93
src/utils/matlab/gps_l1_ca_kf_plot_sample.m
Normal file
93
src/utils/matlab/gps_l1_ca_kf_plot_sample.m
Normal file
@ -0,0 +1,93 @@
|
||||
% Reads GNSS-SDR Tracking dump binary file using the provided
|
||||
% function and plots some internal variables
|
||||
% Javier Arribas, 2011. jarribas(at)cttc.es
|
||||
% -------------------------------------------------------------------------
|
||||
%
|
||||
% Copyright (C) 2010-2018 (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 <https://www.gnu.org/licenses/>.
|
||||
%
|
||||
% -------------------------------------------------------------------------
|
||||
%
|
||||
|
||||
close all;
|
||||
clear all;
|
||||
|
||||
if ~exist('dll_pll_veml_read_tracking_dump.m', 'file')
|
||||
addpath('./libs')
|
||||
end
|
||||
|
||||
|
||||
samplingFreq = 6625000; %[Hz]
|
||||
channels = 8;
|
||||
first_channel = 0;
|
||||
code_period = 0.001;
|
||||
|
||||
path = '/archive/'; %% CHANGE THIS PATH
|
||||
figpath = [path];
|
||||
|
||||
for N=1:1:channels
|
||||
tracking_log_path = [path 'epl_tracking_ch_' num2str(N+first_channel-1) '.dat']; %% CHANGE epl_tracking_ch_ BY YOUR dump_filename
|
||||
GNSS_tracking(N) = gps_l1_ca_kf_read_tracking_dump(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).carrFreqRate = GNSS_tracking(N).carrier_dopplerrate_hz2.';
|
||||
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_E = GNSS_tracking(N).E.';
|
||||
trackResults(N).I_L = GNSS_tracking(N).L.';
|
||||
trackResults(N).Q_E = zeros(1,length(GNSS_tracking(N).E));
|
||||
trackResults(N).Q_L = zeros(1,length(GNSS_tracking(N).E));
|
||||
trackResults(N).PRN = GNSS_tracking(N).PRN.';
|
||||
trackResults(N).CNo = GNSS_tracking(N).CN0_SNV_dB_Hz.';
|
||||
|
||||
|
||||
kalmanResults(N).PRN = GNSS_tracking(N).PRN.';
|
||||
kalmanResults(N).innovation = GNSS_tracking(N).carr_error.';
|
||||
kalmanResults(N).state1 = GNSS_tracking(N).carr_nco.';
|
||||
kalmanResults(N).state2 = GNSS_tracking(N).carrier_doppler_hz.';
|
||||
kalmanResults(N).state3 = GNSS_tracking(N).carrier_dopplerrate_hz2.';
|
||||
kalmanResults(N).r_noise_cov = GNSS_tracking(N).carr_noise_sigma2.';
|
||||
kalmanResults(N).CNo = GNSS_tracking(N).CN0_SNV_dB_Hz.';
|
||||
|
||||
% Use original MATLAB tracking plot function
|
||||
settings.numberOfChannels = channels;
|
||||
settings.msToProcess = length(GNSS_tracking(N).E);
|
||||
settings.codePeriod = code_period;
|
||||
settings.timeStartInSeconds = 20;
|
||||
|
||||
%plotTracking(N, trackResults, settings)
|
||||
plotKalman(N, kalmanResults, settings)
|
||||
|
||||
saveas(gcf, [figpath 'epl_tracking_ch_' num2str(N) '_PRN_' num2str(trackResults(N).PRN(end)) '.png'], 'png')
|
||||
end
|
||||
|
||||
|
158
src/utils/matlab/libs/gps_l1_ca_kf_read_tracking_dump.m
Normal file
158
src/utils/matlab/libs/gps_l1_ca_kf_read_tracking_dump.m
Normal file
@ -0,0 +1,158 @@
|
||||
% Usage: gps_l1_ca_kf_read_tracking_dump (filename, [count])
|
||||
%
|
||||
% Opens GNSS-SDR tracking binary log file .dat and returns the contents
|
||||
|
||||
% Read GNSS-SDR Tracking dump binary file into MATLAB.
|
||||
% Javier Arribas, 2011. jarribas(at)cttc.es
|
||||
% -------------------------------------------------------------------------
|
||||
%
|
||||
% Copyright (C) 2010-2018 (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 <https://www.gnu.org/licenses/>.
|
||||
%
|
||||
% -------------------------------------------------------------------------
|
||||
%
|
||||
|
||||
function [GNSS_tracking] = gps_l1_ca_kf_read_tracking_dump (filename, count)
|
||||
|
||||
m = nargchk (1,2,nargin);
|
||||
|
||||
num_float_vars = 19;
|
||||
num_unsigned_long_int_vars = 1;
|
||||
num_double_vars = 1;
|
||||
num_unsigned_int_vars = 1;
|
||||
|
||||
if(~isempty(strfind(computer('arch'), '64')))
|
||||
% 64-bit computer
|
||||
double_size_bytes = 8;
|
||||
unsigned_long_int_size_bytes = 8;
|
||||
float_size_bytes = 4;
|
||||
unsigned_int_size_bytes = 4;
|
||||
else
|
||||
double_size_bytes = 8;
|
||||
unsigned_long_int_size_bytes = 4;
|
||||
float_size_bytes = 4;
|
||||
unsigned_int_size_bytes = 4;
|
||||
end
|
||||
|
||||
skip_bytes_each_read = float_size_bytes * num_float_vars + unsigned_long_int_size_bytes * num_unsigned_long_int_vars + ...
|
||||
double_size_bytes * num_double_vars + num_unsigned_int_vars*unsigned_int_size_bytes;
|
||||
|
||||
bytes_shift = 0;
|
||||
|
||||
if (m)
|
||||
usage (m);
|
||||
end
|
||||
|
||||
if (nargin < 2)
|
||||
count = Inf;
|
||||
end
|
||||
%loops_counter = fread (f, count, 'uint32',4*12);
|
||||
f = fopen (filename, 'rb');
|
||||
if (f < 0)
|
||||
else
|
||||
v1 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes);
|
||||
bytes_shift = bytes_shift + float_size_bytes;
|
||||
fseek(f,bytes_shift,'bof'); % move to next float
|
||||
v2 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes);
|
||||
bytes_shift = bytes_shift + float_size_bytes;
|
||||
fseek(f,bytes_shift,'bof'); % move to next float
|
||||
v3 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes);
|
||||
bytes_shift = bytes_shift + float_size_bytes;
|
||||
fseek(f,bytes_shift,'bof'); % move to next float
|
||||
v4 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes);
|
||||
bytes_shift = bytes_shift + float_size_bytes;
|
||||
fseek(f,bytes_shift,'bof'); % move to next float
|
||||
v5 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes);
|
||||
bytes_shift = bytes_shift + float_size_bytes;
|
||||
fseek(f,bytes_shift,'bof'); % move to next float
|
||||
v6 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes);
|
||||
bytes_shift = bytes_shift + float_size_bytes;
|
||||
fseek(f,bytes_shift,'bof'); % move to next float
|
||||
v7 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes);
|
||||
bytes_shift = bytes_shift + float_size_bytes;
|
||||
fseek(f,bytes_shift,'bof'); % move to next interleaved float
|
||||
v8 = fread (f, count, 'long', skip_bytes_each_read - unsigned_long_int_size_bytes);
|
||||
bytes_shift = bytes_shift + unsigned_long_int_size_bytes;
|
||||
fseek(f,bytes_shift,'bof'); % move to next float
|
||||
v9 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes);
|
||||
bytes_shift = bytes_shift + float_size_bytes;
|
||||
fseek(f,bytes_shift,'bof'); % move to next float
|
||||
v10 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes);
|
||||
bytes_shift = bytes_shift + float_size_bytes;
|
||||
fseek(f,bytes_shift,'bof'); % move to next float
|
||||
v11 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes);
|
||||
bytes_shift = bytes_shift + float_size_bytes;
|
||||
fseek(f,bytes_shift,'bof'); % move to next float
|
||||
v12 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes);
|
||||
bytes_shift = bytes_shift + float_size_bytes;
|
||||
fseek(f,bytes_shift,'bof'); % move to next float
|
||||
v13 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes);
|
||||
bytes_shift = bytes_shift + float_size_bytes;
|
||||
fseek(f,bytes_shift,'bof'); % move to next float
|
||||
v14 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes);
|
||||
bytes_shift = bytes_shift + float_size_bytes;
|
||||
fseek(f,bytes_shift,'bof'); % move to next float
|
||||
v15 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes);
|
||||
bytes_shift = bytes_shift + float_size_bytes;
|
||||
fseek(f,bytes_shift,'bof'); % move to next float
|
||||
v16 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes);
|
||||
bytes_shift = bytes_shift + float_size_bytes;
|
||||
fseek(f,bytes_shift,'bof'); % move to next float
|
||||
v17 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes);
|
||||
bytes_shift = bytes_shift + float_size_bytes;
|
||||
fseek(f,bytes_shift,'bof'); % move to next float
|
||||
v18 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes);
|
||||
bytes_shift = bytes_shift + float_size_bytes;
|
||||
fseek(f,bytes_shift,'bof'); % move to next interleaved float
|
||||
v19 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes);
|
||||
bytes_shift = bytes_shift + float_size_bytes;
|
||||
fseek(f,bytes_shift,'bof'); % move to next float
|
||||
v20 = fread (f, count, 'float', skip_bytes_each_read-float_size_bytes);
|
||||
bytes_shift = bytes_shift + float_size_bytes;
|
||||
fseek(f,bytes_shift,'bof'); % move to next double
|
||||
v21 = fread (f, count, 'double', skip_bytes_each_read - double_size_bytes);
|
||||
bytes_shift = bytes_shift + double_size_bytes;
|
||||
fseek(f,bytes_shift,'bof'); % move to next unsigned int
|
||||
v22 = fread (f, count, 'uint', skip_bytes_each_read - unsigned_int_size_bytes);
|
||||
fclose (f);
|
||||
|
||||
GNSS_tracking.VE = v1;
|
||||
GNSS_tracking.E = v2;
|
||||
GNSS_tracking.P = v3;
|
||||
GNSS_tracking.L = v4;
|
||||
GNSS_tracking.VL = v5;
|
||||
GNSS_tracking.prompt_I = v6;
|
||||
GNSS_tracking.prompt_Q = v7;
|
||||
GNSS_tracking.PRN_start_sample = v8;
|
||||
GNSS_tracking.acc_carrier_phase_rad = v9;
|
||||
GNSS_tracking.carrier_doppler_hz = v10;
|
||||
GNSS_tracking.carrier_dopplerrate_hz2 = v11;
|
||||
GNSS_tracking.code_freq_hz = v12;
|
||||
GNSS_tracking.carr_error = v13;
|
||||
GNSS_tracking.carr_noise_sigma2 = v14;
|
||||
GNSS_tracking.carr_nco = v15;
|
||||
GNSS_tracking.code_error = v16;
|
||||
GNSS_tracking.code_nco = v17;
|
||||
GNSS_tracking.CN0_SNV_dB_Hz = v18;
|
||||
GNSS_tracking.carrier_lock_test = v19;
|
||||
GNSS_tracking.var1 = v20;
|
||||
GNSS_tracking.var2 = v21;
|
||||
GNSS_tracking.PRN = v22;
|
||||
end
|
135
src/utils/matlab/libs/plotKalman.m
Normal file
135
src/utils/matlab/libs/plotKalman.m
Normal file
@ -0,0 +1,135 @@
|
||||
function plotKalman(channelList, trackResults, settings)
|
||||
% This function plots the tracking results for the given channel list.
|
||||
%
|
||||
% plotTracking(channelList, trackResults, settings)
|
||||
%
|
||||
% Inputs:
|
||||
% channelList - list of channels to be plotted.
|
||||
% trackResults - tracking results from the tracking function.
|
||||
% settings - receiver settings.
|
||||
|
||||
%--------------------------------------------------------------------------
|
||||
% SoftGNSS v3.0
|
||||
%
|
||||
% Copyright (C) Darius Plausinaitis
|
||||
% Written by Darius Plausinaitis
|
||||
%--------------------------------------------------------------------------
|
||||
%This program 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 2
|
||||
%of the License, or (at your option) any later version.
|
||||
%
|
||||
%This program 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 this program; if not, write to the Free Software
|
||||
%Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
%USA.
|
||||
%--------------------------------------------------------------------------
|
||||
|
||||
% Protection - if the list contains incorrect channel numbers
|
||||
channelList = intersect(channelList, 1:settings.numberOfChannels);
|
||||
|
||||
%=== For all listed channels ==============================================
|
||||
for channelNr = channelList
|
||||
|
||||
%% Select (or create) and clear the figure ================================
|
||||
% The number 200 is added just for more convenient handling of the open
|
||||
% figure windows, when many figures are closed and reopened.
|
||||
% Figures drawn or opened by the user, will not be "overwritten" by
|
||||
% this function.
|
||||
|
||||
figure(channelNr +200);
|
||||
clf(channelNr +200);
|
||||
set(channelNr +200, 'Name', ['Channel ', num2str(channelNr), ...
|
||||
' (PRN ', ...
|
||||
num2str(trackResults(channelNr).PRN(end-1)), ...
|
||||
') results']);
|
||||
|
||||
timeStart = settings.timeStartInSeconds;
|
||||
|
||||
%% Draw axes ==============================================================
|
||||
% Row 1
|
||||
handles(1, 1) = subplot(4, 2, 1);
|
||||
handles(1, 2) = subplot(4, 2, 2);
|
||||
% Row 2
|
||||
handles(2, 1) = subplot(4, 2, 3);
|
||||
handles(2, 2) = subplot(4, 2, 4);
|
||||
% Row 3
|
||||
handles(3, 1) = subplot(4, 2, [5 6]);
|
||||
% Row 4
|
||||
handles(4, 1) = subplot(4, 2, [7 8]);
|
||||
|
||||
%% Plot all figures =======================================================
|
||||
|
||||
timeAxisInSeconds = (1:settings.msToProcess)/1000;
|
||||
|
||||
%----- CNo for signal----------------------------------
|
||||
plot (handles(1, 1), timeAxisInSeconds, ...
|
||||
trackResults(channelNr).CNo(1:settings.msToProcess), 'b');
|
||||
|
||||
grid (handles(1, 1));
|
||||
axis (handles(1, 1), 'tight');
|
||||
xlabel(handles(1, 1), 'Time (s)');
|
||||
ylabel(handles(1, 1), 'CNo (dB-Hz)');
|
||||
title (handles(1, 1), 'Carrier to Noise Ratio');
|
||||
|
||||
%----- PLL discriminator filtered----------------------------------
|
||||
plot (handles(1, 2), timeAxisInSeconds, ...
|
||||
trackResults(channelNr).state1(1:settings.msToProcess), 'b');
|
||||
|
||||
grid (handles(1, 2));
|
||||
axis (handles(1, 2), 'tight');
|
||||
xlim (handles(1, 2), [timeStart, timeAxisInSeconds(end)]);
|
||||
xlabel(handles(1, 2), 'Time (s)');
|
||||
ylabel(handles(1, 2), 'Phase Amplitude');
|
||||
title (handles(1, 2), 'Filtered Carrier Phase');
|
||||
|
||||
%----- Carrier Frequency --------------------------------
|
||||
plot (handles(2, 1), timeAxisInSeconds(2:end), ...
|
||||
trackResults(channelNr).state2(2:settings.msToProcess), 'Color',[0.42 0.25 0.39]);
|
||||
|
||||
grid (handles(2, 1));
|
||||
axis (handles(2, 1));
|
||||
xlim (handles(2, 1), [timeStart, timeAxisInSeconds(end)]);
|
||||
xlabel(handles(2, 1), 'Time (s)');
|
||||
ylabel(handles(2, 1), 'Freq (hz)');
|
||||
title (handles(2, 1), 'Filtered Doppler Frequency');
|
||||
|
||||
%----- Carrier Frequency Rate --------------------------------
|
||||
plot (handles(2, 2), timeAxisInSeconds(2:end), ...
|
||||
trackResults(channelNr).state3(2:settings.msToProcess), 'Color',[0.42 0.25 0.39]);
|
||||
|
||||
grid (handles(2, 2));
|
||||
axis (handles(2, 2));
|
||||
xlim (handles(2, 2), [timeStart, timeAxisInSeconds(end)]);
|
||||
xlabel(handles(2, 2), 'Time (s)');
|
||||
ylabel(handles(2, 2), 'Freq (hz)');
|
||||
title (handles(2, 2), 'Filtered Doppler Frequency Rate');
|
||||
|
||||
%----- PLL discriminator unfiltered--------------------------------
|
||||
plot (handles(3, 1), timeAxisInSeconds, ...
|
||||
trackResults(channelNr).innovation, 'r');
|
||||
|
||||
grid (handles(3, 1));
|
||||
axis (handles(3, 1), 'auto');
|
||||
xlim (handles(3, 1), [timeStart, timeAxisInSeconds(end)]);
|
||||
xlabel(handles(3, 1), 'Time (s)');
|
||||
ylabel(handles(3, 1), 'Amplitude');
|
||||
title (handles(3, 1), 'Raw PLL discriminator (Innovation)');
|
||||
|
||||
|
||||
%----- PLL discriminator covariance --------------------------------
|
||||
plot (handles(4, 1), timeAxisInSeconds, ...
|
||||
trackResults(channelNr).r_noise_cov, 'r');
|
||||
|
||||
grid (handles(4, 1));
|
||||
axis (handles(4, 1), 'auto');
|
||||
xlim (handles(4, 1), [timeStart, timeAxisInSeconds(end)]);
|
||||
xlabel(handles(4, 1), 'Time (s)');
|
||||
ylabel(handles(4, 1), 'Variance');
|
||||
title (handles(4, 1), 'Estimated Noise Variance');
|
||||
end % for channelNr = channelList
|
Loading…
x
Reference in New Issue
Block a user