Overview

Joint input-state estimation of nonlinear structure

The Bridge module estimates both hidden structural response and unknown external loading from noisy measurements in a nonlinear hysteretic system. Its practical goal is inverse dynamic estimation: reconstruct displacement, velocity, acceleration, and force histories that are not directly measured during excitation.

Primary objective

Recover unmeasured structural states and unknown loading histories from partial, noisy observations.

Core engine

A nonlinear state-space formulation is linearized locally and solved with Kalman filtering plus Rauch-Tung-Striebel smoothing.

Main outputs

Estimated displacement, velocity, acceleration, hysteretic response, and force histories in one unified inverse-dynamics workflow.

How it works

The estimator augments hidden states and input forces so the full nonlinear response can be inferred consistently over time.

The structural dynamics are described by a nonlinear equation of motion:

$$\mathbf{M}\ddot{\mathbf{u}}(t)+\mathbf{C}\dot{\mathbf{u}}(t)+\mathbf{K}_{u}\mathbf{u}(t)+\mathbf{K}_{z}\mathbf{z}(t)=\mathbf{S}_{p}\mathbf{p}(t)$$

Here, $\mathbf{u}$ is the displacement, $\dot{\mathbf{u}}$ is the velocity, $\mathbf{z}$ is the hysteretic auxiliary variable, and $\mathbf{p}$ is the unknown external input. Because restoring force depends on loading history as well as current deformation, the system behaves nonlinearly.

The nonlinear restoring force is represented by a hysteresis model,

$$f_s = \alpha k^e u^e + (1-\alpha)k^e z$$

with the internal variable evolving according to

$$\dot{z}=g(u^e,z,\dot{u}^e)$$

To estimate all hidden quantities at once, the algorithm constructs an augmented state vector containing displacement, hysteretic internal state, velocity, and input force:

$$\mathbf{x}^h= \begin{bmatrix} \mathbf{u}^{\top} & \mathbf{z}^{\top} & \dot{\mathbf{u}}^{\top} & \mathbf{f}^{\top} \end{bmatrix}^{\top}$$

Since the hysteretic evolution is nonlinear, the algorithm applies a local first-order approximation at each time step and rewrites the problem in a Kalman-compatible state-space form:

$$\dot{\mathbf{x}}^h=\mathbf{A}_{h,k}\mathbf{x}^h+\mathbf{b}_{k}^h+\boldsymbol{\zeta}$$

Measurements are linked to the hidden state through

$$\mathbf{y}^{dm}=\mathbf{C}_{h,dm}\mathbf{x}^h+\boldsymbol{v}$$

In this implementation, the measurement vector includes both real sensor data and dummy measurements for the hysteretic auxiliary state and input force, helping preserve observability and reduce estimation drift.

After discretization, the estimator applies a forward Kalman filter and a backward Rauch-Tung-Striebel smoother. The filter provides sequential estimates, while the smoother refines the full history using future observations as well.

What you need

The run requires a structural-property definition file and a measurement table with a valid time axis.

  • The Bridge module requires exactly two files: property.py and measurement.csv.
  • property.py defines the structural model, including mass, damping, stiff, comp_mat, stype, cov_model, cov_measurement, cov_dm_aux, and cov_dm_force.
  • If stype == "bilinear", the file must also include fy and alpha.
  • If stype == "BoucWen", the file must include param with A, beta, gamma, n, and alpha.
  • measurement.csv must contain numeric measurement data with a valid time axis in the first row or first column.
  • The time axis must be strictly increasing and sampled at a constant interval.
Implementation note: time information is read from measurement.csv, and the covariance values are interpreted as powers of ten to control the trust placed in the model, measurements, and dummy measurements.