9,371
edits
| Line 1: | Line 1: | ||
{DISPLAYTITLE:SRS Tool — Shock Response Spectrum Analyser}} | |||
__TOC__ | __TOC__ | ||
<!-- | <!-- ── Infobox ─────────────────────────────────────────────────────── --> | ||
{| 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;" | SRS Tool | |||
{| | |||
|+ style="font- | |||
|- | |- | ||
| style="padding: | | style="padding:10px 14px;" | | ||
{| style="width:100% | {| style="width:100%;" | ||
|- | |- | ||
| style="color:# | | style="color:#555; white-space:nowrap; padding-right:8px;" | '''Developer''' | ||
| OROS / Gemini | |||
|- | |- | ||
| style="color:# | | style="color:#555;" | '''Platform''' | ||
| Windows 10 / 11 | |||
|- | |- | ||
| style="color:# | | style="color:#555;" | '''Language''' | ||
| Python 3.9+ | |||
|- | |- | ||
| style="color:# | | style="color:#555;" | '''UI''' | ||
| PySide2 · Qt 5.15 | |||
|- | |- | ||
| style="color:# | | style="color:#555;" | '''Algorithm''' | ||
| Smallwood 1981 | |||
|- | |- | ||
| style="color:# | | style="color:#555;" | '''File I/O''' | ||
| .ors / .orm (NVGate) | |||
|- | |- | ||
| style="color:# | | 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. | ||
It reads shock recordings directly from NVGate | |||
the | |||
results back into NVGate as live TCP result channels — all | |||
[[File: | [[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 | == What sets SRS Tool apart == | ||
Most SRS tools require manual import/export and | Most SRS tools require manual import/export and ship with no built-in normative database. | ||
SRS Tool is built | 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%; font-size:12px; border-collapse:collapse;" | |||
! style="width:54%; background:#f0f4f8;" | Feature | |||
! 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: | |||
! style="width: | |||
! style="width: | |||
|- | |- | ||
| '''30+ built-in | | '''30+ normative limit curves built-in''' — MIL-STD-810H, ECSS, NASA-STD, DEF-STAN, ready to use with no setup | ||
| style="background:# | | style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ Included | ||
| style="background:# | | 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:# | | style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ Included | ||
| style="background:# | | style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ One channel at a time | ||
|- | |- | ||
| '''Direct NVGate signal read''' | | '''Direct NVGate signal read''' — no DLL, no NVGate open, no export step | ||
| style="background:# | | style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ Native | ||
| style="background:# | | style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ Manual export required | ||
|- | |- | ||
| '''NVGate TCP result injection''' | | '''NVGate TCP result injection''' — log-log display, autoscaled, direct to project | ||
| style="background:# | | style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ Native | ||
| style="background:# | | style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ Not available | ||
|- | |- | ||
| '''Automatic shock zone detection''' | | '''Automatic shock zone detection''' — envelope algorithm, runs on load | ||
| style="background:# | | style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ Automatic | ||
| style="background:# | | 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:# | | style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ One click | ||
| style="background:# | | 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:# | | style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ Included | ||
| style="background:# | | 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:# | | style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ Included | ||
| style="background:# | | style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ Rarely available | ||
|- | |- | ||
| No | | No dongle, no subscription, no cloud | ||
| style="background:# | | style="background:#e8f5e9; color:#1b5e20; text-align:center; font-weight:bold;" | ✔ Free | ||
| style="background:# | | style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ Licence required | ||
|} | |} | ||
| Line 95: | Line 94: | ||
= Quick Start = | = Quick Start = | ||
<div style=" | <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 | # '''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''' | # 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 !! | ! Component !! Minimum version !! Notes | ||
|- | |- | ||
| Python || 3.9 | | Python || 3.9 || 3.12 not yet tested | ||
|- | |- | ||
| PySide2 || 5.15 | | PySide2 || 5.15 || Qt5 Python binding | ||
|- | |- | ||
| NumPy || | | NumPy || 1.22 || Vectorised SRS engine | ||
|- | |- | ||
| Matplotlib || | | Matplotlib || 3.5 || Embedded plot canvases | ||
|- | |- | ||
| | | pywin32 || any || Windows only — for NVGate injection | ||
|- | |- | ||
| pynvdrive || OROS Toolkit NVdrive || Required for NVGate injection | | pynvdrive || OROS Toolkit NVdrive || Required only for NVGate injection | ||
|} | |} | ||
| Line 134: | Line 134: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<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=" | |||
</div> | </div> | ||
| Line 144: | Line 142: | ||
= User Interface = | = User Interface = | ||
The window | The window is split into two zones: | ||
* '''Left panel''' (340 px) — | * '''Left panel''' (340 px fixed) — three tabs: [[#Main Tab|Main]], [[#Advanced Tab|Advanced]], [[#Pass / Fail Tab|Pass / Fail]] | ||
* '''Right panel''' (expandable) — signal | * '''Right panel''' (expandable) — signal + SRS plots when on Main/Advanced; Pass/Fail chart when on Pass/Fail tab | ||
The '''status bar''' at the bottom | The '''status bar''' at the bottom tracks every operation. A '''progress bar''' appears during computation. | ||
A '''progress bar''' appears during | |||
---- | ---- | ||
| Line 156: | Line 153: | ||
= Main Tab = | = Main Tab = | ||
[[File:04_left_panel_main.png| | [[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 | A coloured dot in the '''NVGate''' box shows connection status, polled every 3 seconds automatically: | ||
{| style="font-size:12px; border-collapse:collapse; margin:6px 0;" | |||
|- | |||
| style="padding:2px 8px;" | 🟢 '''Connected''' || NVGate reachable. Injection available. | |||
|- | |||
| style="padding:2px 8px;" | 🔴 '''Disconnected''' || NVGate not running. SRS computation still fully functional. | |||
|} | |||
== Signal == | == Signal == | ||
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. | |||
== Channels == | == Channels == | ||
One checkbox per recorded channel | One checkbox per recorded channel, showing 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> | |||
Channel labels (x, y, z…) come from the <code>Name</code> field set by the operator in NVGate at recording time. | |||
Uncheck a channel to exclude it. '''↺ Reload channels''' re-reads files from disk after a new recording. | |||
== Calculation | == Calculation parameters == | ||
{| class="wikitable" style="font-size:12px;" | {| class="wikitable" style="font-size:12px;" | ||
! Parameter !! Description !! | ! Parameter !! Description !! Recommended default | ||
|- | |- | ||
| '''Frequency range''' || f_min | | '''Frequency range''' || f_min to f_max of the SRS output || 1 Hz → 10 000 Hz | ||
|- | |- | ||
| '''Q | | '''Q / Damping''' || Q factor or damping ratio ζ (linked: Q = 1/2ζ) || Q = 10 (ζ = 5 %) | ||
|- | |- | ||
| '''Resolution''' || Octave | | '''Resolution''' || Octave subdivision: 1/3, 1/6, 1/12, 1/24 oct || 1/12 octave | ||
|} | |} | ||
<div style=" | <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). | |||
</div> | </div> | ||
| Line 209: | Line 200: | ||
; Type | ; Type | ||
: '''Acc''' — Acceleration SRS | : '''Acc''' — Acceleration SRS. Always available. '''Vel''' — Pseudo-velocity SRS. '''Disp''' — Pseudo-displacement SRS. (Vel and Disp require an acceleration input.) | ||
; Curve | ; Curve | ||
: '''Maximax''' — max(positive, |negative|). The standard | : '''Maximax''' — max(positive, |negative|). The standard curve required by most norms. '''Positive''' — max tensile response. '''Negative''' — max compressive response. | ||
== Signal and SRS plots == | == Signal and SRS plots == | ||
[[File:05_signal_plot.png| | [[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|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.]] | |||
---- | ---- | ||
| Line 233: | Line 215: | ||
= Advanced Tab = | = Advanced Tab = | ||
[[File:09_left_panel_adv.png| | [[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=" | <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. | |||
</div> | </div> | ||
=== Auto-detection | === 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 | ||
# | # Trigger threshold = ''Threshold %'' × peak envelope | ||
# | # Zone = first to last sample above threshold | ||
# Expand by ''Padding'' | # 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 | | '''Threshold (% of peak)''' || Lower → wider zone; higher → core impact only || 5 % | ||
|- | |- | ||
| '''Padding (ms)''' || | | '''Padding (ms)''' || Symmetric margin added on both sides of detected zone || 20 ms | ||
|} | |} | ||
'''Padding | '''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''' | 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 === | ||
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 == | == Advanced Preprocessing == | ||
{| 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 | | '''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 | | '''Noise floor''' (N ms) || Zeroes the first N ms || Pre-trigger noise before impact | ||
|} | |} | ||
== Multi-axis Combination == | == Multi-axis Combination == | ||
Enabled automatically when ≥ 2 acceleration channels are loaded. Check one or both options before computing: | |||
; SRSS — √( | {| class="wikitable" style="font-size:12px;" | ||
! 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 | |||
|} | |||
---- | ---- | ||
| Line 298: | Line 276: | ||
= Pass / Fail Tab = | = Pass / Fail Tab = | ||
[[File:07_left_panel_pf.png| | [[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 Pass/Fail tab compares computed SRS against any normative or user-defined limit curve. | ||
== | == Built-in limit curve library == | ||
<div style=" | <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> | </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 | ★ MIL-STD-810H Mid-field is the default — the most common qualification specification. | ||
=== User-defined CSV === | === User-defined CSV === | ||
Select '''← User-defined (CSV)''' | Select '''← User-defined (CSV)''', load a two-column file (Hz, g). Interpolation is log-log linear between breakpoints. Example: | ||
<pre>10, 5 100, 50 2000, 50 10000, 50</pre> | |||
<pre>10, 5 | |||
100, 50 | |||
2000, 50 | |||
10000, 50</pre> | |||
=== Scale factor (dB) === | === Scale factor (dB) === | ||
Scales the limit curve before comparison: L_scaled(f) = L_nominal(f) × 10^(dB/20) | |||
{| class="wikitable" style="font-size:12px;" | {| class="wikitable" style="font-size:12px;" | ||
! dB | ! dB || Multiplier || Typical use | ||
|- | |- | ||
| +6 | | +6 || ×2.00 || Conservative / tighter requirement | ||
|- | |- | ||
| +3 | | +3 || ×1.41 || Standard qualification margin check | ||
|- | |- | ||
| | | 0 || ×1.00 || Nominal — no change | ||
|- | |- | ||
| −6 | | −6 || ×0.50 || Relaxed limit | ||
|} | |} | ||
== | == Pass/Fail results == | ||
[[File: | [[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.]] | ||
=== 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) ) | |||
Margin | |||
{| class="wikitable" style="font-size:12px;" | {| class="wikitable" style="font-size:12px;" | ||
! | ! Colour !! Condition !! Meaning | ||
|- | |- | ||
| style="background:# | | style="background:#e8f5e9; color:#1b5e20;" | Green || M ≥ 3 dB || Well within specification | ||
|- | |- | ||
| style="background:# | | style="background:#fff8e1; color:#7a5200;" | Orange || 0 ≤ M < 3 dB || Caution — low margin | ||
|- | |- | ||
| style="background:# | | style="background:#ffebee; color:#b71c1c;" | Red || M < 0 dB || '''FAIL''' — exceedance | ||
|} | |} | ||
=== Interactive cursor === | === 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. | |||
The readout border turns green | |||
=== Verdict text === | === 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: | ||
<pre>PASS — Maximax SRS | <pre>PASS — Maximax SRS | ||
| Line 415: | Line 370: | ||
== Export == | == Export == | ||
; Export CSV… | {| class="wikitable" style="font-size:12px;" | ||
! 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. | |||
|} | |||
---- | ---- | ||
| Line 425: | Line 382: | ||
= NVGate Integration = | = NVGate Integration = | ||
== Reading | == Reading signal files == | ||
SRS Tool reads NVGate data | SRS Tool reads NVGate data with NVGate closed, using no additional DLL. File layout: | ||
File layout | |||
<pre>Measurement8/ | <pre>Measurement8/ | ||
Record_1_1/ | Record_1_1/ | ||
Channel_1_0_XXXXXXXX/ | Channel_1_0_XXXXXXXX/ | ||
Channel_1.orm ← JSON | Channel_1.orm ← JSON: sampling rate, unit, channel Name | ||
Part_0.ors ← | Part_0.ors ← binary: float32 little-endian, SI units | ||
Channel_2_0_XXXXXXXX/ | Channel_2_0_XXXXXXXX/ …</pre> | ||
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. | |||
== Injecting results == | == 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 | * X and Y axes: log scale (set automatically) | ||
* Y axis autoscaled | * Y axis: autoscaled | ||
* All curves displayed in window | * 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> | ||
---- | ---- | ||
= | = Calculation Reference = | ||
== Shock Response Spectrum | == Shock Response Spectrum == | ||
The SRS 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): | ||
<code>z''(t) + 2ζωₙz'(t) + ωₙ²z(t) = −x''(t)</code> | |||
{| class="wikitable" style="font-size:12px;" | {| class="wikitable" style="font-size:12px;" | ||
! Curve !! Definition !! | ! Curve !! Definition !! Standard? | ||
|- | |- | ||
| Positive SRS || max | | Positive SRS || max<sub>t</sub>[ ωₙ² z(t) ] || Supplementary | ||
|- | |- | ||
| Negative SRS || max | | Negative SRS || max<sub>t</sub>[ −ωₙ²z(t) ] || Supplementary | ||
|- | |- | ||
| Maximax SRS || max(Positive, Negative) || ''' | | '''Maximax SRS''' || max(Positive, Negative) || '''Required by most norms''' | ||
|} | |} | ||
== Smallwood Recursive | == 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: | |||
{| style="font-size:12px; font-family:monospace; border-collapse:collapse; margin:8px 0;" | |||
|- | |||
| style="padding:2px 10px;" | E = exp(−ζωₙΔt) K = ωd·Δt (ωd = ωₙ√(1−ζ²)) | |||
|- | |||
| style="padding:2px 10px;" | b₀ = 1 − E·sin(K)/K b₁ = 2(E·sin(K)/K − E·cos(K)) b₂ = E² − E·sin(K)/K | |||
| b₀ = 1 − E·sin(K)/K | |||
|- | |- | ||
| | | style="padding:2px 10px;" | a₁ = 2E·cos(K) a₂ = −E² | ||
| a₁ = | |||
|- | |- | ||
| | | 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] | ||
| | |||
|} | |} | ||
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)''' | |||
{| class="wikitable" style="font-size:12px;" | {| class="wikitable" style="font-size:12px;" | ||
! Resolution !! Bands | ! Resolution !! Bands 1–10 000 Hz | ||
|- | |- | ||
| 1/3 octave | | 1/3 octave || 40 | ||
|- | |- | ||
| 1/6 octave | | 1/6 octave || 80 | ||
|- | |- | ||
| '''1/12 octave''' | | '''1/12 octave''' (default) || '''160''' | ||
|- | |- | ||
| 1/24 octave | | 1/24 octave || 320 | ||
|} | |} | ||
== | == Q factor and damping == | ||
<code>Q = 1/(2ζ) ↔ ζ = 1/(2Q)</code> | |||
{| class="wikitable" style="font-size:12px;" | {| class="wikitable" style="font-size:12px;" | ||
! Q | ! Q !! ζ !! Use | ||
|- | |- | ||
| '''10''' || '''5 %''' || ''' | | '''10''' || '''5 %''' || '''Aerospace standard — MIL-STD-810, ECSS, NASA''' | ||
|- | |- | ||
| 50 || 1 % || | | 50 || 1 % || Lightly damped structures | ||
|- | |- | ||
| 5 || 10 % || | | 5 || 10 % || Rubber-mounted, heavily damped | ||
|} | |} | ||
== Primary and Residual SRS == | == Primary and Residual SRS == | ||
{| class="wikitable" style="font-size:12px;" | {| class="wikitable" style="font-size:12px;" | ||
! Zone !! Signal segment !! | ! Zone !! Signal segment !! Required by | ||
|- | |- | ||
| '''Primary | | '''Primary''' || [t_start → t_end] — the shock transient || All norms | ||
|- | |- | ||
| '''Residual | | '''Residual''' || [t_end → end] — free vibration decay || MIL-STD-810H §517, ECSS §8.4.3 | ||
|} | |} | ||
== Pseudo-velocity and pseudo-displacement == | |||
== Pseudo- | |||
{| class="wikitable" style="font-size:12px; font-family:monospace;" | {| class="wikitable" style="font-size:12px; font-family:monospace;" | ||
! Quantity !! Formula !! Unit ( | ! Quantity !! Formula !! Unit (SA in m/s²) | ||
|- | |- | ||
| Pseudo- | | Pseudo-velocity || SV(fn) = SA(fn) / (2π·fn) || m/s | ||
|- | |- | ||
| Pseudo- | | Pseudo-displacement || SD(fn) = SA(fn) / (2π·fn)² || m | ||
|} | |} | ||
== Multi- | == Multi-axis combination == | ||
== | {| 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) | |||
|} | |||
---- | ---- | ||
= Supported Units = | = Supported Input Units = | ||
{| class="wikitable" style="font-size:12px;" | {| class="wikitable" style="font-size:12px; width:100%;" | ||
! | ! Unit !! Physical quantity !! Vel/Disp SRS available | ||
|- | |- | ||
| m/s², g || Acceleration || style="background:# | | '''m/s², g''' || Acceleration || style="background:#e8f5e9; color:#1b5e20; text-align:center;" | ✔ Yes | ||
|- | |- | ||
| m/s, mm/s || Velocity || style="background:# | | m/s, mm/s || Velocity || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No | ||
|- | |- | ||
| m, mm, µm || Displacement || style="background:# | | m, mm, µm || Displacement || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No | ||
|- | |- | ||
| N, kN || Force || style="background:# | | N, kN || Force || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No | ||
|- | |- | ||
| V, mV || Voltage || style="background:# | | V, mV || Voltage || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No | ||
|- | |- | ||
| Pa, N/m² | | Pa, N/m² || Pressure || style="background:#ffebee; color:#b71c1c; text-align:center;" | ✘ No | ||
|- | |- | ||
| rad/s, RPM || Angular velocity || style="background:# | | 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: | ! style="width:20%;" | Term !! Definition | ||
|- | |- | ||
| '''SRS''' || Shock Response Spectrum | | '''SRS''' || Shock Response Spectrum. Peak SDOF response as a function of natural frequency. | ||
|- | |- | ||
| '''Maximax''' || max(Positive | | '''Maximax''' || max(Positive, |Negative|). The absolute peak response — required by most norms. | ||
|- | |- | ||
| '''SDOF''' || Single Degree Of Freedom | | '''SDOF''' || Single Degree Of Freedom. A mass–spring–damper system with one resonant frequency. | ||
|- | |- | ||
| '''Q factor''' || Quality factor. Q = 1/(2ζ) | | '''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 | | '''Primary SRS''' || SRS over the shock transient [t_start, t_end]. | ||
|- | |- | ||
| '''Residual SRS''' || SRS | | '''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 | | '''Envelope''' || Point-by-point max across channels at each frequency. | ||
|- | |- | ||
| '''Margin (dB)''' || | | '''Margin (dB)''' || 20·log₁₀(Limit/SRS). Positive → PASS, negative → FAIL. | ||
|- | |- | ||
| '''Padding''' || | | '''Padding''' || Symmetric time margin added around the auto-detected shock zone. | ||
|- | |- | ||
| '''Pyroshock''' || Shock from explosive devices | | '''Pyroshock''' || Shock from explosive devices: separation bolts, pyrocutters, pin pullers. | ||
|- | |- | ||
| '''.orm''' || NVGate JSON metadata | | '''.orm''' || NVGate JSON channel metadata: sampling rate, unit, name. | ||
|- | |- | ||
| '''.ors''' || NVGate binary signal | | '''.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=" | <div style="margin-top:28px; padding-top:12px; border-top:1px solid #ddd; font-size:11px; color:#888; text-align:center;"> | ||
Algorithm | Algorithm: D.O. Smallwood, ''An Improved Recursive Formula for Calculating Shock Response Spectra'', Shock and Vibration Bulletin, 1981. · | ||
Standards: MIL-STD-810H (2019) | 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> | ||