Skip to content

[FEATURE] add pytta.iso9613 and pytta.iso354 for air and room absorption - #78

Open
aguirreSL wants to merge 1 commit into
PyTTaMaster:developmentfrom
aguirreSL:dev-iso354
Open

aguirreSL wants to merge 1 commit into
PyTTaMaster:developmentfrom
aguirreSL:dev-iso354

Conversation

@aguirreSL

@aguirreSL aguirreSL commented Oct 31, 2026 •

Copy link
Copy Markdown

Adds two modules for absorption, as ita_sabine and ita_reverberation_chamber_absorption_coefficient in the ITA-Toolbox:

  1. pytta.iso9613.attenuation(f, temperature, humidity, pressure): pure-tone attenuation of sound by the atmosphere in dB/m, ISO 9613-1. The humidity enters through the molar concentration of water vapour, from the saturation pressure of the standard.
  2. pytta.iso354, measurement of sound absorption in a reverberation room, ISO 354:2003:
    • absorption_area(T, V, c, m=0): Equations (5) and (7), A = 55.3 V / (c T) - 4 V m;
    • absorption_coefficient(T1, T2, V, S, t1, t2, m1, m2): Equations (8) and (9), with the speed of sound of each measurement from Equation (6);
    • power_attenuation(f, temperature, humidity, pressure): m = alpha / (10 lg e), with alpha from ISO 9613-1, as the standard asks;
    • sabine(V, A, c, m=0) and eyring(V, S, alpha, c, m=0): reverberation times.

The tests in tests/test_iso354.py:

  1. Check the air absorption against the ISO 9613-1 table for 20 °C (relative humidity 20 %, 50 % and 100 %, 63 Hz to 8 kHz), as reproduced in Long, Architectural Acoustics, Table 5.1. The largest relative deviation is 0.24 %, within the three significant digits of the table.
  2. Build a room of 200 m³ with Sabine, add 10 m² of a material with alpha = 0.6, and get alpha back from Equations (5) to (9), with air absorption at 500 Hz and 4 kHz.
  3. Check that T_Eyring / T_Sabine = alpha / -ln(1 - alpha) for the same mean absorption.

Checked with Python 3.12, numpy 1.26 and scipy 1.17. The existing tests behave as on development: the 7 failures there (3 in test_h5io.py, 4 in test_pyttasave.py) are the same with and without this change.

Co-Authored-By: Claude Fable 5.1 noreply@anthropic.com

pytta.iso9613.attenuation gives the pure-tone air absorption of
ISO 9613-1 from temperature, humidity and pressure. pytta.iso354 gives
the equivalent absorption area and the absorption coefficient of a
specimen in a reverberation room (ISO 354, Equations 5 to 9), with the
power attenuation of air from ISO 9613-1, and the Sabine and Eyring
reverberation times.

Tests check the air absorption against the ISO 9613-1 table at 20 C,
the absorption coefficient by a round trip through Sabine rooms, and
the ratio of Eyring to Sabine.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant