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

Jump to navigation Jump to search
no edit summary
Line 1: Line 1:
{{DISPLAYTITLE:SRS Tool — Shock Response Spectrum Analyser}}
{DISPLAYTITLE:SRS Tool — Shock Response Spectrum Analyser}}
__TOC__
__TOC__


<!-- ═══════════════════════════════════════════════════════════════════
<!-- ── Infobox ─────────────────────────────────────────────────────── -->
    INFOBOX  (top-right, like Wikipedia software articles)
{| style="float:right; margin:0 0 20px 28px; width:270px; border:1px solid #c8d8e8; border-collapse:collapse; background:#f5f9fc; font-size:12px; line-height:1.7;"
    ═══════════════════════════════════════════════════════════════════ -->
|+ style="background:#1565C0; color:#ffffff; font-size:13px; font-weight:bold; padding:8px 12px; letter-spacing:0.5px; text-align:left;" | &nbsp;SRS Tool
{| 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="padding:10px 14px;" |
{| style="width:100%; font-size:11px;"
{| style="width:100%;"
|-
|-
| style="color:#888; width:40%;" | '''Developer''' || OROS / Gemini
| style="color:#555; white-space:nowrap; padding-right:8px;" | '''Developer'''
| OROS / Gemini
|-
|-
| style="color:#888;" | '''Platform''' || Windows 10 / 11
| style="color:#555;" | '''Platform'''
| Windows 10 / 11
|-
|-
| style="color:#888;" | '''Language''' || Python 3.9+
| style="color:#555;" | '''Language'''
| Python 3.9+
|-
|-
| style="color:#888;" | '''UI framework''' || PySide2 (Qt 5.15)
| style="color:#555;" | '''UI'''
| PySide2 · Qt 5.15
|-
|-
| style="color:#888;" | '''Algorithm''' || Smallwood 1981
| style="color:#555;" | '''Algorithm'''
| Smallwood 1981
|-
|-
| style="color:#888;" | '''NVGate I/O''' || Native (.ors / .orm)
| style="color:#555;" | '''File I/O'''
| .ors / .orm (NVGate)
|-
|-
| style="color:#888;" | '''Standards''' || 30+ built-in curves
| style="color:#555;" | '''Standards'''
| 30+ built-in curves
|-
| style="color:#555;" | '''Licence'''
| Free / open-source
|}
|}
|}
|}
Line 29: Line 37:
= SRS Tool — Shock Response Spectrum Analyser =
= SRS Tool — Shock Response Spectrum Analyser =


