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
Section titled “air_density_astm”air_density_astm( temperature: ArrayLike, atmospheric_pressure: ArrayLike = 101.325,) -> RealAir density (ASTM E2611-19, Eq. (5)).
.
Parameters
| Name | Description |
|---|---|
temperature | Room temperature T, in degrees Celsius. |
atmospheric_pressure | Atmospheric pressure P, in kilopascals (default 101,325 kPa). |
Returns: Air density rho, in kilograms per cubic metre.
air_layer_transfer_matrix
Section titled “air_layer_transfer_matrix”air_layer_transfer_matrix( wavenumber: ArrayLike, thickness: float, characteristic_impedance: float,) -> TransferMatrixAnalytic 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
| Name | Description |
|---|---|
wavenumber | Air wavenumber k. |
thickness | Layer thickness d, in metres. |
characteristic_impedance | Characteristic impedance rho c, in rayls. |
Returns: The air-layer TransferMatrix.
face_quantities
Section titled “face_quantities”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
| Name | Description |
|---|---|
a | Upstream forward amplitude A. |
b | Upstream backward amplitude B. |
c | Downstream forward amplitude C. |
d | Downstream backward amplitude D. |
wavenumber | Air wavenumber k. |
thickness | Specimen thickness d, in metres. |
characteristic_impedance | Characteristic impedance rho c, in rayls. |
Returns: Tuple (p0, pd, u0, ud) of face pressures and velocities.
plane_wave_frequency_range_astm
Section titled “plane_wave_frequency_range_astm”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
| Name | Description |
|---|---|
spacing | Microphone spacing s, in metres. |
speed_of_sound | Speed of sound c, in metres per second. |
diameter | Tube 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
Section titled “speed_of_sound_astm”speed_of_sound_astm(temperature: ArrayLike) -> RealSpeed of sound in air (ASTM E2611-19, Eq. (4)).
.
Parameters
| Name | Description |
|---|---|
temperature | Room temperature T, in degrees Celsius. |
Returns: Speed of sound c, in metres per second.
transfer_matrix_one_load
Section titled “transfer_matrix_one_load”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',) -> TransferMatrixOne-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
| Name | Description |
|---|---|
load | Microphone transfer functions (H1, H2, H3, H4). |
l1 | Upstream reference distance l1, in metres. |
s1 | Upstream microphone spacing s1, in metres. |
l2 | Downstream reference distance l2, in metres. |
s2 | Downstream microphone spacing s2, in metres. |
thickness | Specimen thickness d, in metres. |
wavenumber | Air wavenumber k. |
characteristic_impedance | Characteristic impedance rho c. |
frequency | Optional frequency vector f, in hertz, retained on the result so TransferMatrix.plot needs no arguments. |
diameter | Optional 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). |
shape | Tube cross-section, "circular", "rectangular" or "square". |
Returns: The specimen TransferMatrix (measurement context retained on the result).
transfer_matrix_two_load
Section titled “transfer_matrix_two_load”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',) -> TransferMatrixTwo-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
| Name | Description |
|---|---|
load_a | Microphone transfer functions (H1, H2, H3, H4) for load a. |
load_b | Microphone transfer functions (H1, H2, H3, H4) for load b. |
l1 | Upstream reference distance l1, in metres. |
s1 | Upstream microphone spacing s1, in metres. |
l2 | Downstream reference distance l2, in metres. |
s2 | Downstream microphone spacing s2, in metres. |
thickness | Specimen thickness d, in metres. |
wavenumber | Air wavenumber k. |
characteristic_impedance | Characteristic impedance rho c. |
frequency | Optional frequency vector f, in hertz, retained on the result so TransferMatrix.plot needs no arguments. |
diameter | Optional 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). |
shape | Tube cross-section, "circular", "rectangular" or "square". |
Returns: The specimen TransferMatrix (measurement context retained on the result).
TransferMatrix
Section titled “TransferMatrix”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()
Section titled “TransferMatrix.absorption_hard_backed()”TransferMatrix.absorption_hard_backed( characteristic_impedance: float,) -> RealHard-backed absorption coefficient (ASTM E2611-19, Eq. (28)).
.
Parameters
| Name | Description |
|---|---|
characteristic_impedance | Characteristic impedance rho c. |
Returns: Absorption coefficient alpha.
TransferMatrix.characteristic_impedance_material()
Section titled “TransferMatrix.characteristic_impedance_material()”TransferMatrix.characteristic_impedance_material() -> ComplexCharacteristic impedance of the material (ASTM E2611-19, Eq. (30)).
.
Returns: Complex characteristic impedance Z, in rayls.
TransferMatrix.determinant()
Section titled “TransferMatrix.determinant()”TransferMatrix.determinant() -> ComplexDeterminant (unity for a reciprocal specimen).
TransferMatrix.material_wavenumber()
Section titled “TransferMatrix.material_wavenumber()”TransferMatrix.material_wavenumber(thickness: float) -> ComplexPropagation wavenumber inside the material (ASTM E2611-19, Eq. (29)).
(complex arccos).
Parameters
| Name | Description |
|---|---|
thickness | Specimen thickness d, in metres. |
Returns: Complex material wavenumber k', in reciprocal metres.
TransferMatrix.plot()
Section titled “TransferMatrix.plot()”TransferMatrix.plot( frequency: ArrayLike | None = None, characteristic_impedance: float | None = None, ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesPlot 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
| Name | Description |
|---|---|
frequency | Frequency vector f, in hertz, matching the shape of the matrix entries; None uses the stored frequency. |
characteristic_impedance | Characteristic impedance rho c of the air in the tube, in rayls; None uses the stored air_characteristic_impedance. |
ax | Existing axes, or None to create a figure. |
language | Plot language: "en" (default) or "es". |
kwargs | Forwarded to the transmission-loss plot call. |
Returns: The axes.
Raises
| Exception | When |
|---|---|
| ValueError | If frequency or characteristic_impedance is neither supplied nor stored on the matrix. |
TransferMatrix.plot_geometry()
Section titled “TransferMatrix.plot_geometry()”TransferMatrix.plot_geometry( ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesDraw the four-microphone tube to scale (dimensioned side view).
Requires matplotlib (pip install phonometry[plot]); returns the
Axes.
Raises
| Exception | When |
|---|---|
| ValueError | If the matrix does not retain its tube geometry (l1/s1/l2/s2/thickness). |
TransferMatrix.reflection_hard_backed()
Section titled “TransferMatrix.reflection_hard_backed()”TransferMatrix.reflection_hard_backed( characteristic_impedance: float,) -> ComplexHard-backed reflection coefficient (ASTM E2611-19, Eq. (27)).
.
Parameters
| Name | Description |
|---|---|
characteristic_impedance | Characteristic impedance rho c. |
Returns: Complex reflection coefficient R.
TransferMatrix.transmission_loss()
Section titled “TransferMatrix.transmission_loss()”TransferMatrix.transmission_loss(characteristic_impedance: float) -> RealNormal-incidence transmission loss in dB (ASTM E2611-19, Eq. (26)).
With
(the factor has unit magnitude for a real wavenumber).
Parameters
| Name | Description |
|---|---|
characteristic_impedance | Characteristic impedance rho c. |
Returns: Transmission loss TLn, in decibels.
wave_decomposition
Section titled “wave_decomposition”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
| Name | Description |
|---|---|
h1 | Transfer function H1,ref (upstream, farther microphone). |
h2 | Transfer function H2,ref (upstream, nearer microphone). |
h3 | Transfer function H3,ref (downstream, nearer microphone). |
h4 | Transfer function H4,ref (downstream, farther microphone). |
l1 | Distance l1 from the front reference plane, in metres. |
s1 | Upstream microphone spacing s1, in metres. |
l2 | Distance l2 from the front reference plane, in metres. |
s2 | Downstream microphone spacing s2, in metres. |
wavenumber | Air wavenumber k (real or complex), scalar or per band. |
diameter | Optional 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). |
shape | Tube cross-section, "circular", "rectangular" or "square". |
Returns: Tuple (A, B, C, D) of complex amplitudes.