SRS Tool — Shock Response Spectrum Analyser

From OROS Wiki
Revision as of 15:46, 17 April 2026 by Lmagimel (talk | contribs)
Jump to navigation Jump to search
SRS Tool
Developer OROS / Gemini
Platform Windows 10 / 11
Language Python 3.9+
UI framework PySide2 (Qt 5.15)
Algorithm Smallwood 1981
NVGate I/O Native (.ors / .orm)
Standards 30+ built-in curves

SRS Tool — Shock Response Spectrum Analyser

SRS Tool is a professional Shock Response Spectrum (SRS) analysis application tightly integrated with the OROS NVGate measurement platform. It reads shock recordings directly from NVGate project folders, computes SRS using the industry-standard Smallwood (1981) recursive digital filter, and pushes results back into NVGate as live TCP result channels — all within a single dark-themed desktop application.

SRS Tool — Main tab with a triaxial shock recording loaded (x, y, z channels). Time signal with auto-detected shock zone (top) and log-log SRS plot (bottom).

What makes SRS Tool stand out

Most SRS tools require manual import/export and provide no built-in normative database. SRS Tool is built differently:

Key differentiators vs commercial alternatives (nCode GlyphWorks, LMS TecWare, Brüel & Kjær Pulse)

Feature SRS Tool Typical tools
30+ built-in normative limit curves (MIL-STD-810H, ECSS, NASA, DEF-STAN…) — no manual entry needed ✔ Included ✘ Manual / paid add-on
Multi-channel Pass/Fail with per-channel verdict in one run ✔ Included ✘ One channel at a time
Direct NVGate signal read (no DLL, no NVGate open) ✔ Native ✘ Manual export required
NVGate TCP result injection (log-log, autoscaled) ✔ Native ✘ Not available
Automatic shock zone detection (envelope algorithm) ✔ Included ~ Optional / extra
Primary + Residual SRS in a single computation pass ✔ Included ~ Two separate analyses
SRSS + Worst-case Envelope multi-axis combination ✔ Included ✘ Paid add-on
Interactive dB cursor on Pass/Fail chart ✔ Included ✘ Rarely available
No licence dongle / subscription ✔ Free ✘ Licence required

Quick Start

Five steps from measurement folder to Pass/Fail verdict:

  1. Main tabSelect signal folder… → navigate to the NVGate Measurement folder
  2. Shock zone is auto-detected — yellow markers appear on the signal plot
  3. Set Q = 10, range 1–10 000 Hz, resolution 1/12 oct → click Compute SRS
  4. Pass / Fail tab → limit curve is pre-set to MIL-STD-810H Mid-field → click ▶ Run Pass / Fail
  5. Read the verdict, export CSV/PNG, or click Inject into NVGate

Installation

Requirements

Component Version Notes
Python 3.9 – 3.11 3.12 not yet tested
PySide2 5.15.x Qt5 binding
NumPy ≥ 1.22 Vectorised SRS engine
Matplotlib ≥ 3.5 Embedded canvases
Pillow ≥ 9.0 Optional — only for screenshot export
pynvdrive OROS Toolkit NVdrive Required for NVGate injection only

Launch

<syntaxhighlight lang="bash"> cd C:\OROS\Gemini\SRS python -m src.main </syntaxhighlight>

Or use the provided launch_srs.bat shortcut.

💡 NVGate does not need to be running to load signals or compute SRS. It is only required for the Inject into NVGate function.


User Interface

The window has two zones:

  • Left panel (340 px) — tabbed controls: Main, Advanced, Pass / Fail
  • Right panel (expandable) — signal plot + SRS plot, or Pass/Fail chart depending on active tab

The status bar at the bottom shows the current operation, computation result, and NVGate injection status. A progress bar appears during SRS computation.


Main Tab

Main tab controls — NVGate status, Signal folder, Channels, Calculation parameters, Output type, Compute and Inject buttons.

NVGate connection

