electroacoustics.piston
Radiation of a rigid circular piston set in an infinite baffle.
The baffled circular piston is the canonical acoustic radiator: a flat rigid
disc of radius a vibrating with a uniform normal velocity in an otherwise
rigid infinite plane. It is the model behind a loudspeaker cone in a large
cabinet, the open end of a duct, and the reference source for the radiation
efficiency of any finite vibrating surface, so its two results — the
radiation impedance the air presents to the piston and the directivity
of the far field — are the base of the electroacoustics domain (Beranek &
Mellow, Acoustics: Sound Fields, Transducers and Vibration 2nd ed., §4.4;
Bies, Hansen & Howard, Engineering Noise Control 5th ed.).
Radiation impedance. The reaction force of the air on the piston is with the mechanical radiation impedance
where is the wavenumber, the
characteristic
impedance of air and S the piston area. The dimensionless piston
resistance and reactance functions are (Beranek & Mellow Eq. (4.30))
with J1 the Bessel function of the first kind and H1 the Struve
function, both of order one, evaluated at .
- Low frequency (): so the radiated power rises as , and . The reactance is mass-like, with the radiation (accreted) mass (Beranek & Mellow Eq. (4.32)): the piston drags an extra of air, equivalent to a layer thick over its face.
- High frequency (): and , so — the piston radiates as if into an infinite tube and the air loads it purely resistively.
Directivity. The far-field pressure of the baffled piston varies with the
polar angle theta from the axis as (Beranek & Mellow Eq. (4.42))
The main lobe narrows as ka grows; its first null is at
(the first zero of J1), which exists only
once
. The directivity factor Q (on-axis intensity over
the
intensity of a point source of equal power radiating into the full sphere) and
the directivity index follow from integrating
over the radiating hemisphere,
which tends to ( dB, the half-space baffle
gain) at low
ka and to () at
high ka.
Auto-generated from the source docstrings by
scripts/generate_api_docs.py(make api-docs). Do not edit by hand.
piston_directivity
Section titled “piston_directivity”piston_directivity(ka: ArrayLike, theta: ArrayLike) -> np.ndarray | floatFar-field directivity .
The pressure amplitude of a baffled circular piston relative to its on-axis value (Beranek & Mellow Eq. (4.42)), normalized so .
Parameters
| Name | Description |
|---|---|
ka | Wavenumber-radius product ka (scalar or array). |
theta | Polar angle from the axis, rad (scalar or array). Broadcast against ka. |
Returns: D (float for scalar inputs, else an array).
piston_directivity_pattern
Section titled “piston_directivity_pattern”piston_directivity_pattern( ka: ArrayLike, angles: ArrayLike | None = None,) -> PistonDirectivityFar-field directivity pattern of one or more baffled circular pistons.
Samples the directivity
(Beranek & Mellow Eq. (4.42)) at every ka over a polar-angle grid and
bundles it into a PistonDirectivity that exposes .plot(). The
main lobe narrows as ka grows; its first null appears once ka passes
the first zero of J1 ().
Parameters
| Name | Description |
|---|---|
ka | Wavenumber-radius product(s) ka (scalar or 1-D array), each non-negative. |
angles | Polar angles theta from the axis, rad (1-D). None (default) uses 361 points spanning the front hemisphere -90 deg to +90 deg, 0.5 deg apart. |
Returns: A PistonDirectivity.
piston_reactance
Section titled “piston_reactance”piston_reactance(x: ArrayLike) -> np.ndarray | floatPiston reactance function (H1 Struve
order 1).
The imaginary part of the normalized radiation impedance of a baffled
circular piston (Beranek & Mellow Eq. (4.30)). It rises as
(mass-like) at low and decays to 0
at high x.
Parameters
| Name | Description |
|---|---|
x | Argument (scalar or array), dimensionless. |
Returns: X1(x) (float for scalar input, else an array).
piston_resistance
Section titled “piston_resistance”piston_resistance(x: ArrayLike) -> np.ndarray | floatPiston resistance function .
The real part of the normalized radiation impedance of a baffled circular
piston, as a function of (Beranek & Mellow Eq. (4.30)).
It rises as at low x and tends to 1 at
high x.
Parameters
| Name | Description |
|---|---|
x | Argument (scalar or array), dimensionless. |
Returns: R1(x) (float for scalar input, else an array).
PistonDirectivity
Section titled “PistonDirectivity”PistonDirectivity( angles: np.ndarray, ka: np.ndarray, directivity: np.ndarray, directivity_db: np.ndarray,)Far-field directivity pattern of a baffled circular piston.
Bundles the far-field directivity
(Beranek &
Mellow
Eq. (4.42)) of one or more baffled circular pistons over a shared
polar-angle grid, so the classic beam pattern can be drawn with
plot. The maths is piston_directivity; this is a thin,
plottable bundle around it.
Attributes
| Name | Description |
|---|---|
angles | Polar angles theta from the axis, rad. |
ka | Wavenumber-radius products ka, one per pattern (a 1-D array). |
directivity | Linear directivity , normalized so , as a (len(ka), len(angles)) array; row i is the pattern for ka[i]. |
directivity_db | Directivity in dB, , same shape as directivity (the side-lobe nulls floor at a large negative value rather than -inf). |
PistonDirectivity.plot()
Section titled “PistonDirectivity.plot()”PistonDirectivity.plot( ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesPlot the far-field directivity (beam) pattern on a polar axes.
Draws the directivity in dB against the polar angle: one curve per
ka value as a single family (still one concept, the directivity
pattern). A polar axes is created when ax is None. Requires
matplotlib (pip install phonometry[plot]).
Parameters
| Name | Description |
|---|---|
ax | Existing (polar) axes, or None to create a figure. |
language | Label language, "en" (default) or "es". |
kwargs | Forwarded to the Axes.plot call when the result holds a single ka; ignored for a multi-ka family so one user color or label cannot collapse the per-curve styling. |
Returns: The axes.
plot_piston_geometry
Section titled “plot_piston_geometry”plot_piston_geometry( radius: float, ax: Axes | None = None, *, angles: ArrayLike | None = None, directivity: ArrayLike | None = None, lobe_label: str | None = None, language: str = 'en', **kwargs: Any,) -> AxesDraw a baffled piston to scale, optionally with a directivity lobe.
The rigid baffle is the vertical wall, the piston the plate of radius
a set into it; when angles/directivity are given the
normalised far-field lobe is overlaid on the radiation side.
Parameters
| Name | Description |
|---|---|
radius | Piston radius a, in metres. |
ax | Existing axes, or None to create a figure. |
angles | Far-field angles, in radians (0 on axis), matching directivity. |
directivity | Linear directivity values in [0, 1]. |
lobe_label | Optional legend label for the lobe (e.g. the ka). |
language | Label language, "en" (default) or "es". |
kwargs | Forwarded to the piston rectangle. |
Returns: The axes.
radiating_piston
Section titled “radiating_piston”radiating_piston( radius: float, frequencies: ArrayLike, *, speed_of_sound: float = 343.0, density: float = 1.206, angles: ArrayLike | None = None,) -> RadiatingPistonResultRadiation impedance and directivity of a rigid baffled circular piston.
Evaluates the piston resistance and reactance
, the mechanical radiation impedance
, the low-frequency radiation mass
and the directivity index over the given
frequencies (Beranek & Mellow §4.4). Pass angles to also sample
the far-field directivity pattern .
Parameters
| Name | Description |
|---|---|
radius | Piston radius a, m. |
frequencies | Frequencies f, Hz (scalar or 1-D array), all > 0. |
speed_of_sound | Speed of sound c, m/s (default 343). |
density | Air density , kg/m3 (default 1.206). |
angles | Optional polar angles theta from the axis, rad, at which to sample the directivity pattern. |
Returns: A RadiatingPistonResult.
RadiatingPistonResult
Section titled “RadiatingPistonResult”RadiatingPistonResult( frequencies: np.ndarray, ka: np.ndarray, resistance: np.ndarray, reactance: np.ndarray, radiation_resistance: np.ndarray, radiation_reactance: np.ndarray, radiation_mass: float, directivity_index: np.ndarray, angles: np.ndarray | None, directivity: np.ndarray | None, radius: float, speed_of_sound: float, density: float,)Radiation impedance and directivity of a baffled circular piston.
Attributes
| Name | Description |
|---|---|
frequencies | Frequencies f, Hz. |
ka | Wavenumber-radius product ka at each frequency. |
resistance | Normalized piston resistance (real part of ). |
reactance | Normalized piston reactance (imaginary part of ). |
radiation_resistance | Mechanical radiation resistance , N s/m. |
radiation_reactance | Mechanical radiation reactance , N s/m. |
radiation_mass | Low-frequency accreted air mass , kg (a single value; the mass limit of radiation_reactance / omega). |
directivity_index | Directivity index , dB. |
angles | Polar angles of directivity, rad, or None if not requested. |
directivity | Far-field directivity as a (n_freq, n_angle) array, or None if angles was not given. |
radius | Piston radius a, m. |
speed_of_sound | Speed of sound c, m/s. |
density | Air density , kg/m3. |
RadiatingPistonResult.plot()
Section titled “RadiatingPistonResult.plot()”RadiatingPistonResult.plot( ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesPlot the normalized piston resistance and reactance against ka.
Reproduces the classic Beranek & Mellow figure: R1 rising to 1 and
X1 peaking then decaying, over the ka range of the result.
Requires matplotlib (pip install phonometry[plot]).
Parameters
| Name | Description |
|---|---|
language | Label language, "en" (default) or "es". |
RadiatingPistonResult.plot_geometry()
Section titled “RadiatingPistonResult.plot_geometry()”RadiatingPistonResult.plot_geometry( ax: Axes | None = None, *, frequency_index: int = -1, language: str = 'en', **kwargs: Any,) -> AxesDraw the baffled piston to scale, with its directivity lobe.
Requires matplotlib (pip install phonometry[plot]); returns the
Axes.
Parameters
| Name | Description |
|---|---|
ax | Existing axes, or None to create a figure. |
frequency_index | Index of the frequency whose far-field lobe is overlaid (default: the highest); ignored when the result carries no directivity. |
language | Label language, "en" (default) or "es". |
kwargs | Forwarded to the piston rectangle. |