Ir al contenido

aircraft.airport_noise

Esta página aún no está disponible en tu idioma.

Noise-Power-Distance (NPD) event-level interpolation (ECAC Doc 29).

The ECAC Doc 29 airport-noise method describes an aircraft’s noise emission with Noise-Power-Distance (NPD) tables: the event noise level (LAmax or the sound exposure level SEL) of an aircraft in steady straight flight on an infinite path, tabulated over a grid of engine power settings and slant distances at reference conditions. Placing an aircraft’s noise at a receiver starts by reading a level from this table for an arbitrary power and distance.

  • npd_level — the interpolated event level L(P, d), linear in power and log-linear in distance (Eqs. 4-3/4-4), with extrapolation beyond the tabulated envelope.
  • npd_curve — the level over a distance sweep at one power, returned as an NpdLevelResult with a .plot().

The single-event stage segments a flight path and adjusts the NPD baseline per segment (§4.3-4.5): impedance_adjustment (Eq. 4-6/4-7), lateral_attenuation (β, ℓ), engine_installation_correction (φ, mounting), duration_correction, the finite-segment noise_fraction and, behind takeoff ground-roll segments, the start_of_roll_directivity ΔSOR (§4.5.7). event_level assembles and sums them into the SEL/LAmax of a movement (mark takeoff ground-roll segments with its ground_roll mask), and noise_contour evaluates it over a ground grid.

Source (clean-room, implemented from the standard text): ECAC Doc 29, 4th ed., Vol 2 (2016), §4.2-4.5. Validated per-term and end-to-end against the ECAC Doc 29 5th ed. Vol 3 Part 1 reference workbook.

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

duration_correction(reference_speed: float, segment_speed: float) -> float

Duration correction ΔV = 10·log10(Vref/Vseg) (Eq. 4-14, exposure only).

Parameters

NameDescription
reference_speedNPD reference speed Vref (any consistent unit).
segment_speedSegment speed Vseg (same unit).

Returns: The duration correction ΔV, in dB.

Raises

ExceptionWhen
ValueErrorIf a speed is not strictly positive.
engine_installation_correction(
depression_deg: float,
mounting: str = 'wing',
) -> float

Engine-installation lateral-directivity correction ΔI(φ) (Eq. 4-15/4-16).

Parameters

NameDescription
depression_degDepression angle φ (from the wing plane), in degrees.
mounting"wing", "fuselage" or "propeller".

Returns: The correction ΔI, in dB (added to the level).

Raises

ExceptionWhen
ValueErrorIf mounting is unknown or the angle is non-finite.
event_level(
path: NDArray[np.float64] | list[list[float]],
observer: NDArray[np.float64] | list[float],
powers: NDArray[np.float64] | list[float],
distances: NDArray[np.float64] | list[float],
exposure_levels: NDArray[np.float64] | list[list[float]],
maximum_levels: NDArray[np.float64] | list[list[float]],
*,
reference_speed: float = 82.31104,
mounting: str = 'wing',
metric: str = 'exposure',
temperature: float = 15.0,
pressure: float = 101.325,
ground_roll: NDArray[np.bool_] | list[bool] | None = None,
landing_roll: NDArray[np.bool_] | list[bool] | None = None,
bank: NDArray[np.float64] | list[float] | None = None,
) -> FlyoverResult

Single-event noise level of a flight path at a receiver (ECAC Doc 29).

Assembles the segment event levels (Eq. 4-8/4-9), the NPD baseline plus the duration, engine-installation, lateral-attenuation and finite-segment (noise-fraction) corrections, and the start-of-roll directivity behind takeoff ground-roll segments, and combines them into the exposure level SEL (energy sum, Eq. 4-11) or the maximum level (Eq. 4-10).

Parameters

NameDescription
pathFlight-path points, shape (N, 5): columns x, y, z (m), engine power setting and speed (m/s). N-1 segments are formed.
observerReceiver position (x, y, z), in metres.
powersNPD tabulated power settings.
distancesNPD tabulated slant distances, in metres.
exposure_levelsNPD exposure (SEL) levels, shape (P, D).
maximum_levelsNPD maximum levels, shape (P, D).
reference_speedNPD reference speed, in m/s (default 160 kn).
mountingEngine mounting ("wing"/"fuselage"/"propeller").
metric"exposure" (SEL) or "maximum" (LAmax).
temperatureAerodrome air temperature, in °C (impedance adjustment).
pressureAerodrome air pressure, in kPa (impedance adjustment).
ground_rollOptional boolean mask of length N-1 marking takeoff ground-roll segments; these receive the start-of-roll directivity ΔSOR and reduced noise fraction behind the aircraft (§4.5.6-4.5.7).
landing_rollOptional boolean mask of length N-1 marking landing rollout segments; ahead of them the reduced fraction (Eq. 4-21b), the nearest-end lateral geometry and no directivity term apply (§4.5.5-4.5.6).
bankOptional per-segment bank angle ε in degrees (length N-1), measured counter-clockwise about the roll axis (positive in a left turn, starboard wing up); the depression angle becomes φ = β + ε for observers to starboard (right) of the track and φ = β − ε for observers to port (§4.5.2).

