def sv_clock_correction(satinfo, svid, transmitTime, Trel): """space vehicle clock correction""" toc = satinfo.ephemeris[svid].toc eph = satinfo.ephemeris[svid] T = util.correctWeeklyTime(transmitTime - toc) dTclck = eph.af0 + eph.af1 * T + eph.af2 * T * T + Trel # - eph.Tgd return dTclck
def sv_clock_correction(satinfo, svid, transmitTime, Trel): '''space vehicle clock correction''' from math import sin, sqrt toc = satinfo.ephemeris[svid].toc eph = satinfo.ephemeris[svid] T = util.correctWeeklyTime(transmitTime - toc) dTclck = eph.af0 + eph.af1 * T + eph.af2 * T * T + Trel # - eph.Tgd return dTclck
def regen_v2_type1(): if ref_pos is None: return errset = {} for svid in prs: if svid not in eph: #print("Don't have ephemeris for {}, only {}".format(svid, eph.keys())) continue toc = eph[svid].toc tof = prs[svid] / util.speedOfLight # assume the time_of_week is the exact receiver time of week that the message arrived. # subtract the time of flight to get the satellite transmit time transmitTime = itow - tof T = util.correctWeeklyTime(transmitTime - toc) satpos = satPosition.satPosition_raw(eph[svid], svid, transmitTime) Trel = satpos.extra satPosition.correctPosition_raw(satpos, tof) geo = satpos.distance(util.PosVector(*ref_pos)) dTclck = eph[svid].af0 + eph[svid].af1 * T + eph[svid].af2 * T * T + Trel - eph[svid].Tgd # Incoming PR is already corrected for receiver clock bias prAdjusted = prs[svid] + dTclck * util.speedOfLight errset[svid] = geo - prAdjusted save_satlog(itow, errset) iode = {} for svid in eph: iode[svid] = eph[svid].iode msg = rtcm.RTCMType1_ext(errset, itow, week, iode) if len(msg) > 0: return msg
def regen_v2_type1(): if ref_pos is None: return errset = {} pranges = {} for svid in prs: if svid not in eph: #print("Don't have ephemeris for {}, only {}".format(svid, eph.keys())) continue toc = eph[svid].toc tof = prs[svid] / util.speedOfLight # assume the time_of_week is the exact receiver time of week that the message arrived. # subtract the time of flight to get the satellite transmit time transmitTime = itow - tof T = util.correctWeeklyTime(transmitTime - toc) satpos = satPosition.satPosition_raw(eph[svid], svid, transmitTime) Trel = satpos.extra satPosition.correctPosition_raw(satpos, tof) geo = satpos.distance(util.PosVector(*ref_pos)) dTclck = eph[svid].af0 + eph[svid].af1 * T + eph[ svid].af2 * T * T + Trel - eph[svid].Tgd # Incoming PR is already corrected for receiver clock bias prAdjusted = prs[svid] + dTclck * util.speedOfLight errset[svid] = geo - prAdjusted pranges[svid] = prAdjusted save_satlog(itow, errset) if correct_rxclk: rxerr = positionEstimate.clockLeastSquares_ranges( eph, pranges, itow, ref_pos, 0) if rxerr is None: return rxerr *= util.speedOfLight for svid in errset: errset[svid] += rxerr pranges[svid] += rxerr rxerr = positionEstimate.clockLeastSquares_ranges( eph, pranges, itow, ref_pos, 0) * util.speedOfLight print("Residual RX clock error {}".format(rxerr)) iode = {} for svid in eph: iode[svid] = eph[svid].iode msg = rtcm.RTCMType1_ext(errset, itow, week, iode) if len(msg) > 0: return msg