Difference between revisions of "TL Tool - Sound Transmission Loss Measurement"

From OROS Wiki
Jump to navigation Jump to search
(New page: complete documentation for TL Tool (Sound Transmission Loss measurement, ASTM E2611))
 
(Replace chart placeholders with real GUI screenshots (3 captures))
 
(17 intermediate revisions by 2 users not shown)
Line 1: Line 1:
[[category:WikiOros]]
[[category:WikiOros]]
[[category:Software]]
[[category:Software]]
[[category:Acoustics]]
[[category:Acoustics]]
{{#seo:
{{#seo:
|title=TL Tool — Sound Transmission Loss Measurement Software | OROS
|title=TL Tool - Sound Transmission Loss Measurement Software | OROS
|keywords=sound transmission loss, TL, ASTM E2611, impedance tube, 4 microphone, transfer matrix, absorption coefficient, NVGate, acoustic measurement
|keywords=sound transmission loss, TL, ASTM E2611, impedance tube, 4 microphone, transfer matrix, absorption coefficient, NVGate
|description=Python software for measuring Sound Transmission Loss (TL) and absorption coefficient using the 4-microphone impedance tube method (ASTM E2611 / ISO 10534-2). Integrates with OROS NVGate for live acquisition and result injection.
|description=OROS standalone application for measuring Sound Transmission Loss and absorption coefficient using the 4-microphone impedance tube method (ASTM E2611). Plug-and-play .exe, integrated with NVGate.
}}
}}


__TOC__
__TOC__


= TL Tool — Sound Transmission Loss Measurement =
<div style="background:linear-gradient(120deg,#001F5B 0%,#0055A5 100%);color:white;padding:22px 28px;border-radius:10px;margin-bottom:18px;">
<span style="font-size:1.5em;font-weight:bold;">TL Tool &mdash; Sound Transmission Loss</span><br/><br/>
</div>


