TL Tool - Sound Transmission Loss Measurement

From OROS Wiki
Revision as of 15:24, 22 May 2026 by LaurentM OROS (talk | contribs) (New page: complete documentation for TL Tool (Sound Transmission Loss measurement, ASTM E2611))
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search


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

  1. Measure with Load 1 (anechoic termination)
  2. Measure with Load 2 (rigid or different termination)
  3. The software constructs the full transfer matrix [T] of the sample
  4. TL is derived from T₁₂ and the tube impedances

Single-load method:

  1. One measurement only (anechoic termination assumed)
  2. 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

  1. NVGate must be open and connected (NVDrive active)
  2. 4 microphones connected to CH1–CH4 (ICP coupling, sensitivity ~10 mV/Pa)
  3. Random noise generator enabled on OUT1 (drives the loudspeaker)

Step-by-Step

Step 1 — Configure Channels

In the Acquisition tab:

  1. Set coupling (ICP recommended), label, and sensitivity for each channel
  2. Click Configure NVGate → enables channels, sets up FFT, registers FRF results

Step 2 — Phase Calibration (optional but recommended)

Compensates for microphone phase mismatch:

  1. Place Mic 1 and Mic 2 at the same tube port
  2. Click Calibrate Phase CH1/CH2
  3. Physically swap the microphones
  4. Click Measure (swapped)
  5. Repeat for CH1/CH3 and CH1/CH4 pairs
  6. Save calibration to .npz file

The calibration correction H_c is applied automatically during TL computation.

Step 3 — Load 1 Measurement

  1. Insert the sample in the tube with anechoic termination
  2. Click Run Load 1
  3. Wait for the measurement to complete (NVGate stops automatically)
  4. Data is displayed in the FRF preview pane

Step 4 — Load 2 Measurement (two-load mode only)

  1. Change the tube termination (rigid cap or different absorber)
  2. Click Run Load 2
  3. Wait for completion

Step 5 — Calculate

Click the Calculate button. The software:

  1. Reads H21, H31, H41 (FRF) and S11T (auto-spectrum)
  2. Applies phase calibration Hc
  3. Computes wave number k from air properties (ISO 9613-1)
  4. Decomposes incident/reflected waves (ASTM E2611 §6)
  5. Constructs transfer matrix [T] from two loads (ASTM E2611 §8)
  6. Derives TL_fine(f) and α_fine(f)
  7. 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:

  1. Enable generator: IDN 7.249.2 = 1
  2. Route to OUT1: IDN 1.72.100 = '007.249.000' (enum string)
  3. 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