A dot in the NVGate box shows live connection status, polled every 3 seconds:

  • 🟢 Connected — NVGate is reachable via pynvdrive. Injection is available.
  • 🔴 Disconnected — NVGate is not running, or pynvdrive is not installed. SRS computation still works normally.

Signal

Select signal folder…
Opens a folder browser (default root: C:\OROS\NVGate data\Projects).
 Select the Measurement subfolder (e.g. …\MyProject\Measurement3).
 Channels are detected and the signal is loaded immediately.

The folder path is shown in grey below the button (truncated to 50 characters for readability).

Channels

One checkbox per recorded channel:

☑  x   (25600 Hz   13.86 s   m/s²)
☑  y   (25600 Hz   13.86 s   m/s²)
☑  z   (25600 Hz   13.86 s   m/s²)

Channel labels (x, y, z…) are read from the Name field in the NVGate .orm metadata file, set by the operator at recording time. If empty, falls back to the hardware source name ("Input 1", "Input 2"…).

Uncheck a channel to exclude it from the computation.

↺ Reload channels
Re-reads channel files from disk — useful after a new NVGate recording in the same folder without re-browsing.

Calculation Parameters

Parameter Description Default
Frequency range f_min and f_max for the SRS output 1 Hz → 10 000 Hz
Q factor / Damping Quality factor Q or damping ratio ζ (interchangeable) Q = 10
Resolution Octave fraction: 1/3, 1/6, 1/12, 1/24 octave 1/12 octave

ℹ f_max is automatically clamped to the Nyquist frequency (f_s / 2). Q = 10 (ζ = 5%) is the standard value for all major aerospace shock norms (MIL-STD-810H, ECSS, NASA-STD-7003A).

Output

Type
Acc — Acceleration SRS (m/s² or g). Always available.
 Vel — Pseudo-Velocity SRS. Available for acceleration inputs only.
 Disp — Pseudo-Displacement SRS. Available for acceleration inputs only.
Curve
Maximax — max(positive, |negative|). The standard SRS required by most norms.
 Positive — maximum positive SDOF response.
 Negative — maximum absolute negative response (plotted as positive).

Signal and SRS plots

Time signal with auto-detected shock zone (yellow dashed markers). The yellow-shaded area is the primary SRS window. Drag to refine.
SRS log-log plot — 3 channels (x blue, y orange, z green) computed on the shock zone. The legend identifies each curve.

The right panel shows two stacked plots:

  • Top — Time signal: all loaded channels overlaid. The yellow dashed vertical lines delimit the shock zone. Drag horizontally on the plot to redefine it. The zone can also be set precisely in the Advanced tab.
  • Bottom — SRS (log-log): all computed curves with a legend. Draw order: real channels first, then Envelope (orange dash-dot), then SRSS (white dashed) on top.

Advanced Tab

Advanced tab — Shock zone (auto-detection + manual override), Residual SRS, Preprocessing, Multi-axis combination.

Shock Zone

⚡ The shock zone is auto-detected automatically every time a signal is loaded. You normally do not need to change anything here.

Auto-detection algorithm

  1. Compute a smoothed envelope: rolling mean of |signal| over a 3 ms window
  2. Set trigger threshold = Threshold % of the peak envelope
  3. Shock zone = first … last sample above the threshold
  4. Expand by Padding ms on each side, clamped to signal bounds
Parameter Effect Default
Threshold (% of peak) Lower → wider zone (catches low-level pre/post-shock). Higher → core impact only. 5 %
Padding (ms) Extra margin added symmetrically on both sides of the detected shock. 20 ms

Padding explained: if the shock is detected at 8.14 s – 9.98 s with 20 ms padding, the zone becomes 8.12 s – 10.00 s. This captures the full transient including ring-down.

Manual override

Type Start and End in seconds (3-decimal precision). The yellow markers on the signal plot update instantly. Dragging on the signal plot synchronises back to these fields.

Residual SRS

When Also compute residual SRS is checked, a second computation runs on the signal segment after the shock zone end. This captures the free vibration decay required by:

  • MIL-STD-810H Method 517.2 § 2.1.3
  • ECSS-E-ST-10-03C clause 8.4.3

