Skip to content

materials.sound_absorption

Sound absorption in a reverberation room: BS EN ISO 354:2003.

The mean reverberation time of a reverberation room is measured empty and with the test specimen installed. From those two reverberation times the equivalent sound absorption area of the specimen is obtained via Sabine’s equation, and for a plane absorber the sound absorption coefficient follows by dividing by the covered area (ISO 354:2003, Clauses 4 and 8.1).

Equivalent sound absorption area (ISO 354:2003, Eq. (5) empty room / Eq. (7) with specimen; identical form):

A = 55,3 * V / (c * T) - 4 * V * m

with V the room volume (m3), c the speed of sound (m/s), T the reverberation time (s) and m the power attenuation coefficient of air (1/m). The speed of sound follows Eq. (6), valid for 15 degC to 30 degC:

c = (331 + 0,6 * t/degC) m/s

The equivalent sound absorption area of the specimen and its absorption coefficient (ISO 354:2003, Eq. (8) and Eq. (9)):

AT = A2 - A1 = 55,3 * V * (1/(c2*T2) - 1/(c1*T1)) - 4 * V * (m2 - m1)
alpha_s = AT / S

alpha_s may exceed 1,0 (e.g. from diffraction/edge effects) and is not a percentage (ISO 354:2003, Clause 3.7 NOTE 2); it is therefore never clamped.

The air attenuation coefficient m is defined by ISO 354 only through its conversion from the ISO 9613-1 attenuation coefficient alpha (in dB/m) (ISO 354:2003, 8.1.2.1):

m = alpha / (10 * lg e)

ISO 354 otherwise defers the calculation of alpha entirely to ISO 9613-1. m is therefore a user-supplied per-band parameter here (default 0, i.e. no air correction); a caller holding ISO 9613-1 alpha values can convert them with attenuation_from_alpha.

Auto-generated from the source docstrings by scripts/generate_api_docs.py (make api-docs). Do not edit by hand.

absorption_area(
t60: ArrayLike,
volume: float,
*,
temperature: float = 20.0,
speed_of_sound: float | None = None,
m: ArrayLike = 0.0,
) -> NDArray[np.float64]

Equivalent sound absorption area of a room (ISO 354:2003, Eq. (5)/(7)).

A = 55,3 * V / (c * T) - 4 * V * m. This is Sabine’s equation with the air-absorption term; it gives the empty-room area A1 from T1 or the with-specimen area A2 from T2 (both equations have identical form).

Parameters

NameDescription
t60Reverberation time(s) T, in seconds (scalar or per band).
volumeRoom volume V, in cubic metres.
temperatureAir temperature, in degrees Celsius, used to compute the speed of sound via Eq. (6) when speed_of_sound is not given (default 20 degC, i.e. c = 343 m/s). A temperature outside 15..30 degC emits an AbsorptionWarning. A room volume below the 150 m3 minimum of clause 6.1.1 likewise emits an advisory AbsorptionWarning.
speed_of_soundExplicit speed of sound c, in m/s; overrides temperature and Eq. (6) when supplied.
mPower attenuation coefficient of air m, in 1/m (a scalar or an array matching the shape of t60; default 0, i.e. no air correction). A per-band m whose shape differs from t60 raises ValueError. Obtain it from an ISO 9613-1 attenuation coefficient with attenuation_from_alpha.

Returns: Equivalent sound absorption area A, in square metres, with the shape of t60.

absorption_coefficient(
t1: ArrayLike,
t2: ArrayLike,
volume: float,
sample_area: float,
*,
temperature1: float = 20.0,
temperature2: float | None = None,
speed_of_sound1: float | None = None,
speed_of_sound2: float | None = None,
m1: ArrayLike = 0.0,
m2: ArrayLike = 0.0,
) -> NDArray[np.float64]

Sound absorption coefficient of a plane absorber (ISO 354:2003, Eq. (9)).

Builds the equivalent sound absorption area of the specimen from Eq. (8), AT = A2 - A1 = 55,3*V*(1/(c2*T2) - 1/(c1*T1)) - 4*V*(m2 - m1), using the empty-room reverberation time T1 and the with-specimen time T2, then returns alpha_s = AT / S (Eq. (9)).

The two measurements may be at different temperatures; c1 and c2 are resolved independently. alpha_s is returned unclamped and may exceed 1,0 (Clause 3.7 NOTE 2). Because adding an absorber must reduce the reverberation time, T2 >= T1 (alpha_s <= 0) is non-physical and emits an AbsorptionWarning. A room volume below the 150 m3 minimum of clause 6.1.1, or a sample area outside the clause 6.2.1.1 range (10 m2 <= S <= 12 m2, upper limit scaled by (V/200)^(2/3) when V > 200 m3), each emit an advisory AbsorptionWarning.