Returns: A FlyoverResult. If every segment is degenerate (zero length) the level is -inf.

Raises

ExceptionWhen
ValueErrorIf the inputs are invalid.
FlyoverResult(
level: float,
metric: str,
segment_levels: NDArray[np.float64],
observer: NDArray[np.float64],
)

Single-event noise level of an aircraft movement at a receiver.

Attributes

NameDescription
levelThe event level, in dB (SEL for metric="exposure", else the maximum level).
metric"exposure" (SEL) or "maximum" (LAmax).
segment_levelsPer-segment contribution, in dB.
observerReceiver position (x, y, z), in metres.
FlyoverResult.plot(
ax: Axes | None = None,
*,
language: str = 'en',
**kwargs: Any,
) -> Axes

Plot the per-segment contributions to the event level.

impedance_adjustment(
temperature: float = 15.0,
pressure: float = 101.325,
) -> float

Acoustic-impedance adjustment of the standard NPD data (Eq. 4-6/4-7).

The ANP NPD levels are normalised to a reference specific acoustic impedance of 409.81 N·s/m³. At the aerodrome’s temperature and pressure the air impedance is ρc = 416.86·(δ/√θ) with δ = p/p0 and θ = (T+273.15)/(T0+273.15), and the adjustment 10·log10(ρc/409.81) is added to the NPD levels. Under the standard atmosphere it is +0.074 dB.

Parameters

NameDescription
temperatureAerodrome air temperature T, in °C (default 15 °C).
pressureAerodrome air pressure p, in kPa (default 101.325 kPa).

Returns: The impedance adjustment, in dB (added to the NPD level).

Raises

ExceptionWhen
ValueErrorIf the pressure is not positive or inputs are non-finite.
lateral_attenuation(elevation_deg: float, lateral_m: float) -> float

Excess lateral attenuation Λ(β, ℓ) over soft ground (Eq. 4-18/4-19).

Parameters

NameDescription
elevation_degElevation angle β of the (equivalent level) path, in degrees.
lateral_mLateral displacement from the ground track, in metres.

Returns: The lateral attenuation Λ, in dB (subtracted from the level).

Raises

ExceptionWhen
ValueErrorIf lateral_m is negative or non-finite.
noise_contour(
path: NDArray[np.float64] | list[list[float]],
powers: NDArray[np.float64] | list[float],
distances: NDArray[np.float64] | list[float],
exposure_levels: NDArray[np.float64] | list[list[float]],
maximum_levels: NDArray[np.float64] | list[list[float]],
*,
x: NDArray[np.float64] | list[float],
y: NDArray[np.float64] | list[float],
reference_speed: float = 82.31104,
mounting: str = 'wing',
metric: str = 'exposure',
temperature: float = 15.0,
pressure: float = 101.325,
ground_roll: NDArray[np.bool_] | list[bool] | None = None,
landing_roll: NDArray[np.bool_] | list[bool] | None = None,
bank: NDArray[np.float64] | list[float] | None = None,
) -> NoiseContourResult

Single-event noise level over a ground grid (ECAC Doc 29 contour).

Evaluates event_level at every grid point (xi, yj, 0).

Parameters

NameDescription
pathFlight-path points, shape (N, 5) (see event_level).
powersNPD tabulated power settings.
distancesNPD tabulated slant distances, in metres.
exposure_levelsNPD exposure (SEL) levels, shape (P, D).
maximum_levelsNPD maximum levels, shape (P, D).
xGrid x coordinates, in metres.
yGrid y coordinates, in metres.
reference_speedNPD reference speed, in m/s.
mountingEngine mounting.
metric"exposure" (SEL) or "maximum" (LAmax).
temperatureAerodrome air temperature, in °C (impedance adjustment).
pressureAerodrome air pressure, in kPa (impedance adjustment).
ground_rollOptional boolean mask (length N-1) of takeoff ground-roll segments (see event_level).
landing_rollOptional boolean mask (length N-1) of landing rollout segments (see event_level).
bankOptional per-segment bank angle ε in degrees, length N-1 (see event_level).

Returns: A NoiseContourResult.

Raises

ExceptionWhen
ValueErrorIf the inputs are invalid.
noise_fraction(
q: float,
segment_length: float,
scaled_distance: float,
) -> float

Finite-segment correction (noise fraction) ΔF (Eq. 4-20, exposure only).

Parameters

