Skip to content

materials.absorbers.four_microphone

Four-microphone transfer-matrix method for the transmission of a specimen.

ASTM E2611-19, the two-tube method: the specimen sits between an upstream and a downstream tube section with two microphones on each side, and the wave field is decomposed into forward/backward amplitudes on each side (Eqs. (17)-(20)). The face pressures and particle velocities are formed (Eq. (21)) and the transfer matrix [[T11, T12], [T21, T22]] is solved from a two-load (Eq. (22)) or a symmetric one-load (Eq. (24)) measurement. Transmission loss (Eq. (26)), hard-backed reflection/absorption (Eqs. (27)/(28)) and the material wavenumber/characteristic impedance (Eqs. (29)/(30)) all read out of those four poles, which is what makes the standard one subject: everything here exists to fill the matrix or to interpret it.

Time convention with the forward wave carried by (Eq. (21)); air properties from Clause 8.2/8.3, Eqs. (4)/(5), use temperature in degrees Celsius. Both differ from the ISO 10534-2 ansatz of impedance_tube, whose wavenumber is and whose air properties take kelvin; the two are not interchangeable, so the air-property and working-range helpers are named per standard and each stays with the method that prescribes it. What the two transfer methods genuinely share - the tube cross-section and the plane-wave working-range arithmetic - is imported from that module.

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

air_density_astm(
temperature: ArrayLike,
atmospheric_pressure: ArrayLike = 101.325,
) -> Real

Air density (ASTM E2611-19, Eq. (5)).

.

Parameters

NameDescription
temperatureRoom temperature T, in degrees Celsius.
atmospheric_pressureAtmospheric pressure P, in kilopascals (default 101,325 kPa).

Returns: Air density rho, in kilograms per cubic metre.

air_layer_transfer_matrix(
wavenumber: ArrayLike,
thickness: float,
characteristic_impedance: float,
) -> TransferMatrix

Analytic transfer matrix of a pure air layer of thickness d.

the classical loss-free layer used to validate the ASTM E2611-19 reduction (it is reciprocal, , and symmetric, ).

Parameters

NameDescription
wavenumberAir wavenumber k.
thicknessLayer thickness d, in metres.
characteristic_impedanceCharacteristic impedance rho c, in rayls.

Returns: The air-layer TransferMatrix.

face_quantities(
a: ArrayLike,
b: ArrayLike,
c: ArrayLike,
d: ArrayLike,
*,
wavenumber: ArrayLike,
thickness: float,
characteristic_impedance: float,
) -> tuple[Complex, Complex, Complex, Complex]

Face pressures and particle velocities (ASTM E2611-19, Eq. (21)).

Parameters

NameDescription
aUpstream forward amplitude A.
bUpstream backward amplitude B.
cDownstream forward amplitude C.
dDownstream backward amplitude D.
wavenumberAir wavenumber k.
thicknessSpecimen thickness d, in metres.
characteristic_impedanceCharacteristic impedance rho c, in rayls.

Returns: Tuple (p0, pd, u0, ud) of face pressures and velocities.

plane_wave_frequency_range_astm(
spacing: float,
speed_of_sound: float,
*,
diameter: float | None = None,
shape: str = 'circular',
) -> tuple[float, float]

Working plane-wave frequency range (f_l, f_u) (ASTM E2611-19).

The upper limit is the smaller of the microphone-spacing bound , i.e. (6.5.4), and, when the tube diameter is given, the cut-on bound with for a circular tube (6.2.4.1, Eq. (2)) or for a rectangular tube with d the largest section dimension (6.2.5). The lower limit follows 6.2.3: the spacing shall be greater than 1 % of the wavelength, i.e. .

With two different spacings s1/s2, call with the larger one for the upper bound and the smaller one for the lower bound (each bound is binding for every microphone pair).

Parameters

NameDescription
spacingMicrophone spacing s, in metres.
speed_of_soundSpeed of sound c, in metres per second.
diameterTube diameter (circular) or largest section dimension (rectangular/square) d, in metres; None applies only the spacing bound.
shape"circular", "rectangular" or "square".

Returns: Tuple (f_l, f_u) of the lower and upper frequency limits, in Hz.

speed_of_sound_astm(temperature: ArrayLike) -> Real

Speed of sound in air (ASTM E2611-19, Eq. (4)).

.

Parameters

NameDescription
temperatureRoom temperature T, in degrees Celsius.

Returns: Speed of sound c, in metres per second.

transfer_matrix_one_load(
load: tuple[ArrayLike, ArrayLike, ArrayLike, ArrayLike],
*,
l1: float,
s1: float,
l2: float,
s2: float,
thickness: float,
wavenumber: ArrayLike,
characteristic_impedance: float,
frequency: ArrayLike | None = None,
diameter: float | None = None,
shape: str = 'circular',
) -> TransferMatrix