Parameters

NameDescription
t1Empty-room reverberation time(s) T1, in seconds.
t2With-specimen reverberation time(s) T2, in seconds.
volumeRoom volume V, in cubic metres.
sample_areaArea S covered by the test specimen, in square metres (for both-sides-exposed absorbers, the area of the two sides; Clause 3.7 NOTE 1).
temperature1Empty-room air temperature, in degrees Celsius (default 20). Used for c1 via Eq. (6) unless speed_of_sound1 is given.
temperature2With-specimen air temperature, in degrees Celsius; defaults to temperature1. Used for c2 unless speed_of_sound2 is given.
speed_of_sound1Explicit c1 in m/s; overrides temperature1.
speed_of_sound2Explicit c2 in m/s; overrides temperature2. Defaults to speed_of_sound1 when that is given but c2 is not, so overriding only c1 applies the same speed to both measurements.
m1Empty-room air attenuation coefficient m1, in 1/m (default 0).
m2With-specimen air attenuation coefficient m2, in 1/m (default 0).

Returns: Sound absorption coefficient alpha_s with the broadcast shape of t1 and t2.

Advisory for out-of-range or non-physical ISO 354 absorption inputs.

attenuation_from_alpha(alpha: ArrayLike) -> NDArray[np.float64]

Air power attenuation coefficient m from ISO 9613-1 alpha.

Applies the ISO 354:2003 (8.1.2.1) conversion m = alpha / (10 * lg e), where alpha is the attenuation coefficient in decibels per metre used by ISO 9613-1 and m is the power attenuation coefficient in reciprocal metres entering Eq. (5)/(7)/(8). ISO 354 itself provides no alpha table or formula (it defers to ISO 9613-1); this helper only performs the unit conversion for a caller who already holds alpha values.

Parameters

NameDescription
alphaAttenuation coefficient, in dB/m (scalar or per band).

Returns: Power attenuation coefficient m, in 1/m.

measure_sound_absorption(
frequencies: ArrayLike,
t_empty: ArrayLike,
t_specimen: ArrayLike,
*,
volume: float,
area: float,
temperature: float = 20.0,
humidity: float | None = None,
speed_of_sound: float | None = None,
m: ArrayLike = 0.0,
) -> SoundAbsorptionMeasurement

Measure the sound absorption of a plane absorber (ISO 354:2003).

Assembles a SoundAbsorptionMeasurement from the one-third-octave reverberation times of the empty room (T1) and of the room with the specimen installed (T2). The equivalent sound absorption areas A1 and A2 follow from Sabine’s equation (Eq. (5)/(7), delegated to absorption_area) and the sound absorption coefficient alpha_s = (A2 - A1) / S from Eq. (8)/(9) (delegated to absorption_coefficient); no formula is re-derived here.

Both measurements are taken at the same air temperature and, for the air attenuation term, the same climatic conditions (ISO 354:2003, 6.3), so a single temperature and m apply to both. Use the lower-level absorption_coefficient directly when the empty-room and with-specimen climates differ.

Parameters

NameDescription
frequenciesOne-third-octave band centre frequencies, in Hz (the ISO 354 range is 100 Hz to 5000 Hz); a 1-D array matching t_empty and t_specimen.
t_emptyEmpty-room reverberation time T1, per band, in seconds.
t_specimenWith-specimen reverberation time T2, per band, in seconds.
volumeReverberation-room volume V, in cubic metres. A volume below the 150 m3 minimum of clause 6.1.1 emits an advisory AbsorptionWarning.
areaArea S covered by the test specimen, in square metres. An area outside the clause 6.2.1.1 range (10 m2 to 12 m2, upper limit scaled by (V/200)^(2/3) for V > 200 m3) emits an advisory AbsorptionWarning.
temperatureAir temperature during the test, in degrees Celsius (default 20). Used for the speed of sound via Eq. (6) unless speed_of_sound is given; a temperature outside 15..30 degC emits an AbsorptionWarning.
humidityRelative humidity during the test, in % (informational; recorded on the result but not used in the computation, which sees the climate only through m). None leaves it unrecorded.
speed_of_soundExplicit speed of sound c, in m/s; overrides temperature and Eq. (6) when supplied.
mPower attenuation coefficient of air m, in 1/m (a scalar or a per-band array matching frequencies; default 0, i.e. no air correction). Obtain it from an ISO 9613-1 attenuation coefficient with attenuation_from_alpha.

Returns: A frozen SoundAbsorptionMeasurement.

Raises

