Esempio n. 1
0
def track(x, s):
    n = len(x)
    fs = s.fs

    nco.mix(x, -s.carrier_f / fs, s.carrier_p)
    s.carrier_p = s.carrier_p - n * s.carrier_f / fs
    s.carrier_p = np.mod(s.carrier_p, 1)

    cf = (s.code_f + s.carrier_f / 763.0) / fs

    p_early = b1i.correlate(x, s.prn, 0, s.code_p - 0.5, cf, b1i.b1i_code(prn))
    p_prompt = b1i.correlate(x, s.prn, 0, s.code_p, cf, b1i.b1i_code(prn))
    p_late = b1i.correlate(x, s.prn, 0, s.code_p + 0.5, cf, b1i.b1i_code(prn))

    if s.mode == 'FLL_WIDE':
        fll_k = 3.0
        a = p_prompt
        b = s.prompt1
        e = discriminator.fll_atan(a, b)
        s.carrier_f = s.carrier_f + fll_k * e
        s.prompt1 = p_prompt
    elif s.mode == 'FLL_NARROW':
        fll_k = 0.8
        a = p_prompt
        b = s.prompt1
        e = discriminator.fll_atan(a, b)
        s.carrier_f = s.carrier_f + fll_k * e
        s.prompt1 = p_prompt
    elif s.mode == 'PLL':
        pll_k1 = 0.1
        pll_k2 = 3.5
        e = discriminator.pll_costas(p_prompt)
        e1 = s.carrier_e1
        s.carrier_f = s.carrier_f + pll_k1 * e + pll_k2 * (e - e1)
        s.carrier_e1 = e

# code loop

    dll_k1 = 0.00002
    dll_k2 = 0.2
    s.early = np.absolute(p_early)
    s.prompt = np.absolute(p_prompt)
    s.late = np.absolute(p_late)
    if (s.late + s.early) == 0:
        e = 0
    else:
        e = (s.late - s.early) / (s.late + s.early)
    s.eml = e
    e1 = s.code_e1
    s.code_f = s.code_f + dll_k1 * e + dll_k2 * (e - e1)
    s.code_e1 = e

    s.code_p = s.code_p + n * cf
    s.code_p = np.mod(s.code_p, b1i.code_length)

    return p_prompt, s
Esempio n. 2
0
def track(x, s):
    n = len(x)
    fs = s.fs

    nco.mix(x, -s.carrier_f / fs, s.carrier_p)
    s.carrier_p = s.carrier_p - n * s.carrier_f / fs
    s.carrier_p = np.mod(s.carrier_p, 1)

    cf = (s.code_f + s.carrier_f / 589.424) / fs

    p_early = b1i.correlate(x, s.prn, 0, s.code_p - 0.5, cf, b1i.b1i_code(prn))
    p_prompt = b1i.correlate(x, s.prn, 0, s.code_p, cf, b1i.b1i_code(prn))
    p_late = b1i.correlate(x, s.prn, 0, s.code_p + 0.5, cf, b1i.b1i_code(prn))

    if s.mode == "FLL_WIDE":
        fll_k = 2.0
        a = p_prompt
        b = s.prompt1
        e = discriminator.fll_atan(a, b)
        s.carrier_f = s.carrier_f + fll_k * e
        s.prompt1 = p_prompt
    elif s.mode == "FLL_NARROW":
        fll_k = 0.3
        a = p_prompt
        b = s.prompt1
        e = discriminator.fll_atan(a, b)
        s.carrier_f = s.carrier_f + fll_k * e
        s.prompt1 = p_prompt
    elif s.mode == "PLL":
        pll_k1 = 0.1
        pll_k2 = 5.0
        e = discriminator.pll_costas(p_prompt)
        e1 = s.carrier_e1
        s.carrier_f = s.carrier_f + pll_k1 * e + pll_k2 * (e - e1)
        s.carrier_e1 = e

    # code loop

    dll_k1 = 0.00002
    dll_k2 = 0.2
    s.early = np.absolute(p_early)
    s.prompt = np.absolute(p_prompt)
    s.late = np.absolute(p_late)
    if (s.late + s.early) == 0:
        e = 0
    else:
        e = (s.late - s.early) / (s.late + s.early)
    s.eml = e
    e1 = s.code_e1
    s.code_f = s.code_f + dll_k1 * e + dll_k2 * (e - e1)
    s.code_e1 = e

    s.code_p = s.code_p + n * cf
    s.code_p = np.mod(s.code_p, b1i.code_length)

    return p_prompt, s