function [xM,dtsvS,vMps,dtsvSDot] = GpsEph2Pvt(gpsEph,gpsTime) %[xM,dtsvS,vMps,dtsvSDot] = GpsEph2Pvt(gpsEph,gpsTime) % % Calculate sv coordinates, in ECEF frame, sv clock bias, and sv velocity % Inputs: % gpsEph: vector of ephemeris structures, as defined in ReadRinexEph.m % % gpsTime = [gpsWeek, ttxSec]: GPS time at time of transmission, ttx % ttx = trx - PR/c - dtsvS, where trx is time of reception (receiver clock), % dtsvS is the satellite clock error (seconds), can be computed in advance % using eph2dtsv.m or iterating this function: gps time = sat time - dtsvS % gpsWeek, ttxSec must be vectors of length(gpsEph), % % outputs: % xM = [i,j,k] matrix of coordinates of satellites (ecef meters) % dtsvS = vector of satellite clock error (seconds) % vMps = [i,j,k] matrix of satellite velocity (ecef m/s) % dtsvSDot = vector of satellite clock error rate (seconds/second) % The row dimension of xM, dtsvS, vMps, dtsvSDot = length(gpsEph) % % xM and vMps are the satellite positions and velocities % at time ttxSec, in terms of ecef coords at the same time % Use FlightTimeCorrection.m to get xM & vMps in ecef coord at time of reception % % functions called: GpsEph2Xyz.m % % See IS-GPS-200 for details of data %Author: Frank van Diggelen %Open Source code for processing Android GNSS Measurements vMps = []; dtsvSDot = []; [xM,dtsvS]=GpsEph2Xyz(gpsEph,gpsTime); if isempty(xM) return end %compute velocity from delta position & dtsvS at (t+0.5) - (t-0.5) %This is better than differentiating, because both the orbital and relativity %terms have nonlinearities that are not easily differentiable t1 = [gpsTime(:,1), gpsTime(:,2)+0.5]; %time + 0.5 seconds [xPlus,dtsvPlus] = GpsEph2Xyz(gpsEph,t1); t1 = [gpsTime(:,1), gpsTime(:,2)-0.5]; %time - 0.5 seconds [xMinus,dtsvMinus]= GpsEph2Xyz(gpsEph,t1); vMps = xPlus - xMinus; dtsvSDot = dtsvPlus - dtsvMinus; end %end of function GpsEph2Pvt %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 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.