materials.absorbers.slow_sound
La referencia de la API se publica en inglés en los dos idiomas: se genera a partir de los docstrings del código, que son su texto original.
Slow-sound slit panels loaded with Helmholtz resonators (perfect absorbers).
A rigid panel perforated by a periodic array of thin closed slits, whose upper wall is loaded by an array of Helmholtz resonators (HRs), behaves as a deep-subwavelength, locally reacting sound absorber. The resonators slow the sound inside the slit, pulling the slit resonance down to the deep subwavelength regime, and the intrinsic visco-thermal losses can be tuned to exactly balance the leakage of the structure (critical coupling), giving perfect absorption at a chosen frequency and angle. The model follows the transfer-matrix treatment of Jimenez, Groby, Pagneux and Romero-Garcia (Iridescent Perfect Absorption in Critically-Coupled Acoustic Metamaterials Using the Transfer Matrix Method, Appl. Sci. 2017, 7, 618) together with the resonator model and end corrections detailed in the supplementary material of Jimenez, Huang, Romero-Garcia, Pagneux and Groby (Ultra-thin metamaterial for perfect and quasi-omnidirectional sound absorption, Appl. Phys. Lett. 2016, 109, 121902).
The building blocks, all in the e^{+j w t} convention used throughout
phonometry (a passive medium has ):
-
Visco-thermal effective parameters. The slit of height
huses the narrow-channel effective density and bulk modulus (Appl. Sci. Eq. (6); Appl. Phys. Lett. Eqs. (A1)-(A2)):and
with and . The square necks and cavities use the rectangular-duct series of Stinson (1991), reproduced as Appl. Sci. Eqs. (7)-(8) with the transverse wavenumbers and . The duct series is printed in the opposite time convention of the source; it is returned conjugated here so the neck and cavity share the passivity of the slit. Both models are pinned in the tests to their exact limits: the effective density tends to
rho0and the bulk modulus tokappa0as the boundary layers vanish, and tends to the Poiseuille flow resistivity of the channel as ( for the slit, for a square duct). -
Helmholtz-resonator impedance. Each resonator is a neck (length
l_n, sidew_n) over a closed cavity (lengthl_c, sidew_c); its impedance follows Appl. Phys. Lett. Eq. (A23) with the neck-to-cavity radiation end correction of Eqs. (A24)-(A26). -
Transfer matrix. The panel is the chain
M_dl (M_s M_HR M_s)...of half-lattice slit steps (Appl. Sci. Eq. (2)), resonators as point shunt scatterers (Eq. (3)) and the slit-radiation end correction (Eq. (3)/(A27)). The slit-radiation series impedance is printed in the sources as-i w dl_slit rho0 / (phi_t S0); like the duct series it is used conjugated here (+j w), so it acts as the added radiation mass it models and lowers the slit-panel resonance. The rigidly-backed reflection factor is with (Eq. (4)), and . Perfect absorption (critical coupling) is reached when the reflection zero sits on the real-frequency axis, i.e. and with the acoustic surface impedance (Eq. (9)).
Auto-generated from the source docstrings by
scripts/generate_api_docs.py(make api-docs). Do not edit by hand.
critical_coupling_design
Section titled “critical_coupling_design”critical_coupling_design( target_frequency: float, resonator: HelmholtzResonator, *, lattice_step: float, period: float, angle: float = 0.0, slit_height_bounds: tuple[float, float] = (0.0002, 0.005), cavity_length_bounds: tuple[float, float] = (0.002, 0.2), end_correction: bool = True, slit_radiation: bool = True, air: AirProperties = ...,) -> CriticalCouplingResultSolve resonator/slit geometry for perfect absorption at a frequency.
Critical coupling (perfect absorption) requires the acoustic surface
impedance of the rigidly-backed panel to
satisfy and
at target_frequency
(Appl. Sci. 2017 Eq. (9)), i.e. the reflection zero lies on the
real-frequency axis. Holding the neck geometry and cavity side of
resonator fixed, this tunes the cavity length (which sets the
resonance frequency) and the slit height (which sets the visco-thermal
leakage balance) to meet both conditions, so alpha ~ 1 at the design
point.
Parameters
| Name | Description |
|---|---|
target_frequency | Design frequency f0, in hertz. |
resonator | Base geometry; its cavity_length is used as the initial guess and its neck and cavity side are held fixed. |
lattice_step | Resonator lattice step a, in metres. |
period | Slit array period d, in metres. |
angle | Design angle of incidence theta, in radians. |
slit_height_bounds | Search bounds for the slit height, in metres. |
cavity_length_bounds | Search bounds for the cavity length, in metres. |
end_correction | Include the resonator radiation end corrections. |
slit_radiation | Include the slit-to-free-air radiation correction. |
air | State of the air the panel is designed for (AirProperties): its speed of sound c0, density rho0, viscosity eta, Prandtl number Pr, ratio of specific heats gamma and static pressure P0. |
Returns: A CriticalCouplingResult. A SlowSoundAbsorberWarning is emitted (via warnings.warn) if the solver does not reach perfect absorption within tolerance.
CriticalCouplingResult
Section titled “CriticalCouplingResult”CriticalCouplingResult( target_frequency: float, angle: float, resonator: HelmholtzResonator, slit_height: float, absorption: float, normalized_impedance: complex, converged: bool,)Outcome of a critical-coupling (perfect-absorption) design.
resonator and slit_height are the solved geometry that places the
reflection zero on the real-frequency axis at target_frequency and
angle; absorption is the modelled coefficient there (~1) and
normalized_impedance the achieved Z cos(theta) / Z0 (~1).
converged flags whether the root find met its tolerance.
helmholtz_resonator_impedance
Section titled “helmholtz_resonator_impedance”helmholtz_resonator_impedance( frequency: ArrayLike, resonator: HelmholtzResonator, *, slit_height: float | None = None, lattice_step: float | None = None, end_correction: bool = True, geometry: str = 'square', air: AirProperties = ..., sum_terms: int = 40,) -> ComplexAcoustic impedance of a Helmholtz resonator with visco-thermal losses.
With the default geometry="square" the neck and cavity are square
ducts using the effective parameters of
rectangular_duct_properties; the impedance is Appl. Phys. Lett. 2016
Eq. (A23) with the neck-to-cavity radiation correction of Eq. (A24) and,
when slit_height and lattice_step are supplied, the neck-to-slit
correction of Eqs. (A25)-(A26) added to the total neck length correction:
with ,
(and likewise for the
cavity), reducing to Eq. (A22) when dl = 0.
With geometry="slit" the resonator is two-dimensional (the neck and
cavity are slit-like ducts spanning the lattice step): the effective
parameters come from slit_effective_properties with the neck and
cavity widths, the duct sections are w_n a and w_c a, and the end
corrections are the 2-D fits of Sci. Rep. 7:5389 Eqs. (11)-(12); both
slit_height and lattice_step are then required.
Parameters
| Name | Description |
|---|---|
frequency | Frequency vector f, in hertz. |
resonator | The HelmholtzResonator geometry. |
slit_height | Slit height h for the neck-to-slit correction; if None that correction is omitted ("square" only). |
lattice_step | Lattice step a for the neck-to-slit correction. |
end_correction | Include the radiation end corrections (default True). |
geometry | "square" (default) for square-duct necks and cavities, "slit" for the two-dimensional resonator model. |
air | State of the air in the neck and cavity (AirProperties); the density rho0, viscosity eta, Prandtl number Pr, ratio of specific heats gamma and static pressure P0 are read from it. |
sum_terms | Transverse modes kept per axis in the duct series. |
Returns: Complex acoustic impedance Z_HR, in Pa s/m3, shaped like frequency.
HelmholtzResonator
Section titled “HelmholtzResonator”HelmholtzResonator( neck_length: float, neck_side: float, cavity_length: float, cavity_side: float,)A square-cross-section Helmholtz resonator loading a slit.
neck_length l_n and neck_side w_n describe the neck,
cavity_length l_c and cavity_side w_c the closed cavity;
all lengths are in metres.
HelmholtzResonator.plot()
Section titled “HelmholtzResonator.plot()”HelmholtzResonator.plot( ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesDraw the resonator cross-section to scale (dimensioned).
Requires matplotlib (pip install phonometry[plot]); returns the
Axes.
plot_helmholtz_resonator_geometry
Section titled “plot_helmholtz_resonator_geometry”plot_helmholtz_resonator_geometry( resonator: HelmholtzResonator, ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesDraw a square-section Helmholtz resonator cross-section, to scale.
Neck opening upward into free air, cavity below, with the four defining dimensions (neck side and length, cavity side and length) dimensioned.
Parameters
| Name | Description |
|---|---|
resonator | A HelmholtzResonator. |
ax | Existing axes, or None to create a figure. |
language | Label language, "en" (default) or "es". |
kwargs | Forwarded to the cavity rectangle. |
Returns: The axes.
plot_slit_absorber_geometry
Section titled “plot_slit_absorber_geometry”plot_slit_absorber_geometry( resonators: Sequence[HelmholtzResonator] | HelmholtzResonator, ax: Axes | None = None, *, slit_height: float, lattice_step: float, period: float, language: str = 'en', **kwargs: Any,) -> AxesDraw one period of the slit metamaterial absorber, to scale.
Side cut of the panel: the slit (height h) runs from the mouth at the
left into the panel; N Helmholtz resonators load it from below at the
lattice step a (total depth L = N a); the panel repeats vertically
with period d; rigid back wall at the right.
Parameters
| Name | Description |
|---|---|
resonators | The resonator chain of slit_helmholtz_absorber (one per lattice step, or a single resonator reused for all steps). |
ax | Existing axes, or None to create a figure. |
slit_height | Slit height h, in metres. |
lattice_step | Lattice step a, in metres. |
period | Panel period d, in metres. |
language | Label language, "en" (default) or "es". |
kwargs | Forwarded to the slit rectangle. |
Returns: The axes.
rectangular_duct_properties
Section titled “rectangular_duct_properties”rectangular_duct_properties( frequency: ArrayLike, *, side: float, air: AirProperties = ..., sum_terms: int = 40,) -> tuple[Complex, Complex]Effective density and bulk modulus of a square duct of the given side.
The Stinson (1991) rectangular-duct series (Appl. Sci. 2017 Eqs. (7)-(8)),
with
,
, ,
and
. Here the duct
is square (, both equal to side). The series is
transcribed in the source’s time convention and returned conjugated so
the result is passive in the convention
(). The normalising constant 64 is fixed
by the exact limits ,
as the boundary layers vanish and by the Poiseuille resistivity
as .
Parameters
| Name | Description |
|---|---|
frequency | Frequency vector f, in hertz. |
side | Square-duct side length, in metres. |
air | State of the air in the duct (AirProperties); the density rho0, viscosity eta, Prandtl number Pr, ratio of specific heats gamma and static pressure P0 are read from it. |
sum_terms | Transverse modes kept per axis (default 40). |
Returns: (rho, kappa) complex arrays shaped like frequency.
slit_effective_properties
Section titled “slit_effective_properties”slit_effective_properties( frequency: ArrayLike, *, slit_height: float, air: AirProperties = ...,) -> tuple[Complex, Complex]Effective density and bulk modulus of a narrow slit of height h.
with and (Appl. Sci. 2017 Eq. (6); Appl. Phys. Lett. 2016 Eqs. (A1)-(A2)). .
Parameters
| Name | Description |
|---|---|
frequency | Frequency vector f, in hertz. |
slit_height | Slit height h, in metres. |
air | State of the air in the slit (AirProperties); the density rho0, viscosity eta, Prandtl number Pr, ratio of specific heats gamma and static pressure P0 are read from it. |
Returns: (rho_s, kappa_s) complex arrays shaped like frequency.
slit_helmholtz_absorber
Section titled “slit_helmholtz_absorber”slit_helmholtz_absorber( frequency: ArrayLike, resonators: HelmholtzResonator | list[HelmholtzResonator] | tuple[HelmholtzResonator, ...], *, slit_height: float, lattice_step: float, period: float, angle: float = 0.0, end_correction: bool = True, slit_radiation: bool = True, resonator_geometry: str = 'square', air: AirProperties = ...,) -> SlitResonatorAbsorberResultTransfer-matrix prediction of a slit panel loaded with resonators.
The panel is a periodic array (period d along the panel face) of thin
closed slits of height h, each loaded from its upper wall by the given
resonators spaced by the lattice step a (Appl. Sci. 2017,
Section 2). The total chain matrix is
over the
N resonators, where each resonator sits between two half-lattice
slit steps; the rigidly-backed reflection factor is
with
, , and
(Eq. (4)). The structure is
locally reacting, so the internal chain does not depend on theta;
only the front air impedance carries cos(theta).
Parameters
| Name | Description |
|---|---|
frequency | Frequency vector f, in hertz. |
resonators | One HelmholtzResonator or a sequence of them, ordered from the panel face towards the rigid backing. |
slit_height | Slit height h, in metres. |
lattice_step | Resonator lattice step a along the slit, in metres; the slit depth is . |
period | Slit array period d along the face, in metres (). |
angle | Polar angle of incidence theta, in radians (). |
end_correction | Include the resonator radiation end corrections. |
slit_radiation | Include the slit-to-free-air radiation correction. |
air | State of the air the panel radiates into and the slit and resonators are filled with (AirProperties): its speed of sound c0, density rho0, viscosity eta, Prandtl number Pr, ratio of specific heats gamma and static pressure P0. |
Returns: A SlitResonatorAbsorberResult.
SlitResonatorAbsorberResult
Section titled “SlitResonatorAbsorberResult”SlitResonatorAbsorberResult( frequency: Real, angle: float, surface_impedance: Complex, normalized_impedance: Complex, reflection: Complex, absorption: Real, effective_wavenumber: Complex, effective_impedance: Complex, transfer_matrix: Complex, resonators: tuple[HelmholtzResonator, ...] | None = None, slit_height: float | None = None, lattice_step: float | None = None, period: float | None = None,)Prediction of a slit panel loaded with Helmholtz resonators.
All spectra share the shape of frequency. surface_impedance is
the acoustic surface impedance in Pa s/m3 of
the rigidly backed panel, normalized_impedance its ratio to
, reflection the plane-wave reflection
factor R(theta), absorption the coefficient
, effective_wavenumber and
effective_impedance the retrieved k_eff and Z_eff
(Appl. Sci. 2017 Eq. (5)), and transfer_matrix the total 2x2 chain
matrix with shape (2, 2, len(frequency)).
The trailing fields retain the panel geometry the prediction was run
with (resonators, slit_height, lattice_step, period) so
plot_geometry can draw the cross-section; they are appended after
the original fields and default to None for hand-built results.
SlitResonatorAbsorberResult.plot()
Section titled “SlitResonatorAbsorberResult.plot()”SlitResonatorAbsorberResult.plot( ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesPlot the absorption spectrum alpha(f) with |R| overlaid.
Requires matplotlib (pip install phonometry[plot]); returns the
Axes.
SlitResonatorAbsorberResult.plot_geometry()
Section titled “SlitResonatorAbsorberResult.plot_geometry()”SlitResonatorAbsorberResult.plot_geometry( ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesDraw one period of the panel cross-section to scale (dimensioned).
Requires matplotlib (pip install phonometry[plot]); returns the
Axes.
Raises
| Exception | When |
|---|---|
| ValueError | If the result does not retain its geometry. |
SlowSoundAbsorberWarning
Section titled “SlowSoundAbsorberWarning”Advisory for slow-sound absorber use outside the modelled regime.