The residual curves appear on the SRS plot labelled "(residual)".

Advanced Preprocessing

Applied to the signal before the SRS filter:

Option Effect Typical use
Remove DC offset (N ms) Subtracts the mean of the first N ms from the entire signal Sensor bias, slow drift
Noise floor (N ms) Zeroes out the first N ms Pre-trigger noise before the shock event

Multi-axis Combination

Available when 2 or more acceleration channels are loaded (e.g. triaxial x/y/z accelerometer).

SRSS — √(SRS₁² + SRS₂² + …)
Square Root Sum of Squares of all channels — Maximax only. Shown as a white dashed curve.
Worst-case envelope — max(SRS₁, SRS₂, …)
Point-by-point maximum across all channels — all curve types. Shown as an orange dash-dot curve.

See the calculation section for the mathematical definitions.


Pass / Fail Tab

Pass/Fail controls — limit curve selector with built-in library, scale factor, channel selector, Run button and export buttons.

The Pass/Fail tab compares the computed SRS against any normative or user-defined limit curve.

Limit Curve Library

📚 SRS Tool includes 30+ pre-programmed normative limit curves — no other standalone SRS tool provides this ready-to-use library. Select a standard from the dropdown and run immediately.

Standard Curves
MIL-STD-810H Method 517 Near-field, Mid-field ★, Far-field, Gunfire, Tall vehicles
ECSS-E-ST-10-03C Protoflight, Proto+, Acceptance, Qualification, Protoqualification
NASA-STD-7003A Payload near/far-field, structure-borne near/far
DEF-STAN 00-35 Land vehicle, Ship (deck), Airborne external/internal
MIL-S-901D High-impact shock Grade A / Grade B
IEST-RP-DTE032 Light / medium / heavy equipment
RTCA DO-160G Avionics Cat. A / B / C

★ MIL-STD-810H Mid-field is set as the default — the most common specification in equipment qualification programmes.

Each curve shows its normative reference and a plain-English description of applicability.

User-defined CSV

Select ← User-defined (CSV) and click Load CSV limit curve…. Format: two columns (Hz, g), no header needed:

10, 5
100, 50
2000, 50
10000, 50

Interpolation is linear in log-log space between breakpoints.

Scale factor (dB)

Shifts the limit curve uniformly before comparison:

L_scaled(f) = L_nominal(f) × 10^(dB/20)
dB Multiplier Effect
+6 dB ×2.00 Tighter / more conservative limit
+3 dB ×1.41 Standard qualification margin check
0 dB ×1.00 Nominal — no change
−6 dB ×0.50 Relaxed limit

Running Pass/Fail

Pass/Fail result — 3 channels (x/y/z) vs MIL-STD-810H Mid-field limit (red dashed). All channels well within spec: margin subplot shows 30–60 dB margin across the full frequency range (green fill).

Click ▶ Run Pass / Fail. The right panel shows:

Top chart — SRS vs Limit

  • Each channel plotted in a distinct colour
  • Limit curve: red dashed line
  • Red fill where SRS > limit (exceedance)
  • Orange fill where 0 ≤ margin < 3 dB (caution)

Bottom chart — Margin (dB)

Margin at each frequency: M(f) = 20 × log10( Limit(f) / SRS(f) )

Fill colour Meaning
Green M ≥ 3 dB — well within spec
Orange 0 ≤ M < 3 dB — caution, low margin
Red M < 0 dB — FAIL, exceedance

Interactive cursor

Move the mouse over either chart panel to see a live floating readout snapped to the nearest frequency band:

 f        342.2 Hz
 SRS       18.45 g
 Lim       50.00 g
 dB        +8.7
             PASS

The readout border turns green (PASS), orange (< 3 dB), or red (FAIL).

Verdict text

The result box below the chart shows the global verdict, per-channel minimum margin, and a table of the 10 worst exceedances. Example:

PASS   —   Maximax SRS
Limit: MIL-STD-810H Meth.517 — Mid-field (0.5–1.5 m)

