function [colorsOut]= PlotAdr(gnssMeas,prFileName,colors) % [colors] = PlotAdr(gnssMeas,[prFileName],[colors]) % plot Valid Accumulated Delta Ranges obtained from ProcessAdr % %gnssMeas.FctSeconds = Nx1 vector. Rx time tag of measurements. % .ClkDCount = Nx1 vector. Hw clock discontinuity count % .Svid = 1xM vector of all svIds found in gnssRaw. % ... % .AdrM = NxM accumulated delta range (= -k*carrier phase) % .DelPrMinusAdrM = NxM DelPrM - AdrM % % Optional inputs: prFileName = string with file name % colors, Mx3 color matrix % if colors is not Mx3, it will be ignored % %Output: colors, color matrix, so we match colors each time we plot the same sv if ~any(any(isfinite(gnssMeas.AdrM) & gnssMeas.AdrM~=0)) %Nothing in AdrM but NaNs and zeros fprintf(' No ADR to plot\n'), return end if nargin<2 prFileName = ''; end M = length(gnssMeas.Svid); N = length(gnssMeas.FctSeconds); if nargin<3 || any(size(colors)~=[M,3]) colors = zeros(M,3); %initialize color matrix for storing colors bGotColors = false; else bGotColors = true; end gray = [.5 .5 .5]; timeSeconds =gnssMeas.FctSeconds-gnssMeas.FctSeconds(1);%elapsed time in seconds for j=1:M %loop over Svid %% plot AdrM h123(1) = subplot(5,1,1:2); grid on, hold on, AdrM = gnssMeas.AdrM(:,j);%local variables for convenience AdrState = gnssMeas.AdrState(:,j); %From gps.h: %/* However, it is expected that the data is only accurate when: % * 'accumulated delta range state' == GPS_ADR_STATE_VALID. %*/ % #define GPS_ADR_STATE_UNKNOWN 0 % #define GPS_ADR_STATE_VALID (1<<0) % #define GPS_ADR_STATE_RESET (1<<1) % #define GPS_ADR_STATE_CYCLE_SLIP (1<<2) iValid = bitand(AdrState,2^0); iFi = find(isfinite(AdrM) & iValid); if ~isempty(iFi) ti = timeSeconds(iFi(end)); h=plot(timeSeconds,AdrM); set(h,'Marker','.','MarkerSize',4) if bGotColors set(h,'Color',colors(j,:)); else colors(j,:) = get(h,'Color'); end text(ti,AdrM(iFi(end)),int2str(gnssMeas.Svid(j)),'Color',colors(j,:)); h123(2) = subplot(5,1,3:4); grid on, h=plot(timeSeconds,gnssMeas.DelPrMinusAdrM(:,j)); hold on set(h,'Marker','.','MarkerSize',4) set(h,'Color',colors(j,:)); end end subplot(5,1,1:2); ax=axis; title('Valid Accumulated Delta Range (= -k*carrier phase) vs time'), ylabel('(meters)') subplot(5,1,3:4); set(gca,'XLim',ax(1:2)); title('DelPrM - AdrM'),ylabel('(meters)') bClockDis = [0;diff(gnssMeas.ClkDCount)~=0];%binary, 1 <=> clock discontinuity %plot Clock discontinuity h123(3) = subplot(5,1,5); iCont = ~bClockDis;%index into where clock is continuous plot(timeSeconds(iCont),bClockDis(iCont),'.b');%blue dots for continuous hold on plot(timeSeconds(~iCont),bClockDis(~iCont),'.r');%red dots for discontinuous set(gca,'XLim',ax(1:2),'YLim',[-0.5 1.5]); grid on set(gca,'YTick',[0 1],'YTickLabel',{'continuous ','discontinuous'}) set(gca,'YTickLabelRotation',45) title('HW Clock Discontinuity') xs = sprintf('time (seconds)\n%s',prFileName); xlabel(xs,'Interpreter','none') linkaxes(h123,'x'); if nargout>1 colorsOut = colors; end end %end of function PlotAdr %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 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.