def search(x,prn):
  fs = 8192000.0
  n = 8192                                         # 1 ms coherent integration
  incr = float(b1i.code_length)/n
  c = b1i.code(prn,0,0,incr,n)                     # obtain samples of the B1I code
  c = fft.fft(np.concatenate((c,np.zeros(n))))
  m_metric,m_code,m_doppler = 0,0,0
  for doppler in np.arange(-5000,5000,200):        # doppler bins
    q = np.zeros(2*n)
    w = nco.nco(-doppler/fs,0,2*n)
    for block in range(80):                        # 20 incoherent sums
      b = x[(block*n):((block+2)*n)]
      b = b*w
      r = fft.ifft(c*np.conj(fft.fft(b)))
      q = q + np.absolute(r)
    idx = np.argmax(q)
    if q[idx]>m_metric:
      m_metric = q[idx]
      m_code = b1i.code_length*(float(idx)/n)
      m_doppler = doppler
  m_code = m_code%b1i.code_length
  return m_metric,m_code,m_doppler
예제 #2
0
def search(x, prn):
    fs = 8192000.0
    n = 8192  # 1 ms coherent integration
    incr = float(b1i.code_length) / n
    c = b1i.code(prn, 0, 0, incr, n)  # obtain samples of the B1I code
    c = fft.fft(np.concatenate((c, np.zeros(n))))
    m_metric, m_code, m_doppler = 0, 0, 0
    for doppler in np.arange(-7000, 7000, 200):  # doppler bins
        q = np.zeros(2 * n)
        w = nco.nco(-doppler / fs, 0, 2 * n)
        for block in range(80):  # 20 incoherent sums
            b = x[(block * n):((block + 2) * n)]
            b = b * w
            r = fft.ifft(c * np.conj(fft.fft(b)))
            q = q + np.absolute(r)
        idx = np.argmax(q)
        if q[idx] > m_metric:
            m_metric = q[idx]
            m_code = b1i.code_length * (float(idx) / n)
            m_doppler = doppler
    m_code = m_code % b1i.code_length
    return m_metric, m_code, m_doppler