Skip to main content

BANK

The BANK configuration controls which GNSS signal types PpRx attempts to acquire and track, and how each signal type is configured.

A BANK configuration has two levels:

  • The top-level [BANK] block lists the signal banks to create.
  • Each signal-specific block, such as [GPS_L1_CA_PRIMARY], configures acquisition, tracking, pruning, and system settings for that signal type.

Below is an example BANK configuration:

[BANK]
NUM_BANKS = 2
BK01 = GPS_L1_CA_PRIMARY
BK02 = GPS_L2_CLM_PRIMARY

[GPS_L1_CA_PRIMARY]
FRONT_END = LION
MAXCHANNELS = 10
NOM_MIN_DOPPLER_FREQ_HZ = -5000
NOM_MAX_DOPPLER_FREQ_HZ = 5000
NUM_SUBACCUM_PER_ACCUM = 10
MAX_ACQ_SEARCH_DEPTH = 2
CODEGEN_TYPE = LOOKUP
CH_PRUNE_THRESHOLD = 10
TRACKING_STRATEGY = TRADITIONAL
PLL_DEFAULT_BANDWIDTH_HZ = 25
PLL_ENABLE_LOOP_BANDWIDTH_ADAPTATION = TRUE
PLL_DEFAULT_LOOP_ORDER = ORDER2
EML_CHIP_SPACING = 0.2
DLL_DEFAULT_BANDWIDTH_HZ = 0.003
ALLOW_DATA_SYMBOL_PREDICTION = TRUE
DATA_SYMBOL_PULL_SNR_THRESHOLD = 23
DATA_SYMBOL_PUSH_SNR_THRESHOLD = 100
DIRECTED_ACQ_ONLY = TRUE
ELEVATION_MASK_ANGLE_ACQ_DEG = 10.0
NOISE_FLOOR_CORRECTION_FACTOR = 1.0
CIRCBUFF_STREAM_IDX = 0
warning

For every signal type listed in [BANK], a matching signal-specific block must also be included. For example, if [BANK] lists GPS_L1_CA_PRIMARY and GPS_L2_CLM_PRIMARY, the config must also include [GPS_L1_CA_PRIMARY] and [GPS_L2_CLM_PRIMARY] blocks. NUM_BANKS must match the number of listed signal banks.

[BANK] block (top-level)

The top-level [BANK] block defines which signal-specific bank blocks PpRx will create. Each listed bank must have a matching configuration block later in the file.

[BANK] block parameters

NUM_BANKS

Default: None
Parameter Class: Operational Configuration
Technical Info: Number of signal banks defined in the [BANK] block. This must match the number of BKxx entries provided.
Practical Tuning Info: Set this to the number of signal types and antenna paths being configured. For example, tracking GPS L1, GPS L2, GPS L5, SBAS, and Galileo E1 requires NUM_BANKS = 5 for one antenna, or NUM_BANKS = 10 for two antennas. \

BK01, BK02, …

Default: N/A
Parameter Class: Operational Configuration
Technical Info: Specifies the signal type assigned to each bank. Each value must correspond to a matching signal-specific block, such as [GPS_L1_CA_PRIMARY]. BK01 is the root bank.
Practical Tuning Info: Configure one BKxx entry for each signal bank. The root bank, BK01, is acquired first by default and its accumulation interval defines the unit used for PpRx logging intervals. \

[SIGNAL_TYPE] block (per signal)

Each signal-specific block (for example [GPS_L1_CA_PRIMARY]) configures acquisition, tracking, pruning, and signal definition for that signal type. Parameters are grouped by where they sit in the DSP chain.

General

These parameters set basic per-signal behavior and resource usage. Most defaults here work well; the main tuning knobs are MAXCHANNELS, TXID_LIST, and CODEGEN_TYPE for controlling CPU/RAM load and which satellites are searched.

MAXCHANNELS

Default: 8
Parameter Class: Tunable
Impact of Change: Medium
Technical Info: Maximum number of channels that PpRx will track of the given signal type.
Practical Tuning Info: Values between 8–12 are recommended, with lower values reducing CPU usage. If MAXCHANNELS of a given signal are being tracked, acquisition of additional TXIDs of that signal type will not be attempted. \

TXID_LIST

