Example #1
0
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
Example #2
0
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
Example #3
0
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
Example #4
0
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
Example #5
0
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