One-load transfer matrix, symmetric specimen (ASTM E2611-19, Eqs. (23)-(24)).

Valid only for a reciprocal and symmetric specimen ( and , Eq. (23)). A single termination suffices:

Parameters

NameDescription
loadMicrophone transfer functions (H1, H2, H3, H4).
l1Upstream reference distance l1, in metres.
s1Upstream microphone spacing s1, in metres.
l2Downstream reference distance l2, in metres.
s2Downstream microphone spacing s2, in metres.
thicknessSpecimen thickness d, in metres.
wavenumberAir wavenumber k.
characteristic_impedanceCharacteristic impedance rho c.
frequencyOptional frequency vector f, in hertz, retained on the result so TransferMatrix.plot needs no arguments.
diameterOptional tube diameter (circular) or largest section dimension (rectangular/square), in metres, that activates the plane-wave working-range check (6.2.3-6.2.5, 6.5.4).
shapeTube cross-section, "circular", "rectangular" or "square".

Returns: The specimen TransferMatrix (measurement context retained on the result).

transfer_matrix_two_load(
load_a: tuple[ArrayLike, ArrayLike, ArrayLike, ArrayLike],
load_b: tuple[ArrayLike, ArrayLike, ArrayLike, ArrayLike],
*,
l1: float,
s1: float,
l2: float,
s2: float,
thickness: float,
wavenumber: ArrayLike,
characteristic_impedance: float,
frequency: ArrayLike | None = None,
diameter: float | None = None,
shape: str = 'circular',
) -> TransferMatrix

Two-load transfer matrix (ASTM E2611-19, Eqs. (17)-(22)).

Each load is the tuple (H1, H2, H3, H4) of the four microphone transfer functions measured with a different downstream termination. The two loads give four equations for the four unknowns (Eq. (22)):

Parameters

NameDescription
load_aMicrophone transfer functions (H1, H2, H3, H4) for load a.
load_bMicrophone transfer functions (H1, H2, H3, H4) for load b.
l1Upstream reference distance l1, in metres.
s1Upstream microphone spacing s1, in metres.
l2Downstream reference distance l2, in metres.
s2Downstream microphone spacing s2, in metres.
thicknessSpecimen thickness d, in metres.
wavenumberAir wavenumber k.
characteristic_impedanceCharacteristic impedance rho c.
frequencyOptional frequency vector f, in hertz, retained on the result so TransferMatrix.plot needs no arguments.
diameterOptional tube diameter (circular) or largest section dimension (rectangular/square), in metres, that activates the plane-wave working-range check (6.2.3-6.2.5, 6.5.4).
shapeTube cross-section, "circular", "rectangular" or "square".

Returns: The specimen TransferMatrix (measurement context retained on the result).

TransferMatrix(
t11: Complex,
t12: Complex,
t21: Complex,
t22: Complex,
l1: float | None = None,
s1: float | None = None,
l2: float | None = None,
s2: float | None = None,
thickness: float | None = None,
diameter: float | None = None,
shape: str | None = None,
frequency: Real | None = None,
air_characteristic_impedance: float | None = None,
)

Acoustic transfer matrix [[T11, T12], [T21, T22]] (ASTM E2611-19).

Relates the pressure and normal particle velocity across a specimen, (Eq. (16)). Each entry is complex and may be scalar or a per-frequency array of matching shape.

The trailing fields retain the measurement context when the matrix comes out of transfer_matrix_two_load / transfer_matrix_one_load (tube geometry l1/s1/l2/s2, specimen thickness, tube diameter and canonical cross-section shape, the frequency vector when supplied to the solver, and the air air_characteristic_impedance rho c); all default to None so a hand-built matrix (for example air_layer_transfer_matrix) is unchanged.

TransferMatrix.absorption_hard_backed(
characteristic_impedance: float,
) -> Real

Hard-backed absorption coefficient (ASTM E2611-19, Eq. (28)).

.

Parameters

NameDescription
characteristic_impedanceCharacteristic impedance rho c.

Returns: Absorption coefficient alpha.

TransferMatrix.characteristic_impedance_material()

Section titled “TransferMatrix.characteristic_impedance_material()”
TransferMatrix.characteristic_impedance_material() -> Complex

Characteristic impedance of the material (ASTM E2611-19, Eq. (30)).

.

Returns: Complex characteristic impedance Z, in rayls.

TransferMatrix.determinant() -> Complex

Determinant (unity for a reciprocal specimen).