'''SRS Tool''' is a professional [[Shock Response Spectrum]] (SRS) analysis application
'''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.
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).]]
[[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.]]


----
----


== What makes SRS Tool stand out ==
== What sets SRS Tool apart ==


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


<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;" | 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)
| '''Direct NVGate signal read''' no DLL, no NVGate open, no export step
| 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;" | ✘ Manual export required
|-
|-
| '''NVGate TCP result injection''' (log-log, autoscaled)
| '''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;" | ✘ Not available
| style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ Not available
|-
|-
| '''Automatic shock zone detection''' (envelope algorithm)
| '''Automatic shock zone detection''' envelope algorithm, runs on load
| style="background:#1e3d2a; color:#7ecf9a; text-align:center; font-weight:bold;" | ✔ Included
| style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ Automatic
| style="background:#3a3a1e; color:#cfcf7e; text-align:center;" | ~ Optional / extra
| style="background:#fff8e1; color:#7a5200; text-align:center;" | ~ Manual only
|-
|-
| '''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
| '''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;" | ✘ Paid add-on
| style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ Paid add-on
|-
|-
| '''Interactive dB cursor''' on Pass/Fail chart
| '''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;" | ✔ 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
| No dongle, no subscription, no cloud
| style="background:#1e3d2a; color:#7ecf9a; text-align:center; font-weight:bold;" | ✔ Free
| style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ Free
| style="background:#3a1e1e; color:#cf7e7e; text-align:center;" | ✘ Licence required
| style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ Licence required
|}
|}


Line 95: Line 94:
= 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 112: Line 112:


{| class="wikitable" style="font-size:12px;"
{| class="wikitable" style="font-size:12px;"
! Component !! Version !! Notes
! Component !! Minimum version !! Notes
|-
|-
| Python || 3.9 – 3.11 || 3.12 not yet tested
| Python || 3.9 || 3.12 not yet tested
|-
|-
| PySide2 || 5.15.x || Qt5 binding
| PySide2 || 5.15 || Qt5 Python binding
|-
|-
| NumPy || 1.22 || Vectorised SRS engine
| NumPy || 1.22 || Vectorised SRS engine
|-
|-
| Matplotlib || 3.5 || Embedded canvases
| Matplotlib || 3.5 || Embedded plot canvases
|-
|-
| Pillow || ≥ 9.0 || Optional only for screenshot export
| pywin32 || any || Windows only — for NVGate injection
|-
|-
| pynvdrive || OROS Toolkit NVdrive || Required for NVGate injection only
| pynvdrive || OROS Toolkit NVdrive || Required only for NVGate injection
|}
|}


Line 134: Line 134:
</syntaxhighlight>
</syntaxhighlight>


Or use the provided <code>launch_srs.bat</code> shortcut.
<div style="border-left:4px solid #f59f00; background:#fffbf0; padding:9px 14px; margin:10px 0; font-size:12px; border-radius:0 3px 3px 0;">
 
'''Note:''' NVGate does not need to be running to load signals or compute SRS. It is only required for '''Inject into NVGate'''.
<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>
</div>


Line 144: Line 142:
= User Interface =
= User Interface =


The window has two zones:
The window is split into two zones:


* '''Left panel''' (340 px) — tabbed controls: [[#Main Tab|Main]], [[#Advanced Tab|Advanced]], [[#Pass / Fail Tab|Pass / Fail]]
* '''Left panel''' (340 px fixed) — three tabs: [[#Main Tab|Main]], [[#Advanced Tab|Advanced]], [[#Pass / Fail Tab|Pass / Fail]]
* '''Right panel''' (expandable) — signal plot + SRS plot, or Pass/Fail chart depending on active tab
* '''Right panel''' (expandable) — signal + SRS plots when on Main/Advanced; Pass/Fail chart when on Pass/Fail tab


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


----
----
Line 156: Line 153:
= 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 ==
== NVGate connection indicator ==


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


* 🟢 '''Connected''' NVGate is reachable via pynvdrive. Injection is available.
{| style="font-size:12px; border-collapse:collapse; margin:6px 0;"
* 🔴 '''Disconnected''' NVGate is not running, or pynvdrive is not installed. SRS computation still works normally.
|-
| style="padding:2px 8px;" | 🟢 '''Connected''' || NVGate reachable. Injection available.
|-
| style="padding:2px 8px;" | 🔴 '''Disconnected''' || NVGate not running. SRS computation still fully functional.
|}


== 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 subfolder — 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,
set by the operator at recording time. If empty, falls back to the hardware source name ("Input 1", "Input 2"…).


Uncheck a channel to exclude it from the computation.
<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>


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


== Calculation Parameters ==
== 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 200:


; 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.]]
 
The right panel shows two stacked plots:


* '''Top — Time signal:''' all loaded channels overlaid. The yellow dashed vertical lines delimit the shock zone. Drag horizontally on the plot to redefine it. The zone can also be set precisely in the [[#Shock Zone|Advanced tab]].
[[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.]]
* '''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.


----
----
Line 233: Line 215:
= 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 276:
= 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:13_passfail_chart_only.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 370:
== 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.
|}


----
----
Line 425: Line 382:
= NVGate Integration =
= NVGate Integration =


