Linear covariance analysis

Monte Carlo tells you what happened in 10,000 particular universes. Linear covariance analysis (LinCov) tells you the statistics directly, in one deterministic run, by propagating covariance instead of samples. Its real value is not merely speed — it is that LinCov can compute the thing Monte Carlo cannot easily isolate: the difference between how big the error actually is and how big the filter thinks it is.

Symbols used on this page are defined in the Nomenclature → estimation & filtering.

The core idea. If errors are small enough that the system behaves linearly about a reference trajectory, then error means and covariances propagate through known matrix equations. You never draw a random number. One run gives a $3\sigma$ envelope for the entire mission, and — crucially — the sensitivity of that envelope to every individual error source.

1 · Why not just run Monte Carlo

Monte CarloLinear covariance
Cost$N$ full simulations; tail statistics need large $N$one pass of matrix recursions
Statistical error$\sigma$ estimate converges as $1/\sqrt{N}$ — 10,000 runs gives ~1% on $\sigma$, much worse on tailsexact for the linear model (no sampling error at all)
Nonlinearityhandles it fullyfirst-order only
Non-Gaussian, saturation, discrete logiccapturednot captured
Error budget by sourceawkward — needs a separate campaign per sourcefalls out directly and additively
True vs filter-believed errorcomputable but requires carestructurally separated (§3)
Rare-event / tail behaviourthe only real optionGaussian tails by assumption

So the two are used at different stages rather than in competition: LinCov for design, trade studies and error budgets — where you need to iterate quickly and understand why a number is what it is — and Monte Carlo for verification, where nonlinearity, discrete mode logic and saturation must be exercised before you believe the answer. A LinCov result that disagrees with Monte Carlo is itself informative: it localises exactly where the linearity assumption broke.

2 · The basic propagation

Linearise the dynamics and measurements about a reference trajectory. With $\delta\mathbf x$ the error state:

$$ \delta\mathbf x_{k+1}=\Phi_k\,\delta\mathbf x_k+B_k\mathbf w_k,\qquad \delta\mathbf z_k=H_k\,\delta\mathbf x_k+\mathbf v_k $$

Covariance then propagates and updates with no random draws anywhere:

$$ P^-_{k+1}=\Phi_k P_k\Phi_k^\top+Q_k,\qquad K_k=P^-_kH_k^\top\big(H_kP^-_kH_k^\top+R_k\big)^{-1} $$ $$ P_k=(I-K_kH_k)P^-_k(I-K_kH_k)^\top+K_kR_kK_k^\top $$

Because $\Phi,H,Q,R$ depend only on the reference trajectory and not on the realised errors, the whole sequence is deterministic and can be run forward once. Note that this is the same recursion a Kalman filter runs — the insight of LinCov is that the covariance half of a Kalman filter does not need the measurement half. You can predict performance before any data exists, which is precisely what you need during design.

3 · The part that matters: dual covariance

A filter's own $P$ is not the truth — it is the filter's opinion, and it is only correct if every model is correct. Real systems always have errors the filter does not model: unmodelled biases, mistuned $Q$, imperfect $R$, neglected states, linearisation error. The essential LinCov construct is to track two covariances simultaneously:

QuantityMeaningWho sees it
$P_{filt}$the filter's believed covariance, computed from its own (possibly wrong) models what the flight software reports and what downstream consumers trust
$P_{true}$the actual covariance of the true error, including effects the filter is blind to reality; only an analysis (or flight data) reveals it

Partition the world into the states the filter estimates, $\delta\mathbf x$, and the error parameters it does not, $\delta\mathbf p$ (the "consider" parameters). The true system couples them:

$$ \begin{bmatrix}\delta\mathbf x\\ \delta\mathbf p\end{bmatrix}_{k+1} =\begin{bmatrix}\Phi_{xx} & \Phi_{xp}\\ \mathbf 0 & I\end{bmatrix} \begin{bmatrix}\delta\mathbf x\\ \delta\mathbf p\end{bmatrix}_k+\dots $$

while the filter's gain $K$ was computed from a model that omits $\delta\mathbf p$ entirely. Propagating the augmented true covariance with that sub-optimal gain gives $P_{true}$, and the comparison is the whole point:

$$ P_{true}\;\succeq\;P_{filt} \quad\Longrightarrow\quad \text{the filter is }\textbf{optimistic}\text{ — it is more confident than it should be} $$
Why this specific comparison is the most valuable output of the whole analysis. An optimistic filter is dangerous in a way a merely inaccurate one is not. Downstream consumers gate decisions on the reported covariance (§ FDI thresholds, abort logic, landing go/no-go), so if $P_{filt}\ll P_{true}$ then every one of those decisions is made on a lie — and the filter's own residual gates become mis-scaled, causing it to reject good data and trust bad data. LinCov quantifies this gap directly; Monte Carlo can only reveal it statistically, after the fact.