TransferMatrix.material_wavenumber(thickness: float) -> Complex

Propagation wavenumber inside the material (ASTM E2611-19, Eq. (29)).

(complex arccos).

Parameters

NameDescription
thicknessSpecimen thickness d, in metres.

Returns: Complex material wavenumber k', in reciprocal metres.

TransferMatrix.plot(
frequency: ArrayLike | None = None,
characteristic_impedance: float | None = None,
ax: Axes | None = None,
*,
language: str = 'en',
**kwargs: Any,
) -> Axes

Plot the transmission loss with the hard-backed absorption overlaid.

Reads the four-pole entries out as the two ASTM E2611-19 spectra a laboratory quotes: the normal-incidence transmission loss TLn(f) (Eq. (26), the primary curve, left axis) and the hard-backed absorption coefficient alpha(f) (Eq. (28), a muted companion on a 0..1 right axis). The four-pole entries carry no frequency axis of their own, so the plot needs the measurement’s frequency vector (matching the shape of the entries) and the air characteristic impedance rho c. A matrix built by the solvers retains both (self.frequency / self.air_characteristic_impedance), so plot() takes no arguments there; only a hand-built matrix (for example air_layer_transfer_matrix) must supply them.

Requires matplotlib (pip install phonometry[plot]); returns the Axes of the transmission-loss curve.

Parameters

NameDescription
frequencyFrequency vector f, in hertz, matching the shape of the matrix entries; None uses the stored frequency.
characteristic_impedanceCharacteristic impedance rho c of the air in the tube, in rayls; None uses the stored air_characteristic_impedance.
axExisting axes, or None to create a figure.
languagePlot language: "en" (default) or "es".
kwargsForwarded to the transmission-loss plot call.

Returns: The axes.

Raises

ExceptionWhen
ValueErrorIf frequency or characteristic_impedance is neither supplied nor stored on the matrix.
TransferMatrix.plot_geometry(
ax: Axes | None = None,
*,
language: str = 'en',
**kwargs: Any,
) -> Axes

Draw the four-microphone tube to scale (dimensioned side view).

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

Raises

ExceptionWhen
ValueErrorIf the matrix does not retain its tube geometry (l1/s1/l2/s2/thickness).
TransferMatrix.reflection_hard_backed(
characteristic_impedance: float,
) -> Complex

Hard-backed reflection coefficient (ASTM E2611-19, Eq. (27)).

.

Parameters

NameDescription
characteristic_impedanceCharacteristic impedance rho c.

Returns: Complex reflection coefficient R.

TransferMatrix.transmission_loss(characteristic_impedance: float) -> Real

Normal-incidence transmission loss in dB (ASTM E2611-19, Eq. (26)).

With

(the factor has unit magnitude for a real wavenumber).

Parameters

NameDescription
characteristic_impedanceCharacteristic impedance rho c.

Returns: Transmission loss TLn, in decibels.

wave_decomposition(
h1: ArrayLike,
h2: ArrayLike,
h3: ArrayLike,
h4: ArrayLike,
*,
l1: float,
s1: float,
l2: float,
s2: float,
wavenumber: ArrayLike,
diameter: float | None = None,
shape: str = 'circular',
) -> tuple[Complex, Complex, Complex, Complex]

Decompose the wave field into (A, B, C, D) (ASTM E2611-19, Eqs. (17)-(20)).

The exponents are implemented exactly as printed:

A/B are the forward/backward complex amplitudes on the upstream (source) side and C/D those on the downstream side, all referenced to the front face . With the / forward- convention these exponents correspond to the microphone whose transfer function is H2 sitting nearest the front face at distance l1 (and H1 at ), and to H3 nearest the downstream side at l2 (and H4 at ), with l1, l2 measured from the front reference plane. The convention was locked down against the analytic air-layer transfer matrix (see air_layer_transfer_matrix).

Parameters

NameDescription
h1Transfer function H1,ref (upstream, farther microphone).
h2Transfer function H2,ref (upstream, nearer microphone).
h3Transfer function H3,ref (downstream, nearer microphone).
h4Transfer function H4,ref (downstream, farther microphone).
l1Distance l1 from the front reference plane, in metres.
s1Upstream microphone spacing s1, in metres.
l2Distance l2 from the front reference plane, in metres.
s2Downstream microphone spacing s2, in metres.
wavenumberAir wavenumber k (real or complex), scalar or per band.
diameterOptional tube diameter (circular) or largest section dimension (rectangular/square), in metres, that activates the plane-wave working-range check (6.2.3-6.2.5, 6.5.4).
shapeTube cross-section, "circular", "rectangular" or "square".

Returns: Tuple (A, B, C, D) of complex amplitudes.