4. Single-Degree-of-Freedom Occupant Model Response to Pulse

Why a Single-Degree-of-Freedom Model Is the Right First Tool

Before attributing an occupant injury outcome to a specific pulse feature, you need a reference system whose response you can predict analytically. The linear single-degree-of-freedom (SDOF) occupant model is that reference. It reduces the occupant–restraint system to one effective mass m, one linear stiffness k, and one viscous damping coefficient c, all driven by the base acceleration a_p(t) measured on the vehicle floor or sled. The model does not attempt to reproduce belt geometry, airbag deployment, or contact with the interior. Its value is diagnostic: it tells you which pulse characteristics the occupant kinematics are structurally sensitive to, and it gives you a clean baseline against which a real occupant signal can be compared.

The equation of motion is written in the relative coordinate z(t) = x_occ(t) − x_base(t), where x_occ is the occupant displacement and x_base the vehicle displacement:

m·z̈ + c·ż + k·z = −m·a_p(t)
z̈ + 2ζω_n·ż + ω_n²·z = −a_p(t)
ω_n = sqrt(k/m),   ζ = c / (2·sqrt(k·m))

The absolute occupant acceleration, which is what an accelerometer on the occupant chest would record, is a_occ(t) = z̈(t) + a_p(t). This distinction matters: the relative displacement z describes how far the occupant moves into the restraint, while a_occ describes the loading the occupant actually experiences. A pulse can produce a large z with a modest a_occ, or the reverse, depending on how the pulse frequency content aligns with ω_n.

Building the Model from a Measured Pulse

The workflow below assumes a sampled pulse a_p[n] at sample interval dt, already baseline-corrected and time-zero aligned. The implementation uses a state-space form and a fixed-step Runge–Kutta integrator so the result is reproducible without external libraries beyond NumPy.

import numpy as np

def sdof_response(a_p, dt, fn_hz, zeta):
    """Linear SDOF base-excited response.
    a_p : base acceleration samples (m/s^2), positive = vehicle forward decel convention
    dt  : sample interval (s)
    fn_hz : undamped natural frequency (Hz)
    zeta  : damping ratio (dimensionless)
    Returns z (relative displacement, m), z_dd (relative accel), a_occ (absolute accel).
    """
    wn = 2.0 * np.pi * fn_hz
    n = len(a_p)
    z = np.zeros(n)
    zd = np.zeros(n)
    zdd = np.zeros(n)

    def deriv(state, ap):
        zz, vv = state
        acc = -ap - 2.0 * zeta * wn * vv - wn * wn * zz
        return np.array([vv, acc])

    state = np.array([0.0, 0.0])
    for i in range(n):
        ap = a_p[i]
        k1 = deriv(state, ap)
        k2 = deriv(state + 0.5 * dt * k1, ap)
        k3 = deriv(state + 0.5 * dt * k2, ap)
        k4 = deriv(state + dt * k3, ap)
        state = state + (dt / 6.0) * (k1 + 2*k2 + 2*k3 + k4)
        z[i] = state[0]
        zd[i] = state[1]
        zdd[i] = -ap - 2.0 * zeta * wn * zd[i] - wn * wn * z[i]

    a_occ = zdd + a_p
    return z, zdd, a_occ

Two conventions must be fixed before running anything. First, the sign of a_p: in this model a positive a_p is the vehicle deceleration magnitude, so the inertial forcing term is −a_p. Second, the initial condition: the occupant starts at rest relative to the vehicle, so z(0) = 0 and ż(0) = 0. If you feed a pulse with the opposite sign convention, the relative displacement will be inverted but its magnitude and timing will be unchanged — a useful sanity check when comparing against a reference signal.

Reference Parameters and a Worked Run

Use a representative restrained-occupant equivalent: m = 75 kg, k = 12 kN/m, c = 1.2 kN·s/m. These give ω_n ≈ 12.65 rad/s, f_n ≈ 2.01 Hz, and ζ ≈ 0.63. The damping is deliberately high because a belted occupant with pretensioner and load limiter behaves closer to a heavily damped system than to a bare mass on a spring.