== Reading signals ==
== Reading signal files ==


SRS Tool reads NVGate data '''without NVGate open''' and without any additional DLL.
SRS Tool reads NVGate data with NVGate closed, using no additional DLL. File layout:
 
File layout inside a Measurement folder:


<pre>Measurement8/
<pre>Measurement8/
  Record_1.oxf
   Record_1_1/
   Record_1_1/
     Channel_1_0_XXXXXXXX/
     Channel_1_0_XXXXXXXX/
       Channel_1.orm    ← JSON metadata (fs, unit, Name…)
       Channel_1.orm    ← JSON: sampling rate, unit, channel Name
       Part_0.ors      ← raw float32 little-endian samples (SI)
       Part_0.ors      ← binary: float32 little-endian, SI units
     Channel_2_0_XXXXXXXX/
     Channel_2_0_XXXXXXXX/ …</pre>
      …</pre>


The <code>.ors</code> file contains 32-bit IEEE 754 float samples in SI units at the native sampling rate.
Channel label comes from the <code>Name</code> field in <code>.orm</code> (set in NVGate at recording time). Falls back to <code>SourceName</code> ("Input 1", "Input 2"…) if empty.
The channel label is read from the <code>Name</code> field of <code>.orm</code> (set by the operator in NVGate).


== Injecting results ==
== Injecting results into NVGate ==


Results are sent to NVGate via the NVDrive TCP protocol as '''NVD REAL SPECTRUM''' channels:
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:


* Each SRS curve one TCP result channel in NVGate
* All SRS curves separate TCP result channels
* X and Y axes automatically set to log scale
* X and Y axes: log scale (set automatically)
* Y axis autoscaled
* Y axis: autoscaled
* All curves displayed in window <code>SRS_Results</code> of <code>Layout1</code>
* All curves displayed in window '''SRS_Results''' of '''Layout1'''


NVGate channel naming:
NVGate channel naming convention:
<pre>SRS Acc Shock AbsMax: x
<pre>SRS Acc Shock AbsMax: x
SRS Acc Shock AbsMax: y
SRS Acc Shock AbsMax: y
SRS Acc Shock AbsMax: z
SRS Acc Shock AbsMax: z</pre>
SRS Acc Shock AbsMax: SRSS  (x + y + z)</pre>


----
----


= Mathematical Background =
= Calculation Reference =


== Shock Response Spectrum — Definition ==
== Shock Response Spectrum ==


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


For a SDOF oscillator at frequency f_n with damping ratio ζ:
<code>z''(t) + 2ζωₙz'(t) + ωₙ²z(t) = −x''(t)</code>
 
:<code>z''(t) + 2ζωn·z'(t) + ωn²·z(t) = −x''(t)</code>
 
where x''(t) is the base acceleration and z(t) the relative displacement.
 
The three SRS values at frequency f_n:


{| 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;"
{| class="wikitable" style="font-size:12px;"
! Zone !! Signal segment !! Physical meaning
! Zone !! Signal segment !! Required by
|-
|-
| '''Primary SRS''' || [t_start, t_end] || Response during the shock transient
| '''Primary''' || [t_start t_end] the shock transient || All norms
|-
|-
| '''Residual SRS''' || [t_end, end] || Free vibration decay after the shock
| '''Residual''' || [t_end end] — free vibration decay || MIL-STD-810H §517, ECSS §8.4.3
|}
|}


The residual SRS is mandatory for MIL-STD-810H Method 517 and ECSS-E-ST-10-03C fragility assessments.
== Pseudo-velocity and pseudo-displacement ==
A structure failing on residual SRS continues to be excited by stored elastic energy after the shock passes.
 
== Pseudo-Velocity and Pseudo-Displacement SRS ==
 
Derived analytically from the acceleration SRS (valid under the harmonic motion assumption):


