function [gnssMeas]= ProcessAdr(gnssMeas) % [gnssMeas]= ProcessAdr(gnssMeas) % process the Accumulated Delta Ranges 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. % ... % .PrM = NxM pseudoranges, row i corresponds to FctSeconds(i) % .DelPrM = NxM change in pr while clock continuous % .AdrM = NxM accumulated delta range (= -k*carrier phase) % ... % % output: % gnssMeas.DelPrMinusAdrM = NxM DelPrM - AdrM, re-initialized to zero at each % discontinuity or reset of DelPrM or AdrM %Author: Frank van Diggelen %Open Source code for processing Android GNSS Measurements if ~any(any(isfinite(gnssMeas.AdrM) & gnssMeas.AdrM~=0)) %Nothing in AdrM but NaNs and zeros fprintf(' No ADR recorded\n'), return end M = length(gnssMeas.Svid); N = length(gnssMeas.FctSeconds); DelPrMinusAdrM = zeros(N,M)+NaN; for j=1:M %loop over Svid AdrM = gnssMeas.AdrM(:,j); %make local variables for readability DelPrM = gnssMeas.DelPrM(:,j); 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) %keep valid values of AdrM only iValid = bitand(AdrState,2^0); iReset = bitand(AdrState,2^1); AdrM(~iValid) = NaN; %% work out DelPrM - AdrM since last discontinuity, plot DelPrM-AdrM DelPrM0 = NaN; %to store initial offset from AdrM for i=1:N %loop over time if isfinite(AdrM(i)) && (AdrM(i)~=0) && isfinite(DelPrM(i)) && ... ~iReset(i) %reinitialize after NaNs or AdrM zero or AdrState reset if isnan(DelPrM0) DelPrM0 = DelPrM(i) - AdrM(i); end else %reset at NaNs or AdrM zero DelPrM0 = NaN; end DelPrMinusAdrM(i,j) = DelPrM(i) - DelPrM0 - AdrM(i); end end gnssMeas.DelPrMinusAdrM = DelPrMinusAdrM; end %end of function ProcessAdr %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 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.