Skip to content

room.enclosed_space_absorption

Sound absorption in enclosed spaces (EN 12354-6:2003).

Estimates the total equivalent sound absorption area of a room and the resulting reverberation time from the absorption of its surfaces and objects (the normative Clause 4 model).

The total equivalent absorption area sums the surface contributions, the equivalent absorption areas of objects and object arrays and the air absorption (Formula 1):

A = sum_i alpha_s,i * S_i + sum_j Aobj,j + sum_k alpha_s,k * S_k + Aair

with the air term Aair = 4*m*V*(1 - psi) (Formula 2), the object fraction psi = sum Vobj / V (Formula 3) and, for hard irregular objects, the empirical equivalent area Aobj = Vobj**(2/3) (Formula 4). The reverberation time follows from T = 55.3/c0 * V*(1 - psi) / A (Formula 5); with the standard’s c0 = 345.6 m/s the factor 55.3/c0 is the familiar 0.16.

The informative Annex D method for irregular spaces / uneven absorption distribution is out of scope.

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

air_absorption_area(
m: ArrayLike,
volume: float,
object_fraction: float = 0.0,
) -> np.ndarray | float

Equivalent absorption area of the air (Formula 2).

Parameters

NameDescription
mPower attenuation coefficient of air, in Neper per metre (see AIR_ATTENUATION).
volumeVolume of the empty enclosed space V, m3.
object_fractionObject fraction psi (0-1).

Returns: The air absorption area Aair = 4*m*V*(1 - psi), m2.

enclosed_space_reverberation(
surfaces: Sequence[tuple[float, ArrayLike]],
volume: float,
*,
objects: ArrayLike = (),
object_fraction: float = 0.0,
air_condition: str | None = None,
frequencies: ArrayLike = ...,
speed_of_sound: float = 345.6,
) -> ReverberationResult

Predict the absorption area and reverberation time per octave band.

Chains the total equivalent absorption area (Formula 1, with the air term of Formula 2 from AIR_ATTENUATION when air_condition is given) and the reverberation time (Formula 5).

Parameters

NameDescription
surfacesSequence of (area, absorption_coefficient) pairs; each coefficient a per-band array aligned with frequencies.
volumeVolume of the empty enclosed space V, m3.
objectsEquivalent absorption areas of the objects Aobj, m2.
object_fractionObject fraction psi (0-1).
air_conditionA key of AIR_ATTENUATION (e.g. "20C_50-70") to include air absorption, or None to neglect it.
frequenciesOctave-band centre frequencies, in hertz. The built-in air_condition profiles require the standard OCTAVE_BANDS.
speed_of_soundSpeed of sound c0, m/s.

Returns: The ReverberationResult.

equivalent_absorption_area(
surfaces: Sequence[tuple[float, ArrayLike]],
*,
objects: ArrayLike = (),
air_area: ArrayLike = 0.0,
) -> np.ndarray | float

Total equivalent sound absorption area (Formula 1).

Parameters

NameDescription
surfacesSequence of (area, absorption_coefficient) pairs, one per surface (or object array treated as a surface). The absorption coefficient may be a scalar or a per-band array.
objectsEquivalent absorption areas of the objects Aobj, m2 (see hard_object_absorption): a single value, a 1-D sequence of one value per object, or a 2-D array (n_objects, n_bands) for per-band values; summed over the objects.
air_areaAir absorption area Aair, m2 (see air_absorption_area); scalar or per-band.

Returns: The total equivalent absorption area A, m2; a float for all-scalar inputs, otherwise a per-band array.

hard_object_absorption(object_volume: ArrayLike) -> np.ndarray

Equivalent absorption area of a hard object (Formula 4).

An empirical estimate for hard, irregularly shaped objects (machinery, furniture) whose equivalent area is not otherwise available.

Parameters

NameDescription
object_volumeVolume Vobj of the hard object(s), m3.

Returns: The equivalent absorption area Aobj = Vobj**(2/3), m2.

object_fraction(object_volumes: ArrayLike, volume: float) -> float

Object fraction psi of an enclosed space (Formula 3).

Parameters

NameDescription
object_volumesVolumes of the objects and object arrays, m3.
volumeVolume of the empty enclosed space V, m3.

Returns: The object fraction psi = sum(Vobj) / V.

reverberation_time(
absorption_area: ArrayLike,
volume: float,
*,
object_fraction: float = 0.0,
speed_of_sound: float = 345.6,
) -> np.ndarray | float

Reverberation time from the equivalent absorption area (Formula 5).

Parameters

NameDescription
absorption_areaTotal equivalent absorption area A, m2.
volumeVolume of the empty enclosed space V, m3.
object_fractionObject fraction psi (0-1).
speed_of_soundSpeed of sound c0, m/s (default SPEED_OF_SOUND, giving the factor 0.16).

Returns: The reverberation time T = 55.3/c0 * V*(1 - psi) / A, s.

ReverberationResult(
frequencies: np.ndarray,
absorption_area: np.ndarray,
reverberation_time: np.ndarray,
volume: float,
object_fraction: float,
)

Absorption area and reverberation time of an enclosed space (Clause 4).

Attributes

NameDescription
frequenciesOctave-band centre frequencies, in hertz.
absorption_areaTotal equivalent absorption area A per band, m2.
reverberation_timeReverberation time T per band, s.
volumeVolume of the empty enclosed space, m3.
object_fractionObject fraction psi (0-1).
ReverberationResult.plot(
ax: Axes | None = None,
*,
language: str = 'en',
**kwargs: Any,
) -> Axes

Plot the reverberation time over the octave bands.

Requires matplotlib (pip install phonometry[plot]); returns the Axes.

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

Render an enclosed-space absorption/reverberation fiche to a PDF.

Writes a one-page report characterising an enclosed space by the EN 12354-6:2003 Clause 4 model: a standard-basis line, an optional metadata header block (client, room, description, room volume, object fraction, climate …), a per-band table of the equivalent sound absorption area A and the reverberation time T beside the result’s own reverberation-time plot (plot), the boxed mid-frequency reverberation time with the mid-frequency absorption area alongside, and a footer with the fixed disclaimer. EN 12354-6 gives a diffuse-field estimate rather than a measurement; a supplied metadata.requirement is printed as a target reverberation-time reference line without a PASS/FAIL verdict, since a room reverberation time is a target range rather than a strictly higher/lower-is-better quantity.

Parameters

NameDescription
pathDestination path of the PDF file.
metadataOptional ReportMetadata; None produces a bare characterisation fiche (body, result and disclaimer only).
engineRendering back end; only "reportlab" is supported.
verboseAccepted for parity with the other fiches; the band table already shows both A and T, so it has no effect.
languageFiche language: "en" (default, English) or "es" (Spanish, with a comma decimal separator).

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