Sign In / Join Cloud 360
Engineering • Innovation • Learning
Control Systems Advanced Level 22 min

Discrete Kalman Filtering: State Estimation & Sensor Fusion

Recursive optimal linear quadratic estimator, process noise covariance Q, measurement noise covariance R, state prediction, and measurement update loops.

Prerequisites: Linear algebra (matrix inversion, transpose), probability theory (Gaussian distributions, variance), and discrete state-space basics.

1. Overview & Concept Definition

An algorithm that produces optimal estimates of unknown dynamic variables that tend to be more accurate than those based on a single measurement alone, by estimating a joint probability distribution over the variables for each timeframe.

2. Engineering & Industrial Significance

Standard estimation filter for missile tracking, autonomous car state estimation, satellite orbit determination, drone attitude heading reference systems (AHRS), and GPS dead reckoning.

3. Physical Working Principle & Transducer Dynamics

Operates in a two-step cycle: 1. **Predict:** The state estimate $\hat{x}$ and error covariance $P$ are projected forward in time using a physical state-transition model $F$ and control input $u$. 2. **Update:** A noisy sensor measurement $z$ is incorporated, weighted by the optimal Kalman Gain $K$. If sensor noise $R$ is large, $K$ is small (trust model); if model uncertainty $Q$ is large, $K$ is large (trust sensor).

4. Governing Equations & Mathematical Models

Predict State: $\hat{x}_{k|k-1} = F_k \hat{x}_{k-1|k-1} + B_k u_k$
Predict Covariance: $P_{k|k-1} = F_k P_{k-1|k-1} F_k^T + Q_k$
Kalman Gain: $K_k = P_{k|k-1} H_k^T \left(H_k P_{k|k-1} H_k^T + R_k\right)^{-1}$
Update State: $\hat{x}_{k|k} = \hat{x}_{k|k-1} + K_k (z_k - H_k \hat{x}_{k|k-1})$
Update Covariance: $P_{k|k} = (I - K_k H_k) P_{k|k-1}$

5. Practical Implementation

// ANSI C: 1D Scalar Kalman Filter Implementation
typedef struct {
    float q; // Process noise covariance
    float r; // Measurement noise covariance
    float x; // State estimate
    float p; // Estimation error covariance
    float k; // Kalman gain
} KalmanFilter1D;

void kalman_init(KalmanFilter1D *kf, float q, float r, float initial_val) {
    kf->q = q;
    kf->r = r;
    kf->x = initial_val;
    kf->p = 1.0f; // Initial covariance
}

float kalman_update(KalmanFilter1D *kf, float measurement) {
    // 1. Predict
    kf->p = kf->p + kf->q;

    // 2. Update
    kf->k = kf->p / (kf->p + kf->r);
    kf->x = kf->x + kf->k * (measurement - kf->x);
    kf->p = (1.0f - kf->k) * kf->p;

    return kf->x;
}

6. Common Engineering Pitfalls & Troubleshooting

Frequent Engineering Pitfalls
  • Setting process noise covariance Q to zero: Causes the filter to assume the physical model is perfect, gradually reducing Kalman gain to zero and becoming completely blind to actual sensor changes.
  • Applying a linear Kalman Filter directly to non-linear kinematics: Causes divergence. Non-linear systems (e.g. Euler angle kinematics, radar polar coordinates) require Extended Kalman Filters (EKF) with Jacobian linearizations.
Diagnostic & Troubleshooting Checklist
  • Measure true sensor variance at rest ($R = \sigma^2$) by logging 1,000 raw samples and computing statistical variance.
  • Tune $Q$ iteratively: Increase $Q$ if the filter lags behind rapid physical motion; decrease $Q$ if the estimate remains noisy.

7. Applications & Physical Constraints

TYPICAL APPLICATIONS
  • Fusion of IMU accelerometer and gyroscope angles
  • GPS and wheel odometry mobile robot positioning
  • Battery state-of-charge (SoC) electrochemical cell estimation
PHYSICAL LIMITATIONS
  • Assumes strictly zero-mean Gaussian white noise distributions; heavy-tailed or bi-modal noise requires Particle Filters.
Pinout & Interface Specs
PIN / SIGNAL FUNCTION / ELECTRICAL SPEC
N/A Algorithmic firmware filter running on microcontroller or companion computer
Have questions on this topic?

Ask LUNA to calculate component values or explain alternative control methods for Discrete Kalman Filtering: State Estimation & Sensor Fusion.