Skip to content

underwater.sources.pile_driving_noise

Radiated underwater sound from percussive pile driving (ISO 18406:2017).

Percussive pile driving radiates a train of impulsive acoustic pulses, one per hammer strike. ISO 18406 characterises them with:

  • single_strike_sel — the single-strike sound exposure level SEL_ss of one pulse (Formulae 3-4), reusing the 1 µPa²·s reference.
  • cumulative_sel / cumulative_sel_identical — the cumulative sound exposure level over N strikes (Formulae 8-9); for N identical strikes .
  • pile_strike_metrics — a PileStrikeResult bundling the single-strike SEL, the peak sound pressure level, the SPL/Leq and the 90 %-energy pulse duration for one recorded strike, with a .plot().
  • strike_sel_spectrum — the same single-strike SEL resolved into fractional-octave bands (ISO 18406 6.4.2.2), the input a marine-mammal assessment needs: feed it to weighted_exposure to obtain the weighted cumulative SEL of a piling campaign and its margin against the regulatory injury and TTS criteria.

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

cumulative_sel(single_sels: NDArray[np.float64] | list[float]) -> float

Cumulative sound exposure level over N strikes (ISO 18406 Formulae 8-9).

— the energy sum of the per-strike single-strike SELs.

Parameters

NameDescription
single_selsPer-strike single-strike SELs, in dB re 1 µPa²·s.

Returns: Cumulative SEL, in dB re 1 µPa²·s.

Raises

ExceptionWhen
ValueErrorIf the sequence is empty or non-finite.
cumulative_sel_identical(sel_ss: float, n_strikes: int) -> float

Cumulative SEL of n_strikes identical strikes: .

Parameters

NameDescription
sel_ssSingle-strike SEL, in dB re 1 µPa²·s.
n_strikesNumber of (identical) strikes, .

Returns: Cumulative SEL, in dB re 1 µPa²·s.

Raises

ExceptionWhen
ValueErrorIf n_strikes is not a whole number .
pile_strike_metrics(
pressure: NDArray[np.float64] | list[float],
fs: float,
) -> PileStrikeResult

Full per-strike pile-driving metrics (ISO 18406).

Bundles the single-strike SEL, the peak sound pressure level, the SPL/Leq and the 90 %-energy pulse duration of one recorded hammer strike.

Parameters

NameDescription
pressureSound-pressure time series of one strike (1-D), in Pa.
fsSample rate, in Hz.

Returns: A PileStrikeResult.

Raises

ExceptionWhen
ValueErrorIf the inputs are invalid.
PileStrikeResult(
single_strike_sel: float,
peak_spl: float,
spl: float,
pulse_duration: float,
pressure: NDArray[np.float64],
fs: float,
)

Per-strike pile-driving metrics (ISO 18406).

Attributes

NameDescription
single_strike_selSingle-strike SEL, in dB re 1 µPa²·s.
peak_splZero-to-peak sound pressure level, in dB re 1 µPa.
splSound pressure level (Leq over the record), in dB re 1 µPa.
pulse_duration90 %-energy pulse duration, in s.
pressureThe strike pressure waveform, in Pa.
fsSample rate, in Hz.
PileStrikeResult.plot(
ax: Axes | None = None,
*,
language: str = 'en',
**kwargs: Any,
) -> Axes | NDArray[Any]

Plot the strike waveform and its cumulative energy.

single_strike_sel(
pressure: NDArray[np.float64] | list[float],
fs: float,
) -> float

Single-strike sound exposure level SEL_ss (ISO 18406 Formulae 3-4).

The sound exposure level of one hammer-strike pulse, integrated over the pulse, in dB re 1 µPa²·s.

Parameters

NameDescription
pressureSound-pressure time series of one strike (1-D), in Pa.
fsSample rate, in Hz.

Returns: Single-strike SEL, in dB re 1 µPa²·s.

Raises

ExceptionWhen
ValueErrorIf the inputs are invalid.
strike_sel_spectrum(
pressure: NDArray[np.float64] | list[float],
fs: float,
*,
fraction: int = 3,
limits: tuple[float, float] = (10.0, 20000.0),
) -> StrikeSelSpectrum

Band-resolved single-strike sound exposure level.

The sound exposure is split between fractional-octave bands by integrating the discrete power spectrum over each band (Parseval), so the energy sum of the returned band levels reproduces the broadband single_strike_sel of the same record to within the energy that falls outside limits.

Bands narrower than the FFT bin spacing fs/n contain no bin and are reported as -inf dB (see StrikeSelSpectrum); the result can be handed straight to weighted_exposure.

Parameters

NameDescription
pressureSound-pressure time series of one strike (1-D), in Pa.
fsSample rate, in Hz.
fractionBandwidth fraction: 1 (octave) or 3 (one-third octave).
limitsLower and upper band-centre limits, in Hz.

Returns: A StrikeSelSpectrum.

Raises

ExceptionWhen
ValueErrorIf the inputs are invalid.
StrikeSelSpectrum(
frequencies: NDArray[np.float64],
band_sel: NDArray[np.float64],
total_sel: float,
broadband_sel: float,
fraction: int,
fs: float,
)

Single-strike sound exposure level resolved into fractional-octave bands.

Attributes

NameDescription
frequenciesNominal band centre frequencies, in Hz.
band_selPer-band single-strike SEL, in dB re 1 µPa²·s. A band that contains no discrete-spectrum bin — which happens whenever the band is narrower than the FFT bin spacing fs/n, i.e. in the lowest bands of a short record — holds no energy at all and is reported as -inf, the level of zero exposure. That is the neutral element of an energy sum, so such bands pass straight through weighted_exposure without contributing.
total_selEnergy sum of band_sel over the covered bands, in dB re 1 µPa²·s.
broadband_selThe broadband single-strike SEL of the whole record, in dB re 1 µPa²·s (equal to total_sel when the bands span the signal’s whole occupied spectrum).
fractionBandwidth fraction (1 for octaves, 3 for one-third octaves).
fsSample rate, in Hz.
StrikeSelSpectrum.plot(
ax: Axes | None = None,
*,
language: str = 'en',
**kwargs: Any,
) -> Axes

Plot the per-band single-strike SEL.