Exemplo n.º 1
0
  def __init__(self, params):
    """
    Initialize the parameters, which are common across different
    types of tracking channels.

    Parameters
    ----------
    params : dictionary
      The subset of tracking channel parameters that are deemed
      to be common across different types of tracking channels.


    """
    for (key, value) in params.iteritems():
      setattr(self, key, value)

    self.prn = params['acq'].prn
    self.signal = params['acq'].signal

    self.results_num = 500
    self.stage1 = True

    self.lock_detect = LockDetector(
        k1=self.lock_detect_params["k1"],
        k2=self.lock_detect_params["k2"],
        lp=self.lock_detect_params["lp"],
        lo=self.lock_detect_params["lo"])

    self.alias_detect = AliasDetector(
        acc_len=defaults.alias_detect_interval_ms / self.coherent_ms,
        time_diff=1)

    self.cn0_est = CN0Estimator(
        bw=1e3 / self.coherent_ms,
        cn0_0=self.cn0_0,
        cutoff_freq=0.1,
        loop_freq=self.loop_filter_params["loop_freq"]
    )

    self.loop_filter = self.loop_filter_class(
        loop_freq=self.loop_filter_params['loop_freq'],
        code_freq=self.code_freq_init,
        code_bw=self.loop_filter_params['code_bw'],
        code_zeta=self.loop_filter_params['code_zeta'],
        code_k=self.loop_filter_params['code_k'],
        carr_to_code=self.loop_filter_params['carr_to_code'],
        carr_freq=self.acq.doppler,
        carr_bw=self.loop_filter_params['carr_bw'],
        carr_zeta=self.loop_filter_params['carr_zeta'],
        carr_k=self.loop_filter_params['carr_k'],
        carr_freq_b1=self.loop_filter_params['carr_freq_b1'],
    )

    self.next_code_freq = self.loop_filter.to_dict()['code_freq']
    self.next_carr_freq = self.loop_filter.to_dict()['carr_freq']

    self.track_result = TrackResults(self.results_num,
                                     self.acq.prn,
                                     self.acq.signal)
    self.alias_detect_init = 1
    self.code_phase = 0.0
    self.carr_phase = 0.0
    self.samples_per_chip = int(round(self.sampling_freq / self.chipping_rate))
    self.sample_index = params['samples']['sample_index']
    self.sample_index += self.acq.sample_index
    self.sample_index += self.acq.code_phase * self.samples_per_chip
    self.sample_index = int(math.floor(self.sample_index))
    self.carr_phase_acc = 0.0
    self.code_phase_acc = 0.0
    self.samples_tracked = 0
    self.i = 0

    self.pipelining = False    # Flag if pipelining is used
    self.pipelining_k = 0.     # Error prediction coefficient for pipelining
    self.short_n_long = False  # Short/Long cycle simulation
    self.short_step = True    # Short cycle
    if self.tracker_options:
      mode = self.tracker_options['mode']
      if mode == 'pipelining':
        self.pipelining = True
        self.pipelining_k = self.tracker_options['k']
      elif mode == 'short-long-cycles':
        self.short_n_long = True
        self.pipelining = True
        self.pipelining_k = self.tracker_options['k']
      else:
        raise ValueError("Invalid tracker mode %s" % str(mode))