Kalman filter is a recursive state estimator that combines a dynamic model with noisy measurements using their uncertainty. Kalman-family filters support navigation, tracking, sensor fusion, SLAM, control, communications, finance, process estimation, and any system where important state is not measured directly. The classical filter is optimal in the minimum-mean-square sense for a linear model with Gaussian noise and correct covariances. It remains useful more broadly, but consistency and optimality claims depend on observability, modeling, initialization, and noise assumptions. An engineering definition states variables, units, assumptions, domains, initial and boundary conditions, sampling or update rate, uncertainty, stability or error objective, and implementation constraints. Mathematical guarantees apply to the stated model; they do not automatically cover unmodeled dynamics, finite precision, sensor faults, saturation, delay, concurrency, or hostile inputs.
Architecture, representation, and operating mechanism. State transition and control models predict state and covariance; a measurement model predicts observations; process covariance represents unmodeled evolution and measurement covariance represents sensor uncertainty. The Kalman gain balances prediction and innovation, then updates state and covariance. Prediction propagates the prior through dynamics. Update computes innovation, innovation covariance, gain, corrected state, and corrected covariance. The cycle repeats without storing all history. Information filters use inverse covariance; smoothers refine past states using later observations. State RMSE, bias, covariance consistency, normalized innovation squared, normalized estimation error squared, innovation whiteness, convergence, divergence rate, outlier rejection, latency, numerical stability, memory, update rate, and robustness to dropout matter. Sensors, actuators, sampling clocks, quantizers, communication, memory, processors, power, thermal behavior, software scheduling, safety interlocks, and operators affect the delivered result. End-to-end design allocates error and latency budgets to named components instead of assuming ideal data and unlimited compute. Results report accuracy or error, stability and robustness margins where applicable, convergence, latency, throughput, memory, numerical conditioning, precision, energy, coverage, false alarms, and behavior at operating limits. Reference models, analytic cases, independent implementations, and confidence bounds make numerical or test evidence interpretable.
Implementation, hardware, and failure modes. EKF linearizes nonlinear models with Jacobians, UKF propagates sigma points, particle filters represent non-Gaussian distributions with weighted samples, square-root filters improve numerical behavior, and factor graphs optimize many states over a window or batch. Matrix multiply, factorization, solve, and covariance updates run on MCUs, DSPs, CPUs, GPUs, or FPGA linear-algebra blocks. State dimension, sparsity, rate, precision, cache, and sensor asynchronous scheduling determine cost. Wrong process/measurement covariance makes the filter overconfident or noisy; unobservable states drift; outliers dominate Gaussian updates; linearization fails under strong nonlinearity; covariance loses symmetry/positive definiteness; timestamp/frame errors masquerade as model error. Engineering must include data movement, finite precision, resource contention, numerical or physical limits, error propagation, and deterministic behavior when assumptions are violated. Requirements, mathematical model, discretization, algorithm, numerical format, implementation, calibration, verification, deployment, monitoring, update, and incident response form one lifecycle. Versions of coefficients, transforms, test corpora, compiler settings, hardware kernels, tolerances, and assumptions remain linked to measurements.
Evaluation, verification, and deployment. Use simulated truth and recorded trajectories, innovation consistency and whiteness, covariance calibration, initial-condition sweeps, outliers/dropouts/bias, delayed and out-of-sequence data, nonlinear maneuvers, numerical stress, and comparison with independent estimators. Sensors require calibration, frames, timing, lever arms, latency, and health status. The filter output feeds control or decisions, so confidence gates, reset, mode switching, map updates, and safe degradation are part of design. Navigation and tracking can expose location and identity. Access, retention, integrity, spoof detection, calibration custody, tuning authorization, and event logs apply to estimator data and parameters. Verification uses analytic identities, invariants, dimensional checks, deterministic unit cases, randomized and property tests, Monte Carlo uncertainty, worst-case boundaries, high-precision references, formal reasoning where tractable, extracted or hardware models, fault injection, and closed-loop or production replay. Independent evidence is essential when one model is used to validate itself. Requirements, mathematical model, discretization, algorithm, numerical format, implementation, calibration, verification, deployment, monitoring, update, and incident response form one lifecycle. Versions of coefficients, transforms, test corpora, compiler settings, hardware kernels, tolerances, and assumptions remain linked to measurements. Results report accuracy or error, stability and robustness margins where applicable, convergence, latency, throughput, memory, numerical conditioning, precision, energy, coverage, false alarms, and behavior at operating limits. Reference models, analytic cases, independent implementations, and confidence bounds make numerical or test evidence interpretable.
| Estimator | Nonlinearity handling | Distribution | Compute | Best fit |
|---|---|---|---|---|
| Linear KF | Exact linear model | Gaussian | Low-medium | Linear tracking/control |
| EKF | Jacobian linearization | Approximate Gaussian | Medium | Navigation and robotics |
| UKF | Sigma-point transform | Approximate Gaussian | Medium-high | Stronger smooth nonlinearities |
| Particle filter | Sample propagation | General/multimodal | High | Ambiguous localization |
| Factor graph/smoother | Nonlinear batch/window optimization | Model dependent | High | SLAM and trajectory refinement |
<svg viewBox="0 0 760 470" xmlns="http://www.w3.org/2000/svg" font-family="-apple-system,Segoe UI,Roboto,sans-serif">
<rect width="760" height="470" fill="#0d1117"/>
<defs>
<marker id="kfBlueArrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto">
<path d="M0 0L10 5L0 10Z" fill="#60a5fa"/>
</marker>
<marker id="kfGreenArrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto">
<path d="M0 0L10 5L0 10Z" fill="#34d399"/>
</marker>
<marker id="kfGoldArrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto">
<path d="M0 0L10 5L0 10Z" fill="#fbbf24"/>
</marker>
<filter id="kfGlow" x="-100%" y="-100%" width="300%" height="300%">
<feGaussianBlur stdDeviation="4" result="b"/>
<feMerge><feMergeNode in="b"/><feMergeNode in="SourceGraphic"/></feMerge>
</filter>
</defs>
<text x="380" y="30" fill="#e6edf3" font-size="21" font-weight="700" text-anchor="middle">Kalman Filter — Predict, Measure, Correct</text>
<text x="380" y="52" fill="#8b98a5" font-size="12.5" text-anchor="middle">combine a motion model with a noisy sensor while carrying uncertainty through every step</text>
<!-- One tracking event from prior to posterior -->
<g transform="translate(24 84)">
<text x="356" y="-9" fill="#e6edf3" font-size="10.5" font-weight="700" text-anchor="middle">ONE FILTER CYCLE · ESTIMATED POSITION AND ITS COVARIANCE</text>
<rect width="712" height="205" rx="13" fill="#10151b" stroke="#3a4453" stroke-width="1.5"/>
<!-- Prior -->
<g transform="translate(16 16)">
<rect width="184" height="171" rx="10" fill="#111923" stroke="#405267"/>
<text x="92" y="19" fill="#93c5fd" font-size="10" font-weight="700" text-anchor="middle">1 · PRIOR AT TIME k−1</text>
<path d="M18 139C50 128 70 112 94 91S135 56 166 45" fill="none" stroke="#52647b" stroke-width="1.4" stroke-dasharray="5 4"/>
<ellipse cx="91" cy="94" rx="32" ry="19" transform="rotate(-32 91 94)" fill="#60a5fa" fill-opacity=".12" stroke="#60a5fa" stroke-width="1.5"/>
<ellipse cx="91" cy="94" rx="17" ry="10" transform="rotate(-32 91 94)" fill="none" stroke="#93c5fd" stroke-width="1"/>
<circle cx="91" cy="94" r="5" fill="#60a5fa" filter="url(#kfGlow)"/>
<path d="M91 94l39-30" stroke="#60a5fa" stroke-width="2" marker-end="url(#kfBlueArrow)"/>
<text x="134" y="60" fill="#93c5fd" font-size="8.5">velocity estimate</text>
<text x="92" y="127" fill="#8b98a5" font-size="8.5" text-anchor="middle">x̂k−1|k−1 , Pk−1|k−1</text>
<text x="92" y="151" fill="#93c5fd" font-size="8" text-anchor="middle">best state after the last sensor update</text>
</g>
<!-- Predict -->
<path d="M204 101H245" stroke="#60a5fa" stroke-width="2.5" marker-end="url(#kfBlueArrow)"/>
<text x="225" y="91" fill="#93c5fd" font-size="9" font-weight="700" text-anchor="middle">PREDICT</text>
<text x="225" y="117" fill="#6b7684" font-size="7.5" text-anchor="middle">motion model</text>
<g transform="translate(249 16)">
<rect width="206" height="171" rx="10" fill="#111923" stroke="#405267"/>
<text x="103" y="19" fill="#fbbf24" font-size="10" font-weight="700" text-anchor="middle">2 · PREDICTED STATE</text>
<path d="M18 139C55 127 78 105 105 79S154 46 188 36" fill="none" stroke="#52647b" stroke-width="1.4" stroke-dasharray="5 4"/>
<circle cx="49" cy="119" r="4" fill="#60a5fa"/>
<path d="M49 119C76 109 87 93 111 78" fill="none" stroke="#60a5fa" stroke-width="2" marker-end="url(#kfBlueArrow)"/>
<!-- Larger ellipse: process noise grows P -->
<ellipse cx="121" cy="75" rx="48" ry="28" transform="rotate(-27 121 75)" fill="#fbbf24" fill-opacity=".10" stroke="#fbbf24" stroke-width="1.7"/>
<ellipse cx="121" cy="75" rx="27" ry="15" transform="rotate(-27 121 75)" fill="none" stroke="#fde68a" stroke-width="1"/>
<circle cx="121" cy="75" r="5" fill="#fbbf24" filter="url(#kfGlow)"/>
<text x="121" y="122" fill="#fbbf24" font-size="8.5" text-anchor="middle">uncertainty grows with process noise Q</text>
<text x="103" y="140" fill="#8b98a5" font-size="8.5" text-anchor="middle">x̂k|k− = F x̂k−1|k−1</text>
<text x="103" y="155" fill="#8b98a5" font-size="8.5" text-anchor="middle">Pk|k− = F P Fᵀ + Q</text>
<!-- sensor measurement -->
<path d="M157 49l12 12M169 49l-12 12" stroke="#f87171" stroke-width="2.5"/>
<path d="M163 55L121 75" stroke="#f87171" stroke-width="1.3" stroke-dasharray="4 3"/>
<text x="171" y="44" fill="#fca5a5" font-size="8.5">zk</text>
</g>
<!-- Correct -->
<path d="M459 101H500" stroke="#34d399" stroke-width="2.5" marker-end="url(#kfGreenArrow)"/>
<text x="480" y="91" fill="#6ee7b7" font-size="9" font-weight="700" text-anchor="middle">CORRECT</text>
<text x="480" y="117" fill="#6b7684" font-size="7.5" text-anchor="middle">innovation</text>
<g transform="translate(504 16)">
<rect width="192" height="171" rx="10" fill="#101d1a" stroke="#33705e"/>
<text x="96" y="19" fill="#6ee7b7" font-size="10" font-weight="700" text-anchor="middle">3 · POSTERIOR</text>
<path d="M14 139C49 127 68 108 96 82S145 48 178 36" fill="none" stroke="#52647b" stroke-width="1.4" stroke-dasharray="5 4"/>
<path d="M96 81L139 59" stroke="#f87171" stroke-width="1.2" stroke-dasharray="4 3"/>
<path d="M139 53l12 12M151 53l-12 12" stroke="#f87171" stroke-width="2.2"/>
<ellipse cx="126" cy="67" rx="25" ry="14" transform="rotate(-27 126 67)" fill="#34d399" fill-opacity=".14" stroke="#34d399" stroke-width="1.8"/>
<circle cx="126" cy="67" r="5" fill="#34d399" filter="url(#kfGlow)"/>
<path d="M96 81L126 67" stroke="#34d399" stroke-width="2" marker-end="url(#kfGreenArrow)"/>
<g fill="#8b98a5" font-size="8">
<text x="93" y="92" text-anchor="end">prediction</text>
<text x="153" y="49">sensor</text>
</g>
<text x="96" y="112" fill="#6ee7b7" font-size="8.5" text-anchor="middle">estimate moves toward the measurement</text>
<text x="96" y="130" fill="#6ee7b7" font-size="8.5" text-anchor="middle">covariance shrinks after information arrives</text>
<text x="96" y="149" fill="#8b98a5" font-size="8.5" text-anchor="middle">x̂k|k , Pk|k</text>
</g>
</g>
<!-- Innovation and weighting -->
<g transform="translate(24 318)">
<text x="218" y="-9" fill="#c4b5fd" font-size="10.5" font-weight="700" text-anchor="middle">THE KALMAN GAIN DECIDES HOW FAR TO TRUST THE SENSOR</text>
<rect width="436" height="116" rx="12" fill="#14131e" stroke="#5b5278" stroke-width="1.5"/>
<g transform="translate(15 18)">
<circle cx="40" cy="39" r="27" fill="#142b44" stroke="#60a5fa"/>
<text x="40" y="35" fill="#93c5fd" font-size="9" font-weight="700" text-anchor="middle">MODEL</text>
<text x="40" y="49" fill="#8b98a5" font-size="8" text-anchor="middle">x̂−, P−</text>
<circle cx="150" cy="39" r="27" fill="#32191e" stroke="#f87171"/>
<text x="150" y="35" fill="#fca5a5" font-size="9" font-weight="700" text-anchor="middle">SENSOR</text>
<text x="150" y="49" fill="#8b98a5" font-size="8" text-anchor="middle">z, R</text>
<path d="M68 39H112" stroke="#a78bfa" stroke-width="2" marker-end="url(#kfGoldArrow)"/>
<path d="M122 39H104" stroke="#f87171" stroke-width="2"/>
<text x="95" y="25" fill="#fbbf24" font-size="8" text-anchor="middle">innovation y</text>
<rect x="190" y="10" width="88" height="58" rx="8" fill="#272115" stroke="#fbbf24"/>
<text x="234" y="32" fill="#fde68a" font-size="10" font-weight="700" text-anchor="middle">GAIN K</text>
<text x="234" y="48" fill="#fbbf24" font-size="8" text-anchor="middle">relative uncertainty</text>
<path d="M178 39H190" stroke="#fbbf24" stroke-width="2" marker-end="url(#kfGoldArrow)"/>
<path d="M278 39H317" stroke="#34d399" stroke-width="2" marker-end="url(#kfGreenArrow)"/>
<circle cx="352" cy="39" r="27" fill="#10251f" stroke="#34d399"/>
<text x="352" y="35" fill="#6ee7b7" font-size="9" font-weight="700" text-anchor="middle">FUSED</text>
<text x="352" y="49" fill="#8b98a5" font-size="8" text-anchor="middle">x̂+, P+</text>
<text x="200" y="88" fill="#c4b5fd" font-size="9.5" text-anchor="middle">x̂+ = x̂− + K(z − Hx̂−) · P+ = (I − KH)P−</text>
</g>
</g>
<!-- Intuition sidebar -->
<g transform="translate(477 318)">
<text x="129" y="-9" fill="#fbbf24" font-size="10.5" font-weight="700" text-anchor="middle">UNCERTAINTY CONTROLS THE WEIGHT</text>
<rect width="259" height="116" rx="12" fill="#17150f" stroke="#745d1d" stroke-width="1.5"/>
<g transform="translate(14 16)">
<path d="M18 16H222" stroke="#3a4453"/>
<circle cx="43" cy="16" r="5" fill="#60a5fa"/>
<circle cx="186" cy="16" r="5" fill="#f87171"/>
<circle cx="75" cy="16" r="6" fill="#34d399" filter="url(#kfGlow)"/>
<text x="43" y="35" fill="#93c5fd" font-size="8" text-anchor="middle">precise model</text>
<text x="186" y="35" fill="#fca5a5" font-size="8" text-anchor="middle">noisy sensor</text>
<text x="75" y="7" fill="#6ee7b7" font-size="8" text-anchor="middle">K small</text>
<path d="M18 63H222" stroke="#3a4453"/>
<circle cx="43" cy="63" r="5" fill="#60a5fa"/>
<circle cx="186" cy="63" r="5" fill="#f87171"/>
<circle cx="163" cy="63" r="6" fill="#34d399" filter="url(#kfGlow)"/>
<text x="43" y="82" fill="#93c5fd" font-size="8" text-anchor="middle">uncertain model</text>
<text x="186" y="82" fill="#fca5a5" font-size="8" text-anchor="middle">precise sensor</text>
<text x="163" y="54" fill="#6ee7b7" font-size="8" text-anchor="middle">K large</text>
</g>
</g>
<text x="380" y="458" fill="#6b7684" font-size="11" text-anchor="middle">The result is a recursive estimator: each posterior becomes the next prior, with no need to retain the full measurement history.</text>
</svg>
Selection and practical application. Use linear KF for linear-Gaussian systems, EKF for smooth nonlinear models with reliable derivatives, UKF when nonlinear propagation matters at modest state size, particle filters for multimodal/non-Gaussian belief, and graphs for smoothing and SLAM. GPS/INS, target tracking, battery state, motor observers, process monitoring, radar, visual-inertial odometry, finance, sensor fusion, and robotics use recursive estimation. Sensors, actuators, sampling clocks, quantizers, communication, memory, processors, power, thermal behavior, software scheduling, safety interlocks, and operators affect the delivered result. End-to-end design allocates error and latency budgets to named components instead of assuming ideal data and unlimited compute. An engineering definition states variables, units, assumptions, domains, initial and boundary conditions, sampling or update rate, uncertainty, stability or error objective, and implementation constraints. Mathematical guarantees apply to the stated model; they do not automatically cover unmodeled dynamics, finite precision, sensor faults, saturation, delay, concurrency, or hostile inputs. CFS connects this topic to semiconductor architecture, implementation, verification, manufacturing, packaging, test, and deployed AI-system tradeoffs across the platform.
Explore 500+ Semiconductor & AI Topics
From EUV lithography to CUDA optimization — search the full knowledge base or chat with our AI assistant.