The '''TL Tool''' is a Python application developed by OROS for measuring '''Sound Transmission Loss (TL)''' and the '''sound absorption coefficient (α)''' using an impedance tube with 2 or 4 microphones.
{| class="wikitable" style="width:100%;border-collapse:collapse;"
 
! style="background:#0055A5;color:white;width:22%;" | Parameter
It integrates natively with '''[[NVGate]]''' via the NVDrive TCP protocol for live acquisition and automatic injection of results into NVGate windows.
! style="background:#0055A5;color:white;" | Value
 
== Standards ==
 
{| class="wikitable" style="width:60%;"
! Standard !! Method !! Application
|-
|-
| '''ASTM E2611''' || Transfer Matrix — 4 microphones || Sound Transmission Loss
| '''Delivery''' || [https://partnerzone.digigram.com/s/QjZaMrTZCrDQTJa download here]  version from 22/05/2026 - Beta version - download at your own risk !
|-
|-
| '''ISO 10534-2''' / ASTM E1050 || Two-microphone || Absorption coefficient α
| '''Measurement methods''' || 4-mic transfer matrix (ASTM E2611) &bull; 2-mic standing wave (ISO 10534-2)
|-
|-
| '''ISO 9613-1''' || Speed of sound formula || Air properties (c, ρ)
| '''Results''' || TL [dB], absorption &alpha;, ISO 11654 class (&alpha;_w, NRC, SAA)
|-
|-
| '''ISO 11654''' || Octave averaging, α_w class || Weighted absorption rating
| '''Octave resolution''' || 1/3 &bull; 1/6 &bull; 1/12 &bull; 1/24 octave
|}
 
== Architecture ==
 
The software is organized into 5 modules:
 
{| class="wikitable" style="width:100%;"
! File !! Role
|-
| <code>tl_tool.py</code> || Main application — tkinter GUI + matplotlib (~5000 lines)
|-
| <code>tl_physics.py</code> || Pure physics engine — wave decomposition, ASTM E2611, DBM model
|-
| <code>tl_nvgate.py</code> || NVDrive/NVGate interface — spectrum reading, result injection
|-
|-
| <code>tl_acquisition.py</code> || NVGate acquisition — channel config, FFT, run/stop, FRF
| '''NVGate integration''' || Live acquisition &bull; automatic result injection
|-
|-
| <code>config_tl.json</code> || Persistent configuration (microphone positions, tube geometry, temperature…)
| '''Export''' || CSV (frequency, TL, &alpha;)
|}
|}


=== Dependency Stack ===
== Standards ==
 
<pre>
tl_tool.py  (GUI)
    ├── tl_physics.py      (physics: pure numpy)
    ├── tl_nvgate.py      (NVDrive TCP injection)
    ├── tl_acquisition.py  (NVGate live acquisition)
    └── pynvdrive          (OROS TCP library — NVGate V18+)
</pre>
 
== Installation ==


=== Requirements ===
<div style="display:flex;gap:12px;flex-wrap:wrap;margin:14px 0;">
<div style="flex:1;min-width:180px;border:2px solid #0055A5;border-radius:8px;padding:14px;">
<div style="background:#0055A5;color:white;font-weight:bold;padding:4px 10px;border-radius:4px;margin-bottom:8px;">ASTM E2611</div>
Transfer matrix method &mdash; 4-microphone impedance tube.<br/>
<small>Recommended for Transmission Loss.</small>
</div>
<div style="flex:1;min-width:180px;border:2px solid #0055A5;border-radius:8px;padding:14px;">
<div style="background:#0055A5;color:white;font-weight:bold;padding:4px 10px;border-radius:4px;margin-bottom:8px;">ISO 10534-2 / ASTM E1050</div>
Two-microphone standing wave method.<br/>
<small>Absorption coefficient only.</small>
</div>
<div style="flex:1;min-width:180px;border:2px solid #0055A5;border-radius:8px;padding:14px;">
<div style="background:#0055A5;color:white;font-weight:bold;padding:4px 10px;border-radius:4px;margin-bottom:8px;">ISO 11654</div>
Weighted sound absorption coefficient &alpha;_w and absorption class (A&ndash;E).
</div>
<div style="flex:1;min-width:180px;border:2px solid #0055A5;border-radius:8px;padding:14px;">
<div style="background:#0055A5;color:white;font-weight:bold;padding:4px 10px;border-radius:4px;margin-bottom:8px;">ISO 9613-1</div>
Speed of sound and air density from temperature and pressure.
</div>
</div>


* Python 3.8 (required by NVGate environment)
== Tube Setup ==
* NVGate V18 or later
* pynvdrive library (included in NVDrive Toolkit)


=== Python Dependencies ===
=== Geometry ===


<pre>
<pre style="background:#1a1a2e;color:#e0e0e0;padding:16px;border-radius:8px;font-size:0.95em;">
pip install numpy matplotlib
  [SP]    x1      x2              x3      x4    [ Sample ]
  ||||----o-------o---------------o-------o-----[=========]
  Source  \____Source side_____/  \___Trans. side___/
</pre>
</pre>


The <code>pynvdrive</code> library is loaded automatically from:
<pre>
C:\OROS\Gemini\NVDrive\Toolkit NVdrive\Python\pynvdrive
</pre>


=== Launch ===
[[File:TL_Tool_tube_4mic_100mm.png|center|480px|Tube d'impedance 4 microphones — Ø100 mm default configuration]]
* '''SP''' &mdash; Sound source (loudspeaker)
* '''x1, x2''' &mdash; Upstream microphones (source side)
* '''x3, x4''' &mdash; Downstream microphones (transmission side)
* '''Sample''' &mdash; Material under test, placed between x2 and x3


<pre>
=== Default Parameters ===
python tl_tool.py
</pre>


== Measurement Setup ==
{| class="wikitable" style="width:65%;"
 
! style="background:#003F87;color:white;" | Parameter
=== Impedance Tube Geometry ===
! style="background:#003F87;color:white;" | Default
 
! style="background:#003F87;color:white;" | Notes
The tube uses 4 flush-mounted microphones at fixed positions along the axis:
 
<pre>
  [SP]  x1    x2        x3    x4  [Sample]
  ||||---o-----o----------o-----o----[=======]
  Source  \__Source side_/  \__Trans_side__/
</pre>
 
* '''SP''' = Sound source (loudspeaker)
* '''x1, x2''' = Upstream microphone positions (source side)
* '''x3, x4''' = Downstream microphone positions (transmission side)
* '''Sample''' = Material under test (inserted between x2 and x3)
 
Default positions (configurable in Tube Setup tab):
 
{| class="wikitable"
! Parameter !! Default value
|-
|-
| x1 || 50 mm
| x1 || 50 mm || Configurable in Tube Setup tab
|-
|-
| x2 || 150 mm
| x2 || 150 mm ||
|-
|-
| x3 || 350 mm
| x3 || 350 mm ||
|-
|-
| x4 || 450 mm
| x4 || 450 mm ||
|-
|-
| Tube diameter D || 100 mm
| Tube diameter D || 100 mm || Determines f_max
|-
|-
| Temperature || 20 °C
| Temperature || 20 &deg;C || Affects speed of sound
|-
|-
| Pressure || 1013.25 hPa
| Pressure || 1013.25 hPa || Affects air density
|}
|}


=== Valid Frequency Range ===
<div style="border-left:4px solid #17a2b8;background:#e8f7fa;padding:12px 16px;border-radius:0 6px 6px 0;margin:10px 0;">
&#8505;&#65039; '''Valid frequency range''' is computed automatically from tube geometry and air properties.
Measurements outside [f_min, f_max] are masked and excluded from results.
</div>


The usable frequency range of the tube is determined automatically from the geometry and air properties:
== Software Interface ==


* '''f_min''' — limited by microphone spacing (at least λ/10 between mics)
The application is organized in five tabs:
* '''f_max''' — limited by tube diameter (plane wave propagation: D < 0.586·λ)


The software computes and displays these limits in real time. Measurements outside this range are masked with NaN and excluded from results.
{| style="width:100%;border-collapse:collapse;"
 
|-
== GUI Overview ==
| style="width:4px;background:#0055A5;" |
| style="padding:10px 16px;border:1px solid #cce0ff;border-left:none;" |
'''&#x1F4CB; Material''' &mdash; Material name, notes, measurement mode (2-mic / 4-mic)
|-
| style="width:4px;background:#0055A5;" |
| style="padding:10px 16px;border:1px solid #cce0ff;border-left:none;background:#f8fbff;" |
'''&#x1F4D0; Tube Setup''' &mdash; Microphone positions, diameter, temperature, pressure
|-
| style="width:4px;background:#0055A5;" |
| style="padding:10px 16px;border:1px solid #cce0ff;border-left:none;" |
'''&#x1F3A4; Acquisition''' &mdash; NVGate channel config, FFT settings, run/stop, phase calibration
|-
| style="width:4px;background:#17a2b8;" |
| style="padding:10px 16px;border:1px solid #cce0ff;border-left:none;background:#f8fbff;" |
'''&#x1F4C8; TL Result''' &mdash; Transmission Loss curves (fine band + octave bands)
|-
| style="width:4px;background:#17a2b8;" |
| style="padding:10px 16px;border:1px solid #cce0ff;border-left:none;" |
'''&#x1F50A; Absorption''' &mdash; Absorption coefficient &alpha; + ISO 11654 rating
|}


The interface is organized into tabs:
=== Top Toolbar ===


{| class="wikitable" style="width:100%;"
{| class="wikitable" style="width:100%;"
! Tab !! Content
! style="background:#003F87;color:white;" | Button
! style="background:#003F87;color:white;" | Action
|-
| '''Calculate''' || Run TL / absorption computation from acquired data
|-
|-
| '''Material''' || Material title, measurement notes, mode selection (2-mic / 4-mic)
| Fine band &#9744; || Show / hide fine-frequency-resolution plots
|-
|-
| '''Tube Setup''' || Microphone positions, tube diameter, temperature, pressure
| 1/N octave selector || Select octave resolution: 1/3 &bull; 1/6 &bull; 1/12 &bull; 1/24
|-
|-
| '''Acquisition''' || NVGate channel configuration, FFT settings, run/stop, phase calibration
| '''Send to NVGate''' || Inject octave result into NVGate display window
|-
|-
| '''TL Result''' || Transmission Loss plots (fine band + octave bands)
| '''Send fine band''' || Inject fine-band result into NVGate
|-
|-
| '''Absorption''' || Absorption coefficient α plots + ISO 11654 rating (α_w, NRC, SAA)
| '''Export CSV''' || Save results to CSV file
|}
|}
=== Top Controls ===
* '''Calculate''' — Run TL/absorption computation from current data
* '''Fine band''' checkbox — Show/hide fine-frequency-resolution plots
* '''1/N octave''' selector — Choose octave resolution (1/3, 1/6, 1/12, 1/24)
* '''Send to NVGate''' — Inject octave result into NVGate display window
* '''Send fine band''' — Inject fine-band result into NVGate
* '''Export CSV''' — Save results to a CSV file


== Measurement Modes ==
== Measurement Modes ==


=== 4-Microphone Mode (Recommended) — ASTM E2611 ===
=== 4-Microphone Mode (Recommended) &mdash; ASTM E2611 ===


Uses all 4 microphones (CH1–CH4). Two-load method (recommended) or single-load.
<div style="display:flex;gap:16px;flex-wrap:wrap;margin:12px 0;">
<div style="flex:1;min-width:220px;background:#f0f7ff;border:1px solid #0055A5;border-radius:8px;padding:16px;">
<div style="color:#0055A5;font-weight:bold;font-size:1.05em;margin-bottom:8px;">&#10003; Two-Load Method</div>
<b>Recommended &mdash; ASTM E2611 &sect;8</b><br/><br/>
Two measurements with different tube terminations.<br/>
The software builds the full <b>transfer matrix [T]</b> of the sample and extracts TL from T&sub;12;.<br/><br/>
<small>&#9679; Load 1: anechoic termination<br/>&#9679; Load 2: rigid cap</small>
</div>
<div style="flex:1;min-width:220px;background:#fff8f0;border:1px solid #cc8800;border-radius:8px;padding:16px;">
<div style="color:#cc8800;font-weight:bold;font-size:1.05em;margin-bottom:8px;">&#9888; Single-Load Method</div>
One measurement only, anechoic termination assumed.<br/><br/>
Less accurate &mdash; use only when Load 2 cannot be measured.
</div>
</div>


'''Two-load method''' (ASTM E2611 §8):
=== 2-Microphone Mode &mdash; ISO 10534-2 ===
# Measure with '''Load 1''' (anechoic termination)
# Measure with '''Load 2''' (rigid or different termination)
# The software constructs the full '''transfer matrix''' [T] of the sample
# TL is derived from T₁₂ and the tube impedances


'''Single-load method''':
Uses CH1 and CH2 only (source-side microphones):
# One measurement only (anechoic termination assumed)
* Reflection coefficient R(f) from standing wave decomposition
# Less accurate — use only when Load 2 cannot be measured
* Absorption coefficient &alpha;(f) = 1 &minus; |R|&sup2;


=== 2-Microphone Mode — ISO 10534-2 / ASTM E1050 ===
[[File:TL_Tool_tube_2mic.png|center|480px|Tube configuration for 2-microphone mode (ISO 10534-2)]]


Uses CH1 and CH2 only (source-side microphones). Measures:
== Step-by-Step Measurement Procedure ==
* Reflection coefficient R(f)
* Absorption coefficient α(f) = 1 − |R|²


=== Method Selection ===
<div style="counter-reset:step-counter;margin:16px 0;">


In the '''Material''' tab, select:
<div style="display:flex;align-items:flex-start;margin-bottom:16px;gap:14px;">
* '''4-mic''' → Two-load TL + absorption
<div style="flex-shrink:0;width:36px;height:36px;background:#0055A5;color:white;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:bold;font-size:1.1em;line-height:36px;text-align:center;">1</div>
* '''2-mic''' → Absorption only (no TL)
<div style="flex:1;border:1px solid #cce0ff;border-radius:8px;padding:14px;background:#f8fbff;">
<b>Configure Channels</b><br/>
In the <i>Acquisition</i> tab: set coupling (ICP), label and sensitivity for each microphone.<br/>
Click <b>Configure NVGate</b> &rarr; channels are enabled, FRF results are registered.
</div>
</div>


In the '''Acquisition''' tab (4-mic mode), select:
<div style="display:flex;align-items:flex-start;margin-bottom:16px;gap:14px;">
* '''Two-load''' → recommended, requires two successive measurements
<div style="flex-shrink:0;width:36px;height:36px;background:#0055A5;color:white;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:bold;font-size:1.1em;line-height:36px;text-align:center;">2</div>
* '''Single-load''' → one measurement, anechoic termination assumed
<div style="flex:1;border:1px solid #d4edda;border-radius:8px;padding:14px;background:#f4fff6;">
<b>Phase Calibration</b> <i>(recommended)</i><br/>
Compensates microphone phase mismatch:<br/>
&#9679; Place Mic 1 &amp; Mic 2 at the same port &rarr; <b>Calibrate CH1/CH2</b><br/>
&#9679; Physically swap microphones &rarr; <b>Measure (swapped)</b><br/>
&#9679; Repeat for CH1/CH3 and CH1/CH4<br/>
&#9679; Save calibration &mdash; applied automatically during calculation.
</div>
</div>


== Acquisition Workflow ==
<div style="display:flex;align-items:flex-start;margin-bottom:16px;gap:14px;">
<div style="flex-shrink:0;width:36px;height:36px;background:#0055A5;color:white;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:bold;font-size:1.1em;line-height:36px;text-align:center;">3</div>
<div style="flex:1;border:1px solid #cce0ff;border-radius:8px;padding:14px;background:#f8fbff;">
<b>Load 1 Measurement</b><br/>
Insert the sample with <b>anechoic termination</b>.<br/>
Click <b>Run Load 1</b> &rarr; NVGate acquires and stops automatically.
</div>
</div>


=== Prerequisites ===
<div style="display:flex;align-items:flex-start;margin-bottom:16px;gap:14px;">
<div style="flex-shrink:0;width:36px;height:36px;background:#0055A5;color:white;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:bold;font-size:1.1em;line-height:36px;text-align:center;">4</div>
<div style="flex:1;border:1px solid #cce0ff;border-radius:8px;padding:14px;background:#f8fbff;">
<b>Load 2 Measurement</b> <i>(two-load mode)</i><br/>
Change termination to <b>rigid cap</b>.<br/>
Click <b>Run Load 2</b> &rarr; NVGate acquires and stops automatically.
</div>
</div>


# NVGate must be open and connected (NVDrive active)
<div style="display:flex;align-items:flex-start;margin-bottom:16px;gap:14px;">
# 4 microphones connected to CH1–CH4 (ICP coupling, sensitivity ~10 mV/Pa)
<div style="flex-shrink:0;width:36px;height:36px;background:#17a2b8;color:white;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:bold;font-size:1.1em;line-height:36px;text-align:center;">5</div>
# Random noise generator enabled on OUT1 (drives the loudspeaker)
<div style="flex:1;border:1px solid #b8e4ec;border-radius:8px;padding:14px;background:#eefafc;">
<b>Calculate</b><br/>
Click <b>Calculate</b>. The software:<br/>
&#9679; Retrieves FRFs and auto-spectrum from NVGate<br/>
&#9679; Applies phase calibration<br/>
&#9679; Computes TL (fine band) and absorption coefficient<br/>
&#9679; Synthesizes octave bands<br/>
&#9679; Displays results and injects them into NVGate
</div>
</div>


=== Step-by-Step ===
</div>


'''Step 1 — Configure Channels'''
== Results ==


In the Acquisition tab:
=== TL Result Tab ===
# Set coupling (ICP recommended), label, and sensitivity for each channel
# Click '''Configure NVGate''' → enables channels, sets up FFT, registers FRF results


'''Step 2 — Phase Calibration (optional but recommended)'''
{| class="wikitable" style="width:100%;"
 
! style="background:#003F87;color:white;width:30%;" | Panel
Compensates for microphone phase mismatch:
! style="background:#003F87;color:white;" | Content
# Place Mic 1 and Mic 2 at the same tube port
# Click '''Calibrate Phase CH1/CH2'''
# Physically swap the microphones
# Click '''Measure (swapped)'''
# Repeat for CH1/CH3 and CH1/CH4 pairs
# Save calibration to <code>.npz</code> file
 
The calibration correction H_c is applied automatically during TL computation.
 
'''Step 3 — Load 1 Measurement'''
 
# Insert the sample in the tube with anechoic termination
# Click '''Run Load 1'''
# Wait for the measurement to complete (NVGate stops automatically)
# Data is displayed in the FRF preview pane
 
'''Step 4 — Load 2 Measurement''' (two-load mode only)
 
# Change the tube termination (rigid cap or different absorber)
# Click '''Run Load 2'''
# Wait for completion
 
'''Step 5 — Calculate'''
 
Click the '''Calculate''' button. The software:
# Reads H21, H31, H41 (FRF) and S11T (auto-spectrum)
# Applies phase calibration Hc
# Computes wave number k from air properties (ISO 9613-1)
# Decomposes incident/reflected waves (ASTM E2611 §6)
# Constructs transfer matrix [T] from two loads (ASTM E2611 §8)
# Derives TL_fine(f) and α_fine(f)
# Synthesizes octave bands
 
== Physics Engine ==
 
=== Air Properties (ISO 9613-1) ===
 
<pre>
c  = 20.05 × √(T_K)          [m/s]
ρ  = 1.2929 × (273.15/T_K) × (P/1013.25)  [kg/m³]
</pre>
 
Where T_K = temperature in Kelvin, P = pressure in hPa.
 
=== Wave Decomposition ===
 
For a plane wave field between two microphones at positions x₁, x₂:
 
<pre>
P(x) = A·e^(+jkx) + B·e^(-jkx)
 
[A]  1      [e^(-jkxâ‚‚)  -e^(-jkx₁)] [P(x₁)]
[B] = ────── [-e^(+jkxâ‚‚)  e^(+jkx₁)] [P(xâ‚‚)]
      det
</pre>
 
A singularity occurs when k·(x₂−x₁) = n·π (half-wavelength resonance) — these frequencies are masked with NaN automatically.
 
=== Transfer Matrix (ASTM E2611 §8) ===
 
The sample transfer matrix [T] is reconstructed from two independent measurements (loads):
 
<pre>
[p_down]  [T₁₁  T₁₂] [p_up  ]
[u_down] = [T₂₁  Tâ‚‚â‚‚] [u_up  ]
</pre>
 
Transmission Loss:
 
<pre>
TL = 20·log₁₀(|T₁₂| / (2·S_tube·ρ·c)) − 10·log₁₀(S_tube/(ρ·c))
  = 20·log₁₀(|T₁₂ / (2·ρ·c)|)    [simplified, S=1]
</pre>
 
=== Octave Synthesis ===
 
{| class="wikitable"
! Quantity !! Averaging method !! Reason
|-
|-
| TL [dB] || Energy: −10·log₁₀(mean(10^(−TL/10))) || ASTM E2611 — power averaging in linear domain
| Fine band (left) || TL in dB vs. frequency &mdash; valid range highlighted, singularities masked
|-
|-
| α [0–1] || Arithmetic: mean(α) || Linear quantity, not in dB
| Octave bands (right) || TL per 1/N octave band, color-coded
|}
 
=== Delany-Bazley-Miki Model ===
 
The DBM model predicts TL and α from the '''flow resistivity''' σ [Pa·s/m²] of a porous absorber:
 
<pre>
Z_c = ρ·c · [1 + 0.0571·(ρ·f/σ)^(-0.754) + j·0.0870·(ρ·f/σ)^(-0.732)]
k_c = (ω/c) · [1 + 0.0978·(ρ·f/σ)^(-0.700) − j·0.1890·(ρ·f/σ)^(-0.595)]
</pre>
 
The model fitting tool ('''Fit DBM''') extracts σ by minimizing the RMS error between measured and predicted TL/α.
 
== NVGate Integration ==
 
=== TCP Injection ===
 
Results are injected into NVGate via TCP (pynvdrive). The tool creates a '''NVD NTH OCTAVE''' result (process 183) for octave bands, and a '''FFT''' result (process 177) for fine band.
 
{| class="wikitable"
! Result type !! NVGate process !! Module !! Unit
|-
|-
| Octave TL (1/3 oct) || 183 — NVD NTH OCTAVE || 498 || Pa (converted from dB)
| Status bar || c [m/s], &rho; [kg/m&sup3;], f_min, f_max, calculation time
|-
| Octave TL (1/12 oct) || 183 — NVD NTH OCTAVE || 498 || Pa (converted from dB)
|-
| Fine band TL || 177 — FFT || 498 || dB
|}
|}


=== Octave XREG Encoding ===


The <code>n_octave</code> field in the XREG block must match the resolution:
[[File:TL_Tool_GUI_transmission_loss.png|center|700px|TL Tool — Transmission Loss tab : bande fine (FFT) et barres 1/12 octave]]
=== Absorption Tab ===


{| class="wikitable"
{| class="wikitable" style="width:100%;"
! Resolution !! n_octave value
! style="background:#003F87;color:white;width:30%;" | Panel
|-
! style="background:#003F87;color:white;" | Content
| 1/1 oct || 0
|-
| 1/3 oct || 1
|-
|-
| 1/6 oct || 1
| Fine band (left, optional) || &alpha;(f) from 0 to 1 &mdash; valid range highlighted
|-
|-
| 1/12 oct || 2
| Octave bands (right) || &alpha; per 1/3 octave band
|-
|-
| 1/24 oct || 3
| ISO 11654 table || &alpha;_w &bull; Class (A&ndash;E) &bull; SAA &bull; NRC &bull; &alpha; at 250/500/1k/2k/4k Hz
|}
|}


'''Important:''' The injected octave series must be '''complete''' (all standard center frequencies from 1 Hz to 20 kHz, with 0 dB for out-of-range bands). NVGate rejects partial series.
=== Pa ↔ dB Conversion ===
Octave values are stored in NVGate as '''acoustic pressure [Pa]''' using the SPL reference:
<pre>
Pa = 20×10⁻⁶ × 10^(TL_dB / 20)
</pre>
=== NVGate Generator Setup ===
To drive the loudspeaker, the random noise generator must be activated in NVGate:
# Enable generator: IDN <code>7.249.2</code> = 1
# Route to OUT1: IDN <code>1.72.100</code> = <code>'007.249.000'</code> (enum string)
# Enable OUT1: IDN <code>1.72.2</code> = 1
'''Note:''' The generator must be activated '''before''' setting the source routing — the enum value <code>007.249.000</code> only appears when the generator is active.
== Results & Export ==
=== TL Result Tab ===
* '''Fine band plot''' (left panel) — TL in dB vs frequency, valid range highlighted
* '''Octave band plot''' (right panel) — TL per 1/N octave band
* Material title displayed in plot title
* Valid frequency range [f_min, f_max] shown in status bar
=== Absorption Tab ===
* '''Fine band plot''' (left panel, optional) — α(f) from 0 to 1
* '''Octave band plot''' (right panel) — α per 1/3 octave band
* '''ISO 11654 rating table''':
** α_w (weighted absorption coefficient)
** Absorption class (A–E)
** SAA (Sound Absorption Average)
** NRC (Noise Reduction Coefficient)
** α values at 250, 500, 1000, 2000, 4000 Hz


[[File:TL_Tool_GUI_rating_iso11654.png|center|700px|TL Tool — onglet Rating ISO 11654 : classement A–E du coefficient d'absorption]]
=== CSV Export ===
=== CSV Export ===


Click '''Export CSV''' in the bottom-left corner. The exported file contains:
Click <b>Export CSV</b> (bottom-left). Header includes: material name, date, tube geometry, air properties, valid frequency range.


'''4-mic mode:'''
<div style="display:flex;gap:16px;flex-wrap:wrap;margin:10px 0;">
<pre>
<div style="flex:1;min-width:200px;">
Frequency_Hz,TL_dB,Alpha
<div style="background:#2d2d2d;color:#a8ff78;padding:12px;border-radius:6px;font-family:monospace;font-size:0.9em;">
100.0000,18.4230,0.12345
<b style="color:#fff;">4-mic mode:</b><br/>
Frequency_Hz, TL_dB, Alpha<br/>
100.0000, 18.423, 0.123<br/>
125.0000, 20.115, 0.145<br/>
...
...
</pre>
</div>
 
</div>
'''2-mic mode:'''
<div style="flex:1;min-width:200px;">
<pre>
<div style="background:#2d2d2d;color:#a8ff78;padding:12px;border-radius:6px;font-family:monospace;font-size:0.9em;">
Frequency_Hz,Alpha
<b style="color:#fff;">2-mic mode:</b><br/>
100.0000,0.45230
Frequency_Hz, Alpha<br/>
100.0000, 0.452<br/>
125.0000, 0.481<br/>
...
...
</pre>
</div>
</div>
</div>


The file header includes: material title, measurement date, tube geometry, air properties, and valid frequency range.
=== NVGate Display ===


== Configuration File ==
After calculation, results are automatically injected into NVGate:
* Octave bar chart (1/3, 1/6, 1/12 or 1/24 depending on toolbar selection)
* Fine-band curve (optional)
* Each resolution uses a dedicated NVGate window to avoid conflicts


Settings are stored in <code>config_tl.json</code> next to the executable. Key parameters:
== Delany-Bazley-Miki Model ==


{| class="wikitable" style="width:70%;"
<div style="background:#f0f7ff;border:1px solid #0055A5;border-radius:8px;padding:16px;margin:10px 0;">
! Key !! Default !! Description
The software includes a <b>DBM fitting tool</b> for porous absorbers.<br/>
|-
From the measured &alpha;(f) or TL(f), it extracts the <b>flow resistivity &sigma;</b> [Pa&middot;s/m&sup2;] by minimizing the RMS error between measurement and model.<br/>
| <code>x1</code>–<code>x4</code> || 50/150/350/450 mm || Microphone positions from source
&sigma; can then be used to predict material performance at any frequency or thickness.<br/><br/>
|-
&#8594; See the [[TL_Tool_-_Acoustic_Formulas_Reference|Formulas Reference]] for full DBM equations.
| <code>D_tube</code> || 100 mm || Internal tube diameter
</div>
|-
| <code>temperature</code> || 20 °C || Air temperature
|-
| <code>pressure_hpa</code> || 1013.25 hPa || Atmospheric pressure
|-
| <code>octave_fraction</code> || 12 || Default octave resolution (3/6/12/24)
|-
| <code>tl_method</code> || two_load || Calculation method (two_load / single_load)
|-
| <code>ref_channel</code> || 1 || NVGate reference channel
|-
| <code>calibration_file</code> || "" || Path to phase calibration .npz file
|}
 
== Offline Analysis ==
 
In addition to live NVGate acquisition, the tool supports offline analysis from archived data:


* '''.oros.npz''' files — OROS archive format (internally NumPy .npz)
* '''Input Basket''' — load pre-measured FRF/spectrum files
* '''Demo mode''' — synthetic data for testing without hardware


To load archived data: use the '''Load Data''' button in the Acquisition tab.
[[File:TL_Tool_GUI_propagation.png|center|700px|TL Tool — onglet Propagation : nombre d'onde, atténuation, impédance caractéristique]]


== Tube Merge (Large + Small Tube) ==
== Multi-Tube Merge ==


For materials requiring a wide frequency range, measurements from two tubes (large diameter = low frequencies, small diameter = high frequencies) can be merged:
For a wide frequency range, measurements from a <b>large-diameter tube</b> (low frequencies) and a <b>small-diameter tube</b> (high frequencies) can be merged into a single spectrum.


<pre>
The blend zone [f_blend_lo, f_blend_hi] uses a cosine cross-fade, ensuring a smooth transition.
python _test_merge.py  # verification script
</pre>


The <code>merge_tubes(f1, y1, f2, y2, f_blend_lo, f_blend_hi)</code> function in <code>tl_physics.py</code> applies a cosine cross-fade in the blend zone [f_blend_lo, f_blend_hi].


== Testing ==
[[File:TL_Tool_tube_4mic_29mm.png|center|400px|Small-diameter tube (Ø29 mm) for high-frequency measurements]]
== Configuration ==


The software includes a complete test suite with 5 independent test scripts:
Settings are saved automatically in <code>config_tl.json</code> next to <code>TL_Tool.exe</code>:


{| class="wikitable" style="width:100%;"
{| class="wikitable" style="width:75%;"
! Script !! Tests !! Coverage
! style="background:#003F87;color:white;" | Parameter
! style="background:#003F87;color:white;" | Default
! style="background:#003F87;color:white;" | Description
|-
|-
| <code>test_tl_full.py</code> || 53 || Physics engine, ASTM E2611 formulas, CSV export, demo mode
| x1 &ndash; x4 || 50/150/350/450 mm || Microphone positions from source
|-
|-
| <code>test_nvgate_live.py</code> || 54 || NVGate integration (requires connected hardware), injection, FRF reading
| Tube diameter || 100 mm || Determines f_max
|-
|-
| <code>_test_merge.py</code> || 35 || Tube merge algorithm, real measurement files
| Temperature || 20 &deg;C || Air temperature
|-
|-
| <code>test_dbm_merge.py</code> || 18 || DBM model, fitting algorithm
| Pressure || 1013.25 hPa || Atmospheric pressure
|-
|-
| <code>test_phase_calib.py</code> || 10 || Phase calibration round-trip
| Octave resolution || 1/12 || Default resolution (3/6/12/24)
|}
 
All 170 tests pass (0 failures) on the release build.
 
Run all tests:
<pre>
cd "C:\OROS\Gemini\Transmission loss"
python test_tl_full.py
python test_nvgate_live.py
python _test_merge.py
python test_dbm_merge.py
python test_phase_calib.py
</pre>
 
== Troubleshooting ==
 
{| class="wikitable" style="width:100%;"
! Symptom !! Cause !! Fix
|-
|-
| NVGate not connected || pynvdrive not found or NVGate closed || Check NVGate is open; verify pynvdrive path
| TL method || Two-load || Calculation method
|-
|-
| "Missing FRF data: ['H21', 'H31', 'H41']" || Configure NVGate not clicked, or channels not active || Click '''Configure NVGate''', then re-run measurement
| Phase calibration || (none) || Path to .npz calibration file
|-
| TL values all NaN || f_min > f_max (wrong tube geometry) || Check microphone positions x1–x4 and tube diameter
|-
| Negative TL values || Phase calibration missing or incorrect || Re-calibrate phase (Acquisition tab)
|-
| NVGate shows wrong octave resolution || Old NVGate channel reused || Different window names are assigned per resolution automatically
|-
| Fine band X axis too large in NVGate || Fixed in current release || Upgrade to latest version
|-
| CSV export error (division by zero) || Running in 2-mic mode with old version || Fixed in current release
|-
| Stop error 2014001000 || NVGate already stopped || Normal — treated as success
|}
|}


== Key Constants (NVGate V18) ==
<pre>
PROCESS_AVG_SPECTRUM = 2      # Auto-power spectrum (averaged)
PROCESS_FRF_H1      = 31    # FRF estimator H1
PROCESS_NVD_OCT      = 183    # NVD NTH OCTAVE (octave injection)
TCP_MODULE          = 498    # TCP result module
FFT_MODULE          = 10    # FFT analysis module
IDN_FFT_FMAX        = '10.363.79'
IDN_FFT_AVERAGES    = '10.361.81'
IDN_FFT_AVG_MODE    = '10.361.80'  # 1 = linear averaging
IDN_GEN_ENABLE      = '7.249.2'
IDN_OUT1_ENABLE      = '1.72.2'
IDN_OUT1_SOURCE      = '1.72.100'
GEN_SRC_NOISE        = '007.249.000' # Random noise 1
</pre>
== References ==
* ASTM E2611 — ''Standard Test Method for Normal Incidence Determination of Porous Material Acoustical Properties Based on the Transfer Matrix Method''
* ISO 10534-2 — ''Acoustics — Determination of sound absorption coefficient and impedance in impedance tubes''
* ISO 9613-1 — ''Acoustics — Attenuation of sound during propagation outdoors — Calculation of the absorption of sound by the atmosphere''
* ISO 11654 — ''Acoustics — Sound absorbers for use in buildings — Rating of sound absorption''
* Delany & Bazley (1970), Miki (1990) — Empirical models for porous absorber impedance
* [https://www.bksv.com/media/doc/bv0059.pdf Brüel & Kjær BV0059 — Measuring Sound Absorption Coefficient]


== See Also ==
== See Also ==


* [[NVGate]] — OROS analysis software
* [[TL_Tool_-_Acoustic_Formulas_Reference|&#x1F4D0; Acoustic Formulas Reference]] &mdash; all equations used in the software
* [[NVGate]] &mdash; OROS analysis software
* [[NVGate_FFT|FFT Analysis in NVGate]]
* [[NVGate_FFT|FFT Analysis in NVGate]]
* [[NVGate_Octave_Analyzer|Octave Analysis]]
* [[NVGate_Octave_Analyzer|Octave Analysis]]
* [[FFT_Spectrum_Analyzer_Multipurpose|OROS FFT Analyzer Hardware]]
* [[FFT_Spectrum_Analyzer_Multipurpose|OROS FFT Analyzer Hardware]]
== References ==
* ASTM E2611 &mdash; ''Normal Incidence Determination of Porous Material Acoustical Properties Based on the Transfer Matrix Method''
* ISO 10534-2 &mdash; ''Determination of sound absorption coefficient and impedance in impedance tubes''
* ISO 9613-1 &mdash; ''Attenuation of sound during propagation outdoors &mdash; Calculation of the absorption of sound by the atmosphere''
* ISO 11654 &mdash; ''Sound absorbers for use in buildings &mdash; Rating of sound absorption''
* Miki Y. (1990) &mdash; ''Acoustical properties of porous materials &mdash; modifications of Delany-Bazley models''

Latest revision as of 11:34, 27 May 2026


TL Tool — Sound Transmission Loss

Parameter Value
Delivery download here version from 22/05/2026 - Beta version - download at your own risk !
Measurement methods 4-mic transfer matrix (ASTM E2611) • 2-mic standing wave (ISO 10534-2)
Results TL [dB], absorption α, ISO 11654 class (α_w, NRC, SAA)
Octave resolution 1/3 • 1/6 • 1/12 • 1/24 octave
NVGate integration Live acquisition • automatic result injection
Export CSV (frequency, TL, α)

Standards

ASTM E2611

Transfer matrix method — 4-microphone impedance tube.
Recommended for Transmission Loss.

ISO 10534-2 / ASTM E1050

Two-microphone standing wave method.
Absorption coefficient only.

ISO 11654

Weighted sound absorption coefficient α_w and absorption class (A–E).

ISO 9613-1

Speed of sound and air density from temperature and pressure.

Tube Setup

Geometry

  [SP]    x1      x2              x3      x4    [ Sample ]
  ||||----o-------o---------------o-------o-----[=========]
  Source   \____Source side_____/  \___Trans. side___/


  • SP — Sound source (loudspeaker)
  • x1, x2 — Upstream microphones (source side)
  • x3, x4 — Downstream microphones (transmission side)
  • Sample — Material under test, placed between x2 and x3

Default Parameters

Parameter Default Notes
x1 50 mm Configurable in Tube Setup tab
x2 150 mm
x3 350 mm
x4 450 mm
Tube diameter D 100 mm Determines f_max
Temperature 20 °C Affects speed of sound
Pressure 1013.25 hPa Affects air density

ℹ️ Valid frequency range is computed automatically from tube geometry and air properties. Measurements outside [f_min, f_max] are masked and excluded from results.

Software Interface

The application is organized in five tabs:

📋 Material — Material name, notes, measurement mode (2-mic / 4-mic)

📐 Tube Setup — Microphone positions, diameter, temperature, pressure

🎤 Acquisition — NVGate channel config, FFT settings, run/stop, phase calibration

📈 TL Result — Transmission Loss curves (fine band + octave bands)

🔊 Absorption — Absorption coefficient α + ISO 11654 rating

Top Toolbar

Button Action
Calculate Run TL / absorption computation from acquired data
Fine band ☐ Show / hide fine-frequency-resolution plots
1/N octave selector Select octave resolution: 1/3 • 1/6 • 1/12 • 1/24
Send to NVGate Inject octave result into NVGate display window
Send fine band Inject fine-band result into NVGate
Export CSV Save results to CSV file

Measurement Modes

4-Microphone Mode (Recommended) — ASTM E2611

✓ Two-Load Method

Recommended — ASTM E2611 §8

Two measurements with different tube terminations.
The software builds the full transfer matrix [T] of the sample and extracts TL from T⊂12;.

● Load 1: anechoic termination
● Load 2: rigid cap

⚠ Single-Load Method

One measurement only, anechoic termination assumed.

Less accurate — use only when Load 2 cannot be measured.

2-Microphone Mode — ISO 10534-2

Uses CH1 and CH2 only (source-side microphones):

  • Reflection coefficient R(f) from standing wave decomposition
  • Absorption coefficient α(f) = 1 − |R|²

Step-by-Step Measurement Procedure

1

Configure Channels
In the Acquisition tab: set coupling (ICP), label and sensitivity for each microphone.
Click Configure NVGate → channels are enabled, FRF results are registered.

2

Phase Calibration (recommended)
Compensates microphone phase mismatch:
● Place Mic 1 & Mic 2 at the same port → Calibrate CH1/CH2
● Physically swap microphones → Measure (swapped)
● Repeat for CH1/CH3 and CH1/CH4
● Save calibration — applied automatically during calculation.

3

Load 1 Measurement
Insert the sample with anechoic termination.
Click Run Load 1 → NVGate acquires and stops automatically.

4

Load 2 Measurement (two-load mode)
Change termination to rigid cap.
Click Run Load 2 → NVGate acquires and stops automatically.

5

Calculate
Click Calculate. The software:
● Retrieves FRFs and auto-spectrum from NVGate
● Applies phase calibration
● Computes TL (fine band) and absorption coefficient
● Synthesizes octave bands
● Displays results and injects them into NVGate

Results

TL Result Tab

Panel Content
Fine band (left) TL in dB vs. frequency — valid range highlighted, singularities masked
Octave bands (right) TL per 1/N octave band, color-coded
Status bar c [m/s], ρ [kg/m³], f_min, f_max, calculation time


Absorption Tab

Panel Content
Fine band (left, optional) α(f) from 0 to 1 — valid range highlighted
Octave bands (right) α per 1/3 octave band
ISO 11654 table α_w • Class (A–E) • SAA • NRC • α at 250/500/1k/2k/4k Hz


CSV Export

Click Export CSV (bottom-left). Header includes: material name, date, tube geometry, air properties, valid frequency range.

4-mic mode:
Frequency_Hz, TL_dB, Alpha
100.0000, 18.423, 0.123
125.0000, 20.115, 0.145
...

2-mic mode:
Frequency_Hz, Alpha
100.0000, 0.452
125.0000, 0.481
...

NVGate Display

After calculation, results are automatically injected into NVGate:

  • Octave bar chart (1/3, 1/6, 1/12 or 1/24 depending on toolbar selection)
  • Fine-band curve (optional)
  • Each resolution uses a dedicated NVGate window to avoid conflicts

Delany-Bazley-Miki Model

The software includes a DBM fitting tool for porous absorbers.
From the measured α(f) or TL(f), it extracts the flow resistivity σ [Pa·s/m²] by minimizing the RMS error between measurement and model.
σ can then be used to predict material performance at any frequency or thickness.

→ See the Formulas Reference for full DBM equations.


Multi-Tube Merge

For a wide frequency range, measurements from a large-diameter tube (low frequencies) and a small-diameter tube (high frequencies) can be merged into a single spectrum.

The blend zone [f_blend_lo, f_blend_hi] uses a cosine cross-fade, ensuring a smooth transition.


Configuration

Settings are saved automatically in config_tl.json next to TL_Tool.exe:

Parameter Default Description
x1 – x4 50/150/350/450 mm Microphone positions from source
Tube diameter 100 mm Determines f_max
Temperature 20 °C Air temperature
Pressure 1013.25 hPa Atmospheric pressure
Octave resolution 1/12 Default resolution (3/6/12/24)
TL method Two-load Calculation method
Phase calibration (none) Path to .npz calibration file


See Also

References

  • ASTM E2611 — Normal Incidence Determination of Porous Material Acoustical Properties Based on the Transfer Matrix Method
  • ISO 10534-2 — Determination of sound absorption coefficient and impedance in impedance tubes
  • ISO 9613-1 — Attenuation of sound during propagation outdoors — Calculation of the absorption of sound by the atmosphere
  • ISO 11654 — Sound absorbers for use in buildings — Rating of sound absorption
  • Miki Y. (1990) — Acoustical properties of porous materials — modifications of Delany-Bazley models