3. Time-Domain Correlation Metrics: Computing CORA Proximity Scores
Why CORA Uses a Two-Stage Proximity Score
CORA (COnsistent Representation of Assessment) does not reduce a time-history comparison to a single number in one step. It first computes a sub-score per channel — one for phase, one for magnitude, one for shape — and then combines them into an overall proximity score. The reason is diagnostic: two curves can match in amplitude but be shifted in time, or match in timing but differ in peak height. A single scalar hides which of these is happening; the sub-scores expose it.
For this case we work with a single channel pair: a CAE acceleration signal a_cae(t) and a test acceleration signal a_test(t), both already aligned to a common time base and sampling rate (the preprocessing from the previous step). The task is to compute the three sub-scores, combine them, and record the overall rating.
The CORA Sub-Score Definitions
CORA evaluates each sub-score on a normalized scale from 0 to 1, where 1 means perfect agreement. The three components are:
- Phase score — measures how well the timing of features (peaks, zero crossings, envelope transitions) coincides. It is driven by the time lag between corresponding features, normalized by a tolerance window.
- Magnitude score — measures agreement in amplitude, typically via the ratio of peak values or the relative error of the envelope, penalizing over- and under-prediction symmetrically.
- Shape score — measures how closely the overall waveform profile matches, using a corridor around the reference curve and the fraction of the CAE signal that stays inside it.
The overall proximity is a weighted combination. A common CORA weighting is equal thirds, but the weights are configurable and should be documented alongside the result, because a phase-heavy weighting will rate a time-shifted but otherwise correct signal more harshly than a magnitude-heavy one.
Computing the Sub-Scores on a Worked Example
Consider a short segment with three dominant peaks. The CAE peaks occur at t = 0.120 s, 0.245 s, 0.370 s; the test peaks occur at t = 0.128 s, 0.251 s, 0.379 s. The peak amplitudes are CAE [4.8, 5.2, 4.6] and test [4.5, 5.0, 4.4] (units of g). The tolerance window for phase is Δt_tol = 0.020 s.
Phase score. The lags are 0.008, 0.006, 0.009 s. Normalizing each by the tolerance and averaging the penalty:
lag_i = |t_cae_i - t_test_i| # 0.008, 0.006, 0.009
penalty = mean(lag_i / Δt_tol) # (0.40 + 0.30 + 0.45)/3 = 0.383
phase_score = 1 - penalty # 0.617
Magnitude score. Using the symmetric relative error of peak amplitude:
rel_err_i = |A_cae_i - A_test_i| / max(A_cae_i, A_test_i)
# 0.0625, 0.0385, 0.0435
mag_score = 1 - mean(rel_err_i) # 1 - 0.0482 = 0.952
Shape score. With a corridor of ±10% of the reference envelope, suppose 87% of the CAE samples fall inside the corridor. The shape score is then 0.87.
Overall proximity. With equal weights:
overall = (phase_score + mag_score + shape_score) / 3
= (0.617 + 0.952 + 0.870) / 3
= 0.813
The overall score of 0.813 is dominated by the phase deficit: magnitude and shape are strong, but the consistent ~7–9 ms lag pulls the phase score down. That is exactly the diagnostic value of the sub-scores — the number tells you where to look, not just how good the match is.
Interpreting the Sub-Scores
The overall number alone is a rating; the sub-scores are a diagnosis. Read them in this order:
| Pattern | Likely cause | Next check |
|---|---|---|
| Low phase, high magnitude & shape | Time-base offset or lag | Cross-correlation lag; re-align time base |
| Low magnitude, high phase & shape | Amplitude scaling or damping mismatch | Check excitation level, damping ratio, sensor gain |
| Low shape, high phase & magnitude | Missing high-frequency content or noise | Filter cutoff, sampling rate, mode participation |
| All three low | Wrong mode, wrong channel, or misalignment | Verify channel mapping and units first |
In the worked example, the pattern is the first row: phase is the outlier. The correct engineering response is not to adjust the model's stiffness or damping — those would change magnitude and shape, which already agree — but to resolve the timing offset. This is the practical payoff of computing sub-scores rather than a single correlation coefficient.
Documenting the Overall Rating
A CORA result is only useful if it is recorded with enough context to be reproduced and audited. The minimum documentation set for this case is:
- Channel and units — e.g.,
accelerometer X, g. - Time window — the segment over which the score was computed.
- Sub-scores — phase, magnitude, shape, each to three decimals.
- Weights — the combination weights used (equal thirds here).
- Tolerances —
Δt_tol, amplitude error basis, corridor width. - Overall score and rating band — e.g., 0.813 → "good" under the project's banding.
Rating bands are project-specific; a common convention treats ≥0.9 as excellent, 0.7–0.9 as good, 0.5–0.7 as marginal, and <0.5 as poor. The band must be stated explicitly, because a 0.813 means nothing without the scale it is judged against.
Reproducible Check
To confirm the computation on your own data, verify three things in sequence: (1) the phase lags are computed against the same feature set on both curves — mismatched peak detection will corrupt the phase score; (2) the magnitude error uses a symmetric basis so over- and under-prediction are penalized equally; (3) the shape corridor is centered on the reference (test) curve, not the CAE curve, so the score measures how well the simulation tracks the measurement. If the overall score disagrees with a visual overlay, the sub-scores will tell you which of these three checks failed.