Difference between revisions of "SRS Tool — Shock Response Spectrum Analyser"

From OROS Wiki
Jump to navigation Jump to search
(Added SEO metadata to SRS Tool page)
 
(31 intermediate revisions by one other user not shown)
Line 1: Line 1:
{{DISPLAYTITLE:SRS Tool Shock Response Spectrum Analyser}}
{{#seo:
__TOC__
|title=SRS Tool: Shock Response Spectrum Analysis for OROS NVGate
|keywords=SRS Tool, Shock Response Spectrum, SRS analysis, MIL-STD-810H, ECSS, NASA-STD, Smallwood filter, vibration analysis, NVGate, OROS software
|description=Professional SRS analysis software for OROS NVGate. Fast shock response spectrum computation, built-in normative limit curves (MIL-STD-810H, ECSS), and automated pass/fail reporting.
}}


<!-- ═══════════════════════════════════════════════════════════════════
'''SRS Tool''' is a professional [https://en.wikipedia.org/wiki/Shock_response_spectrum Shock Response Spectrum] (SRS) analysis application built for structural dynamics engineers working with OROS [[NVGate]] data acquisition systems. It reads shock recordings directly from NVGate measurement folders, computes SRS using the Smallwood (1981) recursive digital filter, and pushes results back into NVGate as live TCP result channels — all from a single application.
    INFOBOX  (top-right, like Wikipedia software articles)
    ═══════════════════════════════════════════════════════════════════ -->
{| class="wikitable" style="float:right; margin:0 0 16px 24px; width:290px; font-size:11px; border:1px solid #555; background:#1e1e1e; color:#dcdcdc;"
|+ style="font-weight:bold; font-size:13px; padding:6px 0; color:#9db8d2;" | SRS Tool
|-
| style="padding:6px 10px;" |
{| style="width:100%; font-size:11px;"
|-
| style="color:#888; width:40%;" | '''Developer''' || OROS / Gemini
|-
| style="color:#888;" | '''Platform''' || Windows 10 / 11
|-
| style="color:#888;" | '''Language''' || Python 3.9+
|-
| style="color:#888;" | '''UI framework''' || PySide2 (Qt 5.15)
|-
| style="color:#888;" | '''Algorithm''' || Smallwood 1981
|-
| style="color:#888;" | '''NVGate I/O''' || Native (.ors / .orm)
|-
| style="color:#888;" | '''Standards''' || 30+ built-in curves
|}
|}


= SRS Tool — Shock Response Spectrum Analyser =
[[File:11_main_full.png|center|800px|thumb|'''Figure 1 — SRS Tool main window.''' Time signal with auto-detected shock zone (top right, yellow markers) and log-log SRS plot (bottom right). Three-channel triaxial measurement loaded: channels x, y, z.]]
 
'''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.
 
[[File:01_main_tab_with_srs.png|thumb|800px|center|'''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 ==
== What makes SRS Tool unique==


Most SRS tools require manual import/export and provide no built-in normative database.
SRS Tool is built around the idea that an engineer should go from raw measurement to qualification verdict in under one minute.
SRS Tool is built differently:


<div style="background:#1a2a3a; border-left:4px solid #4a9ee0; padding:12px 16px; margin:14px 0; border-radius:3px; color:#c8d8e8; font-size:12px;">
{| class="wikitable" style="width:100%; font-size:12px; border-collapse:collapse;"
⭐ '''Key differentiators''' vs commercial alternatives (nCode GlyphWorks, LMS TecWare, Brüel & Kjær Pulse)
! style="width:54%; background:#f0f4f8;" | Feature
</div>
! style="width:23%; background:#f0f4f8; text-align:center;" | OROS SRS Tool
 
! style="width:23%; background:#f0f4f8; text-align:center;" | Typical alternatives
{| class="wikitable" style="width:100%; font-size:12px;"
! style="width:52%;" | Feature
! style="width:24%; text-align:center;" | SRS Tool
! style="width:24%; text-align:center;" | Typical tools
|-
|-
| '''30+ built-in normative limit curves''' (MIL-STD-810H, ECSS, NASA, DEF-STAN…) — no manual entry needed
| '''30+ normative limit curves built-in''' MIL-STD-810H, ECSS, NASA-STD, DEF-STAN, ready to use with no setup
| style="background:#1e3d2a; color:#7ecf9a; text-align:center; font-weight:bold;" | ✔ Included
| style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ Included
| style="background:#3a1e1e; color:#cf7e7e; text-align:center;" | ✘ Manual / paid add-on
| style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ Manual entry only
|-
|-
| '''Multi-channel Pass/Fail with per-channel verdict''' in one run
| '''Multi-channel Pass/Fail with per-channel verdict''' — x, y, z compared simultaneously in one run
| style="background:#1e3d2a; color:#7ecf9a; text-align:center; font-weight:bold;" | ✔ Included
| style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ Included
| style="background:#3a1e1e; color:#cf7e7e; text-align:center;" | ✘ One channel at a time
| style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ One channel at a time
|-
|-
| '''Direct NVGate signal read''' (no DLL, no NVGate open)
| '''NVGate TCP result injection''' — log-log display, autoscaled, direct to project
| style="background:#1e3d2a; color:#7ecf9a; text-align:center; font-weight:bold;" | ✔ Native
| style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ Native
| style="background:#3a1e1e; color:#cf7e7e; text-align:center;" | ✘ Manual export required
| style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ Not available
|-
|-
| '''NVGate TCP result injection''' (log-log, autoscaled)
| '''Automatic shock zone detection''' envelope algorithm, runs on load
| style="background:#1e3d2a; color:#7ecf9a; text-align:center; font-weight:bold;" | ✔ Native
| style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ Automatic
| style="background:#3a1e1e; color:#cf7e7e; text-align:center;" | ✘ Not available
| style="background:#fff8e1; color:#7a5200; text-align:center;" | ~ Manual only
|-
| '''Automatic shock zone detection''' (envelope algorithm)
| style="background:#1e3d2a; color:#7ecf9a; text-align:center; font-weight:bold;" | ✔ Included
| style="background:#3a3a1e; color:#cfcf7e; text-align:center;" | ~ Optional / extra
|-
|-
| '''Primary + Residual SRS''' in a single computation pass
| '''Primary + Residual SRS''' in a single computation pass
| style="background:#1e3d2a; color:#7ecf9a; text-align:center; font-weight:bold;" | ✔ Included
| style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ One click
| style="background:#3a3a1e; color:#cfcf7e; text-align:center;" | ~ Two separate analyses
| style="background:#fff8e1; color:#7a5200; text-align:center;" | ~ Two separate runs
|-
| '''SRSS + Worst-case Envelope''' multi-axis combination
| style="background:#1e3d2a; color:#7ecf9a; text-align:center; font-weight:bold;" | ✔ Included
| style="background:#3a1e1e; color:#cf7e7e; text-align:center;" | ✘ Paid add-on
|-
|-
| '''Interactive dB cursor''' on Pass/Fail chart
| '''SRSS + Worst-case Envelope''' — triaxial multi-axis combination
| style="background:#1e3d2a; color:#7ecf9a; text-align:center; font-weight:bold;" | ✔ Included
| style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ Included
| style="background:#3a1e1e; color:#cf7e7e; text-align:center;" | ✘ Rarely available
| style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ Rarely available
|-
|-
| No licence dongle / subscription
| '''Interactive dB cursor''' on Pass/Fail chart — frequency, SRS, limit, margin at a glance
| style="background:#1e3d2a; color:#7ecf9a; text-align:center; font-weight:bold;" | ✔ Free
| style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ Included
| style="background:#3a1e1e; color:#cf7e7e; text-align:center;" | ✘ Licence required
| style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ Rarely available
|}
|}
=== Full feature list ===
* '''Signal acquisition:''' reads NVGate signal files directly
* '''Multi-channel:''' up to 10+ simultaneous channels; channel labels read from NVGate recording metadata (e.g. x, y, z)
* '''Smallwood recursive filter:''' vectorised NumPy implementation; all frequencies computed in a single forward pass
* '''Frequency axis:''' 1/3, 1/6, 1/12 or 1/24 octave resolution; user-defined f_min / f_max
* '''SRS types:''' Maximax (absolute maximum), Positive, Negative
* '''Physical quantities:''' Acceleration SRS + derived Pseudo-Velocity SRS + Pseudo-Displacement SRS
* '''Shock zone:''' auto-detection + manual override (drag on plot or type Start/End in seconds)
* '''Residual SRS:''' computes SRS on the signal segment after the shock ends
* '''Multi-axis combination:''' SRSS and/or Worst-case Envelope across all loaded channels
* '''Pass/Fail:''' 30+ built-in normative curves; user CSV; scale factor (dB); multi-channel worst-case
* '''CSV export:''' full table (per-channel SRS, SRSS, limit, per-channel margin, worst margin, status)
* '''PNG export:''' Pass/Fail chart at 150 dpi
* '''NVGate injection:''' injects all SRS curves into NVGate on log-log display, autoscaled
* '''Preprocessing:''' DC offset removal, noise floor suppression
* '''Dark theme:''' optimised for lab-room screen visibility


----
----
Line 95: Line 72:
= Quick Start =
= Quick Start =


<div style="background:#1a2a1a; border:1px solid #3a6a3a; padding:14px 18px; margin:12px 0; border-radius:4px; color:#c8e0c8; font-size:12px; line-height:1.8;">
<div style="border:1px solid #2e7d32; border-radius:4px; overflow:hidden; margin:14px 0;">
'''Five steps from measurement folder to Pass/Fail verdict:'''
<div style="background:#2e7d32; color:#fff; font-weight:bold; padding:7px 14px; font-size:12px;">Five steps from measurement folder to qualification verdict</div>
 
<div style="padding:12px 16px; background:#f9fdf9; font-size:12px; line-height:2.0;">
# '''Main tab''' → '''Select signal folder…''' → navigate to the NVGate Measurement folder
# '''Main tab''' → '''Select signal folder…''' → navigate to the NVGate Measurement folder
# Shock zone is '''auto-detected''' yellow markers appear on the signal plot
# Channels appear automatically — shock zone is '''auto-detected''' (yellow markers on signal plot)
# Set Q = 10, range 1–10 000 Hz, resolution 1/12 oct → click '''Compute SRS'''
# Set '''Q = 10''', range '''1–10 000 Hz''', resolution '''1/12 oct''' → click '''Compute SRS'''
# '''Pass / Fail tab''' → limit curve is pre-set to MIL-STD-810H Mid-field → click '''▶ Run Pass / Fail'''
# '''Pass / Fail tab''' → limit curve is pre-set to MIL-STD-810H Mid-field → click '''▶ Run Pass / Fail'''
# Read the verdict, export CSV/PNG, or click '''Inject into NVGate'''
# Read the per-channel verdict, export CSV / PNG, or click '''Inject into NVGate'''
</div>
</div>
</div>


Line 108: Line 86:


= Installation =
= Installation =
== Requirements ==
{| class="wikitable" style="font-size:12px;"
! 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 <code>launch_srs.bat</code> shortcut.
<div style="background:#2a2a1a; border-left:4px solid #ccaa00; padding:10px 14px; margin:10px 0; border-radius:3px; color:#e0d080; font-size:11px;">
💡 NVGate does '''not''' need to be running to load signals or compute SRS. It is only required for the '''Inject into NVGate''' function.
</div>
----
----
[https://partnerzone.digigram.com/s/NKAeEkA5ijFDZin SRS V1.3 here ]
Extract and launch the SRS_Tool.exe


= User Interface =
The window has two zones:


* '''Left panel''' (340 px) — tabbed controls: [[#Main Tab|Main]], [[#Advanced Tab|Advanced]], [[#Pass / Fail Tab|Pass / Fail]]
( You need to select the '''folder''' of the signal measurement. )
* '''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 =


[[File:04_left_panel_main.png|thumb|320px|right|Main tab controls NVGate status, Signal folder, Channels, Calculation parameters, Output type, Compute and Inject buttons.]]
[[File:04_left_panel_main.png|right|300px|thumb|'''Figure 2 — Main tab controls.''' From top: NVGate connection indicator, Signal folder, channel checkboxes with Reload, Calculation parameters, Output type selectors, 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 ==
== Signal ==


; Select signal folder…
Click '''Select signal folder…''' to open a folder browser (default root: <code>C:\OROS\NVGate data\Projects</code>). Select the '''Measurement folder''' — channels are listed and the signal is plotted immediately.
: Opens a folder browser (default root: <code>C:\OROS\NVGate data\Projects</code>).
  Select the '''Measurement''' subfolder (e.g. <code>…\MyProject\Measurement3</code>).
  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 ==
== Channels ==


One checkbox per recorded channel:
One checkbox per recorded channel, showing label, sampling rate, duration and unit:
 
<pre>☑  x  (25600 Hz  13.86 s  m/s²)
☑  y  (25600 Hz  13.86 s  m/s²)
☑  z  (25600 Hz  13.86 s  m/s²)</pre>


Channel labels (x, y, z…) are read from the <code>Name</code> field in the NVGate <code>.orm</code> metadata file,
<pre> ☑  x  (25 600 Hz  13.86 s  m/s²)
set by the operator at recording time. If empty, falls back to the hardware source name ("Input 1", "Input 2"…).
  ☑  y  (25 600 Hz  13.86 s  m/s²)
  ☑  z  (25 600 Hz  13.86 s  m/s²)</pre>


Uncheck a channel to exclude it from the computation.
Channel labels (x, y, z…) come from the <code>Name</code> field set by the operator in NVGate at recording time.
Uncheck a channel to exclude it. '''↺ Reload channels''' re-reads files from disk after a new recording.


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


{| class="wikitable" style="font-size:12px;"
{| class="wikitable" style="font-size:12px;"
! Parameter !! Description !! Default
! Parameter !! Description !! Recommended default
|-
|-
| '''Frequency range''' || f_min and f_max for the SRS output || 1 Hz → 10 000 Hz
| '''Frequency range''' || f_min to f_max of the SRS output || 1 Hz → 10 000 Hz
|-
|-
| '''Q factor / Damping''' || Quality factor Q or damping ratio ζ (interchangeable) || Q = 10
| '''Q / Damping''' || Q factor or damping ratio ζ (linked: Q = 1/2ζ) || Q = 10 (ζ = 5 %)
|-
|-
| '''Resolution''' || Octave fraction: 1/3, 1/6, '''1/12''', 1/24 octave || 1/12 octave
| '''Resolution''' || Octave subdivision: 1/3, 1/6, 1/12, 1/24 oct || 1/12 octave
|}
|}


<div style="background:#1a1a2a; border-left:4px solid #7a7acf; padding:8px 12px; margin:8px 0; border-radius:3px; color:#b0b0e0; font-size:11px;">
<div style="border-left:4px solid #1565C0; background:#e8f0fb; padding:9px 14px; margin:10px 0; font-size:12px; border-radius:0 3px 3px 0;">
ℹ 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).
'''Q = 10 (ζ = 5%)''' is the universal standard for aerospace shock SRS — MIL-STD-810H, ECSS-E-ST-10-03C, NASA-STD-7003A all specify this value. f_max is auto-clamped to Nyquist (f_s / 2).
</div>
</div>


Line 209: Line 131:


; Type
; Type
: '''Acc''' — Acceleration SRS (m/s² or g). Always available.
: '''Acc''' — Acceleration SRS. Always available. &nbsp; '''Vel''' — Pseudo-velocity SRS. &nbsp; '''Disp''' — Pseudo-displacement SRS. (Vel and Disp require an acceleration input.)
  '''Vel''' — Pseudo-Velocity SRS. Available for acceleration inputs only.
  '''Disp''' — Pseudo-Displacement SRS. Available for acceleration inputs only.


; Curve
; Curve
: '''Maximax''' — max(positive, |negative|). The standard SRS required by most norms.
: '''Maximax''' — max(positive, |negative|). The standard curve required by most norms. &nbsp; '''Positive''' — max tensile response. &nbsp; '''Negative''' — max compressive response.
  '''Positive''' — maximum positive SDOF response.
  '''Negative''' — maximum absolute negative response (plotted as positive).


== Signal and SRS plots ==
== Signal and SRS plots ==


[[File:05_signal_plot.png|thumb|800px|center|Time signal with auto-detected shock zone (yellow dashed markers). The yellow-shaded area is the primary SRS window. Drag to refine.]]
[[File:05_signal_plot.png|center|760px|thumb|'''Figure 3 — Time signal plot.''' Three channels (x/y/z) overlaid. Yellow dashed lines mark the auto-detected shock zone. Drag horizontally anywhere on the plot to redefine the zone manually.]]


[[File:06_srs_plot.png|thumb|800px|center|SRS log-log plot — 3 channels (x blue, y orange, z green) computed on the shock zone. The legend identifies each curve.]]
[[File:06_srs_plot.png|center|760px|thumb|'''Figure 4 — SRS log-log plot.''' Channels x (blue), y (orange), z (green). Each curve is the Maximax acceleration SRS over the detected shock zone. Q = 10, 1/12 octave, 1–10 000 Hz.]]


The right panel shows two stacked plots:
== Injecting results into NVGate ==


* '''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 [[#Shock Zone|Advanced tab]].
Click '''Inject into NVGate''' (or the duplicate button in the Advanced tab) to send all computed curves via the NVDrive TCP protocol as NVD REAL SPECTRUM channels:
* '''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.
 
* All SRS curves → separate TCP result channels
* X and Y axes: log scale (set automatically)
* Y axis: autoscaled
* All curves displayed in window '''SRS_Results''' of '''Layout1'''
 
NVGate channel naming convention:
<pre>SRS Acc Shock AbsMax: x
SRS Acc Shock AbsMax: y
SRS Acc Shock AbsMax: z</pre>


----
----
----


= Advanced Tab =
= Advanced Tab =


[[File:09_left_panel_adv.png|thumb|320px|right|Advanced tab Shock zone (auto-detection + manual override), Residual SRS, Preprocessing, Multi-axis combination.]]
[[File:09_left_panel_adv.png|right|300px|thumb|'''Figure 5 — Advanced tab.''' Shock zone section (auto-detection parameters + manual Start/End override), Residual SRS option, preprocessing, and multi-axis SRSS / Envelope.]]


== Shock Zone ==
== Shock Zone ==


<div style="background:#2a1a1a; border-left:4px solid #cf5050; padding:8px 12px; margin:8px 0; border-radius:3px; color:#e0b0b0; font-size:11px;">
<div style="border-left:4px solid #e65100; background:#fff8f5; padding:9px 14px; margin:10px 0; font-size:12px; border-radius:0 3px 3px 0;">
The shock zone is '''auto-detected automatically''' every time a signal is loaded. You normally do not need to change anything here.
'''The shock zone is auto-detected every time a signal loads''' — you normally do not need to touch these settings. Use manual override only to fine-tune the boundary.
</div>
</div>


=== Auto-detection algorithm ===
=== Auto-detection ===


The detection algorithm:
# Compute a smoothed envelope: rolling mean of |signal| over a 3 ms window
# Compute a smoothed envelope: rolling mean of |signal| over a 3 ms window
# Set trigger threshold = ''Threshold'' % of the peak envelope
# Trigger threshold = ''Threshold %'' × peak envelope
# Shock zone = first last sample above the threshold
# Zone = first to last sample above threshold
# Expand by ''Padding'' ms on each side, clamped to signal bounds
# Expand by ''Padding ms'' on each side, clamped to signal bounds


{| class="wikitable" style="font-size:12px;"
{| class="wikitable" style="font-size:12px;"
! Parameter !! Effect !! Default
! Parameter !! Effect !! Default
|-
|-
| '''Threshold (% of peak)''' || Lower → wider zone (catches low-level pre/post-shock). Higher → core impact only. || 5 %
| '''Threshold (% of peak)''' || Lower → wider zone; higher → core impact only || 5 %
|-
|-
| '''Padding (ms)''' || Extra margin added symmetrically on both sides of the detected shock. || 20 ms
| '''Padding (ms)''' || Symmetric margin added on both sides of detected zone || 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.
'''Padding example:''' shock detected at 8.055 s – 9.978 s with 20 ms padding zone becomes 8.035 s – 9.998 s, ensuring ring-down is fully captured.


=== Manual override ===
=== 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.
Type '''Start''' and '''End''' (seconds, 3-decimal precision) — the yellow markers on the signal plot update immediately.
Dragging on the signal plot synchronises the spinboxes in return.


=== Residual SRS ===
=== 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:
Check '''Also compute residual SRS''' to run a second computation on the signal after the shock zone end. This captures the free-vibration decay required by MIL-STD-810H Method 517 and ECSS-E-ST-10-03C for fragility assessment. Residual curves appear on the SRS plot labelled "(residual)".
* 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 ==
== Advanced Preprocessing ==
Applied to the signal before the SRS filter:


{| class="wikitable" style="font-size:12px;"
{| class="wikitable" style="font-size:12px;"
! Option !! Effect !! Typical use
! 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
| '''Remove DC offset''' (N ms) || Subtracts the mean of the first N ms from the whole signal || Sensor bias, thermal drift
|-
|-
| '''Noise floor''' (N ms) || Zeroes out the first N ms || Pre-trigger noise before the shock event
| '''Noise floor''' (N ms) || Zeroes the first N ms || Pre-trigger noise before impact
|}
|}


== Multi-axis Combination ==
== Multi-axis Combination ==


Available when '''2 or more acceleration channels''' are loaded (e.g. triaxial x/y/z accelerometer).
Enabled automatically when 2 acceleration channels are loaded. Check one or both options before computing:


; SRSS — √(SRS₁² + SRS₂² + )
{| class="wikitable" style="font-size:12px;"
: Square Root Sum of Squares of all channels — Maximax only. Shown as a '''white dashed curve'''.
! Option !! Formula !! Display
 
|-
; Worst-case envelope — max(SRS₁, SRS₂, )
| '''SRSS''' Square Root Sum of Squares || √(SRS_x² + SRS_y² + SRS_z²) || White dashed curve, Maximax only
: Point-by-point maximum across all channels — all curve types. Shown as an '''orange dash-dot curve'''.
|-
 
| '''Worst-case Envelope''' || max(SRS_x, SRS_y, SRS_z) at each frequency || Orange dash-dot curve, all types
See [[#Multi-Axis Combination - Calculation|the calculation section]] for the mathematical definitions.
|}


----
----
Line 298: Line 222:
= Pass / Fail Tab =
= Pass / Fail Tab =


[[File:07_left_panel_pf.png|thumb|320px|right|Pass/Fail controls limit curve selector with built-in library, scale factor, channel selector, Run button and export buttons.]]
[[File:07_left_panel_pf.png|right|300px|thumb|'''Figure 6 — Pass/Fail controls.''' Grouped limit curve library (30+ curves), user CSV option, 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.
The Pass/Fail tab compares computed SRS against any normative or user-defined limit curve.


== Limit Curve Library ==
== Built-in limit curve library ==


<div style="background:#1a2a3a; border-left:4px solid #4a9ee0; padding:10px 14px; margin:10px 0; border-radius:3px; color:#b0c8e0; font-size:11px;">
<div style="border-left:4px solid #1565C0; background:#e8f0fb; padding:9px 14px; margin:10px 0; font-size:12px; border-radius:0 3px 3px 0;">
📚 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.
'''30+ normative curves are pre-programmed''' — select a standard from the grouped drop-down and run immediately. No other standalone SRS tool provides this library out of the box.
</div>
</div>


{| class="wikitable" style="font-size:12px;"
{| class="wikitable" style="font-size:12px;"
! Standard !! Curves
! Standard !! Curves included
|-
|-
| MIL-STD-810H Method 517 || Near-field, Mid-field ★, Far-field, Gunfire, Tall vehicles
| '''MIL-STD-810H Method 517''' || Near-field (< 0.3 m), '''Mid-field ★''' (0.5–1.5 m), Far-field (> 1.5 m), Gunfire, Tall vehicles
|-
|-
| ECSS-E-ST-10-03C || Protoflight, Proto+, Acceptance, Qualification, Protoqualification
| '''ECSS-E-ST-10-03C''' || Protoflight, Proto+, Acceptance, Qualification, Protoqualification (equipment & system level)
|-
|-
| NASA-STD-7003A || Payload near/far-field, structure-borne near/far
| '''NASA-STD-7003A''' || Payload near/far-field, structure-borne near/far
|-
|-
| DEF-STAN 00-35 || Land vehicle, Ship (deck), Airborne external/internal
| '''DEF-STAN 00-35''' || Land vehicle, Ship (deck), Airborne external/internal
|-
|-
| MIL-S-901D || High-impact shock Grade A / Grade B
| '''MIL-S-901D''' || High-impact shock Grade A / Grade B
|-
|-
| IEST-RP-DTE032 || Light / medium / heavy equipment
| '''IEST-RP-DTE032''' || Light / medium / heavy equipment
|-
|-
| RTCA DO-160G || Avionics Cat. A / B / C
| '''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.
★ MIL-STD-810H Mid-field is the default — the most common qualification specification.
 
Each curve shows its normative reference and a plain-English description of applicability.


=== User-defined CSV ===
=== User-defined CSV ===


Select '''← User-defined (CSV)''' and click '''Load CSV limit curve…'''. Format: two columns (Hz, g), no header needed:
Select '''← User-defined (CSV)''', load a two-column file (Hz, g). Interpolation is log-log linear between breakpoints. Example:
 
<pre>10, 5 &nbsp; &nbsp; 100, 50 &nbsp; &nbsp; 2000, 50 &nbsp; &nbsp; 10000, 50</pre>
<pre>10, 5
100, 50
2000, 50
10000, 50</pre>
 
Interpolation is linear in log-log space between breakpoints.


=== Scale factor (dB) ===
=== Scale factor (dB) ===


Shifts the limit curve uniformly before comparison:
Scales the limit curve before comparison: L_scaled(f) = L_nominal(f) × 10^(dB/20)
 
:<code>L_scaled(f) = L_nominal(f) × 10^(dB/20)</code>


{| class="wikitable" style="font-size:12px;"
{| class="wikitable" style="font-size:12px;"
! dB !! Multiplier !! Effect
! dB || Multiplier || Typical use
|-
|-
| +6 dB || ×2.00 || Tighter / more conservative limit
| +6 || ×2.00 || Conservative / tighter requirement
|-
|-
| +3 dB || ×1.41 || Standard qualification margin check
| +3 || ×1.41 || Standard qualification margin check
|-
|-
| 0 dB || ×1.00 || Nominal — no change
| 0 || ×1.00 || Nominal — no change
|-
|-
| −6 dB || ×0.50 || Relaxed limit
| −6 || ×0.50 || Relaxed limit
|}
|}


== Running Pass/Fail ==
== Pass/Fail results ==


[[File:08_passfail_chart.png|thumb|800px|center|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).]]
[[File:03_passfail_result.png|center|760px|thumb|'''Figure 7 — Pass/Fail chart.''' Three channels (x/y/z) vs MIL-STD-810H Mid-field limit (red dashed). All channels are well within spec: the margin subplot (bottom) shows 30–60 dB positive margin throughout the full frequency range.]]


Click '''▶  Run Pass / Fail'''. The right panel shows:
=== Top panel — SRS vs Limit ===


=== Top chart — SRS vs Limit ===
Each channel plotted in a distinct colour. Limit curve: red dashed. '''Red fill''' = exceedance (SRS > limit). '''Orange fill''' = caution zone (0 ≤ margin < 3 dB).


* Each channel plotted in a distinct colour
=== Bottom panel — Margin (dB) ===
* Limit curve: red dashed line
* '''Red fill''' where SRS > limit (exceedance)
* '''Orange fill''' where 0 ≤ margin < 3 dB (caution)


=== Bottom chart — Margin (dB) ===
Margin M(f) = 20 × log₁₀( Limit(f) / SRS(f) )
 
Margin at each frequency: <code>M(f) = 20 × log10( Limit(f) / SRS(f) )</code>


{| class="wikitable" style="font-size:12px;"
{| class="wikitable" style="font-size:12px;"
! Fill colour !! Meaning
! Colour !! Condition !! Meaning
|-
|-
| style="background:#1e3d2a; color:#7ecf9a;" | Green || M ≥ 3 dB — well within spec
| style="background:#e8f5e9; color:#1b5e20;" | Green || M ≥ 3 dB || Well within specification
|-
|-
| style="background:#3a3a1e; color:#cfcf7e;" | Orange || 0 ≤ M < 3 dB — caution, low margin
| style="background:#fff8e1; color:#7a5200;" | Orange || 0 ≤ M < 3 dB || Caution — low margin
|-
|-
| style="background:#3a1e1e; color:#cf7e7e;" | Red || M < 0 dB — FAIL, exceedance
| style="background:#ffebee; color:#b71c1c;" | Red || M < 0 dB || '''FAIL''' — exceedance
|}
|}


=== Interactive cursor ===
=== Interactive cursor ===


Move the mouse over either chart panel to see a live floating readout snapped to the nearest frequency band:
Hover anywhere on either panel to see a floating readout snapped to the nearest frequency band, showing frequency, SRS value, limit value, margin in dB, and PASS/FAIL status. The readout border turns green, orange or red accordingly.
 
<pre> f        342.2 Hz
SRS       18.45 g
Lim      50.00 g
dB       +8.7
            PASS</pre>
 
The readout border turns green (PASS), orange (< 3 dB), or red (FAIL).


=== Verdict text ===
=== 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:
The result box below the chart shows global verdict, per-channel minimum margin, and the 10 worst exceedance frequencies. Example output:


<pre>PASS  —  Maximax SRS
<pre>PASS  —  Maximax SRS
Line 415: Line 316:
== Export ==
== Export ==


; Export CSV…
{| class="wikitable" style="font-size:12px;"
: 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.
! Button !! Output !! Content
 
|-
; Export graph PNG…
| '''Export CSV…''' || .csv || Per-channel SRS · Worst SRS · Limit · Per-channel margin · Worst margin · Status. Header block includes curve name and scale factor for traceability.
: Both chart panels saved as a PNG at 150 dpi (PDF also available).
|-
 
| '''Export graph PNG…''' || .png / .pdf || Both panels at 150 dpi.
----
|}
 
= NVGate Integration =
 
== Reading signals ==
 
SRS Tool reads NVGate data '''without NVGate open''' and without any additional DLL.
 
File layout inside a Measurement folder:
 
<pre>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/
      …</pre>
 
The <code>.ors</code> file contains 32-bit IEEE 754 float samples in SI units at the native sampling rate.
The channel label is read from the <code>Name</code> field of <code>.orm</code> (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 <code>SRS_Results</code> of <code>Layout1</code>
 
NVGate channel naming:
<pre>SRS Acc Shock AbsMax: x
SRS Acc Shock AbsMax: y
SRS Acc Shock AbsMax: z
SRS Acc Shock AbsMax: SRSS  (x + y + z)</pre>


----
----


= 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 ζ:
= Calculation Reference =


:<code>z''(t) + 2ζωn·z'(t) + ωn²·z(t) = −x''(t)</code>
== Shock Response Spectrum ==


where x''(t) is the base acceleration and z(t) the relative displacement.
The SRS is the peak response of a bank of Single Degree Of Freedom (SDOF) oscillators, each with a different natural frequency f_n, driven by a common base acceleration x''(t):


The three SRS values at frequency f_n:
<code>z''(t) + 2ζωₙz'(t) + ωₙ²z(t) = −x''(t)</code>


{| class="wikitable" style="font-size:12px;"
{| class="wikitable" style="font-size:12px;"
! Curve !! Definition !! Label in tool
! Curve !! Definition !! Standard?
|-
|-
| Positive SRS || max over time of [ωn² · z(t)] || Positive
| Positive SRS || max<sub>t</sub>[ ωₙ² z(t) ] || Supplementary
|-
|-
| Negative SRS || max over time of [−ωn² · z(t)] || Negative
| Negative SRS || max<sub>t</sub>[ −ωₙ²z(t) ] || Supplementary
|-
|-
| Maximax SRS || max(Positive, Negative) || '''Maximax''' ← standard
| '''Maximax SRS''' || max(Positive, Negative) || '''Required by most norms'''
|}
|}


== Smallwood Recursive Digital Filter (1981) ==
== Smallwood Recursive Filter ==


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:
The Smallwood (1981) filter avoids step-by-step numerical integration, giving an exact discrete-time equivalent with coefficients computed once per frequency:


Let:
{| style="font-size:12px; font-family:monospace; border-collapse:collapse; margin:8px 0;"
* <code>ωd = ωn · √(1−ζ²)</code>  (damped natural frequency)
|-
* <code>E = exp(−ζ·ωn·Δt)</code>
| style="padding:2px 10px;" | E = exp(−ζωₙΔt) &nbsp;&nbsp; K = ωd·Δt &nbsp;&nbsp; (ωd = ωₙ√(1−ζ²))
* <code>K = ωd·Δt</code>
|-
 
| style="padding:2px 10px;" | b₀ = 1 − E·sin(K)/K &nbsp;&nbsp;&nbsp; b₁ = 2(E·sin(K)/K − E·cos(K)) &nbsp;&nbsp;&nbsp; b₂ = E² − E·sin(K)/K
Filter coefficients:
 
{| class="wikitable" style="font-size:12px; font-family:monospace;"
| b₀ = 1 − E·sin(K)/K
| b₁ = (E·sin(K)/K − E·cos(K))
|-
|-
| b₂ = E² − E·sin(K)/K
| style="padding:2px 10px;" | a₁ = 2E·cos(K) &nbsp;&nbsp;&nbsp; a₂ = −E²
| a₁ = 2·E·cos(K)
|-
|-
| a₂ = −E²
| style="padding:2px 10px; font-weight:bold;" | y[k] = b₀x[k] + b₁x[k−1] + b₂x[k−2] + a₁y[k−1] + a₂y[k−2]
|
|}
|}


Recursive equation at each time step k:
All N natural frequencies are processed in a '''single forward pass''' through the signal using NumPy broadcasting — typically 50–100× faster than a frequency-by-frequency loop.


:<code>y[k] = b₀·x[k] + b₁·x[k-1] + b₂·x[k-2] + a₁·y[k-1] + a₂·y[k-2]</code>
== Frequency axis ==


=== Vectorised implementation ===
Log-spaced at 1/n octave: '''f_k = f_min × 2^(k/n)'''
 
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:
 
:<code>f_k = f_min × 2^(k/n),  k = 0, 1, …, N−1</code>


{| class="wikitable" style="font-size:12px;"
{| class="wikitable" style="font-size:12px;"
! Resolution !! Bands/octave !! Bands over 1–10 000 Hz
! Resolution !! Bands 1–10 000 Hz
|-
|-
| 1/3 octave || 3 || 40
| 1/3 octave || 40
|-
|-
| 1/6 octave || 6 || 80
| 1/6 octave || 80
|-
|-
| '''1/12 octave''' || 12 || '''160''' ← default
| '''1/12 octave''' (default) || '''160'''
|-
|-
| 1/24 octave || 24 || 320
| 1/24 octave || 320
|}
|}


== Quality Factor and Damping ==
== Q factor and damping ==


:<code>Q = 1 / (2ζ)  ↔  ζ = 1 / (2Q)</code>
<code>Q = 1/(2ζ)  ↔  ζ = 1/(2Q)</code>


{| class="wikitable" style="font-size:12px;"
{| class="wikitable" style="font-size:12px;"
! Q factor !! Damping ζ !! Typical application
! Q !! ζ !! Use
|-
|-
| '''10''' || '''5 %''' || '''Standard aerospace — MIL-STD-810, ECSS, NASA'''
| '''10''' || '''5 %''' || '''Aerospace standard — MIL-STD-810, ECSS, NASA'''
|-
|-
| 50 || 1 % || Very lightly damped structures
| 50 || 1 % || Lightly damped structures
|-
|-
| 5 || 10 % || Heavily damped, rubber-mounted equipment
| 5 || 10 % || Rubber-mounted, heavily damped
|}
|}


== Primary and Residual SRS ==
== Primary and Residual SRS ==


Given shock zone [t_start, t_end]:
{| class="wikitable" style="font-size:12px;"
! Zone !! Signal segment !! Required by
|-
| '''Primary''' || [t_start → t_end] — the shock transient || All norms
|-
| '''Residual''' || [t_end → end] — free vibration decay || MIL-STD-810H §517, ECSS §8.4.3
|}
 
== Pseudo-velocity and pseudo-displacement ==
 
{| class="wikitable" style="font-size:12px; font-family:monospace;"
! Quantity !! Formula !! Unit (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 ==


{| class="wikitable" style="font-size:12px;"
{| class="wikitable" style="font-size:12px;"
! Zone !! Signal segment !! Physical meaning
! Method !! Formula !! Applied to !! Use case
|-
|-
| '''Primary SRS''' || [t_start, t_end] || Response during the shock transient
| '''SRSS''' || √(SA_x² + SA_y² + SA_z²) || Maximax only || Euclidean resultant, triaxial sensor
|-
|-
| '''Residual SRS''' || [t_end, end] || Free vibration decay after the shock
| '''Worst-case Envelope''' || max(SA_x, SA_y, SA_z) at each f || All types || Space programmes (ECSS App. H)
|}
|}


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 ==
= Supported Input Units =


Derived analytically from the acceleration SRS (valid under the harmonic motion assumption):
{| class="wikitable" style="font-size:12px; width:100%;"
 
! Unit !! Physical quantity !! Vel/Disp SRS available
{| class="wikitable" style="font-size:12px; font-family:monospace;"
|-
! Quantity !! Formula !! Unit (if SA in m/s²)
| '''m/s², g''' || Acceleration || style="background:#e8f5e9; color:#1b5e20; text-align:center;" | ✔ Yes
|-
| m/s, mm/s || Velocity || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No
|-
| m, mm, µm || Displacement || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No
|-
| N, kN || Force || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No
|-
| V, mV || Voltage || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No
|-
|-
| Pseudo-Velocity || SV(fn) = SA(fn) / (2π·fn) || m/s
| Pa, N/m² || Pressure || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No
|-
|-
| Pseudo-Displacement || SD(fn) = SA(fn) / (2π·fn)² || m
| rad/s, RPM || Angular velocity || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No
|}
|}


== Multi-Axis Combination ==
----


=== SRSS — Square Root Sum of Squares ===
= Glossary =


For triaxial channels x, y, z — applied to Maximax only:
{| class="wikitable" style="font-size:12px; width:100%;"
! style="width:20%;" | Term !! Definition
|-
| '''SRS''' || Shock Response Spectrum. Peak SDOF response as a function of natural frequency.
|-
| '''Maximax''' || max(Positive, |Negative|). The absolute peak response — required by most norms.
|-
| '''SDOF''' || Single Degree Of Freedom. A mass–spring–damper system with one resonant frequency.
|-
| '''Q factor''' || Quality factor. Q = 1/(2ζ). Q = 10 is the universal aerospace standard.
|-
| '''ζ''' || Damping ratio. Fraction of critical damping. ζ = 5 % ↔ Q = 10.
|-
| '''Primary SRS''' || SRS over the shock transient [t_start, t_end].
|-
| '''Residual SRS''' || SRS on the post-shock free vibration [t_end, end].
|-
| '''SRSS''' || Square Root Sum of Squares: √(SRS_x² + SRS_y² + SRS_z²).
|-
| '''Envelope''' || Point-by-point max across channels at each frequency.
|-
| '''Margin (dB)''' || 20·log₁₀(Limit/SRS). Positive → PASS, negative → FAIL.
|-
| '''Padding''' || Symmetric time margin added around the auto-detected shock zone.
|-
| '''Pyroshock''' || Shock from explosive devices: separation bolts, pyrocutters, pin pullers.
|-
| '''.orm''' || NVGate JSON channel metadata: sampling rate, unit, name.
|-
| '''.ors''' || NVGate binary signal: float32 little-endian samples, SI units.
|-
| '''NVDrive''' || OROS TCP protocol for programmatic communication with NVGate.
|}


:<code>SRSS(fn) = √( SA_x(fn)² + SA_y(fn)² + SA_z(fn)² )</code>
----


Represents the Euclidean norm of the response vector worst-case resultant regardless of shock direction.
= Appendix SRS Limit Curves Normative Reference =


=== Worst-Case Envelope ===
This page documents all predefined SRS limit curves available in the SRS Tool.
Each curve is identified by a '''confidence level''' tag shown next to its name in the interface.


:<code>ENV(fn) = max( SA_x(fn), SA_y(fn), SA_z(fn) )</code>


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


== Pass/Fail Margin ==
{| class="wikitable" style="width:100%"
! Tag !! Meaning !! What to expect
|-
| style="background:#e8f5e9; color:#1b5e20; font-weight:bold; text-align:center;" | [normative]
| Curve taken '''directly from the published standard''' as an SRS specification.
| Breakpoints are faithful to the document. Use for compliance testing.
|-
| style="background:#fff3e0; color:#e65100; font-weight:bold; text-align:center;" | [approximate]
| Standard defines a '''time-domain waveform''' (half-sine, sawtooth…), '''not''' an SRS.
| The SRS envelope is computed from the pulse shape. For exact results, import the waveform and run compute_srs() on it.
|-
| style="background:#fce4ec; color:#880e4f; font-weight:bold; text-align:center;" | [indicative]
| Levels depend on '''mounting position, equipment mass or mission profile''', or the exact document version was not available.
| Use as a first-pass estimate only. Always verify with the applicable programme document.
|}


:<code>M(f) = 20 · log10( Limit(f) / SRS(f) )</code>
All curves use '''Q = 10''' (damping ζ = 5 %) and acceleration units (g).
Between breakpoints, interpolation is '''log-log linear''' (constant dB/octave slope).


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


----


= Supported Units =


{| class="wikitable" style="font-size:12px;"
{| class="wikitable sortable" style="width:100%; font-size:90%;"
! Input unit !! Physical quantity !! Vel / Disp SRS
! Standard !! Sector !! Tag !! Application !! Peak level !! Freq. range
|-
| NASA GEVS 2500 g || Space || style="background:#e8f5e9; color:#1b5e20;" | normative || Hardware on primary structure || 2 500 g || 20–10 000 Hz
|-
| NASA GEVS 1000 g || Space || style="background:#e8f5e9; color:#1b5e20;" | normative || Hardware on panel or bracket || 1 000 g || 20–10 000 Hz
|-
| NASA GEVS 3750 g (Qual.) || Space || style="background:#e8f5e9; color:#1b5e20;" | normative || Qualification unit (dedicated test article) || 3 750 g || 20–10 000 Hz
|-
| Ariane 5 Equipment Bay || Space || style="background:#fce4ec; color:#880e4f;" | indicative || Satellite equipment bay, component level || 2 000 g || 100–10 000 Hz
|-
| Ariane 6 || Space || style="background:#fce4ec; color:#880e4f;" | indicative || All payload positions, component level || 1 600 g || 100–10 000 Hz
|-
| VEGA-C || Space || style="background:#fce4ec; color:#880e4f;" | indicative || Small satellite missions, component level || 1 200 g || 100–10 000 Hz
|-
|-
| m/s², g || Acceleration || style="background:#1e3d2a; color:#7ecf9a; text-align:center;" | ✔ Available
| ECSS-E-ST-10-03C Protoqual. || Space || style="background:#fce4ec; color:#880e4f;" | indicative || European space programmes, proto-qualification || 2 000 g || 20–10 000 Hz
|-
|-
| m/s, mm/s || Velocity || style="background:#3a1e1e; color:#cf7e7e; text-align:center;" | ✘ No
| MIL-STD-810H M517 Near-field || Military / Pyro || style="background:#e8f5e9; color:#1b5e20;" | normative || Equipment < 0.5 m from pyrotechnic source || 10 000 g || 100–10 000 Hz
|-
|-
| m, mm, µm || Displacement || style="background:#3a1e1e; color:#cf7e7e; text-align:center;" | ✘ No
| MIL-STD-810H M517 Mid-field || Military / Pyro || style="background:#e8f5e9; color:#1b5e20;" | normative || Equipment 0.5–1.5 m from pyrotechnic source || 1 000 g || 100–10 000 Hz
|-
|-
| N, kN || Force || style="background:#3a1e1e; color:#cf7e7e; text-align:center;" | ✘ No
| MIL-STD-810H M517 Far-field || Military / Pyro || style="background:#e8f5e9; color:#1b5e20;" | normative || Equipment > 1.5 m from pyrotechnic source || 100 g || 100–10 000 Hz
|-
|-
| V, mV || Voltage || style="background:#3a1e1e; color:#cf7e7e; text-align:center;" | ✘ No
| MIL-STD-810H M516 Functional 40 g || Military / Mech || style="background:#fff3e0; color:#e65100;" | approximate || Functional shock — must operate before and after || 80 g (2×A) || 5–2 000 Hz
|-
|-
| Pa, N/m², bar || Pressure || style="background:#3a1e1e; color:#cf7e7e; text-align:center;" | ✘ No
| MIL-STD-810H M516 Crash 40 g || Military / Mech || style="background:#fff3e0; color:#e65100;" | approximate || Crash hazard — must not endanger personnel || 60 g || 5–2 000 Hz
|-
|-
| rad/s, RPM || Angular velocity || style="background:#3a1e1e; color:#cf7e7e; text-align:center;" | ✘ No
| MIL-STD-810H M516 Bench 15 g || Military / Mech || style="background:#fff3e0; color:#e65100;" | approximate || Bench handling — drops during maintenance || 30 g || 5–2 000 Hz
|}
 
----
 
= Glossary =
 
{| class="wikitable" style="font-size:12px; width:100%;"
! style="width:22%;" | Term !! Definition
|-
|-
| '''SRS''' || Shock Response Spectrum — peak SDOF response as a function of natural frequency.
| MIL-S-901D Grade A || Military / Naval || style="background:#fce4ec; color:#880e4f;" | indicative || US Navy lightweight shipboard equipment (< 136 kg) || 2 000 g || 20–10 000 Hz
|-
|-
| '''Maximax''' || max(Positive SRS, Negative SRS) — the absolute maximum, required by most norms.
| MIL-S-901D Grade B || Military / Naval || style="background:#fce4ec; color:#880e4f;" | indicative || US Navy medium-weight equipment (136–2 268 kg) || 1 000 g || 20–10 000 Hz
|-
|-
| '''SDOF''' || Single Degree Of Freedom a mass-spring-damper system with one resonance frequency.
| DO-160G Cat. B 6 g || Aviation || style="background:#fff3e0; color:#e65100;" | approximate || Airborne equipment operational flight shock || 12 g || 5–2 000 Hz
|-
|-
| '''Q factor''' || Quality factor. Q = 1/(2ζ). Sharpness of resonance. Q = 10 is standard.
| DO-160G Cat. C 15 g || Aviation || style="background:#fff3e0; color:#e65100;" | approximate || Avionics — bench handling during maintenance || 30 g || 5–2 000 Hz
|-
|-
| '''ζ (zeta)''' || Damping ratio. Fraction of critical damping. ζ = 5 % for Q = 10.
| DO-160G Cat. D 20 g || Aviation || style="background:#fff3e0; color:#e65100;" | approximate || Airborne equipment — crash / emergency landing || 40 g || 5–2 000 Hz
|-
|-
| '''Primary SRS''' || SRS computed on the shock segment [t_start, t_end].
| DEF STAN 00-35 Cat. M || European Defence || style="background:#fce4ec; color:#880e4f;" | indicative || UK defence — general military ground equipment || 1 000 g || 10–10 000 Hz
|-
|-
| '''Residual SRS''' || SRS computed on the post-shock segment [t_end, end]. Captures ring-down.
| DEF STAN 00-35 Cat. P || European Defence || style="background:#fce4ec; color:#880e4f;" | indicative || UK defence — aircraft store / weapon release || 2 000 g || 100–10 000 Hz
|-
|-
| '''SRSS''' || Square Root Sum of Squares: √(SRS_x² + SRS_y² + SRS_z²).
| GAM EG-13 Choc sévère || European Defence (DGA) || style="background:#fce4ec; color:#880e4f;" | indicative || French military — pyrotechnic devices, ejection seats || 2 000 g || 20–10 000 Hz
|-
|-
| '''Envelope''' || Point-by-point max across channels: max(SRS_x, SRS_y, SRS_z).
| GAM EG-13 Choc modéré || European Defence (DGA) || style="background:#fce4ec; color:#880e4f;" | indicative || French military — vehicle impacts, transport drops || 500 g || 10–5 000 Hz
|-
|-
| '''Pseudo-velocity''' || SV = SA / ωn. Derived from acceleration SRS.
| STANAG 4370 AECTP-201 M417 || NATO || style="background:#fce4ec; color:#880e4f;" | indicative || NATO — pyroshock, severity level 3 || 2 000 g || 100–10 000 Hz
|-
|-
| '''Pseudo-displacement''' || SD = SA / ωn². Derived from acceleration SRS.
| STANAG 4370 AECTP-201 M403 || NATO || style="background:#fff3e0; color:#e65100;" | approximate || NATO — mechanical shock, severity level 3 || 50 g || 5–2 000 Hz
|-
|-
| '''Margin (dB)''' || 20·log10(Limit / SRS). Positive = PASS, negative = FAIL.
| IEC 60068-2-27 15 g / 11 ms || Industrial || style="background:#fff3e0; color:#e65100;" | approximate || General industrial / commercial equipment qualification || 30 g || 5–2 000 Hz
|-
|-
| '''Padding''' || Extra time added symmetrically around the auto-detected shock zone.
| IEC 60068-2-27 50 g / 11 ms || Industrial || style="background:#fff3e0; color:#e65100;" | approximate || Rugged industrial equipment — severe shock || 100 g || 5–2 000 Hz
|-
|-
| '''Pyroshock''' || Shock from explosive devices (separation bolts, pyrocutters, pin pullers…).
| IEC 60068-2-27 100 g / 6 ms || Industrial || style="background:#fff3e0; color:#e65100;" | approximate || Harsh shock environments — impacts, sudden accelerations || 200 g || 5–2 000 Hz
|-
|-
| '''.orm''' || NVGate JSON metadata file sampling rate, unit, channel name.
| IEC 61373 Cat.1 Class B || Railway || style="background:#fff3e0; color:#e65100;" | approximate || Railway equipment mounted on vehicle body (interior) || 6 g || 2–2 000 Hz
|-
|-
| '''.ors''' || NVGate binary signal raw float32 samples in SI units, little-endian.
| IEC 61373 Cat.1 Class A || Railway || style="background:#fff3e0; color:#e65100;" | approximate || Railway bogie-mounted equipment (running gear) || 15 g || 2–2 000 Hz
|-
|-
| '''NVDrive''' || OROS TCP protocol for programmatic communication with NVGate.
| IEC 61373 Cat.2 Under-body || Railway || style="background:#fff3e0; color:#e65100;" | approximate || Railway — under-body / axle-box mounted equipment || 50 g || 2–2 000 Hz
|}
|}


----
----


<div style="font-size:10px; color:#666; text-align:center; margin-top:24px; border-top:1px solid #444; padding-top:10px;">
 
Algorithm reference: D.O. Smallwood, ''An Improved Recursive Formula for Calculating Shock Response Spectra'', Shock and Vibration Bulletin, 1981.
== How the SRS Tool uses these curves ==
Standards: MIL-STD-810H (2019), ECSS-E-ST-10-03C (2012), NASA-STD-7003A (2011), DEF-STAN 00-35 Part 3 (2021).
 
# Select a curve in the '''Pass/Fail''' tab.
# The tool interpolates the curve at the same frequency resolution as the measured SRS using log-log linear interpolation.
# Margin is computed point-by-point: '''Margin (dB) = 20 × log₁₀(limit / SRS)'''
# The overall result is PASS only if the margin is positive at '''all''' frequencies.
 
== Adding a custom curve ==
 
You can import your own limit curve via a two-column CSV file (frequency Hz, level g) using the '''Load CSV''' button in the Pass/Fail tab. The SRS Tool applies the same log-log interpolation as built-in curves.
 
[[Category:SRS Tool]]
[[Category:Test Standards]]
 
 
 
<div style="margin-top:28px; padding-top:12px; border-top:1px solid #ddd; font-size:11px; color:#888; text-align:center;">
Algorithm: D.O. Smallwood, ''An Improved Recursive Formula for Calculating Shock Response Spectra'', Shock and Vibration Bulletin, 1981. &nbsp;·&nbsp;
Standards referenced: MIL-STD-810H (2019) · ECSS-E-ST-10-03C (2012) · NASA-STD-7003A (2011) · DEF-STAN 00-35 Part 3 (2021).
</div>
</div>

Latest revision as of 14:19, 4 May 2026


SRS Tool is a professional Shock Response Spectrum (SRS) analysis application built for structural dynamics engineers working with OROS NVGate data acquisition systems. It reads shock recordings directly from NVGate measurement folders, computes SRS using the Smallwood (1981) recursive digital filter, and pushes results back into NVGate as live TCP result channels — all from a single application.

Figure 1 — SRS Tool main window. Time signal with auto-detected shock zone (top right, yellow markers) and log-log SRS plot (bottom right). Three-channel triaxial measurement loaded: channels x, y, z.

What makes SRS Tool unique

SRS Tool is built around the idea that an engineer should go from raw measurement to qualification verdict in under one minute.

Feature OROS SRS Tool Typical alternatives
30+ normative limit curves built-in — MIL-STD-810H, ECSS, NASA-STD, DEF-STAN, ready to use with no setup ✔ Included ✘ Manual entry only
Multi-channel Pass/Fail with per-channel verdict — x, y, z compared simultaneously in one run ✔ Included ✘ One channel at a time
NVGate TCP result injection — log-log display, autoscaled, direct to project ✔ Native ✘ Not available
Automatic shock zone detection — envelope algorithm, runs on load ✔ Automatic ~ Manual only
Primary + Residual SRS in a single computation pass ✔ One click ~ Two separate runs
SRSS + Worst-case Envelope — triaxial multi-axis combination ✔ Included ✘ Rarely available
Interactive dB cursor on Pass/Fail chart — frequency, SRS, limit, margin at a glance ✔ Included ✘ Rarely available

Full feature list

  • Signal acquisition: reads NVGate signal files directly
  • Multi-channel: up to 10+ simultaneous channels; channel labels read from NVGate recording metadata (e.g. x, y, z)
  • Smallwood recursive filter: vectorised NumPy implementation; all frequencies computed in a single forward pass
  • Frequency axis: 1/3, 1/6, 1/12 or 1/24 octave resolution; user-defined f_min / f_max
  • SRS types: Maximax (absolute maximum), Positive, Negative
  • Physical quantities: Acceleration SRS + derived Pseudo-Velocity SRS + Pseudo-Displacement SRS
  • Shock zone: auto-detection + manual override (drag on plot or type Start/End in seconds)
  • Residual SRS: computes SRS on the signal segment after the shock ends
  • Multi-axis combination: SRSS and/or Worst-case Envelope across all loaded channels
  • Pass/Fail: 30+ built-in normative curves; user CSV; scale factor (dB); multi-channel worst-case
  • CSV export: full table (per-channel SRS, SRSS, limit, per-channel margin, worst margin, status)
  • PNG export: Pass/Fail chart at 150 dpi
  • NVGate injection: injects all SRS curves into NVGate on log-log display, autoscaled
  • Preprocessing: DC offset removal, noise floor suppression
  • Dark theme: optimised for lab-room screen visibility



Quick Start

⚡ Five steps from measurement folder to qualification verdict
  1. Main tabSelect signal folder… → navigate to the NVGate Measurement folder
  2. Channels appear automatically — shock zone is auto-detected (yellow markers on 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 per-channel verdict, export CSV / PNG, or click Inject into NVGate

Installation


SRS V1.3 here Extract and launch the SRS_Tool.exe


( You need to select the folder of the signal measurement. )

Main Tab

Figure 2 — Main tab controls. From top: NVGate connection indicator, Signal folder, channel checkboxes with Reload, Calculation parameters, Output type selectors, Compute and Inject buttons.

Signal

Click Select signal folder… to open a folder browser (default root: C:\OROS\NVGate data\Projects). Select the Measurement folder — channels are listed and the signal is plotted immediately.

Channels

One checkbox per recorded channel, showing label, sampling rate, duration and unit:

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

Channel labels (x, y, z…) come from the Name field set by the operator in NVGate at recording time. Uncheck a channel to exclude it. ↺ Reload channels re-reads files from disk after a new recording.

Calculation parameters

Parameter Description Recommended default
Frequency range f_min to f_max of the SRS output 1 Hz → 10 000 Hz
Q / Damping Q factor or damping ratio ζ (linked: Q = 1/2ζ) Q = 10 (ζ = 5 %)
Resolution Octave subdivision: 1/3, 1/6, 1/12, 1/24 oct 1/12 octave

Q = 10 (ζ = 5%) is the universal standard for aerospace shock SRS — MIL-STD-810H, ECSS-E-ST-10-03C, NASA-STD-7003A all specify this value. f_max is auto-clamped to Nyquist (f_s / 2).

Output

Type
Acc — Acceleration SRS. Always available.   Vel — Pseudo-velocity SRS.   Disp — Pseudo-displacement SRS. (Vel and Disp require an acceleration input.)
Curve
Maximax — max(positive, |negative|). The standard curve required by most norms.   Positive — max tensile response.   Negative — max compressive response.

Signal and SRS plots

Figure 3 — Time signal plot. Three channels (x/y/z) overlaid. Yellow dashed lines mark the auto-detected shock zone. Drag horizontally anywhere on the plot to redefine the zone manually.
Figure 4 — SRS log-log plot. Channels x (blue), y (orange), z (green). Each curve is the Maximax acceleration SRS over the detected shock zone. Q = 10, 1/12 octave, 1–10 000 Hz.

Injecting results into NVGate

Click Inject into NVGate (or the duplicate button in the Advanced tab) to send all computed curves via the NVDrive TCP protocol as NVD REAL SPECTRUM channels:

  • All SRS curves → separate TCP result channels
  • X and Y axes: log scale (set automatically)
  • Y axis: autoscaled
  • All curves displayed in window SRS_Results of Layout1

NVGate channel naming convention:

SRS Acc Shock AbsMax: x
SRS Acc Shock AbsMax: y
SRS Acc Shock AbsMax: z


Advanced Tab

Figure 5 — Advanced tab. Shock zone section (auto-detection parameters + manual Start/End override), Residual SRS option, preprocessing, and multi-axis SRSS / Envelope.

Shock Zone

The shock zone is auto-detected every time a signal loads — you normally do not need to touch these settings. Use manual override only to fine-tune the boundary.

Auto-detection

The detection algorithm:

  1. Compute a smoothed envelope: rolling mean of |signal| over a 3 ms window
  2. Trigger threshold = Threshold % × peak envelope
  3. Zone = first to last sample above threshold
  4. Expand by Padding ms on each side, clamped to signal bounds
Parameter Effect Default
Threshold (% of peak) Lower → wider zone; higher → core impact only 5 %
Padding (ms) Symmetric margin added on both sides of detected zone 20 ms

Padding example: shock detected at 8.055 s – 9.978 s with 20 ms padding → zone becomes 8.035 s – 9.998 s, ensuring ring-down is fully captured.

Manual override

Type Start and End (seconds, 3-decimal precision) — the yellow markers on the signal plot update immediately. Dragging on the signal plot synchronises the spinboxes in return.

Residual SRS

Check Also compute residual SRS to run a second computation on the signal after the shock zone end. This captures the free-vibration decay required by MIL-STD-810H Method 517 and ECSS-E-ST-10-03C for fragility assessment. Residual curves appear on the SRS plot labelled "(residual)".

Advanced Preprocessing

Option Effect Typical use
Remove DC offset (N ms) Subtracts the mean of the first N ms from the whole signal Sensor bias, thermal drift
Noise floor (N ms) Zeroes the first N ms Pre-trigger noise before impact

Multi-axis Combination

Enabled automatically when ≥ 2 acceleration channels are loaded. Check one or both options before computing:

Option Formula Display
SRSS — Square Root Sum of Squares √(SRS_x² + SRS_y² + SRS_z²) White dashed curve, Maximax only
Worst-case Envelope max(SRS_x, SRS_y, SRS_z) at each frequency Orange dash-dot curve, all types

Pass / Fail Tab

Figure 6 — Pass/Fail controls. Grouped limit curve library (30+ curves), user CSV option, scale factor, channel selector, Run button, and export buttons.

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

Built-in limit curve library

30+ normative curves are pre-programmed — select a standard from the grouped drop-down and run immediately. No other standalone SRS tool provides this library out of the box.

Standard Curves included
MIL-STD-810H — Method 517 Near-field (< 0.3 m), Mid-field ★ (0.5–1.5 m), Far-field (> 1.5 m), Gunfire, Tall vehicles
ECSS-E-ST-10-03C Protoflight, Proto+, Acceptance, Qualification, Protoqualification (equipment & system level)
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 the default — the most common qualification specification.

User-defined CSV

Select ← User-defined (CSV), load a two-column file (Hz, g). Interpolation is log-log linear between breakpoints. Example:

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

Scale factor (dB)

Scales the limit curve before comparison: L_scaled(f) = L_nominal(f) × 10^(dB/20)

dB Multiplier Typical use
+6 ×2.00 Conservative / tighter requirement
+3 ×1.41 Standard qualification margin check
0 ×1.00 Nominal — no change
−6 ×0.50 Relaxed limit

Pass/Fail results

Figure 7 — Pass/Fail chart. Three channels (x/y/z) vs MIL-STD-810H Mid-field limit (red dashed). All channels are well within spec: the margin subplot (bottom) shows 30–60 dB positive margin throughout the full frequency range.

Top panel — SRS vs Limit

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

Bottom panel — Margin (dB)

Margin M(f) = 20 × log₁₀( Limit(f) / SRS(f) )

Colour Condition Meaning
Green M ≥ 3 dB Well within specification
Orange 0 ≤ M < 3 dB Caution — low margin
Red M < 0 dB FAIL — exceedance

Interactive cursor

Hover anywhere on either panel to see a floating readout snapped to the nearest frequency band, showing frequency, SRS value, limit value, margin in dB, and PASS/FAIL status. The readout border turns green, orange or red accordingly.

Verdict text

The result box below the chart shows global verdict, per-channel minimum margin, and the 10 worst exceedance frequencies. Example output:

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

Button Output Content
Export CSV… .csv Per-channel SRS · Worst SRS · Limit · Per-channel margin · Worst margin · Status. Header block includes curve name and scale factor for traceability.
Export graph PNG… .png / .pdf Both panels at 150 dpi.


Calculation Reference

Shock Response Spectrum

The SRS is the peak response of a bank of Single Degree Of Freedom (SDOF) oscillators, each with a different natural frequency f_n, driven by a common base acceleration x(t):

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

Curve Definition Standard?
Positive SRS maxt[ ωₙ² z(t) ] Supplementary
Negative SRS maxt[ −ωₙ²z(t) ] Supplementary
Maximax SRS max(Positive, Negative) Required by most norms

Smallwood Recursive Filter

The Smallwood (1981) filter avoids step-by-step numerical integration, giving an exact discrete-time equivalent with coefficients computed once per frequency:

E = exp(−ζωₙΔt)    K = ωd·Δt    (ωd = ωₙ√(1−ζ²))
b₀ = 1 − E·sin(K)/K     b₁ = 2(E·sin(K)/K − E·cos(K))     b₂ = E² − E·sin(K)/K
a₁ = 2E·cos(K)     a₂ = −E²
y[k] = b₀x[k] + b₁x[k−1] + b₂x[k−2] + a₁y[k−1] + a₂y[k−2]

All N natural frequencies are processed in a single forward pass through the signal using NumPy broadcasting — typically 50–100× faster than a frequency-by-frequency loop.

Frequency axis

Log-spaced at 1/n octave: f_k = f_min × 2^(k/n)

Resolution Bands 1–10 000 Hz
1/3 octave 40
1/6 octave 80
1/12 octave (default) 160
1/24 octave 320

Q factor and damping

Q = 1/(2ζ) ↔ ζ = 1/(2Q)

Q ζ Use
10 5 % Aerospace standard — MIL-STD-810, ECSS, NASA
50 1 % Lightly damped structures
5 10 % Rubber-mounted, heavily damped

Primary and Residual SRS

Zone Signal segment Required by
Primary [t_start → t_end] — the shock transient All norms
Residual [t_end → end] — free vibration decay MIL-STD-810H §517, ECSS §8.4.3

Pseudo-velocity and pseudo-displacement

Quantity Formula Unit (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

Method Formula Applied to Use case
SRSS √(SA_x² + SA_y² + SA_z²) Maximax only Euclidean resultant, triaxial sensor
Worst-case Envelope max(SA_x, SA_y, SA_z) at each f All types Space programmes (ECSS App. H)

Supported Input Units

Unit Physical quantity Vel/Disp SRS available
m/s², g Acceleration ✔ Yes
m/s, mm/s Velocity ✘ No
m, mm, µm Displacement ✘ No
N, kN Force ✘ No
V, mV Voltage ✘ No
Pa, N/m² 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 Negative|). The absolute peak response — required by most norms.
SDOF Single Degree Of Freedom. A mass–spring–damper system with one resonant frequency.
Q factor Quality factor. Q = 1/(2ζ). Q = 10 is the universal aerospace standard.
ζ Damping ratio. Fraction of critical damping. ζ = 5 % ↔ Q = 10.
Primary SRS SRS over the shock transient [t_start, t_end].
Residual SRS SRS on the post-shock free vibration [t_end, end].
SRSS Square Root Sum of Squares: √(SRS_x² + SRS_y² + SRS_z²).
Envelope Point-by-point max across channels at each frequency.
Margin (dB) 20·log₁₀(Limit/SRS). Positive → PASS, negative → FAIL.
Padding Symmetric time margin added around the auto-detected shock zone.
Pyroshock Shock from explosive devices: separation bolts, pyrocutters, pin pullers.
.orm NVGate JSON channel metadata: sampling rate, unit, name.
.ors NVGate binary signal: float32 little-endian samples, SI units.
NVDrive OROS TCP protocol for programmatic communication with NVGate.

Appendix SRS Limit Curves — Normative Reference

This page documents all predefined SRS limit curves available in the SRS Tool. Each curve is identified by a confidence level tag shown next to its name in the interface.


Confidence level indicators

Tag Meaning What to expect
[normative] Curve taken directly from the published standard as an SRS specification. Breakpoints are faithful to the document. Use for compliance testing.
[approximate] Standard defines a time-domain waveform (half-sine, sawtooth…), not an SRS. The SRS envelope is computed from the pulse shape. For exact results, import the waveform and run compute_srs() on it.
[indicative] Levels depend on mounting position, equipment mass or mission profile, or the exact document version was not available. Use as a first-pass estimate only. Always verify with the applicable programme document.

All curves use Q = 10 (damping ζ = 5 %) and acceleration units (g). Between breakpoints, interpolation is log-log linear (constant dB/octave slope).

Summary table

Standard Sector Tag Application Peak level Freq. range
NASA GEVS 2500 g Space normative Hardware on primary structure 2 500 g 20–10 000 Hz
NASA GEVS 1000 g Space normative Hardware on panel or bracket 1 000 g 20–10 000 Hz
NASA GEVS 3750 g (Qual.) Space normative Qualification unit (dedicated test article) 3 750 g 20–10 000 Hz
Ariane 5 Equipment Bay Space indicative Satellite equipment bay, component level 2 000 g 100–10 000 Hz
Ariane 6 Space indicative All payload positions, component level 1 600 g 100–10 000 Hz
VEGA-C Space indicative Small satellite missions, component level 1 200 g 100–10 000 Hz
ECSS-E-ST-10-03C Protoqual. Space indicative European space programmes, proto-qualification 2 000 g 20–10 000 Hz
MIL-STD-810H M517 Near-field Military / Pyro normative Equipment < 0.5 m from pyrotechnic source 10 000 g 100–10 000 Hz
MIL-STD-810H M517 Mid-field Military / Pyro normative Equipment 0.5–1.5 m from pyrotechnic source 1 000 g 100–10 000 Hz
MIL-STD-810H M517 Far-field Military / Pyro normative Equipment > 1.5 m from pyrotechnic source 100 g 100–10 000 Hz
MIL-STD-810H M516 Functional 40 g Military / Mech approximate Functional shock — must operate before and after 80 g (2×A) 5–2 000 Hz
MIL-STD-810H M516 Crash 40 g Military / Mech approximate Crash hazard — must not endanger personnel 60 g 5–2 000 Hz
MIL-STD-810H M516 Bench 15 g Military / Mech approximate Bench handling — drops during maintenance 30 g 5–2 000 Hz
MIL-S-901D Grade A Military / Naval indicative US Navy lightweight shipboard equipment (< 136 kg) 2 000 g 20–10 000 Hz
MIL-S-901D Grade B Military / Naval indicative US Navy medium-weight equipment (136–2 268 kg) 1 000 g 20–10 000 Hz
DO-160G Cat. B 6 g Aviation approximate Airborne equipment — operational flight shock 12 g 5–2 000 Hz
DO-160G Cat. C 15 g Aviation approximate Avionics — bench handling during maintenance 30 g 5–2 000 Hz
DO-160G Cat. D 20 g Aviation approximate Airborne equipment — crash / emergency landing 40 g 5–2 000 Hz
DEF STAN 00-35 Cat. M European Defence indicative UK defence — general military ground equipment 1 000 g 10–10 000 Hz
DEF STAN 00-35 Cat. P European Defence indicative UK defence — aircraft store / weapon release 2 000 g 100–10 000 Hz
GAM EG-13 Choc sévère European Defence (DGA) indicative French military — pyrotechnic devices, ejection seats 2 000 g 20–10 000 Hz
GAM EG-13 Choc modéré European Defence (DGA) indicative French military — vehicle impacts, transport drops 500 g 10–5 000 Hz
STANAG 4370 AECTP-201 M417 NATO indicative NATO — pyroshock, severity level 3 2 000 g 100–10 000 Hz
STANAG 4370 AECTP-201 M403 NATO approximate NATO — mechanical shock, severity level 3 50 g 5–2 000 Hz
IEC 60068-2-27 15 g / 11 ms Industrial approximate General industrial / commercial equipment qualification 30 g 5–2 000 Hz
IEC 60068-2-27 50 g / 11 ms Industrial approximate Rugged industrial equipment — severe shock 100 g 5–2 000 Hz
IEC 60068-2-27 100 g / 6 ms Industrial approximate Harsh shock environments — impacts, sudden accelerations 200 g 5–2 000 Hz
IEC 61373 Cat.1 Class B Railway approximate Railway — equipment mounted on vehicle body (interior) 6 g 2–2 000 Hz
IEC 61373 Cat.1 Class A Railway approximate Railway — bogie-mounted equipment (running gear) 15 g 2–2 000 Hz
IEC 61373 Cat.2 Under-body Railway approximate Railway — under-body / axle-box mounted equipment 50 g 2–2 000 Hz


How the SRS Tool uses these curves

  1. Select a curve in the Pass/Fail tab.
  2. The tool interpolates the curve at the same frequency resolution as the measured SRS using log-log linear interpolation.
  3. Margin is computed point-by-point: Margin (dB) = 20 × log₁₀(limit / SRS)
  4. The overall result is PASS only if the margin is positive at all frequencies.

Adding a custom curve

You can import your own limit curve via a two-column CSV file (frequency Hz, level g) using the Load CSV button in the Pass/Fail tab. The SRS Tool applies the same log-log interpolation as built-in curves.


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