Skip to content
This documentation describes version 4.0.0, which is not released yet. The current version on PyPI is 3.3.0 and does not carry everything described here.

aircraft.certification

Aircraft noise certification: Effective Perceived Noise Level (ICAO Annex 16).

The EPNL is the noise-certification metric for transport-category aircraft. It is built from a half-second spectral time history (24 one-third-octave bands, 50 Hz-10 kHz) in five steps, implementing ICAO Annex 16 Vol. I, Appendix 2 (the analytic formulation):

  • perceived_noisiness — per-band perceived noisiness n (noys), the analytic piecewise noy law with the Table A2-3 constants.
  • perceived_noise_level from the total noisiness .
  • tone_correction — the tone-correction factor C (the slope / “encircling” method) that penalises spectral irregularities.
  • effective_perceived_noise_level — the end-to-end metric: per-record , the maximum PNLTM, the 10 dB-down integration limits and the duration correction, giving .

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

effective_perceived_noise_level(
spectra: NDArray[np.float64] | list[list[float]],
dt: float | NDArray[np.float64] | list[float] = 0.5,
*,
reference_time: float = 10.0,
procedure: str = 'aeroplane',
) -> EPNLResult

Effective Perceived Noise Level from a spectral time history (ICAO Annex 16).

Each record (row) is a 24-band one-third-octave spectrum sampled every dt seconds. The per-record PNL and tone correction C give ; the maximum PNLTM and the duration correction over the 10 dB-down window give .

Parameters

NameDescription
spectraSpectral time history, shape (K, 24), in dB.
dtPer-record duration, in s (scalar or per record, default 0.5).
reference_timeNormalising time T0, in s (default 10).
procedureTone-correction procedure of App. 2 §4.3.1 Step 1: "aeroplane" (default) starts the slope analysis at the 80 Hz band (band 3), "helicopter" (helicopters and tilt-rotors) at the 50 Hz band (band 1), so rotor tones in the 50-80 Hz bands are not missed.

Returns: An EPNLResult.

Raises

ExceptionWhen
ValueErrorIf the input is not a (K, 24) finite array, or procedure is not "aeroplane" or "helicopter".
epnl_from_pnlt(
pnlt: NDArray[np.float64] | list[float],
dt: float | NDArray[np.float64] | list[float] = 0.5,
*,
reference_time: float = 10.0,
tone_corrections: NDArray[np.float64] | list[float] | None = None,
) -> tuple[float, float, int, int]

EPNL from a tone-corrected perceived-noise-level time history (App. 2 §4.5-4.6).

with the 10 dB-down integration limits about the maximum PNLTM. The exact form is used rather than the Annex’s rounded constant 13 for uniform 0.5 s records (difference 0.0103 dB); the ETM Table 4-4 integrated reference reproduces the exact form to five decimals.

When tone_corrections is given, the bandsharing adjustment ΔB (App. 2 §4.4.2/4.4.3, ETM GM/AMC A2 4.4.2) is applied: if the tone correction at the PNLTM record is below the average of the records within one second of it (five records for the uniform 0.5 s cadence), ΔB is that shortfall, added to PNLTM before the 10 dB-down window is found and included in the reported EPNL.

Parameters

NameDescription
pnltThe tone-corrected perceived noise levels PNLT(k), in PNdB.
dtPer-record duration, in s (scalar broadcast or per record).
reference_timeNormalising time T0, in s (default 10).
tone_correctionsOptional tone corrections C(k), in dB, one per pnlt record; enables the bandsharing adjustment ΔB described above. Default None (no adjustment).

Returns: (epnl, pnltm, kF, kL) — EPNL in EPNdB, the peak PNLTM, and the 0-based 10 dB-down record indices (inclusive).

Raises

ExceptionWhen
ValueErrorIf the inputs are invalid.
EPNLResult(
frequencies: NDArray[np.float64],
times: NDArray[np.float64],
pnl: NDArray[np.float64],
tone_correction: NDArray[np.float64],
pnlt: NDArray[np.float64],
pnltm: float,
bandsharing_adjustment: float,
duration_correction: float,
epnl: float,
band_limits: tuple[int, int],
)

Effective Perceived Noise Level of an aircraft flyover (ICAO Annex 16).

Attributes