Per-channel result:
  PASS  x     min +42.1 dB @ 500 Hz
  PASS  y     min +38.7 dB @ 342 Hz
  PASS  z     min +45.3 dB @ 1000 Hz

Worst margin (all channels): +38.7 dB  @  342.0 Hz
No exceedance detected over the computed frequency range.

Export

Export CSV…
Full comparison table. Multi-channel output includes one SRS column per channel, Worst SRS, Limit, per-channel margin, Worst margin and Status. The CSV header block records the curve name and scale factor for traceability.
Export graph PNG…
Both chart panels saved as a PNG at 150 dpi (PDF also available).

NVGate Integration

Reading signals

SRS Tool reads NVGate data without NVGate open and without any additional DLL.

File layout inside a Measurement folder:

Measurement8/
  Record_1.oxf
  Record_1_1/
    Channel_1_0_XXXXXXXX/
      Channel_1.orm    ← JSON metadata (fs, unit, Name…)
      Part_0.ors       ← raw float32 little-endian samples (SI)
    Channel_2_0_XXXXXXXX/
      …

The .ors file contains 32-bit IEEE 754 float samples in SI units at the native sampling rate. The channel label is read from the Name field of .orm (set by the operator in NVGate).

Injecting results

Results are sent to NVGate via the NVDrive TCP protocol as NVD REAL SPECTRUM channels:

  • Each SRS curve → one TCP result channel in NVGate
  • X and Y axes automatically set to log scale
  • Y axis autoscaled
  • All curves displayed in window SRS_Results of Layout1

NVGate channel naming:

SRS Acc Shock AbsMax: x
SRS Acc Shock AbsMax: y
SRS Acc Shock AbsMax: z
SRS Acc Shock AbsMax: SRSS  (x + y + z)

Mathematical Background

Shock Response Spectrum — Definition

The SRS is defined as the peak absolute acceleration response of a bank of Single Degree Of Freedom (SDOF) oscillators, each tuned to a different natural frequency f_n, driven by a common base acceleration signal.

For a SDOF oscillator at frequency f_n with damping ratio ζ:

z(t) + 2ζωn·z'(t) + ωn²·z(t) = −x(t)

where x(t) is the base acceleration and z(t) the relative displacement.

The three SRS values at frequency f_n:

Curve Definition Label in tool
Positive SRS max over time of [ωn² · z(t)] Positive
Negative SRS max over time of [−ωn² · z(t)] Negative
Maximax SRS max(Positive, Negative) Maximax ← standard

Smallwood Recursive Digital Filter (1981)

Direct numerical integration of the SDOF equation is slow. D.O. Smallwood (Sandia National Laboratories, 1981) derived an exact recursive digital filter whose coefficients depend only on f_n, ζ and the time step Δt:

Let:

  • ωd = ωn · √(1−ζ²) (damped natural frequency)
  • E = exp(−ζ·ωn·Δt)
  • K = ωd·Δt

Filter coefficients:

b₀ = 1 − E·sin(K)/K b₁ = 2·(E·sin(K)/K − E·cos(K))
b₂ = E² − E·sin(K)/K a₁ = 2·E·cos(K)
a₂ = −E²

Recursive equation at each time step k:

y[k] = b₀·x[k] + b₁·x[k-1] + b₂·x[k-2] + a₁·y[k-1] + a₂·y[k-2]

Vectorised implementation

SRS Tool computes all N natural frequencies in a single forward pass through the signal. Coefficient arrays (b₀ … a₂) have shape (N,) and the update at each time step is one NumPy broadcast operation across all oscillators simultaneously. This is typically 50–100× faster than a frequency-by-frequency loop.

Frequency Axis

Logarithmic spacing at 1/n octave resolution:

f_k = f_min × 2^(k/n), k = 0, 1, …, N−1
Resolution Bands/octave Bands over 1–10 000 Hz
1/3 octave 3 40
1/6 octave 6 80
1/12 octave 12 160 ← default
1/24 octave 24 320

Quality Factor and Damping

