Loop Filter

The loop filters are provided by TrackingLoopFilters.jl. This includes:

  • first order loop filter FirstOrderLF
  • second order bilinear loop filter SecondOrderBilinearLF
  • second order boxcar loop filter SecondOrderBoxcarLF
  • third order bilinear loop filter ThirdOrderBilinearLF
  • third order boxcar loop filter ThirdOrderBoxcarLF
  • third order assisted bilinear loop filter ThirdOrderAssistedBilinearLF (combines PLL and FLL)

Default Configuration

The default Doppler estimator is ConventionalAssistedPLLAndDLL which uses:

  • ThirdOrderAssistedBilinearLF for the carrier loop (FLL-assisted PLL for improved dynamics)
  • SecondOrderBilinearLF for the code loop

The default bandwidths are:

  • Carrier loop: 18 Hz
  • Code loop: 1 Hz

Doppler Estimators

Tracking.ConventionalPLLAndDLLType

Conventional Phase-Locked Loop (PLL) and Delay-Locked Loop (DLL) Doppler estimator. Uses configurable loop filters for carrier and code tracking with adjustable bandwidths.

source
Tracking.ConventionalAssistedPLLAndDLLFunction
ConventionalAssistedPLLAndDLL(
    multiple_system_sats_state;
    ...
)
ConventionalAssistedPLLAndDLL(
    multiple_system_sats_state,
    ;
    carrier_loop_filter_bandwidth,
    code_loop_filter_bandwidth
)

Create a ConventionalPLLAndDLL with FLL-assisted carrier tracking. This is the default Doppler estimator used by TrackState. Uses a ThirdOrderAssistedBilinearLF for the carrier loop filter which combines PLL and FLL discriminators for improved tracking under high dynamics.

source

Custom Configuration

You can customize the loop filters and bandwidths when creating the Doppler estimator:

julia> using Tracking, GNSSSignals, TrackingLoopFilters

julia> using Tracking: Hz

julia> system = GPSL1();

julia> sat_state = SatState(system, 1, 50.0, 1000.0Hz);

julia> system_sats_state = SystemSatsState(system, sat_state);

julia> # Use non-assisted PLL with custom loop filter types
       doppler_estimator = ConventionalPLLAndDLL(
           (system_sats_state,),
           ThirdOrderBilinearLF,      # carrier loop filter type
           SecondOrderBilinearLF;     # code loop filter type
           carrier_loop_filter_bandwidth = 15.0Hz,
           code_loop_filter_bandwidth = 0.5Hz
       );

julia> track_state = TrackState((system_sats_state,); doppler_estimator);

Custom Loop Filters

You can implement a custom loop filter MyLoopFilter <: AbstractLoopFilter. In this case, a specialized filter_loop function is needed. For more information refer to TrackingLoopFilters.jl.