NameDescription
frequenciesThe 24 one-third-octave band centre frequencies, in Hz.
timesRecord times, in s.
pnlPerceived noise level per record, in PNdB.
tone_correctionTone-correction factor per record, in dB.
pnltTone-corrected perceived noise level per record, in PNdB.
pnltmMaximum tone-corrected perceived noise level, in PNdB, including the bandsharing adjustment ΔB (App. 2 §4.4.3).
bandsharing_adjustmentThe bandsharing adjustment ΔB, in dB (zero unless the tone correction at PNLTM is suppressed).
duration_correctionDuration correction , in dB.
epnlEffective perceived noise level, in EPNdB.
band_limitsThe 0-based 10 dB-down record indices (kF, kL).
EPNLResult.plot(
ax: Axes | None = None,
*,
language: str = 'en',
**kwargs: Any,
) -> Axes

Plot the PNL and PNLT time histories with PNLTM and the 10 dB-down band.

EPNLResult.report(
path: str,
*,
metadata: ReportMetadata | None = None,
engine: str = 'reportlab',
verbose: bool = False,
language: str = 'en',
) -> str

Render an ICAO Annex 16 EPNL certification fiche to a PDF.

Writes a one-page aircraft-noise-certification data sheet: the standard-basis line (ICAO Annex 16 Vol. I Appendix 2), an optional TCDSN-style metadata header (aircraft, manufacturer / type-certificate holder, applicant, measurement point), a metrics table of the informational intermediate quantities (PNLTM, the duration correction D, the 10 dB-down record window and, when non-zero, the bandsharing adjustment), the result’s own landscape PNLT-versus-time plot, the boxed EPNL = X EPNdB result, a Level | Limit | Margin verdict row when a certification limit is supplied, a static reference-conditions strip and a footer with the fixed disclaimer.

Parameters

NameDescription
pathDestination path of the PDF file.
metadataOptional ReportMetadata; None produces a prediction fiche (metrics, plot and result only, no verdict). A supplied requirement is read as the certification EPNL limit in EPNdB (the EPNL passes at or below it).
engineRendering back end; only "reportlab" is supported.
verboseAccepted for a uniform signature; it has no effect on the single-layout EPNL fiche.
languageFiche language: "en" (default, English) or "es" (Spanish, with a comma decimal separator).

Returns: The written path as a str.

Raises

ExceptionWhen
ValueErrorIf engine is not "reportlab".
ImportErrorIf reportlab is not installed (pip install phonometry[report]), or matplotlib is missing for the embedded figure (pip install phonometry[plot]).

Constant (numpy.ndarray, shape (24,)).

perceived_noise_level(spl: NDArray[np.float64] | list[float]) -> float

Perceived noise level PNL (ICAO Annex 16 App. 2 §4.2), in PNdB.

and . If the total noisiness is not positive the PNL is defined as 0.

Parameters

NameDescription
splThe 24 one-third-octave-band sound pressure levels, in dB.

Returns: The perceived noise level, in PNdB.

Raises

ExceptionWhen
ValueErrorIf the spectrum is not 24 finite levels.
perceived_noisiness(
spl: NDArray[np.float64] | list[float],
) -> NDArray[np.float64]

Per-band perceived noisiness n in noys (ICAO Annex 16 App. 2 §4.7).

The analytic piecewise noy law, using the Table A2-3 constants:

  • :
  • :
  • :
  • :
  • : (below the noy floor)

Parameters

NameDescription
splThe 24 one-third-octave-band sound pressure levels, in dB.

Returns: The per-band perceived noisiness, in noys.

Raises

ExceptionWhen
ValueErrorIf the spectrum is not 24 finite levels.
tone_correction(
spl: NDArray[np.float64] | list[float],
*,
start_band: int = 2,
) -> float

Tone-correction factor C for a spectrum (ICAO Annex 16 App. 2 §4.3).

The maximum over bands of the tone-correction factor derived from the tone excess F above the smoothed background, with the 1.5 dB threshold, the 500 Hz / 5000 Hz frequency split and the 6⅔ dB cap of Table A2-2.

Parameters

NameDescription
splThe 24 one-third-octave-band sound pressure levels, in dB.
start_bandFirst band index of the slope analysis (App. 2 §4.3.1 Step 1). The default 2 (80 Hz) is the aeroplane procedure; helicopters and tilt-rotors use 0 (50 Hz).

Returns: The tone-correction factor C, in dB (0 if no tones qualify).

Raises

ExceptionWhen
ValueErrorIf the spectrum is not 24 finite levels, or start_band is not an integer between 0 and 3.