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:
ThirdOrderAssistedBilinearLFfor the carrier loop (FLL-assisted PLL for improved dynamics)SecondOrderBilinearLFfor the code loop
The default bandwidths are:
- Carrier loop: 18 Hz
- Code loop: 1 Hz
Doppler Estimators
Tracking.ConventionalPLLAndDLL — Type
Conventional Phase-Locked Loop (PLL) and Delay-Locked Loop (DLL) Doppler estimator. Uses configurable loop filters for carrier and code tracking with adjustable bandwidths.
Tracking.ConventionalAssistedPLLAndDLL — Function
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.
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.