Q = 1 / (2ζ) ↔ ζ = 1 / (2Q)
Q factor Damping ζ Typical application
10 5 % Standard aerospace — MIL-STD-810, ECSS, NASA
50 1 % Very lightly damped structures
5 10 % Heavily damped, rubber-mounted equipment

Primary and Residual SRS

Given shock zone [t_start, t_end]:

Zone Signal segment Physical meaning
Primary SRS [t_start, t_end] Response during the shock transient
Residual SRS [t_end, end] Free vibration decay after the shock

The residual SRS is mandatory for MIL-STD-810H Method 517 and ECSS-E-ST-10-03C fragility assessments. A structure failing on residual SRS continues to be excited by stored elastic energy after the shock passes.

Pseudo-Velocity and Pseudo-Displacement SRS

Derived analytically from the acceleration SRS (valid under the harmonic motion assumption):

Quantity Formula Unit (if SA in m/s²)
Pseudo-Velocity SV(fn) = SA(fn) / (2π·fn) m/s
Pseudo-Displacement SD(fn) = SA(fn) / (2π·fn)² m

Multi-Axis Combination

SRSS — Square Root Sum of Squares

For triaxial channels x, y, z — applied to Maximax only:

SRSS(fn) = √( SA_x(fn)² + SA_y(fn)² + SA_z(fn)² )

Represents the Euclidean norm of the response vector — worst-case resultant regardless of shock direction.

Worst-Case Envelope

ENV(fn) = max( SA_x(fn), SA_y(fn), SA_z(fn) )

Point-by-point maximum at each frequency band. Applied to all curve types (Maximax, Positive, Negative). Required by ECSS-E-ST-10-03C Appendix H when the governing axis can change with frequency.

Pass/Fail Margin

M(f) = 20 · log10( Limit(f) / SRS(f) )

The 3 dB threshold (factor √2 ≈ 1.41) is the standard minimum acceptable margin in most aerospace shock specifications.


Supported Units

Input unit Physical quantity Vel / Disp SRS
m/s², g Acceleration ✔ Available
m/s, mm/s Velocity ✘ No
m, mm, µm Displacement ✘ No
N, kN Force ✘ No
V, mV Voltage ✘ No
Pa, N/m², bar Pressure ✘ No
rad/s, RPM Angular velocity ✘ No

Glossary

Term Definition
SRS Shock Response Spectrum — peak SDOF response as a function of natural frequency.
Maximax max(Positive SRS, Negative SRS) — the absolute maximum, required by most norms.
SDOF Single Degree Of Freedom — a mass-spring-damper system with one resonance frequency.
Q factor Quality factor. Q = 1/(2ζ). Sharpness of resonance. Q = 10 is standard.
ζ (zeta) Damping ratio. Fraction of critical damping. ζ = 5 % for Q = 10.
Primary SRS SRS computed on the shock segment [t_start, t_end].
Residual SRS SRS computed on the post-shock segment [t_end, end]. Captures ring-down.
SRSS Square Root Sum of Squares: √(SRS_x² + SRS_y² + SRS_z²).
Envelope Point-by-point max across channels: max(SRS_x, SRS_y, SRS_z).
Pseudo-velocity SV = SA / ωn. Derived from acceleration SRS.
Pseudo-displacement SD = SA / ωn². Derived from acceleration SRS.
Margin (dB) 20·log10(Limit / SRS). Positive = PASS, negative = FAIL.
Padding Extra time added symmetrically around the auto-detected shock zone.
Pyroshock Shock from explosive devices (separation bolts, pyrocutters, pin pullers…).
.orm NVGate JSON metadata file — sampling rate, unit, channel name.
.ors NVGate binary signal — raw float32 samples in SI units, little-endian.
NVDrive OROS TCP protocol for programmatic communication with NVGate.

Algorithm reference: D.O. Smallwood, An Improved Recursive Formula for Calculating Shock Response Spectra, Shock and Vibration Bulletin, 1981. — Standards: MIL-STD-810H (2019), ECSS-E-ST-10-03C (2012), NASA-STD-7003A (2011), DEF-STAN 00-35 Part 3 (2021).