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 % % Written by Darius Plausinaitis %-------------------------------------------------------------------------- % GNSS-SDR is a Global Navigation Satellite System software-defined receiver. % This file is part of GNSS-SDR. % % SPDX-FileCopyrightText: Darius Plausinaitis % SPDX-License-Identifier: GPL-3.0-or-later %-------------------------------------------------------------------------- % 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