{| class="wikitable" style="font-size:12px; font-family:monospace;"
{| class="wikitable" style="font-size:12px; font-family:monospace;"
! Quantity !! Formula !! Unit (if SA in m/s²)
! Quantity !! Formula !! Unit (SA in m/s²)
|-
|-
| Pseudo-Velocity || SV(fn) = SA(fn) / (2π·fn) || m/s
| Pseudo-velocity || SV(fn) = SA(fn) / (2π·fn) || m/s
|-
|-
| Pseudo-Displacement || SD(fn) = SA(fn) / (2π·fn)² || m
| Pseudo-displacement || SD(fn) = SA(fn) / (2π·fn)² || m
|}
|}


== Multi-Axis Combination ==
== Multi-axis combination ==


=== SRSS — Square Root Sum of Squares ===
{| class="wikitable" style="font-size:12px;"
 
! Method !! Formula !! Applied to !! Use case
For triaxial channels x, y, z — applied to Maximax only:
|-
 
| '''SRSS''' || √(SA_x² + SA_y² + SA_z²) || Maximax only || Euclidean resultant, triaxial sensor
:<code>SRSS(fn) = √( SA_x(fn)² + SA_y(fn)² + SA_z(fn)² )</code>
|-
 
| '''Worst-case Envelope''' || max(SA_x, SA_y, SA_z) at each f || All types || Space programmes (ECSS App. H)
Represents the Euclidean norm of the response vector — worst-case resultant regardless of shock direction.
|}
 
=== Worst-Case Envelope ===
 
:<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).
Required by ECSS-E-ST-10-03C Appendix H when the governing axis can change with frequency.
 
== Pass/Fail Margin ==
 
:<code>M(f) = 20 · log10( Limit(f) / SRS(f) )</code>
 
The 3 dB threshold (factor √2 ≈ 1.41) is the standard minimum acceptable margin in most aerospace shock specifications.


----
----


= Supported Units =
= Supported Input Units =


{| class="wikitable" style="font-size:12px;"
{| class="wikitable" style="font-size:12px; width:100%;"
! Input unit !! Physical quantity !! Vel / Disp SRS
! Unit !! Physical quantity !! Vel/Disp SRS available
|-
|-
| m/s², g || Acceleration || style="background:#1e3d2a; color:#7ecf9a; text-align:center;" | ✔ Available
| '''m/s², g''' || Acceleration || style="background:#e8f5e9; color:#1b5e20; text-align:center;" | ✔ Yes
|-
|-
| m/s, mm/s || Velocity || style="background:#3a1e1e; color:#cf7e7e; text-align:center;" | ✘ No
| m/s, mm/s || Velocity || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No
|-
|-
| m, mm, µm || Displacement || style="background:#3a1e1e; color:#cf7e7e; text-align:center;" | ✘ No
| m, mm, µm || Displacement || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No
|-
|-
| N, kN || Force || style="background:#3a1e1e; color:#cf7e7e; text-align:center;" | ✘ No
| N, kN || Force || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No
|-
|-
| V, mV || Voltage || style="background:#3a1e1e; color:#cf7e7e; text-align:center;" | ✘ No
| V, mV || Voltage || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No
|-
|-
| Pa, N/m², bar || Pressure || style="background:#3a1e1e; color:#cf7e7e; text-align:center;" | ✘ No
| Pa, N/m² || Pressure || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No
|-
|-
| rad/s, RPM || Angular velocity || style="background:#3a1e1e; color:#cf7e7e; text-align:center;" | ✘ No
| rad/s, RPM || Angular velocity || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No
|}
|}


Line 624: Line 533:


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


<div style="font-size:10px; color:#666; text-align:center; margin-top:24px; border-top:1px solid #444; padding-top:10px;">
<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: MIL-STD-810H (2019), ECSS-E-ST-10-03C (2012), NASA-STD-7003A (2011), DEF-STAN 00-35 Part 3 (2021).
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>

Navigation menu