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

From OROS Wiki
Jump to navigation Jump to search
(Created page with "{{DISPLAYTITLE:SRS Tool — User Guide}} __TOC__ = SRS Tool — Shock Response Spectrum Analyser = '''SRS Tool''' is a professional Shock Response Spectrum (SRS) analysis application developed for structural dynamics engineers working with OROS NVGate acquisition systems. It reads recorded time signals directly from NVGate project folders, computes SRS using the Smallwood (1981) recursive digital filter, and injects results back into NVGate as live TCP result channels...")
 
(Added SEO metadata to SRS Tool page)
 
(32 intermediate revisions by one other user not shown)
Line 1: Line 1:
{{DISPLAYTITLE:SRS Tool — User Guide}}
{{#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 Shock Response Spectrum Analyser =
'''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.


'''SRS Tool''' is a professional Shock Response Spectrum (SRS) analysis application
[[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.]]
developed for structural dynamics engineers working with OROS NVGate acquisition systems.
It reads recorded time signals directly from NVGate project folders, computes SRS using
the Smallwood (1981) recursive digital filter, and injects results back into NVGate as
live TCP result channels — all without leaving a single application.


[[File:screenshot_main_overview.png|thumb|800px|center|SRS Tool — main window overview. Left panel: tabbed controls. Right panel: time signal (top) and SRS plot (bottom).]]
----


== Key Features ==
== What makes SRS Tool unique==


=== 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.


{| class="wikitable" style="width:100%"
{| class="wikitable" style="width:100%; font-size:12px; border-collapse:collapse;"
|-
! style="width:54%; background:#f0f4f8;" | Feature
! Feature !! SRS Tool !! Typical competitor tools
! style="width:23%; background:#f0f4f8; text-align:center;" | OROS SRS Tool
! style="width:23%; background:#f0f4f8; text-align:center;" | Typical alternatives
|-
|-
| '''Built-in normative limit curve library''' (30+ curves, MIL-STD-810H, ECSS, NASA, DEF-STAN…) || {{Yes}} — ready to use, no configuration || {{No}} — manual entry only, or sold as separate module
| '''30+ normative limit curves built-in''' MIL-STD-810H, ECSS, NASA-STD, DEF-STAN, ready to use with no setup
| style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ Included
| style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ Manual entry only
|-
|-
| Multi-channel Pass/Fail with '''per-channel verdict''' in a single run || {{Yes}} || Rarely — usually one channel at a time
| '''Multi-channel Pass/Fail with per-channel verdict''' — x, y, z compared simultaneously in one run
| style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ Included
| style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ One channel at a time
|-
|-
| '''Automatic shock zone detection''' (envelope-based) || {{Yes}} || Rarely included
| '''NVGate TCP result injection''' — log-log display, autoscaled, direct to project
| style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ Native
| style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ Not available
|-
|-
| '''Primary + Residual SRS''' in one computation pass || {{Yes}} || Usually requires two separate analyses
| '''Automatic shock zone detection''' — envelope algorithm, runs on load
| style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ Automatic
| style="background:#fff8e1; color:#7a5200; text-align:center;" | ~ Manual only
|-
|-
| '''SRSS''' (Square Root Sum of Squares, multi-axis resultant) || {{Yes}} || Optional paid add-on in most tools
| '''Primary + Residual SRS''' in a single computation pass
| style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ One click
| style="background:#fff8e1; color:#7a5200; text-align:center;" | ~ Two separate runs
|-
|-
| '''Worst-case envelope''' across axes || {{Yes}} || Rarely included
| '''SRSS + Worst-case Envelope''' — triaxial multi-axis combination
| style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ Included
| style="background:#ffebee; color:#b71c1c; text-align:center;" | Rarely available
|-
|-
| Direct '''NVGate TCP injection''' (read signal → compute → inject result) || {{Yes}} — native, zero configuration || {{No}} — requires manual export/import
| '''Interactive dB cursor''' on Pass/Fail chart — frequency, SRS, limit, margin at a glance
|-
| style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ Included
| Interactive '''cursor with margin readout''' on Pass/Fail chart || {{Yes}} || Rarely
| style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ Rarely available
|-
| Open-source, no licence dongle || {{Yes}} || {{No}}
|}
|}


=== Full feature list ===
=== Full feature list ===


* '''Signal acquisition:''' reads NVGate <code>.ors</code> / <code>.orm</code> files directly — no DLL, no NVGate open
* '''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)
* '''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
* '''Smallwood recursive filter:''' vectorised NumPy implementation; all frequencies computed in a single forward pass
Line 56: Line 66:
* '''Preprocessing:''' DC offset removal, noise floor suppression
* '''Preprocessing:''' DC offset removal, noise floor suppression
* '''Dark theme:''' optimised for lab-room screen visibility
* '''Dark theme:''' optimised for lab-room screen visibility


----
----


= Installation =
= Quick Start =


== Requirements ==
<div style="border:1px solid #2e7d32; border-radius:4px; overflow:hidden; margin:14px 0;">
<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
# 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'''
# '''Pass / Fail tab''' → limit curve is pre-set to MIL-STD-810H Mid-field → click '''▶ Run Pass / Fail'''
# Read the per-channel verdict, export CSV / PNG, or click '''Inject into NVGate'''
</div>
</div>


{| class="wikitable"
----
|-
! 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 plot canvases
|-
| 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.
 
{{Note|NVGate does '''not''' need to be running to compute SRS. It is only required for the '''Inject into NVGate''' function.}}


= Installation =
----
----
[https://partnerzone.digigram.com/s/NKAeEkA5ijFDZin SRS V1.3 here ]
Extract and launch the SRS_Tool.exe


= User Interface Overview =


The window is divided into two main areas:
( You need to select the '''folder''' of the signal measurement. )
 
* '''Left panel''' — tabbed control area (340 px fixed width): [[#Main Tab|Main]], [[#Advanced Tab|Advanced]], [[#Pass/Fail Tab|Pass / Fail]]
* '''Right panel''' — expandable visualisation area, showing either the SRS view or the Pass/Fail view depending on which tab is active
 
[[File:screenshot_ui_layout.png|thumb|700px|center|Window layout: left tab panel + right visualisation area.]]
 
== Status bar ==
 
The status bar at the bottom of the window shows:
* Current operation (loading, computing, injecting…)
* After computation: number of frequency bands, Q factor, octave resolution, shock zone duration
* After Pass/Fail: global verdict, minimum margin in dB, number of exceedances
 
A '''progress bar''' appears in the bottom-right corner during SRS computation.
 
----


= Main Tab =
= Main Tab =


[[File:screenshot_main_tab.png|thumb|400px|right|Main tab — from top to bottom: NVGate connection, Signal, Channels, Calculation parameters, Output.]]
[[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 indicator ==
 
A coloured dot shows the live connection status to NVGate:
 
* 🔴 '''Disconnected''' — NVGate is not running, or pynvdrive is not available. SRS computation still works; only injection is unavailable.
* 🟢 '''Connected''' — NVGate is reachable. The indicator is polled every 3 seconds automatically.


== Signal ==
== Signal ==


Selects the NVGate measurement folder to analyse.
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.
 
; Select signal folder…
: Opens a folder browser starting at <code>C:\OROS\NVGate data\Projects</code>.
  Select the '''Measurement folder''' (e.g. <code>…\Projects\MyProject\Measurement3</code>).
  The tool scans for <code>Record_*_1\Channel_*\</code> subfolders automatically.
  Channels are listed immediately and the signal is loaded.
 
The folder path is shown in grey below the button (truncated to 50 characters).


== Channels ==
== Channels ==


Lists all channels found in the measurement folder.
One checkbox per recorded channel, showing label, sampling rate, duration and unit:


[[File:screenshot_channels_box.png|thumb|400px|right|Channels box: one checkbox per recorded channel with its label, sampling rate, duration and unit.]]
<pre>  ☑  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²)</pre>


Each channel is shown as a checkbox:
Channel labels (x, y, z…) come from the <code>Name</code> field set by the operator in NVGate at recording time.
<pre>
Uncheck a channel to exclude it. '''↺ Reload channels''' re-reads files from disk after a new recording.
☑  x  (51200 Hz  0.50 s  m/s²)
☑  y  (51200 Hz  0.50 s  m/s²)
☑  z  (51200 Hz  0.50 s  m/s²)
</pre>


Channel labels (x, y, z…) are read from the NVGate <code>Name</code> field in the <code>.orm</code> metadata file, set at recording time.
== Calculation parameters ==
Uncheck a channel to exclude it from computation.


; ↺  Reload channels
{| class="wikitable" style="font-size:12px;"
: Re-reads the channel list from disk. Use this after a new NVGate recording in the same folder without re-browsing.
! Parameter !! Description !! Recommended default
 
== Calculation Parameters ==
 
{| class="wikitable"
|-
! Parameter !! Description !! Typical value
|-
| '''Frequency''' (f_min to f_max) || Frequency range of the SRS output || 1 Hz to 10 000 Hz
|-
|-
| '''Type''' || Q factor or Damping ratio ζ || Q factor
| '''Frequency range''' || f_min to f_max of the SRS output || 1 Hz → 10 000 Hz
|-
|-
| '''Value''' || Numerical value of Q or ζ || Q = 10  (ζ = 5 %)
| '''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 || 1/12 octave
| '''Resolution''' || Octave subdivision: 1/3, 1/6, 1/12, 1/24 oct || 1/12 octave
|}
|}


{{Note|f_max is automatically clamped to the Nyquist frequency (f_s / 2) of the loaded signal.}}
<div style="border-left:4px solid #1565C0; background:#e8f0fb; padding:9px 14px; margin:10px 0; font-size:12px; border-radius:0 3px 3px 0;">
 
'''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).
The relationship between Q factor and damping ratio is:
</div>
 
:<math>\zeta = \frac{1}{2Q}</math>
 
Q = 10 corresponds to ζ = 5 %, which is the standard value specified by MIL-STD-810, ECSS and most aerospace shock standards.


== Output ==
== Output ==
Selects which SRS curves to compute and display.


; Type
; Type
: '''Acc''' — Acceleration SRS (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 (only if input unit is acceleration).
  '''Disp''' — Pseudo-Displacement SRS (only if input unit is acceleration).


; Curve
; Curve
: '''Maximax''' — absolute maximum of positive and negative responses. The standard SRS curve 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 only.
 
  '''Negative''' — maximum absolute negative SDOF response (plotted as a positive value).
== Signal and SRS plots ==
 
[[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.]]


Multiple selections are displayed together on the SRS plot.
[[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.]]


== Compute SRS button ==
== Injecting results into NVGate ==


Launches the SRS computation in a background thread. The progress bar updates in real time.
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:
A duplicate '''Compute SRS''' button is available in the Advanced tab.


== Inject into NVGate button ==
* 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'''


Sends all computed SRS curves to NVGate as TCP result channels displayed in log-log scale.
NVGate channel naming convention:
Disabled if NVGate is not connected or if no SRS has been computed.
<pre>SRS Acc Shock AbsMax: x
A duplicate '''Inject into NVGate''' button is available in the Advanced tab.
SRS Acc Shock AbsMax: y
SRS Acc Shock AbsMax: z</pre>


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


= Advanced Tab =
= Advanced Tab =


[[File:screenshot_advanced_tab.png|thumb|400px|right|Advanced tab Shock zone, 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 ==


Defines the time window used for SRS computation.
<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 every time a signal loads''' — you normally do not need to touch these settings. Use manual override only to fine-tune the boundary.
{{Note|The shock zone is '''auto-detected automatically''' each time a signal is loaded. You normally do not need to touch these settings.}}
</div>


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


The detection algorithm (Smallwood envelope method):
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
# Threshold = ''threshold_pct'' / 100 × max(envelope)
# Trigger threshold = ''Threshold %'' × peak envelope
# Shock zone = first last sample where envelope ≥ 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"
{| class="wikitable" style="font-size:12px;"
|-
! Parameter !! Effect !! Default
! Parameter !! Description !! Default
|-
|-
| '''Threshold''' || Fraction of the peak envelope used as trigger (% of peak) || 5 %
| '''Threshold (% of peak)''' || Lower → wider zone; higher → core impact only || 5 %
|-
|-
| '''Padding''' || Extra time margin added on both sides of the detected zone || 20 ms
| '''Padding (ms)''' || Symmetric margin added on both sides of detected zone || 20 ms
|}
|}


'''Padding explained:''' if the shock is detected between 0.100 s and 0.150 s with a 20 ms padding, the zone becomes 0.080 s – 0.170 s. This ensures that the full transient and its ring-down tail are included.
'''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.
 
; Auto-detect shock
: Re-runs detection with the current Threshold and Padding values. The result is shown on the signal plot (yellow dashed markers) and updates the Start/End fields below.
 
=== Manual Override ===
 
[[File:screenshot_shock_zone.png|thumb|400px|right|Signal plot with auto-detected shock zone (yellow dashed lines). The span selector can be dragged to refine.]]


; Start / End (seconds)
=== Manual override ===
: Type the exact zone boundaries in seconds (3-decimal precision).
  Changing either value immediately moves the yellow zone markers on the signal plot.
  The '''Duration''' label updates in real time.


; Drag on the signal plot
Type '''Start''' and '''End''' (seconds, 3-decimal precision) — the yellow markers on the signal plot update immediately.
: Click and drag horizontally on the time signal to draw a custom zone. The Start/End spinboxes synchronise automatically.
Dragging on the signal plot synchronises the spinboxes in return.
 
{{Warning|If no shock zone is defined (zone cleared), the SRS is computed over the '''entire signal'''. This is valid but will include pre-shock noise.}}


=== Residual SRS ===
=== Residual SRS ===


; Also compute 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)".
: When checked, a second SRS computation is run on the signal '''after''' the shock zone end.
  This captures the free vibration decay following the shock, and is required by MIL-STD-810H Method 517 and ECSS-E-ST-10-03.


The residual SRS is displayed as a separate set of curves on the SRS plot (labelled "(residual)").
== Advanced Preprocessing ==


=== Advanced Preprocessing ===
{| class="wikitable" style="font-size:12px;"
 
Applied to the signal before SRS computation.
 
{| class="wikitable"
|-
! 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 with bias or 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 of the signal || 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.
Enabled automatically when 2 acceleration channels are loaded. Check one or both options before computing:


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


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


[[File:screenshot_passfail_tab.png|thumb|400px|right|Pass/Fail tab — limit curve selector, channel selector, curve type, Run button.]]
[[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 a normative or user-defined limit curve.
The Pass/Fail tab compares computed SRS against any normative or user-defined limit curve.


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


=== Built-in library ===
<div style="border-left:4px solid #1565C0; background:#e8f0fb; padding:9px 14px; margin:10px 0; font-size:12px; border-radius:0 3px 3px 0;">
'''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>


SRS Tool includes '''30+ pre-programmed limit curves''' from the major international standards. No other standalone SRS tool provides this library out-of-the-box.
{| class="wikitable" style="font-size:12px;"
 
! Standard !! Curves included
The curves are organised by standard family in a grouped drop-down list:
 
{| class="wikitable" style="width:100%"
|-
! Standard family !! 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
| '''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''' || Equipment level protoflight, proto+, acceptance; System level qualification, protoqualification
| '''ECSS-E-ST-10-03C''' || Protoflight, Proto+, Acceptance, Qualification, Protoqualification (equipment & system level)
|-
|-
| '''NASA-STD-7003A''' || Payload near-field, payload 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''' || Component test levels (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
|-
| '''Tailored''' || Custom envelope / composite curves
|}
|}


Each curve displays:
★ MIL-STD-810H Mid-field is the default — the most common qualification specification.
* '''Reference''' standard document number and clause
* '''Description''' — English plain-text explanation of the applicability (normative, indicative, etc.)


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


Select '''← User-defined (CSV)''' at the top of the list, then click '''Load CSV limit curve…'''.
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>
The CSV must contain two columns: frequency (Hz) and level (g), no header required:
<pre>
10,5
100,50
2000,50
10000,50
</pre>
 
The tool interpolates linearly between breakpoints (log-log space).


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


Shifts the entire limit curve up or down in dB before comparison:
Scales the limit curve before comparison: L_scaled(f) = L_nominal(f) × 10^(dB/20)


:<math>L_{\text{scaled}}(f) = L_{\text{nominal}}(f) \times 10^{dB/20}</math>
{| class="wikitable" style="font-size:12px;"
 
! dB || Multiplier || Typical use
{| class="wikitable"
|-
! Scale factor !! Multiplier !! Effect
|-
|-
| +6 dB || ×2.0 || Tighter / more conservative limit
| +6 || ×2.00 || Conservative / tighter requirement
|-
|-
| +3 dB || ×1.41 || Standard margin check (+3 dB test level)
| +3 || ×1.41 || Standard qualification margin check
|-
|-
| 0 dB || ×1.0 || Nominal limit
| 0 || ×1.00 || Nominal — no change
|-
|-
| −6 dB || ×0.5 || Relaxed limit (adds safety margin to measured SRS)
| −6 || ×0.50 || Relaxed limit
|}
|}


== Compare With ==
== Pass/Fail results ==


; Channel
[[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.]]
: Select which SRS curve to compare. Options:
:* Individual channels (Ch 1 — x, Ch 2 — y, …)
:* '''★ SRSS (…)''' — the multi-axis resultant (if computed)
:* '''◆ Envelope ()''' — the worst-case envelope (if computed)
:* '''All channels — worst case''' — shown when ≥ 2 channels are loaded; displays all channels simultaneously and uses the worst-case margin for the verdict


; Curve
=== Top panel — SRS vs Limit ===
: Maximax, Positive or Negative SRS type to compare.


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


[[File:screenshot_passfail_chart.png|thumb|700px|center|Pass/Fail chart: SRS curves (coloured) vs limit (red dashed), exceedance fill (red), caution zone (orange), margin subplot (bottom).]]
=== Bottom panel — Margin (dB) ===


Clicking '''▶  Run Pass / Fail''' produces:
Margin M(f) = 20 × log₁₀( Limit(f) / SRS(f) )


=== Chart (top panel) ===
{| class="wikitable" style="font-size:12px;"
 
! Colour !! Condition !! Meaning
* Each channel SRS plotted in a distinct colour
|-
* Limit curve: red dashed line
| style="background:#e8f5e9; color:#1b5e20;" | Green || M ≥ 3 dB || Well within specification
* '''Red fill''' between SRS and limit where SRS > limit (exceedance)
|-
* '''Orange fill''' where 0 ≤ margin < 3 dB (caution zone)
| style="background:#fff8e1; color:#7a5200;" | Orange || 0 ≤ M < 3 dB || Caution low margin
 
|-
=== Margin chart (bottom panel) ===
| style="background:#ffebee; color:#b71c1c;" | Red || M < 0 dB || '''FAIL''' — exceedance
 
|}
Displays the margin in dB at each frequency:
 
:<math>M(f) = 20 \log_{10}\!\left(\frac{L(f)}{SRS(f)}\right)</math>
 
* '''Green fill''' for M ≥ 3 dB — well within spec
* '''Orange fill''' for 0 ≤ M < 3 dB — caution, less than 3 dB margin
* '''Red fill''' for M < 0 dB '''FAIL'''
* Dashed horizontal reference at +3 dB


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


Move the mouse over either panel to see a floating readout:
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 colour changes: green (PASS), orange (< 3 dB), red (FAIL).


=== Text verdict ===
=== Verdict text ===


The result box below the chart shows:
The result box below the chart shows global verdict, per-channel minimum margin, and the 10 worst exceedance frequencies. Example output:
* Global verdict: '''PASS''' or '''FAIL'''
* Limit curve name
* Per-channel result: individual minimum margin and worst frequency
* Worst margin across all channels
* Table of the 10 most severe exceedances (frequency, SRS, limit, margin)


Example (multi-channel):
<pre>PASS  —  Maximax SRS
<pre>
PASS  —  Maximax SRS
Limit: MIL-STD-810H Meth.517 — Mid-field (0.5–1.5 m)
Limit: MIL-STD-810H Meth.517 — Mid-field (0.5–1.5 m)


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


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


== Export ==
== Export ==


=== Export CSV ===
{| class="wikitable" style="font-size:12px;"
 
! Button !! Output !! Content
Exports the full comparison table. For a multi-channel run the file contains:
 
{| class="wikitable"
|-
|-
! Column !! 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.
|-
|-
| Frequency (Hz) || SRS frequency axis
| '''Export graph PNG…''' || .png / .pdf || Both panels at 150 dpi.
|-
| SRS_x (g), SRS_y (g), SRS_z (g) || Per-channel SRS value
|-
| Worst SRS (g) || Point-by-point maximum across channels
|-
| Limit (g) || Limit curve value
|-
| Margin_x (dB), Margin_y (dB), Margin_z (dB) || Per-channel margin
|-
| Worst Margin (dB) || Minimum margin across channels
|-
| Status || PASS / PASS < 3dB / FAIL
|}
|}
The header block includes the limit curve name and scale factor for traceability:
<pre>
# SRS Pass/Fail Report
# Limit curve:  MIL-STD-810H Meth.517 — Mid-field (0.5–1.5 m)
# SRS type:    Maximax
# Channels:    x, y, z
# Unit:        g
</pre>
=== Export graph PNG ===
Saves the Pass/Fail chart (both panels) as a PNG image at 150 dpi. PDF is also available via the file type filter.


----
----


= NVGate Integration =


== Reading signals ==
= Calculation Reference =


SRS Tool reads NVGate measurement data '''without NVGate running''' and '''without any DLL'''.
== Shock Response Spectrum ==


The file layout inside a NVGate measurement folder is:
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):


<pre>
<code>z''(t) + 2ζωₙz'(t) + ωₙ²z(t) = −x''(t)</code>
Measurement3/
  Record_1.oxf                    ← RIFF header (ignored)
  Record_1_1/
    Channel_1_0_XXXXXXXX/
      Channel_1.orm              ← JSON metadata (sampling rate, unit, name…)
      Part_0.ors                  ← raw float32 little-endian samples (SI units)
    Channel_2_0_XXXXXXXX/
      Channel_2.orm
      Part_0.ors
</pre>


The <code>.ors</code> file contains 32-bit IEEE 754 float samples in SI units (m/s², m/s, Pa, …) at the native sampling rate. No conversion is applied before the SRS engine.
{| class="wikitable" style="font-size:12px;"
! Curve !! Definition !! Standard?
|-
| Positive SRS || max<sub>t</sub>[ ωₙ² z(t) ] || Supplementary
|-
| Negative SRS || max<sub>t</sub>[ −ωₙ²z(t) ] || Supplementary
|-
| '''Maximax SRS''' || max(Positive, Negative) || '''Required by most norms'''
|}


The channel name displayed in the tool is taken from the <code>Name</code> field in the <code>.orm</code> JSON file (set by the operator in NVGate at recording time). If <code>Name</code> is empty, the tool falls back to the <code>SourceName</code> field ("Input 1", "Input 2", …).
== Smallwood Recursive Filter ==


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


Results are injected via the NVDrive TCP protocol using the '''NVD REAL SPECTRUM''' (FFT-type) result format:
{| style="font-size:12px; font-family:monospace; border-collapse:collapse; margin:8px 0;"
 
|-
* Each SRS curve becomes one TCP result channel in NVGate
| style="padding:2px 10px;" | E = exp(−ζωₙΔt) &nbsp;&nbsp; K = ωd·Δt &nbsp;&nbsp; (ωd = ωₙ√(1−ζ²))
* Axes are set to log scale automatically (X and Y)
|-
* Y axis is autoscaled
| 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
* All curves for a measurement are displayed in the <code>SRS_Results</code> window in <code>Layout1</code>
|-
 
| style="padding:2px 10px;" | a₁ = 2E·cos(K) &nbsp;&nbsp;&nbsp; a₂ = −E²
The channel naming convention in NVGate is:
|-
<pre>
| 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]
SRS Acc Shock AbsMax: x
|}
SRS Acc Shock Max: y
SRS Acc AfterShock AbsMax: z
SRS Acc Shock AbsMax: SRSS  (x + y + z)
</pre>
 
----
 
= Mathematical Background =
 
== Shock Response Spectrum — Definition ==
 
The Shock Response Spectrum (SRS) is a function that describes the '''peak response''' of a bank of undamped Single Degree Of Freedom (SDOF) oscillators, each tuned to a different natural frequency f_n, when subjected to a common base excitation signal.
 
[[File:diagram_sdof_bank.png|thumb|500px|center|Conceptual diagram: the input acceleration signal drives N parallel SDOF oscillators. The SRS is the envelope of their peak responses.]]
 
For each oscillator of natural frequency f_n and damping ratio ζ:
 
:<math>\ddot{z}(t) + 2\zeta\omega_n\dot{z}(t) + \omega_n^2 z(t) = -\ddot{x}(t)</math>
 
where:
* <math>\ddot{x}(t)</math> is the base (input) acceleration
* <math>z(t) = y(t) - x(t)</math> is the relative displacement of the mass
* <math>\omega_n = 2\pi f_n</math> is the natural angular frequency
 
The SRS values at frequency f_n are:
 
:<math>SRS^{+}(f_n) = \max_{t}\, \omega_n^2 \, z(t)</math>
:<math>SRS^{-}(f_n) = \max_{t}\, \left[-\omega_n^2 \, z(t)\right]</math>
:<math>SRS^{\max}(f_n) = \max\!\left(SRS^{+},\, SRS^{-}\right)</math>
 
where SRS⁺ is the '''Positive''' SRS, SRS⁻ is the '''Negative''' SRS, and SRS^max is the '''Maximax''' (absolute maximum), which is the standard curve required by most aerospace norms.
 
== Smallwood Recursive Digital Filter (1981) ==
 
The Runge–Kutta integration of the SDOF equation is computationally intensive. D.O. Smallwood (Sandia National Laboratories, 1981) derived an equivalent '''recursive digital filter''' whose coefficients depend only on f_n, ζ and the sampling interval Δt:
 
Let:
:<math>\omega_d = \omega_n\sqrt{1-\zeta^2}</math>  (damped natural frequency)
:<math>E = e^{-\zeta\omega_n\Delta t}</math>
:<math>K = \omega_d\,\Delta t</math>
 
Filter coefficients:
:<math>b_0 = 1 - \frac{E\sin K}{K}</math>
:<math>b_1 = 2\!\left(\frac{E\sin K}{K} - E\cos K\right)</math>
:<math>b_2 = E^2 - \frac{E\sin K}{K}</math>
:<math>a_1 = 2E\cos K</math>
:<math>a_2 = -E^2</math>


The recursive equation applied 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.


:<math>y_k = b_0\,x_k + b_1\,x_{k-1} + b_2\,x_{k-2} + a_1\,y_{k-1} + a_2\,y_{k-2}</math>
== Frequency axis ==


where x_k is the input acceleration sample and y_k is the absolute acceleration response of the SDOF mass.
Log-spaced at 1/n octave: '''f_k = f_min × 2^(k/n)'''


=== Vectorised implementation ===
{| class="wikitable" style="font-size:12px;"
 
! Resolution !! Bands 1–10 000 Hz
SRS Tool computes all N natural frequencies in a '''single forward pass''' through the signal using NumPy broadcasting. The coefficients b₀…a₂ are computed as length-N arrays before the loop, and each time-step update is a single vectorised operation on all N oscillators simultaneously. This is typically 50–100× faster than a naive frequency-by-frequency loop.
 
== Frequency Axis ==
 
The SRS frequency axis uses a '''logarithmic (octave-fraction) spacing''':
 
:<math>f_k = f_{\min} \times 2^{k/n}, \quad k = 0, 1, \ldots, N-1</math>
 
where n is the octave fraction denominator (3, 6, 12 or 24).
 
Number of bands:
 
:<math>N = \left\lfloor n \log_2\!\frac{f_{\max}}{f_{\min}} \right\rfloor + 1</math>
 
{| class="wikitable"
|-
|-
! Resolution !! Bands per octave !! Bands over 1–10 000 Hz
| 1/3 octave || 40
|-
|-
| 1/3 octave || 3 || 40
| 1/6 octave || 80
|-
|-
| 1/6 octave || 6 || 80
| '''1/12 octave''' (default) || '''160'''
|-
|-
| 1/12 octave || 12 || 160
| 1/24 octave || 320
|-
| 1/24 octave || 24 || 320
|}
|}


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


The Q factor and damping ratio ζ are interchangeable:
<code>Q = 1/(2ζ)  ↔  ζ = 1/(2Q)</code>


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


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


Given a 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
|}


* '''Primary SRS''' — computed on the signal segment [t_start, t_end]. Captures the shock transient itself.
== Pseudo-velocity and pseudo-displacement ==
* '''Residual SRS''' — computed on the signal segment [t_end, end_of_signal]. Captures the free vibration decay after the shock.


The residual SRS is required by:
{| class="wikitable" style="font-size:12px; font-family:monospace;"
* MIL-STD-810H Method 517.2, paragraph 2.1.3
! Quantity !! Formula !! Unit (SA in m/s²)
* ECSS-E-ST-10-03C, clause 8.4.3
|-
| Pseudo-velocity || SV(fn) = SA(fn) / (2π·fn) || m/s
|-
| Pseudo-displacement || SD(fn) = SA(fn) / (2π·fn)² || m
|}


A structure that fails on the residual SRS (after the shock has passed) is still being excited by the stored elastic energy — this can be critical for fragility assessment of sensitive electronics.
== Multi-axis combination ==


== Pseudo-Velocity and Pseudo-Displacement SRS ==
{| class="wikitable" style="font-size:12px;"
! 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)
|}


From the acceleration SRS, pseudo-velocity and pseudo-displacement are derived analytically:
----


:<math>SV(f_n) = \frac{SA(f_n)}{\omega_n} = \frac{SA(f_n)}{2\pi f_n}</math>
= Supported Input Units =


:<math>SD(f_n) = \frac{SA(f_n)}{\omega_n^2} = \frac{SA(f_n)}{(2\pi f_n)^2}</math>
{| class="wikitable" style="font-size:12px; width:100%;"
 
! Unit !! Physical quantity !! Vel/Disp SRS available
These are '''pseudo''' values because they assume harmonic motion (valid at high frequencies where the peak response occurs near resonance).
|-
 
| '''m/s², g''' || Acceleration || style="background:#e8f5e9; color:#1b5e20; text-align:center;" | ✔ Yes
Units:
|-
* SA in m/s² → SV in m/s, SD in m
| m/s, mm/s || Velocity || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No
* SA in g → SV in g/Hz (convert to m/s by multiplying by g/2π f_n)
|-
 
| m, mm, µm || Displacement || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No
== Multi-Axis Combination ==
 
=== SRSS — Square Root Sum of Squares ===
 
For a triaxial measurement with channels x, y, z:
 
:<math>SRSS(f_n) = \sqrt{SA_x(f_n)^2 + SA_y(f_n)^2 + SA_z(f_n)^2}</math>
 
Applied to the '''Maximax''' SRS only (combining signed positive/negative peaks from different axes is physically undefined).
 
Interpretation: SRSS is the Euclidean norm of the response vector, representing the worst-case resultant regardless of the direction of the applied shock.
 
=== Worst-Case Envelope ===
 
:<math>ENV(f_n) = \max\!\left(SA_x(f_n),\, SA_y(f_n),\, SA_z(f_n)\right)</math>
 
The point-by-point maximum at each frequency. Applied to all curve types (Maximax, Positive, Negative).
 
Interpretation: the governing axis may change with frequency. The envelope captures the most severe response at each frequency band independently, which is the conservative approach required by some space programmes (ECSS-E-ST-10-03C Appendix H).
 
== Pass/Fail Margin ==
 
The margin in dB at frequency f is:
 
:<math>M(f) = 20\log_{10}\!\left(\frac{L(f)}{SRS(f)}\right)</math>
 
where L(f) is the limit curve value (after scale factor) and SRS(f) is the measured SRS.
 
{| class="wikitable"
|-
|-
! Margin !! Status !! Colour
| N, kN || Force || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No
|-
|-
| M ≥ 3 dB || PASS || Green
| V, mV || Voltage || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No
|-
|-
| 0 ≤ M < 3 dB || PASS (caution) || Orange
| Pa, N/m² || Pressure || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No
|-
|-
| M < 0 dB || FAIL || Red
| rad/s, RPM || Angular velocity || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No
|}
|}
The 3 dB threshold corresponds to a factor of √2 ≈ 1.41 between the SRS and the limit — the standard minimum acceptable margin in most aerospace shock specifications.


----
----


= Built-in Limit Curves Reference =
= Glossary =


== MIL-STD-810H Method 517 Pyroshock ==
{| class="wikitable" style="font-size:12px; width:100%;"
 
! style="width:20%;" | Term !! Definition
Method 517 covers pyroshock environments generated by explosive devices (separation bolts, pyrocutters, pin pullers, etc.).
|-
 
| '''SRS''' || Shock Response Spectrum. Peak SDOF response as a function of natural frequency.
{| class="wikitable" style="width:100%"
|-
| '''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.
|-
|-
! Curve name !! Distance from source !! SRS plateau (200–10 000 Hz)
| '''Margin (dB)''' || 20·log₁₀(Limit/SRS). Positive → PASS, negative → FAIL.
|-
|-
| Near-field || < 0.3 m || 10 000 g
| '''Padding''' || Symmetric time margin added around the auto-detected shock zone.
|-
|-
| Mid-field || 0.5 – 1.5 m || 1 000 g
| '''Pyroshock''' || Shock from explosive devices: separation bolts, pyrocutters, pin pullers.
|-
|-
| Far-field || > 1.5 m || 300 g
| '''.orm''' || NVGate JSON channel metadata: sampling rate, unit, name.
|-
|-
| Gunfire || — || Mission-specific
| '''.ors''' || NVGate binary signal: float32 little-endian samples, SI units.
|-
|-
| Tall vehicles || — || Reduced far-field per §517.2.4.4
| '''NVDrive''' || OROS TCP protocol for programmatic communication with NVGate.
|}
|}
The standard SRS shape is a straight line rising at +9 dB/octave from 100 Hz to a plateau, held constant to 10 000 Hz.
The Mid-field curve is set as the '''default''' in SRS Tool, as it is the most frequently encountered specification in equipment qualification programmes.
== ECSS-E-ST-10-03C — Space Engineering Shock ==
The European Cooperation for Space Standardization (ECSS) shock standard covers equipment mounted on spacecraft structures.
Typical levels are specified at the equipment interface. The standard distinguishes:
* '''Acceptance''' level — flight article testing, 1 run per axis
* '''Qualification''' level — +3 dB relative to acceptance, 2 runs per axis
* '''Protoflight''' — qualification level, 1 run per axis (used when only one hardware unit is available)
== NASA-STD-7003A — Pyroshock Test Criteria ==
NASA standard covering payload and structure shock environments. Curves are defined for:
* Payload near-field and far-field
* Structure-borne propagation paths
== DEF-STAN 00-35 — UK Defence Standard ==
Covers equipment for land vehicles, ships and aircraft (both external and internal mounting).


----
----


= Workflow Step by Step =
= Appendix SRS Limit Curves Normative Reference =


[[File:diagram_workflow.png|thumb|600px|center|Recommended workflow from signal loading to Pass/Fail verdict.]]
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.


== Standard workflow ==


# '''Record''' the shock event in NVGate with appropriate channel labels (x, y, z for triaxial)
== Confidence level indicators ==
# Open SRS Tool → '''Main tab''' → '''Select signal folder…''' → navigate to the Measurement folder
# Channels are listed and the signal is displayed automatically
# The shock zone is '''auto-detected''' (yellow markers on the signal plot)
# Refine the shock zone if needed: drag on the plot, or go to '''Advanced tab''' → Manual override
# Set '''Q = 10''', frequency range '''1–10 000 Hz''', resolution '''1/12 octave'''
# If triaxial, go to '''Advanced tab''' → check '''SRSS''' and/or '''Worst-case envelope'''
# Click '''Compute SRS''' → wait for the progress bar to complete
# Review the SRS plot (log-log, all channels)
# Go to '''Pass / Fail tab''' → select the applicable limit curve (default: MIL-STD-810H Mid-field)
# Click '''▶  Run Pass / Fail''' → review the chart and verdict text
# If needed, export CSV and PNG for the test report
# If NVGate is running, click '''Inject into NVGate''' to add results to the project


== Multi-axis workflow (triaxial accelerometer) ==
{| 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.
|}


# Record all three axes in the same NVGate measurement, labelled x, y, z
All curves use '''Q = 10''' (damping ζ = 5 %) and acceleration units (g).
# Load the measurement — SRS Tool detects 3 channels automatically
Between breakpoints, interpolation is '''log-log linear''' (constant dB/octave slope).
# Advanced tab → enable '''SRSS''' (for resultant) and/or '''Worst-case envelope'''
# Compute SRS
# Pass/Fail → channel selector → choose:
#* '''All channels — worst case''' to see all three curves simultaneously
#* '''★ SRSS''' to test the vector resultant against the limit


== Residual SRS workflow ==
== Summary table ==


# Load signal and set shock zone
# Advanced tab → check '''Also compute residual SRS'''
# Compute SRS
# Both Primary (during shock) and Residual (after shock) curves appear on the SRS plot
# Pass/Fail can compare either zone against the limit curve


----


= Glossary =
{| class="wikitable sortable" style="width:100%; font-size:90%;"
 
! Standard !! Sector !! Tag !! Application !! Peak level !! Freq. range
{| class="wikitable" style="width:100%"
|-
| 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
|-
|-
! Term !! Definition
| Ariane 5 Equipment Bay || Space || style="background:#fce4ec; color:#880e4f;" | indicative || Satellite equipment bay, component level || 2 000 g || 100–10 000 Hz
|-
|-
| '''SRS''' || Shock Response Spectrum. Peak response of a bank of SDOF oscillators as a function of natural frequency.
| Ariane 6 || Space || style="background:#fce4ec; color:#880e4f;" | indicative || All payload positions, component level || 1 600 g || 100–10 000 Hz
|-
|-
| '''Maximax''' || max(SRS⁺, SRS⁻). The absolute maximum response, positive or negative.
| VEGA-C || Space || style="background:#fce4ec; color:#880e4f;" | indicative || Small satellite missions, component level || 1 200 g || 100–10 000 Hz
|-
|-
| '''SDOF''' || Single Degree Of Freedom. A mass–spring–damper system with one resonance frequency.
| 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
|-
|-
| '''Q factor''' || Quality factor. Q = 1 / (2ζ). Measures the sharpness of resonance. Q = 10 is standard for SRS.
| 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
|-
|-
| '''ζ (zeta)''' || Damping ratio. Fraction of critical damping. ζ = 5 % for Q = 10.
| 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
|-
|-
| '''Primary SRS''' || SRS computed on the shock transient segment [t_start, t_end].
| 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
|-
|-
| '''Residual SRS''' || SRS computed on the post-shock segment [t_end, end]. Captures ring-down.
| 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
|-
|-
| '''SRSS''' || Square Root Sum of Squares. Multi-axis resultant: √(SRS_x² + SRS_y² + SRS_z²).
| 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
|-
|-
| '''Envelope''' || Point-by-point maximum across channels: max(SRS_x, SRS_y, SRS_z) at each frequency.
| 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
|-
|-
| '''Pseudo-velocity''' || SV = SA / ωn. Derived from acceleration SRS assuming harmonic motion.
| 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
|-
|-
| '''Pseudo-displacement''' || SD = SA / ωn². Derived from acceleration SRS assuming harmonic motion.
| 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
|-
|-
| '''Margin (dB)''' || M = 20·log₁₀(Limit / SRS). Positive = PASS, negative = FAIL.
| DO-160G Cat. B 6 g || Aviation || style="background:#fff3e0; color:#e65100;" | approximate || Airborne equipment — operational flight shock || 12 g || 5–2 000 Hz
|-
|-
| '''Padding''' || Extra time margin added symmetrically to both sides of the detected shock zone.
| DO-160G Cat. C 15 g || Aviation || style="background:#fff3e0; color:#e65100;" | approximate || Avionics — bench handling during maintenance || 30 g || 5–2 000 Hz
|-
|-
| '''Pyroshock''' || Shock produced by explosive or pyrotechnic devices (separation bolts, pin pullers…).
| DO-160G Cat. D 20 g || Aviation || style="background:#fff3e0; color:#e65100;" | approximate || Airborne equipment — crash / emergency landing || 40 g || 5–2 000 Hz
|-
|-
| '''NVDrive''' || OROS TCP protocol for communicating with NVGate programmatically.
| 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
|-
|-
| '''.orm''' || NVGate JSON metadata file for one channel (sampling rate, unit, channel name…).
| 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
|-
|-
| '''.ors''' || NVGate binary signal file (raw float32 samples, SI units, little-endian).
| 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
|}
 
----
 
= Appendix A — Supported Units =
 
{| class="wikitable"
|-
|-
! Input unit !! Physical quantity !! Vel/Disp SRS available
| 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
|-
|-
| m/s², g || Acceleration || Yes
| STANAG 4370 AECTP-201 M417 || NATO || style="background:#fce4ec; color:#880e4f;" | indicative || NATO — pyroshock, severity level 3 || 2 000 g || 100–10 000 Hz
|-
|-
| m/s, mm/s || Velocity || No
| STANAG 4370 AECTP-201 M403 || NATO || style="background:#fff3e0; color:#e65100;" | approximate || NATO — mechanical shock, severity level 3 || 50 g || 5–2 000 Hz
|-
|-
| m, mm, µm || Displacement / Length || No
| 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
|-
|-
| N, kN || Force || No
| 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
|-
|-
| V, mV || Voltage || No
| 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
|-
|-
| Pa, N/m², bar || Pressure || No
| 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
|-
|-
| rad/s, RPM || Angular velocity || No
| 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
|-
|-
| rad/|| Angular acceleration || No
| 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
|}
|}


Velocity and Displacement SRS derivation is only physically meaningful when the input signal is an acceleration. For other unit types, only the acceleration SRS (in the native unit) is computed.
----
 


----
== How the SRS Tool uses these curves ==


= Appendix B — CSV Limit Curve Format =
# 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.


User-defined limit curves must be provided as plain CSV with two columns:
== Adding a custom curve ==
# Frequency in Hz
# Level in g


Rules:
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.
* At least 2 breakpoints required
* Frequency must be strictly increasing
* No header row needed (automatically detected and skipped if non-numeric)
* Separator: comma or semicolon (auto-detected)


Example:
[[Category:SRS Tool]]
<pre>
[[Category:Test Standards]]
10, 5
100, 50
2000, 50
10000, 50
</pre>


Interpolation between breakpoints is linear in log-log space (the natural space for SRS).
Extrapolation beyond the defined range uses the nearest endpoint value.


----


''Documentation generated for SRS Tool — OROS / Gemini project.''
<div style="margin-top:28px; padding-top:12px; border-top:1px solid #ddd; font-size:11px; color:#888; text-align:center;">
''Algorithm reference: D.O. Smallwood, "An Improved Recursive Formula for Calculating Shock Response Spectra", Shock and Vibration Bulletin, 1981.''
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>

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).