You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
3.1 KiB

function PlotAdrResids(adrResid,gnssMeas,prFileName,colors)
% PlotAdrResids(adrResid,gnssMeas,[prFileName],[colors])
% plot the Accumulated Delta Range residuals for the 5 sats with most valid adr
%
% adrResid.FctSeconds = Nx1 time vector, same as gnssMeas.FctSeconds
% .Svid0 = reference satellite for single differences
% .Svid = 1xM vector of all svid
% .ResidM = [NxM] adr residuals (adr = -k*carrier)
%
% gnssMeas, the measurements (from ProcessGnssMeas) used to get adrResids
%
% Optional inputs: prFileName = string with file name
% colors, Mx3 color matrix
% if colors is not Mx3, it will be ignored
%Author: Frank van Diggelen
%Open Source code for processing Android GNSS Measurements
K = 5; %number of satellites to plot
if isempty(adrResid) || ~any(any(isfinite(adrResid.ResidM))) %Nothing but NaNs
fprintf(' No adr residuals to plot\n'), return
end
if nargin<2
prFileName = '';
end
M = length(adrResid.Svid);
N = length(adrResid.FctSeconds);
if nargin<3 || any(size(colors)~=[M,3])
bGotColors = false;
else
bGotColors = true;
end
timeSeconds =adrResid.FctSeconds-adrResid.FctSeconds(1);%elapsed time in seconds
% find the K sats with most data
numValid = zeros(1,M);
for j=1:M
numValid(j) = sum(isfinite(adrResid.ResidM(:,j)));
end
[~,jSorted] = sort(numValid,'descend');
hK=zeros(1,K); %initialize plot handle
for k=1:K
hK(k) = subplot(K,1,k);
jSv = jSorted(k); %index into correct adrResid.Svid, and columns of .ResidM
svid = adrResid.Svid(jSv);
h = plot(timeSeconds,adrResid.ResidM(:,jSv)); grid on, hold on
j = find(gnssMeas.Svid == svid); %index into gnssMeas columns
if bGotColors
set(h,'Color',colors(j,:));
end
%get cycle slip flags
%From gps.h:
% #define GPS_ADR_STATE_CYCLE_SLIP (1<<2)
iCs = find(bitand(gnssMeas.AdrState(:,j),2^2));
numCs = length(iCs);
if numCs
h=plot(timeSeconds(iCs),zeros(numCs,1),'xk');
set(h,'MarkerSize',5)
end
ts=sprintf('Svids %d - %d',svid,adrResid.Svid0);
title(ts)
ylabel('(meters)');
end
xs = sprintf('time (seconds)\n%s',prFileName);
xlabel(xs,'Interpreter','none')
linkaxes(hK,'x');
subplot(K,1,1)
svid = adrResid.Svid(jSorted(1));
ts=sprintf('ADR single difference residuals. No iono or tropo correction. Svids %d - %d',...
svid,adrResid.Svid0);
title(ts)
ax=axis;
ht=text(ax(1),ax(3),' ''x'' = declared cycle slip');
set(ht,'VerticalAlignment','bottom','FontSize',8);
end %end of function PlotAdrResids
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Copyright 2016 Google Inc.
%
% Licensed under the Apache License, Version 2.0 (the "License");
% you may not use this file except in compliance with the License.
% You may obtain a copy of the License at
%
%     http://www.apache.org/licenses/LICENSE-2.0
%
% Unless required by applicable law or agreed to in writing, software
% distributed under the License is distributed on an "AS IS" BASIS,
% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
% See the License for the specific language governing permissions and
% limitations under the License.