NameDescription
qSigned distance from the segment start S1 to the perpendicular foot Sp, in metres (negative behind the segment).
segment_lengthSegment length λ, in metres (> 0).
scaled_distanceThe scaled distance (Appendix E), in metres (> 0).

Returns: The finite-segment correction ΔF, in dB (<= 0, floored at −150 dB).

Raises

ExceptionWhen
ValueErrorIf segment_length or scaled_distance is not positive.
NoiseContourResult(
x: NDArray[np.float64],
y: NDArray[np.float64],
level: NDArray[np.float64],
metric: str,
)

Single-event noise level over a ground grid (ECAC Doc 29).

Attributes

NameDescription
xGrid x coordinates, in metres.
yGrid y coordinates, in metres.
levelEvent level over the grid (len(y), len(x)), in dB.
metric"exposure" (SEL) or "maximum" (LAmax).
NoiseContourResult.plot(
ax: Axes | None = None,
*,
language: str = 'en',
**kwargs: Any,
) -> Axes

Plot filled noise contours over the ground plane.

npd_curve(
powers: NDArray[np.float64] | list[float],
distances: NDArray[np.float64] | list[float],
levels: NDArray[np.float64] | list[list[float]],
power: float,
query_distances: NDArray[np.float64] | list[float] | None = None,
) -> NpdLevelResult

NPD event level over a distance sweep at one power setting.

Parameters

NameDescription
powersTabulated engine power settings.
distancesTabulated slant distances, in metres.
levelsTabulated event levels, shape (len(powers), len(distances)).
powerQuery engine power setting.
query_distancesDistances to evaluate, in metres; defaults to a log sweep across the tabulated envelope.

Returns: An NpdLevelResult.

Raises

ExceptionWhen
ValueErrorIf the inputs are invalid.
npd_level(
powers: NDArray[np.float64] | list[float],
distances: NDArray[np.float64] | list[float],
levels: NDArray[np.float64] | list[list[float]],
power: float,
distance: NDArray[np.float64] | list[float] | float,
) -> NDArray[np.float64]

Interpolated NPD event level L(P, d) (ECAC Doc 29 §4.2, Eqs. 4-3/4-4).

Interpolates log-linearly in slant distance (Eq. 4-4) at the two bracketing tabulated powers, then linearly in power (Eq. 4-3). Queries outside the tabulated envelope are extrapolated from the terminal segments.

Parameters

NameDescription
powersTabulated engine power settings (1-D, strictly increasing).
distancesTabulated slant distances, in metres (1-D, strictly increasing, positive).
levelsTabulated event levels, shape (len(powers), len(distances)), in dB.
powerQuery engine power setting P.
distanceQuery slant distance(s) d, in metres.

Returns: The interpolated event level per query distance, in dB.

Raises

ExceptionWhen
ValueErrorIf the table or inputs are invalid.
NpdLevelResult(
distance: NDArray[np.float64],
level: NDArray[np.float64],
power: float,
table_distances: NDArray[np.float64],
table_levels: NDArray[np.float64],
)

NPD event level over a distance sweep at one power (ECAC Doc 29).

Attributes

NameDescription
distanceSlant distances, in metres.
levelInterpolated event level per distance, in dB.
powerThe engine power setting queried.
table_distancesThe tabulated slant distances, in metres.
table_levelsThe tabulated levels at the queried power, in dB.
NpdLevelResult.plot(
ax: Axes | None = None,
*,
language: str = 'en',
**kwargs: Any,
) -> Axes

Plot the interpolated level versus slant distance (log axis).

start_of_roll_directivity(
azimuth_deg: float,
distance_m: float,
engine: str = 'jet',
) -> float

Start-of-roll (ground-roll) directivity correction ΔSOR (Eq. 4-22/4-25).

Behind a takeoff ground-roll segment, jet-exhaust noise radiates a lobed rearward pattern. ΔSOR adjusts the segment level relative to the level to the side of the start of roll, as a function of the azimuth ψ between the aircraft forward axis and the observer (Eq. 4-24a for turbofan jets, 4-24b for turboprops), scaled beyond 762 m by dSOR,0/dSOR (Eq. 4-25). It is only applied behind takeoff ground-roll segments (90° ≤ ψ ≤ 180°); ahead of the aircraft (ψ < 90°) it is zero.

Parameters

NameDescription
azimuth_degAzimuth ψ from the forward axis to the observer, in degrees (ψ = arccos(q/dSOR), in [90, 180] behind the aircraft). Values below 90° return 0; values above 180° are clamped to 180°.
distance_mDistance dSOR from the observer to the segment start, in metres.
engine"jet" (turbofan, Eq. 4-24a) or "turboprop" (Eq. 4-24b).

Returns: The directivity correction ΔSOR, in dB (added to the level).

Raises

ExceptionWhen
ValueErrorIf engine is unknown or the inputs are invalid.