Default: []
Parameter Class: Tunable
Impact of Change: Medium
Technical Info: List of TxIds for the bank that PpRx will attempt to acquire and track. If this list is empty, then all TxIds are assumed valid for acquisition and tracking.
Practical Tuning Info: If a constellation only has certain operational TXIDs (e.g. 131, 133, and 135 for SBAS, or L5's still-incomplete constellation), this field can be used to conserve resources by narrowing to only valid TXIDs. \

note

As of June 2026, the following TXID lists can be used to narrow to only real satellites:

For GPS L2: TXID_LIST = 1 3 4 5 6 7 8 9 10 11 12 14 15 17 18 20 21 23 24 25 26 27 28 29 30 31 32

For GPS L5: TXID_LIST = 1 3 4 6 8 9 10 11 14 18 20 21 23 24 25 26 27 28 30 32

For Galileo E5: TXID_LIST = 2 3 4 5 6 7 8 9 10 11 12 13 15 16 19 21 23 25 26 27 28 29 30 31 33 34 36

For SBAS: TXID_LIST = 131 133 135

NOISE_FLOOR_CORRECTION_FACTOR

Default: 1.0
Parameter Class: Tunable
Impact of Change: Medium
Technical Info: This value allows for correction of thermal noise floor estimates, which can occur when incoming data samples are time correlated. Adjusting this value affects the signal strength threshold used for signal acquisition and C/N0 estimates.
Practical Tuning Info: This should normally not be tuned, except for custom RF front-ends or simulated streams. \

DOPPLER_FREQ_STEP_HZ

Default: 1000
Parameter Class: Tunable
Impact of Change: Low/Negligible
Technical Info: Defines the Doppler frequency spacing, in Hz, used to build pre-computed carrier generator lookup tables.
Practical Tuning Info: Larger values will use less memory for pre-computed tables, and smaller values will more closely match the desired carrier frequency, but this value should not require tuning: gains from decreasing step size provide maximum gains of less than a thousandth of a dB-Hz, and lookup table memory using the default is on the order of tens of kilobytes. \

CODEGEN_TYPE

Default: PSIAKI
Parameter Class: Tunable
Impact of Change: Medium \

Options:

  • LOOKUP
  • PSIAKI
  • FULL_PRECISION

Technical Info: Sets code replica generation strategy.
Practical Tuning Info: LOOKUP is recommended for reduced CPU usage, while PSIAKI is recommended for reduced RAM usage or for signals with long PRN codes, like GPS L2. FULL_PRECISION should normally not be used. \

MSAMPFRAC

Default: 14
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Governs the adjustment resolution of code replicas used to correlate with raw RF data. The replica's location can be specified to a resolution of the sampling interval divided by MSAMPFRAC (e.g. for MSAMPFRAC = 14 and a 10 Msps sampling rate, this produces a ~7.1 ns code replica adjustment resolution. Note that code replica adjustment resolution is unrelated to final measurement resolution.)
Practical Tuning Info: This should normally not be tuned. The default MSAMPFRAC value of 14 has a worst-case C/N0 loss of only ~0.1 dB-Hz. Higher values can reduce this worst-case loss, but increase initialization time and cache pressure. \

Acquisition

These parameters control how signals are found before tracking. Tuning mainly trades acquisition speed and CPU load against the ability to find weaker or harder-to-acquire signals.

NOM_MAX_DOPPLER_FREQ_HZ

Default: 7000
Parameter Class: Tunable
Impact of Change: Medium
Technical Info: Maximum Doppler frequency used to define the search space for signal acquisition. This keeps the search space within practical bounds and prevents the possibility of acquiring signals with physically implausible Doppler shifts.
Practical Tuning Info: Lower values decrease compute used for acquisition at the expense of potentially not acquiring signals closer to the horizon, or signals that have been Doppler shifted due to poor receiver clock stability or high vehicle speeds. The minimum value this should be set to is roughly 3500 Hz for L1-band signals and roughly 2500 Hz for L5-band signals. \

NOM_MIN_DOPPLER_FREQ_HZ

Default: -7000
Parameter Class: Tunable
Impact of Change: Medium
Technical Info: See NOM_MAX_DOPPLER_FREQ_HZ.
Practical Tuning Info: See NOM_MAX_DOPPLER_FREQ_HZ. \

ACQ_STRATEGY

Default: TRADITIONAL
Parameter Class: Tunable
Impact of Change: Medium
Options:

  • TRADITIONAL
  • MODEL_BASED

Technical Info: Defines the method used for signal acquisition. TRADITIONAL will search a sequence of Doppler shifts for signals, with a range defined by NOM_MAX_DOPPLER_FREQ_HZ / NOM_MIN_DOPPLER_FREQ_HZ and a step size defined by FFT_DOPPLER_FREQ_M. MODEL_BASED also searches the same range, but with a much sparser set of Doppler shifts, and then uses a model to infer and polish the signal frequency.
Practical Tuning Info: For the same acquisition search depth (see MAX_ACQ_SEARCH_DEPTH), model-based acquisition will find more signals in less time. At high search depths, it may find signals that are quite weak and difficult to track reliably. If a given search depth is working well for an application in TRADITIONAL acquisition, reducing search depth by 3 or 4 will often get similar results significantly faster. \

FFT_DOPPLER_FREQ_M

Default: 4
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Defines the Doppler frequency step size used to define the search space for signal acquisition. This value maps to a frequency step size as a function of the sub-accumulation interval period as follows: \

Step size (Hz) = 1 / [Subaccumulation period (sec) * FFT_DOPPLER_FREQ_M]

Practical Tuning Info: Tuning should mostly not be necessary: higher values will search proportionally more frequency bins during acquisition, though with steeply diminishing returns (doubling this value will roughly double acquisition compute, but provide roughly ~0.1 dB-Hz C/N0 benefit during acquisition). Lower values will save proportionally on compute, but at the risk of lowering the probability that a signal can be pulled into tracking successfully. \

note

FFT_DOPPLER_FREQ_M is only applicable to ACQ_STRATEGY = TRADITIONAL.

INITIAL_ACQ_SEARCH_DEPTH

Default: -1
Parameter Class: Tunable
Impact of Change: Medium
Technical Info: Defines the acquisition search depth used for this bank during the initial acquisition pass, where higher search depths perform more coherent accumulations to find signals. A value of -1 means "use the initial acquisition depth from --depth in the .opt file," while any nonnegative value overrides --depth for this bank.
Practical Tuning Info: Use this when one signal bank should use a different startup acquisition depth than the global --depth parameter, such as keeping expensive or low-priority signals shallow while allowing others to search deeper. \

note

Galileo E1 BC uses a default INITIAL_ACQ_SEARCH_DEPTH of 0, rather than the globally supplied value in --depth, due to its long primary code. The long E1 primary code also means that lower search depths acquire weaker signals but also use more compute; an INITIAL_ACQ_SEARCH_DEPTH of 3 is roughly equivalent to a depth of 12 for other signals and is at the high end of the recommended range for E1's INITIAL_ACQ_SEARCH_DEPTH.

MAX_ACQ_SEARCH_DEPTH

Default: 5
Parameter Class: Tunable
Impact of Change: High
Technical Info: Maximum acquisition search depth defines the number of non-coherent integrations used during signal acquisition during background acquisition.
Practical Tuning Info: For clean RF environments, set this value lower to reduce CPU overhead (2–5). For degraded RF environments, set this value higher to increase SNR and the probability of acquiring a signal (6–10). \

note

Galileo E1 BC uses a default MAX_ACQ_SEARCH_DEPTH of 0, rather than the normal default of 5, due to its long primary code. The long E1 primary code also means that lower search depths acquire weaker signals but also use more compute; a MAX_ACQ_SEARCH_DEPTH of 3 is roughly equivalent to a depth of 12 for other signals and is at the high end of the recommended range for E1's MAX_ACQ_SEARCH_DEPTH.

MAX_DIRECTED_STANDARD_ACQ_ATTEMPTS_PER_CYCLE

Default: 2
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Maximum number of directed standard acquisition attempts allowed per acquisition cycle.
Practical Tuning Info: Leave at the default unless acquisition load is causing CPU spikes (adjust lower if so) or if reacquisition latency is especially important (adjust higher if so). \

MAX_DIRECTED_ACQ_CODE_GENS_PER_CYCLE

Default: -1 (no maximum)
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Maximum number of new code generations performed during directed acquisition per acquisition interval.
Practical Tuning Info: The default is normally best, but setting this parameter to 1 or 2 can be useful on low-power processors when using L2 in particular. This prevents many new codes from being generated at once when channels are initialized, which otherwise can cause PpRx to stall briefly. \

note

Only relevant when CODEGEN_TYPE = LOOKUP.

DIRECTED_ACQ_ONLY

Default: False
Parameter Class: Tunable
Impact of Change: High
Technical Info: Allow only directed acquisition (either direct-to-track acquisition or directed standard acquisition) after initial acquisition. This narrows the acquisition search space to the signal's expected location using information from other tracked signals in the same constellation.
Practical Tuning Info: Enable to reduce acquisition CPU load once the receiver has a valid solution and useful ephemeris aiding. Leave disabled to attempt acquisition of all possible signals, including ones which may not have enough information to be acquired through a directed acquisition. \

note

Directed acquisition can only be conducted for signals within the same constellation. For example, GPS L1 C/A cannot provide directed acquisition information to Galileo E5a, but can for GPS L5.

note

This gets overridden to False when too few root-bank signals have been acquired. The override ensures that processing power gets devoted to standard acquisition upon startup or after a complete loss of signals when directed acquisition isn't yet operable.

DIRECT_TO_TRACK_ACQ_ONLY

Default: False
Parameter Class: Tunable
Impact of Change: High
Technical Info: Allow only direct-to-track acquisition after initial acquisition. Direct-to-track acquisition skips FFT-based signal acquisition entirely, directly entering the tracking loops upon channel initialization.
Practical Tuning Info: Enabling will reduce acquisition CPU load even more than enabling DIRECTED_ACQ_ONLY, but requires a higher-quality estimate of the signal's location to successfully acquire. \

note

This is more restrictive than DIRECTED_ACQ_ONLY, which allows direct-to-track acquisition or directed standard acquisition. A runtime error will be thrown if this option is asserted simultaneously with DIRECTED_STANDARD_ACQ_ONLY; they are mutually exclusive.

DIRECTED_STANDARD_ACQ_ONLY

Default: False
Parameter Class: Tunable
Impact of Change: Medium
Technical Info: Allow only directed standard acquisition after initial acquisition (and do not allow direct-to-track acquisition). Directed standard acquisition utilizes aiding information from other signals from the same constellation to narrow the search space for FFT-based signal acquisition, reducing CPU usage.
Practical Tuning Info: This should normally be False. It uses more CPU than DIRECTED_ACQ_ONLY and DIRECT_TO_TRACK_ACQ_ONLY but reduces the risk of initializing tracking from an incorrect code timing estimate. \

note

This is more restrictive than DIRECTED_ACQ_ONLY, which allows direct-to-track acquisition or directed standard acquisition. A runtime error will be thrown if this option is asserted simultaneously with DIRECT_TO_TRACK_ACQ_ONLY; they are mutually exclusive.

BACKGROUND_ACQ_ONLY

Default: False
Parameter Class: Tunable
Impact of Change: Medium
Technical Info: Setting to True prevents a given signal type from participating in the optional one-time initial acquisition pass (enabled using -e in the PpRx .opt file).
Practical Tuning Info: Set to True for signal banks for which an exhaustive initial acquisition is unnecessary or computationally heavy, typically GPS L2/L5, Galileo E5a, and Beidou B1C.

DISABLE_STANDARD_ACQ

Default: False
Parameter Class: Tunable
Impact of Change: Medium
Technical Info: Disables the computationally heavy standard blind acquisition while PpRx is running, allowing standard acquisition only during the one-time initial acquisition and only directed acquisition after that.
Practical Tuning Info: Enable to prevent a bank from spending CPU on broad searches after startup. This should usually be set to True for signal banks for which standard acquisition is computationally heavy, typically GPS L2/L5, Galileo E5a, and Beidou B1C. \

DIRECT_TO_TRACK_ACQ_INITIAL_CN0_DB_HZ

Default: 40
Parameter Class: Tunable
Impact of Change: Low
Technical Info: C/N0 estimate used as an initial guess when initializing a channel via direct-to-track acquisition.
Practical Tuning Info: This should normally not need tuning. Set lower if channels are being initialized too optimistically in very weak signal conditions and not tracking stably after direct-to-track acquisitions.

ELEVATION_MASK_ANGLE_ACQ_DEG

Default: 0
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Minimum satellite elevation angle, in degrees, required for a TXID to be considered for an acquisition attempt, when elevation information is available. Signals below this elevation angle are excluded from acquisition candidate lists and prevented from reacquisition after pruning.
Practical Tuning Info: Typically set to 5–15 degrees, with higher values reducing acquisition attempts on low-elevation signals that are more likely to be weak, obstructed, or multipath-affected. Lower values may acquire more satellites near the horizon, but can increase CPU usage and the chance of spending acquisition compute on marginal signals.

EXTENDED_ACQ_ACCUM_FOR_DATABIT_TRANSITION

Default: False
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Enables a doubled acquisition window for Galileo E1 BC signals specifically. This changes acquisition from a 4 ms data window to an 8 ms data window, reducing sensitivity to 4 ms symbol transitions.
Practical Tuning Info: Enable this for more robust unaided Galileo E1 BC acquisition, especially for weak signals. Leave disabled when it is important to keep acquisition compute low.

Tracking

These parameters control how signals are tracked after acquisition. Tuning parameters from this section mainly balances measurement smoothness against responsiveness to dynamics.

TRACKING_STRATEGY

Default: TRADITIONAL
Parameter Class: Tunable
Impact of Change: Medium
Options:

  • TRADITIONAL
  • HYBRID

Technical Info: Selects the channel tracking architecture. TRADITIONAL uses local DLL/FLL/PLL tracking loops, while HYBRID uses the same local tracking loops but applies estimator/model-predicted Doppler aiding.
Practical Tuning Info: Use TRADITIONAL when model/estimator aiding may be unavailable or unreliable. Use HYBRID when a reliable receiver solution/model is available.

NUM_SUBACCUM_PER_ACCUM

Default: 10
Parameter Class: Tunable
Impact of Change: High
Technical Info: Defines how many subaccumulation intervals (a 1 ms interval for most signals) are combined into one accumulation. An accumulation is the interval over which PpRx coherently integrates signals during tracking, and the interval at which tracking loops are updated.
Practical Tuning Info: Higher values improve measurement quality, but reduce loop update rate and increase sensitivity to dynamics. 10 is a good default for most scenarios, while 20 works well for static/low-dynamics cases and 1, 2, or 4 may be required for extreme dynamics. \

note

A subaccumulation interval is typically defined as one code period within PpRx. The subaccumulation interval for GPS L1/L2/L5, Galileo E5a, and Beidou B2a is 1 ms by default. For Galileo E1b/c it is 4 ms, and for Beidou B1c it is 10 ms.

note

If the signal to be tracked is data modulated, then NUM_SUBACCUM_PER_ACCUM must be an integer divisor of the number of subaccumulations per data symbol (NUM_SUBACCUM_PER_SYMBOL). This means that for GPS L1 C/A, which has a symbol period of 20 ms, valid NUM_SUBACCUM_PER_ACCUM values are 1, 2, 4, 5, 10, and 20.

note

PpRx logging rates (specified in the .opt file by --log-interval) are in units of accumulation intervals of the root bank. The root bank is the bank of signals specified as BK01 in the [BANK] block. For example, if GPS L1 C/A is specified as BK01 and GPS L1 C/A is set to NUM_SUBACCUM_PER_ACCUM = 10, then a root-bank accumulation interval is 10 ms. This means that if --log-interval is set to 10, then PpRx will output data at 10 × 10 ms = 100 ms = 10 Hz. If NUM_SUBACCUM_PER_ACCUM is then halved to 5, then PpRx will output data at 20 Hz.

Delay-Locked Loop (DLL)

These parameters control code tracking and pseudorange behavior. Most tuning trades code measurement precision against robustness to weak signals, distortion, and dynamics.

EML_CHIP_SPACING

Default: 0.3
Parameter Class: Tunable
Impact of Change: Medium
Technical Info: Defines the early-minus-late correlator spacing, in chips, used for signal tracking. This value is the total spacing between the early and late correlators: the early correlator is placed at -EML_CHIP_SPACING / 2, the prompt at 0, and the late correlator at +EML_CHIP_SPACING / 2.
Practical Tuning Info: Lower values generally improve code tracking precision and reduce sensitivity to multipath, but can make the pseudorange measurements noisier and less robust if the signal is weak or distorted. For high-precision applications in clean RF environments, set lower (0.1–0.2). For highly dynamic applications or weak signals, set higher (0.4–0.5).

DLL_DEFAULT_BANDWIDTH_HZ

Default: 0.03
Parameter Class: Tunable
Impact of Change: Medium
Technical Info: Sets the steady-state delay-locked-loop (DLL) bandwidth, in Hz.
Practical Tuning Info: Higher values (e.g. 0.1) improve responsiveness to vehicle dynamics, but increase noise. Lower values (e.g. 0.003) smooth tracking and can improve precision in low-dynamics or interference/multipath-heavy environments, but with reduced responsiveness.

DLL_CARRIER_AIDING

Default: True
Parameter Class: Tunable
Impact of Change: High
Technical Info: Specifies whether the DLL is aided by the carrier tracking loop.
Practical Tuning Info: This should normally be set to True. Carrier aiding significantly improves DLL tracking performance.

Frequency-Locked Loop (FLL)

These parameters affect initial frequency locking and data-symbol synchronization. They usually have low impact after lock, and defaults are appropriate for most cases.

FLL_DEFAULT_LOOP_ORDER

Default: ORDER1
Parameter Class: Tunable
Impact of Change: Low
Options:

  • ORDER1
  • ORDER2

Technical Info: Sets how aggressively the FLL uses measured frequency error while pulling a newly acquired signal toward frequency lock. ORDER1 applies a direct correction from the measured frequency error, while ORDER2 also keeps an internal trend estimate that can help follow rapidly changing Doppler.
Practical Tuning Info: Leave at ORDER1 for general robustness. ORDER2 may help in highly dynamic cases where Doppler changes rapidly during signal pull-in / frequency locking.

FLL_NOM_BANDWIDTH_HZ

Default: 5.0
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Sets the bandwidth (or effective gain) of the FLL during initial frequency pull-in for cases where the signal is above a nominal C/N0 threshold (approximately 36 dB-Hz).
Practical Tuning Info: Leave at the default for most cases. Higher values make the FLL correct frequency error faster, which can help in high-dynamic pull-in but makes the estimate more sensitive to noise; lower values smooth the frequency estimate more heavily, which can improve stability but may slow acquisition-to-tracking transition.

FLL_TRANSIENT_EFPLL_THRESH_CYC

Default: -1
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Defines an optional FLL lock quality threshold required for PpRx to declare a frequency lock. A value of -1 disables this quality gate, with the FLL pulling in frequency over a predefined sequence.
Practical Tuning Info: Set to about 0.125 if used. Lower values are more conservative but can stall otherwise healthy signals. Values above 0.25 are generally not useful as a lock-quality check.

FLL_EFPLL_FILTER_TAU_SEC

Default: 0.01
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Defines the time constant, in seconds, for the low-pass filter applied to the FLL's frequency error metric. This metric is only relevant and only used as a quality gate on FLL lock progression when FLL_TRANSIENT_EFPLL_THRESH_CYC is enabled (not -1).
Practical Tuning Info: No tuning needed if FLL_TRANSIENT_EFPLL_THRESH_CYC is not set / at default. If set, use a value in the range of 0.2–0.5 sec to smooth short-term discriminator noise. Shorter values more easily incorrectly pass/fail signals, while longer values make the gate slow to react to FLL lock progression.

FLL_WEAK_BANDWIDTH_HZ

Default: 1.0
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Sets the bandwidth (or effective gain) of the FLL during initial frequency pull-in for cases where the signal is classified as weak (below approximately 36 dB-Hz).
Practical Tuning Info: Leave at the default for most cases. Higher values make the FLL correct frequency error faster, which can help in high-dynamic pull-in but makes the estimate more sensitive to noise; lower values smooth the frequency estimate more heavily, which can improve stability but may slow acquisition-to-tracking transition.

FLL_NBS1_NOM

Default: 12
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Upper navigation bit synchronization threshold used by the FLL for nominal-strength signals (~36+ dB-Hz). During initial pull-in, the receiver builds a histogram of the likely data-symbol boundary locations; when one candidate boundary location reaches this threshold (and no other candidate locations have reached the FLL_NBS2_NOM threshold), the receiver declares a symbol lock.
Practical Tuning Info: Leave at the default for most cases. For strong signals with 20 ms symbol intervals, the default value of 12 will typically achieve the threshold required to lock in ~0.5 sec. Higher values will increase this time proportionally, though may give more protection against false locks.

FLL_NBS1_WEAK

Default: 80
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Upper navigation bit synchronization threshold used by the FLL for weak signals (<36 dB-Hz). During initial pull-in, the receiver builds a histogram of the likely data-symbol boundary locations; when one candidate boundary location reaches this threshold (and no other candidate locations have reached the FLL_NBS2_WEAK threshold), the receiver declares a symbol lock.
Practical Tuning Info: Leave at the default for most cases. For weak signals with 20 ms symbol intervals, the default value of 80 will typically achieve the threshold required to lock in ~5 sec. Higher values will increase this time proportionally, though may give more protection against false locks.

FLL_NBS2_NOM

Default: 7
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Lower navigation bit synchronization threshold used by the FLL as an ambiguity check for nominal-strength signals (~36+ dB-Hz). When one candidate boundary location reaches FLL_NBS1_NOM, symbol lock is accepted only if no other candidate boundary locations have reached this threshold.
Practical Tuning Info: Leave at the default for most cases. Lower values make the ambiguity check stricter and may cause more symbol-lock retries, though improve confidence in the data symbol synchronization.

FLL_NBS2_WEAK

Default: 70
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Lower navigation bit synchronization threshold used by the FLL as an ambiguity check for weak signals (<36 dB-Hz). When one candidate boundary location reaches FLL_NBS1_WEAK, symbol lock is accepted only if no other candidate boundary locations have reached this threshold.
Practical Tuning Info: Leave at the default for most cases. Lower values make the ambiguity check stricter and may cause more symbol-lock retries, though improve confidence in the data symbol synchronization.

Phase-Locked Loop (PLL)

These parameters control carrier phase and steady-state Doppler tracking. Tuning mainly trades carrier-phase smoothness against dynamic responsiveness, especially when using hybrid Doppler aiding.

PLL_DEFAULT_LOOP_ORDER

Default: ORDER2
Parameter Class: Tunable
Impact of Change: Medium
Options:

  • ORDER1
  • ORDER2
  • ORDER3

Technical Info: Sets the loop filter order, or how much internal state the PLL uses, when converting carrier phase error into carrier tracking updates during normal tracking. ORDER1 applies a direct phase-error correction, ORDER2 also maintains a carrier frequency estimate in applying corrections, and ORDER3 integrates an estimated frequency change over time.
Practical Tuning Info: Leave at ORDER2 for most use cases. ORDER1 may be useful only in very low-dynamic, high-signal-strength scenarios, while ORDER3 can be helpful or necessary for extreme dynamics, but may be more sensitive to noise and loop tuning.

PLL_DEFAULT_BANDWIDTH_HZ

Default: 25.0
Parameter Class: Tunable
Impact of Change: Medium
Technical Info: Sets the responsiveness, or effective gain, of the PLL during normal carrier phase tracking for TRACKING_STRATEGY = TRADITIONAL. Higher values make the PLL correct measured phase error more quickly, while lower values smooth the carrier phase estimate more heavily and make tracking less sensitive to noise.
Practical Tuning Info: Values around 5–30 Hz are typical, with lower values producing smoother carrier phase estimates and higher values improving tolerance to dynamics. Overall carrier tracking response is also governed by the signal's accumulation time × PLL bandwidth, so shorter accumulation times (lower NUM_SUBACCUM_PER_ACCUM values) generally require proportionally higher bandwidth for the same response.

PLL_HYBRID_LOOP_ORDER

Default: Same as PLL_DEFAULT_LOOP_ORDER if not explicitly set
Parameter Class: Tunable
Impact of Change: Medium
Options:

  • ORDER1
  • ORDER2
  • ORDER3

Technical Info: Sets the loop filter order, or how much internal state the PLL uses, after TRACKING_STRATEGY = HYBRID begins applying model-predicted Doppler aiding. In hybrid mode, the PLL tracks residual carrier error after subtracting modeled Doppler, so the loop order controls how much residual frequency / frequency-rate behavior the PLL is allowed to estimate.
Practical Tuning Info: ORDER2 is usually best for hybrid tracking, because the aiding model can be expected to already follow most frequency-rate dynamics, making ORDER3 less impactful. ORDER1 may be possible if reliable Doppler aiding is available, but is less performant in most conditions than ORDER2.

PLL_HYBRID_BANDWIDTH_HZ

Default: Same as PLL_DEFAULT_BANDWIDTH_HZ if not explicitly set
Parameter Class: Tunable
Impact of Change: Medium
Technical Info: Sets the responsiveness, or effective gain, of the PLL after TRACKING_STRATEGY = HYBRID begins applying model-predicted Doppler aiding. In hybrid mode, the PLL tracks only the residual carrier frequency error after subtracting modeled Doppler, rather than tracking the full carrier dynamics by itself.
Practical Tuning Info: Use values similar to PLL_DEFAULT_BANDWIDTH_HZ to begin with, but tune lower if the receiver solution is reliable. Very low values, in the range of 0.5, may be possible for good model estimates and strong signals, which can significantly improve carrier phase noise rejection.

PLL_ENABLE_LOOP_BANDWIDTH_ADAPTATION

Default: False
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Enables automatic increase of PLL smoothing, or reduction in responsiveness, when the signal strength is low (below ~40 dB-Hz). When tracking, the PLL uses its configured bandwidth for strong signals, but caps bandwidth at 5 Hz for weak signals.
Practical Tuning Info: Leave disabled for most cases. Enabling may improve the ability to track weak signals, but may slightly reduce responsiveness to real dynamics.

PLL_DEFAULT_DISCRIMINATOR_TYPE

Default: AT4_DISC
Parameter Class: Tunable
Impact of Change: Low
Options:

  • AT_DISC
  • AT4_DISC

Technical Info: Selects how the PLL converts correlation results into carrier phase error. AT_DISC uses a two-quadrant arctangent and is insensitive to data bit changes, while AT4_DISC uses a four-quadrant arctangent and can detect both carrier phase and data bit changes.
Practical Tuning Info: Leave at AT4_DISC for most cases. Use AT_DISC only for the rare case where carrier tracking should ignore possible stored data bit errors and also has a NUM_SUBACCUM_PER_ACCUM greater than 20.

Signal health & pruning

These parameters govern signal health monitoring and pruning. Tuning generally has marginal impact on performance, with the exception of FORCE_HEALTHY, which can improve time-to-first-fix.

CH_IQSQ_FILTER_TAU_SEC

Default: 0.5
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Time constant, in seconds, for the low-pass filter used to smooth C/N0 estimates.
Practical Tuning Info: Leave at the default for most cases. Lower values make reported signal strength and signal-strength-related tracking logic respond faster to fades or power changes, but increase C/N0 estimate noise.

CH_DISTORTION_FILTER_TAU_SEC

Default: 0.5
Parameter Class: Display Configuration
Technical Info: Time constant, in seconds, for the low-pass filter used to smooth the channel's distortion statistic. The distortion statistic is based on the delta between early and late correlators, with values closer to 0 indicating a more symmetric/undistorted correlation shape.
Practical Tuning Info: The distortion statistic is not used in tracking loops, so tuning does not affect receiver performance, but the statistic is reported in the GBX output and the channel.log file. Lower CH_DISTORTION_FILTER_TAU_SEC values make reported distortion respond faster to changes, but increase noise.

CH_DATA_CORRUPT_THRESHOLD

Default: 3
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Defines how many data-corruption events from the signal's decoded nav data bits are allowed before the channel is pruned and must be reacquired. Corruption events are signal-specific, but generally come from failed parity/checksum checks in the navigation message.
Practical Tuning Info: Leave at the default in most cases. Lower values make PpRx abandon channels with suspect navigation data more quickly, while higher values tolerate more transient bit errors before forcing reacquisition.

CH_PRUNE_INTERVAL_SEC

Default: 1.0
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Sets how often the receiver checks acquired/tracked channels for pruning conditions. This is the check interval only; actual pruning depends on CH_PRUNE_THRESHOLD.
Practical Tuning Info: Leave at the default for most cases. Lower values make the receiver detect and recycle failing channels faster, while higher values make pruning less reactive and more tolerant of short fades or brief tracking disturbances.

CH_PRUNE_THRESHOLD

Default: 10
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Number of consecutive pruning checks (with an interval set by CH_PRUNE_INTERVAL_SEC) a channel may fail before it is pruned.
Practical Tuning Info: Leave at the default for most cases. Lower values prune failing channels sooner and may improve reacquisition latency, but can remove channels more easily during temporary fades.

CH_PRUNE_CN0_THRESHOLD_MIN

Default: 23.0
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Minimum allowed C/N0 estimate for an acquired/tracked channel during pruning checks. If a channel remains below this threshold for enough consecutive checks, it is pruned and made available for reacquisition.
Practical Tuning Info: Leave at the default for most cases. Higher values recycle weak channels sooner, which can reduce time spent tracking marginal signals but may drop usable weak signals.

CH_PRUNE_CN0_THRESHOLD_MAX

Default: 65.0
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Maximum allowed C/N0 estimate for an acquired/tracked channel during pruning checks. Values above this threshold are treated as unrealistic or evidence of spoofing and cause the channel to be pruned.
Practical Tuning Info: Leave at the default for normal use. If spoofing is expected, lowering to approximately 52 may improve pruning of spoofed signals while preventing pruning of almost all real signals.

FORCE_HEALTHY_WHEN_TRACQUIRED

Default: False
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Marks a signal as healthy when it is initialized through direct-to-track acquisition, before the signal's own health indicator has necessarily been decoded. This allows observables from direct-to-track acquired signals to be used sooner when timing and ephemeris are already available from aiding information.
Practical Tuning Info: Enable when using reliable imported ephemeris and faster use of direct-to-track signals is desired. This parameter is narrower than FORCE_HEALTHY; the forced health indication is intended to be replaced once the signal-borne health indicator is decoded.

FORCE_HEALTHY

Default: False
Parameter Class: Tunable
Impact of Change: Medium
Technical Info: Forces signals to be treated as healthy, regardless of whether the broadcast health status is unknown or unhealthy.
Practical Tuning Info: Enable cautiously; signals marked unhealthy may still be useful. Enabling FORCE_HEALTHY can also improve time-to-first-fix by not forcing a wait for signal health status.

PLL_PHASE_LOCK_THRESHOLD

Default: 0.9
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Phase-lock statistic threshold used to decide when the PLL has achieved carrier phase lock. The receiver phase-lock statistic is approximately defined by cos(2 * phase error), so a value of 0.9 corresponds to a carrier phase error threshold of ~12.9 degrees.
Practical Tuning Info: Leave at the default for most cases. Higher values make phase-lock declaration more strict, while lower values can declare phase lock sooner but increase the risk of accepting a poorly aligned carrier phase estimate.

PLL_PHASE_FLAG_THRESHOLD

Default: 0.4
Parameter Class: Tunable
Impact of Change: Low
Technical Info: If the phase-lock statistic falls below this value, the channel sets a phase error flag on the channel. The receiver phase-lock statistic is approximately defined by cos(2 * phase error), so the default value of 0.4 corresponds to a carrier phase error threshold of ~33.2 degrees. Phase error flags temporarily de-weight or remove the signal from participation in the estimator and count as failing a pruning check.
Practical Tuning Info: Leave at the default for most cases. Higher values make the receiver flag possible phase issues more aggressively, which can protect the estimator from questionable carrier-phase / Doppler information, but may increase false alarms.

PLL_NUM_SUB_PER_PHASELOCK

Default: 20
Parameter Class: Tunable
Impact of Change: Low
Technical Info: Number of subaccumulations (usually 1 ms) used to compute each phase-lock statistic.
Practical Tuning Info: Leave at the default for most cases. Higher values average over a longer interval and make phase-lock / phase-flag decisions more robust but slower to react to lock changes.

System settings

These parameters set the basic signal configuration. Most should be left out of the .config file so PpRx can choose the right values automatically; usually only CIRCBUFF_STREAM_IDX needs to be set manually for the RF stream layout.

FRONT_END

Default: None
Parameter Class: Structural Configuration
Technical Info: Selects which front-end variant supplies samples for this signal bank. The value must match a front-end block defined in the FRONT_END section, such as LION or LION_L5, and that front end must list the signal type in its SUPPORTED_SIGNAL_TYPES.
Practical Tuning Info: For RadioLion, use FRONT_END = LION for L1/L2-band signal banks, and FRONT_END = LION_L5 for L5-band banks. This should normally not be tuned; changing it routes the bank to a different sample stream, so mismatches will prevent normal operation.

CIRCBUFF_STREAM_IDX

Default: 0
Parameter Class: Structural Configuration
Technical Info: Index of RF stream containing data for the given signal type.
Practical Tuning Info: This value must be set according to the location of RF data in the incoming sample stream. For the RadioLion or any LION bitpacked data, the correct mapping is as follows:

  • Any L1-band primary antenna signal: CIRCBUFF_STREAM_IDX = 0
  • Any L1-band secondary antenna signal: CIRCBUFF_STREAM_IDX = 1
  • Any L2-band primary antenna signal: CIRCBUFF_STREAM_IDX = 2
  • Any L2-band secondary antenna signal: CIRCBUFF_STREAM_IDX = 3
  • Any L5-band primary antenna signal: CIRCBUFF_STREAM_IDX = 0
  • Any L5-band secondary antenna signal: CIRCBUFF_STREAM_IDX = 1

INHERIT_CONFIG_FROM_PRIMARY

Default: False
Parameter Class: Structural Configuration
Technical Info: Allows a non-primary signal block, such as [GPS_L1_CA_ALT1], to inherit configuration values from the matching primary block, such as [GPS_L1_CA_PRIMARY], before applying any values explicitly set in the non-primary block.
Practical Tuning Info: Use this for multi-antenna configurations where ALT1 should mostly match PRIMARY, then override only fields that differ such as CIRCBUFF_STREAM_IDX. This reduces duplication and keeps primary/alternate signal settings synchronized.

NOM_CHIPRATE_CPS

Default: Dependent on the Signal Type selected.
Parameter Class: Structural Configuration
Technical Info: Nominal chipping rate of PRN code, in chips per second.
Practical Tuning Info: This value should normally be omitted from the .config file; PpRx will select the correct nominal value for the signal type specified.

FREQ_CARRIER_HZ

Default: Dependent on the Signal Type selected.
Parameter Class: Structural Configuration
Technical Info: Nominal carrier frequency, in Hz.
Practical Tuning Info: This value should normally be omitted from the .config file; PpRx will select the correct nominal value for the signal type specified.

NUM_CHIPS_PER_CODE

Default: Dependent on the Signal Type selected.
Parameter Class: Structural Configuration
Technical Info: Number of chips in PRN code.
Practical Tuning Info: This value should normally be omitted from the .config file; PpRx will select the correct nominal value for the signal type specified.

NUM_CHIPS_PER_SUBACCUM

Default: Dependent on the Signal Type selected.
Parameter Class: Structural Configuration
Technical Info: Number of chips per subaccumulation.
Practical Tuning Info: This value should normally be omitted from the .config file; PpRx will select the correct nominal value for the signal type specified.

NUM_SUBACCUM_PER_SYMBOL

Default: Dependent on the Signal Type selected.
Parameter Class: Structural Configuration
Technical Info: Number of subaccumulations per symbol.
Practical Tuning Info: This value should normally be omitted from the .config file; PpRx will select the correct nominal value for the signal type specified.