Drive the model with a synthetic half-sine pulse of amplitude 30 g and duration 60 ms, sampled at dt = 0.1 ms. The expected qualitative outcome, which you should confirm by running the code, is a relative displacement peak on the order of 0.10–0.15 m occurring roughly 20–40 ms after the pulse peak, and an absolute occupant acceleration peak that is lower than the pulse peak because the occupant lags the vehicle. That lag is the physical meaning of the model: the occupant does not track the floor.

Now change one parameter at a time and observe the regime shift:

CasePulse amplitudePulse durationDominant regimeWhat to watch
A30 g60 msQuasi-static (pulse ≫ 1/f_n)z tracks pulse shape; a_occ ≈ a_p scaled by transmissibility
B30 g20 msTransient / ringingz peaks after pulse ends; a_occ shows oscillation at f_n
C60 g60 msAmplitude-scaled quasi-staticz and a_occ scale nearly linearly with amplitude
D60 g20 msImpulsivePeak z set by velocity change, not by peak acceleration

The regime boundary is set by the ratio of pulse duration T to the occupant natural period T_n = 1/f_n ≈ 0.5 s. When T ≪ T_n, the pulse delivers an impulse and the response is governed by the velocity change Δv = ∫a_p dt. When T ≫ T_n, the occupant quasi-statically follows the pulse and the response is governed by peak acceleration. Case B and Case D are the ones that most often surprise analysts: doubling the amplitude while shortening the pulse can leave peak z nearly unchanged if Δv is preserved, yet the a_occ waveform changes shape dramatically.

SDOF Response Regimes: Pulse Duration vs. Occupant Natural Period Model Definition base: a_p(t) measured k c m = 75 kg z(t) relative displacement a_occ = z̈ + a_p f_n ≈ 2.0 Hz, ζ ≈ 0.63 Regime Map (T_n ≈ 0.5 s) pulse duration T (ms) peak a_p (g) 0 20 60 120 200 0 20 40 60 Impulsive regime T ≪ T_n: Δv governs Quasi-static regime T ≫ T_n: peak a_p governs B: 30g / 20ms D: 60g / 20ms A: 30g / 60ms C: 60g / 60ms transition

Reading the Response and Diagnosing the Regime

After running the model, extract four scalars from each response: peak relative displacement max|z|, peak absolute occupant acceleration max|a_occ|, time of peak z relative to pulse onset, and the residual oscillation amplitude after the pulse ends. These four numbers are enough to classify the regime without plotting anything.

  • Peak z occurs during the pulse and a_occ peak is close to a_p peak: quasi-static regime. The occupant is following the vehicle; restraint loading is dominated by peak deceleration.
  • Peak z occurs after pulse end and a_occ oscillates at f_n: transient regime. The occupant is ringing on the restraint stiffness; the pulse delivered an impulse.
  • Peak z scales with Δv rather than with peak a_p: impulsive regime. Compare Δv across pulses before comparing amplitudes.
A quick analytic cross-check: for an impulsive pulse, the peak relative displacement of an undamped SDOF is approximately Δv / ω_n. With Δv = 30 g × 20 ms ≈ 5.9 m/s and ω_n = 12.65 rad/s, that gives ≈ 0.47 m before damping — damping will reduce it substantially, but the order of magnitude confirms whether your numerical result is plausible. If your simulated peak z is an order of magnitude away from this estimate, check the sign convention and the initial conditions before trusting the output.

Common Failure Symptoms

Three symptoms account for most incorrect SDOF results. First, inverted relative displacement: the sign of a_p was flipped relative to the convention in the equation of motion. Second, response that starts before the pulse: the pulse array contains pre-trigger samples that were not zeroed, so the integrator sees a nonzero forcing before t = 0. Third, peak a_occ exceeding peak a_p by a large factor in the quasi-static regime: this usually means f_n was set too high relative to the pulse content, pushing the model into a resonance-like response that the real restrained occupant would not exhibit. Verify f_n against the intended occupant–restraint equivalent before interpreting any regime classification.

The model's output is a diagnostic baseline, not a prediction of injury. Its role in root cause diagnosis is to answer a narrow question: given this pulse, is the occupant response dominated by peak deceleration, by velocity change, or by the transition between them? Once that regime is identified, the next diagnostic step is to compare the model's a_occ and z against the measured occupant channel and attribute the residual to restraint behavior, contact, or pulse features the SDOF model cannot represent.