TL Tool - Sound Transmission Loss Measurement
TL Tool — Sound Transmission Loss Measurement
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.
It integrates natively with NVGate via the NVDrive TCP protocol for live acquisition and automatic injection of results into NVGate windows.
Standards
| Standard | Method | Application |
|---|---|---|
| ASTM E2611 | Transfer Matrix — 4 microphones | Sound Transmission Loss |
| ISO 10534-2 / ASTM E1050 | Two-microphone | Absorption coefficient α |
| ISO 9613-1 | Speed of sound formula | Air properties (c, Ï) |
| ISO 11654 | Octave averaging, α_w class | Weighted absorption rating |
Architecture
The software is organized into 5 modules:
| File | Role |
|---|---|
tl_tool.py |
Main application — tkinter GUI + matplotlib (~5000 lines) |
tl_physics.py |
Pure physics engine — wave decomposition, ASTM E2611, DBM model |
tl_nvgate.py |
NVDrive/NVGate interface — spectrum reading, result injection |
tl_acquisition.py |
NVGate acquisition — channel config, FFT, run/stop, FRF |
config_tl.json |
Persistent configuration (microphone positions, tube geometry, temperature…) |
Dependency Stack
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+)
Installation
Requirements
- Python 3.8 (required by NVGate environment)
- NVGate V18 or later
- pynvdrive library (included in NVDrive Toolkit)
Python Dependencies
pip install numpy matplotlib
The pynvdrive library is loaded automatically from:
C:\OROS\Gemini\NVDrive\Toolkit NVdrive\Python\pynvdrive
Launch
python tl_tool.py
Measurement Setup
Impedance Tube Geometry
The tube uses 4 flush-mounted microphones at fixed positions along the axis:
[SP] x1 x2 x3 x4 [Sample] ||||---o-----o----------o-----o----[=======] Source \__Source side_/ \__Trans_side__/
- 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):
| Parameter | Default value |
|---|---|
| x1 | 50 mm |
| x2 | 150 mm |
| x3 | 350 mm |
| x4 | 450 mm |
| Tube diameter D | 100 mm |
| Temperature | 20 °C |
| Pressure | 1013.25 hPa |
Valid Frequency Range
The usable frequency range of the tube is determined automatically from the geometry and air properties:
- f_min — limited by microphone spacing (at least λ/10 between mics)
- 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.
GUI Overview
The interface is organized into tabs:
| Tab | Content |
|---|---|
| Material | Material title, measurement notes, mode selection (2-mic / 4-mic) |
| Tube Setup | Microphone positions, tube diameter, temperature, pressure |
| Acquisition | NVGate channel configuration, FFT settings, run/stop, phase calibration |
| TL Result | Transmission Loss plots (fine band + octave bands) |
| Absorption | Absorption coefficient α plots + ISO 11654 rating (α_w, NRC, SAA) |
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
4-Microphone Mode (Recommended) — ASTM E2611
Uses all 4 microphones (CH1–CH4). Two-load method (recommended) or single-load.
Two-load method (ASTM E2611 §8):
- 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:
- One measurement only (anechoic termination assumed)
- Less accurate — use only when Load 2 cannot be measured
2-Microphone Mode — ISO 10534-2 / ASTM E1050
Uses CH1 and CH2 only (source-side microphones). Measures:
- Reflection coefficient R(f)
- Absorption coefficient α(f) = 1 − |R|²
Method Selection
In the Material tab, select:
- 4-mic → Two-load TL + absorption
- 2-mic → Absorption only (no TL)
In the Acquisition tab (4-mic mode), select:
- Two-load → recommended, requires two successive measurements
- Single-load → one measurement, anechoic termination assumed
Acquisition Workflow
Prerequisites
- NVGate must be open and connected (NVDrive active)
- 4 microphones connected to CH1–CH4 (ICP coupling, sensitivity ~10 mV/Pa)
- Random noise generator enabled on OUT1 (drives the loudspeaker)
Step-by-Step
Step 1 — Configure Channels
In the Acquisition 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)
Compensates for microphone phase mismatch:
- 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
.npzfile
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)
c = 20.05 × √(T_K) [m/s] Ï = 1.2929 × (273.15/T_K) × (P/1013.25) [kg/m³]
Where T_K = temperature in Kelvin, P = pressure in hPa.
Wave Decomposition
For a plane wave field between two microphones at positions xâ‚, xâ‚‚:
P(x) = A·e^(+jkx) + B·e^(-jkx)
[A] 1 [e^(-jkxâ‚‚) -e^(-jkxâ‚)] [P(xâ‚)]
[B] = ────── [-e^(+jkxâ‚‚) e^(+jkxâ‚)] [P(xâ‚‚)]
det
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):
[p_down] [Tâ‚â‚ Tâ‚â‚‚] [p_up ] [u_down] = [Tâ‚‚â‚ Tâ‚‚â‚‚] [u_up ]
Transmission Loss:
TL = 20·logâ‚â‚€(|Tâ‚â‚‚| / (2·S_tube·Ï·c)) − 10·logâ‚â‚€(S_tube/(Ï·c)) = 20·logâ‚â‚€(|Tâ‚â‚‚ / (2·Ï·c)|) [simplified, S=1]
Octave Synthesis
| Quantity | Averaging method | Reason |
|---|---|---|
| TL [dB] | Energy: −10·logâ‚â‚€(mean(10^(−TL/10))) | ASTM E2611 — power averaging in linear domain |
| α [0–1] | Arithmetic: mean(α) | Linear quantity, not in dB |
Delany-Bazley-Miki Model
The DBM model predicts TL and α from the flow resistivity σ [Pa·s/m²] of a porous absorber:
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)]
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.
| Result type | NVGate process | Module | Unit |
|---|---|---|---|
| Octave TL (1/3 oct) | 183 — NVD NTH OCTAVE | 498 | Pa (converted from dB) |
| 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 n_octave field in the XREG block must match the resolution:
| Resolution | n_octave value |
|---|---|
| 1/1 oct | 0 |
| 1/3 oct | 1 |
| 1/6 oct | 1 |
| 1/12 oct | 2 |
| 1/24 oct | 3 |
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:
Pa = 20×10â»â¶ × 10^(TL_dB / 20)
NVGate Generator Setup
To drive the loudspeaker, the random noise generator must be activated in NVGate:
- Enable generator: IDN
7.249.2= 1 - Route to OUT1: IDN
1.72.100='007.249.000'(enum string) - Enable OUT1: IDN
1.72.2= 1
Note: The generator must be activated before setting the source routing — the enum value 007.249.000 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
CSV Export
Click Export CSV in the bottom-left corner. The exported file contains:
4-mic mode:
Frequency_Hz,TL_dB,Alpha 100.0000,18.4230,0.12345 ...
2-mic mode:
Frequency_Hz,Alpha 100.0000,0.45230 ...
The file header includes: material title, measurement date, tube geometry, air properties, and valid frequency range.
Configuration File
Settings are stored in config_tl.json next to the executable. Key parameters:
| Key | Default | Description |
|---|---|---|
x1–x4 |
50/150/350/450 mm | Microphone positions from source |
D_tube |
100 mm | Internal tube diameter |
temperature |
20 °C | Air temperature |
pressure_hpa |
1013.25 hPa | Atmospheric pressure |
octave_fraction |
12 | Default octave resolution (3/6/12/24) |
tl_method |
two_load | Calculation method (two_load / single_load) |
ref_channel |
1 | NVGate reference channel |
calibration_file |
"" | 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.
Tube Merge (Large + Small Tube)
For materials requiring a wide frequency range, measurements from two tubes (large diameter = low frequencies, small diameter = high frequencies) can be merged:
python _test_merge.py # verification script
The merge_tubes(f1, y1, f2, y2, f_blend_lo, f_blend_hi) function in tl_physics.py applies a cosine cross-fade in the blend zone [f_blend_lo, f_blend_hi].
Testing
The software includes a complete test suite with 5 independent test scripts:
| Script | Tests | Coverage |
|---|---|---|
test_tl_full.py |
53 | Physics engine, ASTM E2611 formulas, CSV export, demo mode |
test_nvgate_live.py |
54 | NVGate integration (requires connected hardware), injection, FRF reading |
_test_merge.py |
35 | Tube merge algorithm, real measurement files |
test_dbm_merge.py |
18 | DBM model, fitting algorithm |
test_phase_calib.py |
10 | Phase calibration round-trip |
All 170 tests pass (0 failures) on the release build.
Run all tests:
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
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| NVGate not connected | pynvdrive not found or NVGate closed | Check NVGate is open; verify pynvdrive path |
| "Missing FRF data: ['H21', 'H31', 'H41']" | Configure NVGate not clicked, or channels not active | Click Configure NVGate, then re-run measurement |
| 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)
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
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
- Brüel & Kjær BV0059 — Measuring Sound Absorption Coefficient
See Also
- NVGate — OROS analysis software
- FFT Analysis in NVGate
- Octave Analysis
- OROS FFT Analyzer Hardware