function [colorsOut]= PlotPseudorangeRates(gnssMeas,prFileName,colors) % [colors] = PlotPseudorangeRates(gnssMeas,[prFileName],[colors]) % plot the Pseudorange Rates obtained from ProcessGnssMeas % %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. % ... % .DelPrM = NxM change in pr while clock continuous % .PrrMps = NxM pseudorange rate % ... % % 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 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 %plot slope of pr and prr delPr = gnssMeas.DelPrM; ts = ('diff(raw pr)/diff(time) and reported prr'); h12(1) = subplot(5,1,1:4); hold on deltaMeanM = zeros(1,M)+NaN; %store mean diff(pr) - mean prr for i=1:M %plot prr y = gnssMeas.PrrMps(:,i); iFi = find(isfinite(y)); if ~isempty(iFi) h = plot(timeSeconds,y); set(h,'Color',gray); ti = timeSeconds(iFi(1)); ht=text(ti,y(iFi(1)),int2str(gnssMeas.Svid(i)),'Color',gray); set(ht,'HorizontalAlignment','right') meanPrrM = mean(y(iFi));%store for analysing delta prr dpr %plot delta pr y = delPr(:,i); iFi = find(isfinite(y)); if any(iFi) ti = timeSeconds(iFi(end)); y = diff(y)./diff(timeSeconds);%slope of pr (m/s) h = plot(timeSeconds(2:end),y); set(h,'Marker','.','MarkerSize',4) if bGotColors set(h,'Color',colors(i,:)); else colors(i,:) = get(h,'Color'); end iFi = find(isfinite(y)); if any(iFi) text(ti,y(iFi(end)),int2str(gnssMeas.Svid(i)),'Color',colors(i,:)); end meanDprM = mean(y(iFi));%store for analysing delta prr dpr deltaMeanM(i) = meanPrrM - meanDprM; end end end title(ts),ylabel('(m/s)') ax = axis; %remember axis yLimMps = [ax(3)-200, ax(4)];%make an extra 200 m/s on axis, to add text set(gca,'YLim',yLimMps); ts = ' For Svids ['; ds = sprintf('%.0f, ',gnssMeas.Svid); ht=text(ax(1),ax(3),[ts,ds(1:end-2),'],']); set(ht,'VerticalAlignment','top','Color',gray) ts = ' mean(prr) - mean (diff(pr)/diff(time)) = ['; ds = sprintf('%.2f, ',deltaMeanM); ht=text(ax(1),ax(3)-100,[ts,ds(1:end-2),'] (m/s)']); set(ht,'VerticalAlignment','top','Color',gray) bClockDis = [0;diff(gnssMeas.ClkDCount)~=0];%binary, 1 <=> clock discontinuity %plot Clock discontinuity h12(2) = 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(h12,'x') if nargout colorsOut = colors; end end %end of function PlotPseudorangeRates %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 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.