4 · Error budgets fall out for free

Because the propagation is linear, independent error sources contribute additively in covariance. Run the recursion with only source $i$ active and you get its individual contribution:

$$ P_{total}=\sum_i P^{(i)} \qquad\Longrightarrow\qquad \text{contribution}_i=\frac{\operatorname{tr}\big(\Lambda P^{(i)}\big)}{\operatorname{tr}\big(\Lambda P_{total}\big)} $$

for a selection matrix $\Lambda$ picking the metric you care about (e.g. insertion velocity error). This produces the table every design review actually wants:

Error sourceContribution to metricDesign implication
Initial attitude (alignment)large early, decays if aideddrives alignment time/quality requirement
Gyro biasgrows with unaided durationdrives sensor grade — expensive to fix
Accelerometer bias$t^2$ in coastdrives in-flight calibration strategy
Measurement noiseusually smallrarely the binding constraint
Geometry / DOPepisodicantenna placement, scheduling
Unmodelled (consider) paramsthe $P_{true}-P_{filt}$ gapeither model them, or inflate $Q$ honestly

Two things this enables that Monte Carlo makes painful: sensitivity analysis — $\partial P/\partial(\text{spec})$ tells you which requirement to negotiate — and requirement flow-down, allocating a top-level accuracy requirement to individual sensor specs with margin. Both are iterative activities, which is exactly where a single-run method wins.

5 · When LinCov stops being valid

The method is only as good as its linearity assumption, and it fails silently — the matrices still multiply cleanly and produce a confident, wrong answer. Known failure modes:

ViolationExampleSymptom
Large errorscoarse alignment with tens of degrees of heading error second-order terms non-negligible; small-angle algebra invalid
Discrete logicmode switches, measurement rejection, M-of-N voting not differentiable; LinCov cannot represent a branch
Saturation / limitsactuator limits, gimbal stops, rate limits gain is state-dependent in a way the linearisation ignores
Non-Gaussian sourcesmultipath, quantisation, bounded-but-not-normal errors covariance is an incomplete description; tails wrong
Trajectory dispersionguided vehicle flies a materially different path per case a single reference trajectory no longer represents the ensemble
Filter divergencethe real filter can diverge; LinCov's cannot LinCov structurally cannot predict its own worst failure mode
The trajectory-dispersion subtlety. LinCov linearises about one reference. For a guided vehicle, navigation error causes guidance to steer differently, which changes the trajectory, which changes $\Phi$ and $H$ — a feedback path LinCov's single reference cannot represent. Sometimes handled by running LinCov about several dispersed references and checking the spread, which is a hybrid with Monte Carlo and an honest admission of where the method ends.

Standard practice, therefore: use LinCov to design and to build the budget, then validate against Monte Carlo at the design points. Agreement builds confidence in both; disagreement tells you precisely which assumption broke, which is more useful than either result alone.

6 · Practical notes

  • Keep it symmetric and positive-definite. Use the Joseph form above, or propagate a factor (UDU/square-root). Long propagations are where asymmetry creeps in and produces negative variances.
  • Watch conditioning. Mixing metres of position with $10^{-8}$ rad/s of gyro bias makes $P$ badly scaled; non-dimensionalise or factorise.
  • Report the metric, not the state. Consumers want a scalar with a physical meaning — insertion velocity error, miss distance, $3\sigma$ landing radius — which is a projection $\Lambda$ of $P$, so define $\Lambda$ before arguing about numbers.
  • Include the sub-optimal gain. A LinCov run that assumes the optimal gain everywhere will not reveal the $P_{true}$ vs $P_{filt}$ gap, and that gap is the most valuable output.

7 · Further reading

  • Maybeck, Stochastic Models, Estimation and Control, Vol. 1 — covariance analysis, consider parameters and sensitivity analysis.
  • Gelb (ed.), Applied Optimal Estimation — the classic treatment of error-budget covariance analysis.
  • Geller, "Linear Covariance Techniques for Orbital Rendezvous Analysis and Autonomous Onboard Mission Planning" (JGCD, 2006) — the standard modern reference for dual-covariance LinCov in aerospace.
  • Carpenter & D'Souza, Navigation Filter Best Practices (NASA/TP-2018-219822) — consider states and covariance realism. Summary.
  • Bierman, Factorization Methods for Discrete Sequential Estimation — numerically sound covariance propagation.

Related: FDI decision functions · Joint observability · Filtering · NASA filter best practices · back to Misc.