ExceptionWhen
ValueErrorIf the frequency and reverberation-time arrays do not share one shape, or an input is non-physical (see absorption_coefficient).
SoundAbsorptionMeasurement(
frequencies: NDArray[np.float64],
t_empty: NDArray[np.float64],
t_specimen: NDArray[np.float64],
volume: float,
area: float,
temperature: float,
humidity: float | None,
speed_of_sound: float,
air_attenuation: NDArray[np.float64],
absorption_area_empty: NDArray[np.float64],
absorption_area_with_specimen: NDArray[np.float64],
alpha_s: NDArray[np.float64],
)

A reverberation-room sound absorption measurement (ISO 354:2003).

The one-third-octave outcome of a plane-absorber test: the mean reverberation time measured empty (T1) and with the specimen (T2), the equivalent sound absorption areas A1 (Eq. (5)) and A2 (Eq. (7)) they give through Sabine’s equation, and the sound absorption coefficient alpha_s (Eq. (8)/(9)) of the specimen. Build it with measure_sound_absorption; the frozen instance then exposes plot (alpha_s versus frequency) and report (an accredited ISO 354 test-report PDF).

A single-number rating (the practical coefficient alpha_p and the weighted coefficient alpha_w) is defined by ISO 11654, not ISO 354, and is therefore not produced here; pass alpha_s to weighted_absorption_from_third_octave for it.

Attributes

NameDescription
frequenciesOne-third-octave band centre frequencies, in Hz (the ISO 354 range is 100 Hz to 5000 Hz).
t_emptyMean reverberation time of the empty room T1, per band, in seconds.
t_specimenMean reverberation time of the room with the specimen T2, per band, in seconds.
volumeReverberation-room volume V, in cubic metres.
areaArea S covered by the test specimen, in square metres.
temperatureAir temperature during the test, in degrees Celsius.
humidityRelative humidity during the test, in %, or None when not recorded. It is informational: humidity enters ISO 354 only through the air attenuation coefficient m (via ISO 9613-1), never directly.
speed_of_soundPropagation speed of sound c used in the Sabine inversion, in m/s (from Eq. (6) unless it was given explicitly).
air_attenuationPower attenuation coefficient of air m, per band, in 1/m (0 when no air correction was applied).
absorption_area_emptyEquivalent sound absorption area of the empty room A1 (Eq. (5)), per band, in square metres.
absorption_area_with_specimenEquivalent sound absorption area of the room containing the specimen A2 (Eq. (7)), per band, in square metres.
alpha_sSound absorption coefficient alpha_s (Eq. (8)/(9)), per band. It may exceed 1,0 (Clause 3.7 NOTE 2) and is never clamped.

SoundAbsorptionMeasurement.equivalent_absorption_area

Section titled “SoundAbsorptionMeasurement.equivalent_absorption_area”

property

Equivalent sound absorption area of the specimen AT = A2 - A1.

The ISO 354:2003 Eq. (8) quantity, per band, in square metres; dividing it by the specimen area S gives alpha_s (Eq. (9)).

SoundAbsorptionMeasurement.plot(
ax: Axes | None = None,
*,
language: str = 'en',
**kwargs: Any,
) -> Axes

Plot the sound absorption coefficient alpha_s versus frequency.

Draws alpha_s over the one-third-octave band axis (ISO 354). Values above 1,0 are kept (Clause 3.7 NOTE 2), so the axis grows to show them. Requires matplotlib (pip install phonometry[plot]); returns the Axes and never calls plt.show.

Parameters

NameDescription
axExisting axes, or None to create a figure.
language"en" (default) or "es".
kwargsForwarded to the alpha_s curve plot call.

Returns: The axes.

SoundAbsorptionMeasurement.report(
path: str,
*,
metadata: ReportMetadata | None = None,
engine: str = 'reportlab',
verbose: bool = False,
language: str = 'en',
) -> str

Render an ISO 354 sound-absorption test-report fiche to a PDF.

Writes a one-page accredited reverberation-room report: the standard-basis line, an optional metadata header block (client, specimen, area S, room volume V, mounting, climate …), a two-panel body with the one-third-octave alpha_s table beside the alpha_s curve, and a footer with the fixed disclaimer. ISO 354 is a characterisation, so there is no pass/fail verdict and no single-number rating (the weighted alpha_w is an ISO 11654 quantity, out of scope here).

Parameters

NameDescription
pathDestination path of the PDF file.
metadataOptional ReportMetadata; None produces a body-and-disclaimer fiche without a metadata header. The requirement field is ignored (ISO 354 has no verdict).
engineRendering back end; only "reportlab" is supported.
verboseWhen True, the table adds the reverberation times T1/T2 and the equivalent absorption areas A1/A2.
languageFiche language: "en" (default, English, decimal point) or "es" (Spanish, decimal comma).

Returns: The written path as a str.

Raises

ExceptionWhen
ValueErrorIf engine is not "reportlab".
ImportErrorIf reportlab is not installed (pip install phonometry[report]).
Created and maintained by· GitHub· PyPI· All projects