Skip to content

[FEATURE] add pytta.iso3382_3 with the parameters of open-plan offices - #134

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

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

Conversation

@aguirreSL

@aguirreSL aguirreSL commented Nov 1, 2026 •

Copy link
Copy Markdown

Summary

Adds pytta.iso3382_3, the single-number quantities of ISO 3382-3:2012 for open-plan offices, computed from measurements along a line of workstations:

  1. source_level_1m(Lw): the free-field level at 1 m of the measurement source, Lw + 10 lg(1 / 4π), about Lw − 11 dB (Eq. 1).
  2. speech_levels(Lw_source, Lp_source): the A-weighted level of normal speech at each position, Lp,A,S,n. The attenuation of each octave band from 1 m in free field to the position, measured with the calibrated source, is applied to the speech spectrum of Table 1, and the bands are A-weighted and summed (Eq. 2 to 4).
  3. spatial_decay(r, LpAS): the spatial decay rate of speech per distance doubling, D2,S, and the speech level at 4 m, Lp,A,S,4m, from the regression line of the levels on lg(r / 1 m) over the positions from 2 m to 16 m (Eq. 5, 3.3 and 6.2).
  4. distance_at_sti(r, sti, limit): the distraction distance rD (STI 0.50) and the privacy distance rP (STI 0.20) from the regression line of the STI on the distance (3.6, 3.7 and 6.3). It returns nan when the line does not fall.

OCTAVES, SPEECH_LW, SPEECH_LP_1M and A_WEIGHTING hold Table 1. The STI at each position is computed separately by the full method of IEC 60268-16, for instance with pytta.iec60268.sti (#67), so this module does not depend on it.

Source

The equations and Table 1 were taken from the Brazilian adoption of the standard, ABNT NBR ISO 3382-3 (draft of January 2017), which is identical to ISO 3382-3:2012. The mean background level (6.4) is left out, because the text does not say whether the mean over the positions is arithmetic or energetic.

Tests

tests/test_iso3382_3.py uses Table 1 and analytic sound fields:

  1. The omnidirectional speech spectrum of Table 1 sums to 57.4 dB(A), as the table states, and Eq. 1 gives Lw − 10.99 dB.
  2. A source in free field gives D2,S = 20 lg 2 = 6.02 dB and Lp,A,S,4m = 57.4 − 20 lg 4 dB(A), within 1e-10.
  3. A reflection that raises the level at 20 m does not change D2,S, which uses the positions from 2 m to 16 m only.
  4. An STI of 0.8 − 0.05 r gives rD = 6 m and rP = 12 m, and a flat STI gives nan.

Checked with Python 3.12, numpy 1.26 and scipy 1.17. The 7 failures of development (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

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