3. Data acquisition
Before any injury metric can be computed, the raw transducer signals must be brought into the analysis environment in a form that preserves their physical meaning. In occupant safety testing, that meaning is defined by two standards working together: SAE J211 governs the channel classes, filter characteristics, and sign conventions, while ISO 6487 governs the calibration and data-channel requirements that make those signals traceable. This section focuses on the practical mechanics of importing accelerometer, load cell, and displacement time histories so that downstream filtering and metric calculation operate on correctly scaled, correctly oriented data.
Channel classes and what they imply for import
SAE J211 defines four channel classes based on the frequency content the transducer is expected to capture. The class determines the anti-alias filter that must be applied before sampling, and it also tells you the minimum sampling rate you should expect in the file.
| Channel class | Typical transducers | Anti-alias cutoff (Hz) | Minimum sample rate |
|---|---|---|---|
| CFC 60 | Displacement, belt payout, chest deflection | 100 | ≥ 600 Hz |
| CFC 180 | Seat belt load cells, some structural accelerometers | 300 | ≥ 1800 Hz |
| CFC 600 | Dummy accelerometers (head, chest, pelvis) | 1000 | ≥ 6000 Hz |
| CFC 1000 | High-frequency accelerometers, some femur loads | 1650 | ≥ 10000 Hz |
When you import a file, the first check is whether the declared channel class matches the sample rate. A CFC 600 accelerometer recorded at 2000 Hz is undersampled and will alias; a CFC 60 displacement channel recorded at 10000 Hz is wasteful but not wrong. The import routine should read the channel metadata and flag mismatches rather than silently accepting them.
Sign conventions and coordinate systems
SAE J211 specifies that accelerometer signals are positive in the direction of the sensitive axis, with the axis orientation defined by the mounting. For occupant testing, the convention is typically:
- +X forward (toward the front of the vehicle)
- +Y to the right (from the occupant's perspective)
- +Z upward
Load cells follow the same right-hand rule: tension is positive, compression is negative, unless the cell is explicitly mounted in reverse. Displacement channels are positive in the direction of increasing separation. These conventions must be recorded at import time, because a sign error in an accelerometer channel will invert the entire injury metric. A common failure mode is importing a chest acceleration channel that was mounted upside-down; the resulting HIC or chest deflection will be physically implausible (e.g., negative deflection during frontal impact).
Reading the file: a practical import workflow
Most crash test data arrives as a .csv, .dat, or vendor-specific binary (e.g., .iso, .tst). The import step should produce a consistent in-memory structure: a time vector plus one or more named signal arrays, each with metadata (units, channel class, sign convention, calibration factor).
A minimal, reproducible import for a CSV with a header row might look like this:
import numpy as np
import pandas as pd
def load_j211_csv(path, time_col="Time", sample_rate=None):
df = pd.read_csv(path)
t = df[time_col].to_numpy(dtype=float)
signals = {}
for col in df.columns:
if col == time_col:
continue
signals[col] = df[col].to_numpy(dtype=float)
if sample_rate is None:
dt = np.diff(t)
sample_rate = 1.0 / np.median(dt)
return {"time": t, "signals": signals, "fs": sample_rate}
After loading, verify three things before proceeding: (1) the time vector is monotonically increasing with no duplicate timestamps; (2) the sample interval is consistent (a jittery dt indicates a clock or export problem); and (3) each signal's units match the expected physical quantity. For load cells, confirm the calibration factor was applied—raw millivolt output must be converted to newtons or kilonewtons using the cell's rated output and excitation voltage.
Calibration and scaling
ISO 6487 requires that each data channel be traceable to a calibration. In practice, the file may contain either engineering units (already scaled) or raw counts/volts. If raw, apply the calibration factor:
# Example: load cell raw voltage to force
# sensitivity = 2.0 mV/V, excitation = 5.0 V, rated capacity = 22.24 kN
sensitivity_mv_v = 2.0
excitation_v = 5.0
rated_capacity_kn = 22.24
full_scale_mv = sensitivity_mv_v * excitation_v # 10 mV at rated capacity
scale_kn_per_mv = rated_capacity_kn / full_scale_mv
force_kn = raw_mv * scale_kn_per_mv
For accelerometers, the calibration is typically given in mV/g; multiply by the reciprocal to get g, then by 9.80665 to get m/s². Displacement channels often use a linear voltage-to-distance factor (e.g., 10 mm/V). Always store the applied factor alongside the signal so the calculation is auditable.
Common import pitfalls and how to catch them
- Time base mismatch: merging channels sampled at different rates without resampling. Resample to the lowest common rate or to a uniform grid before combining.
- Offset drift: a non-zero pre-trigger baseline. Subtract the mean of the pre-trigger window (typically the first 50–100 ms before T0).
- Unit confusion: g vs. m/s², kN vs. N, mm vs. m. A 9.81× or 1000× error is easy to miss until the metric is absurd.
- Truncated files: missing the final samples due to a buffer flush. Check that the time vector ends at the expected test duration.
dt, pre-trigger baseline near zero, and signal range within the transducer's rated capacity. Catching these early saves hours of debugging later.
Visualizing the import result
The SVG below shows the data flow from raw channel files through the import and validation stage, with the three transducer types and their key metadata. It is not a step-by-step procedure but a structural view of what must be preserved at each stage.
The diagram emphasizes that the import stage is not merely reading numbers—it is preserving the metadata that gives those numbers physical meaning. Once the unified signal object is built, the next stage (filtering per the channel class) can proceed without ambiguity.
Practical checklist for a robust import
- Confirm the file's time column is in seconds and starts at or before T0.
- Read the channel descriptor for each signal: units, CFC class, sign convention.
- Apply calibration factors and record them in the signal metadata.
- Subtract the pre-trigger baseline offset.
- Verify sample rate against the declared CFC class.
- Check that signal peaks are within the transducer's rated range.
- Store everything in a structure that downstream code can consume without re-reading the raw file.
When these steps are followed, the imported data is ready for the filtering and metric computation stages. The most common source of erroneous injury metrics is not the metric formula itself but a sign error, unit error, or baseline offset introduced during import. Treating import as a first-class, validated stage is therefore essential for the entire calculation and reporting workflow.