Ir al contenido
Esta documentación describe la versión 4.0.0, todavía sin publicar. La versión actual en PyPI es la 3.3.0 y no incluye todo lo que se describe aquí.

aircraft.anp_fleet

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.

EASA ANP fleet database bridge for the ECAC Doc 29 airport-noise chain.

The ECAC Doc 29 method in phonometry.aircraft.airport_noise places an aircraft’s noise at a receiver from a Noise-Power-Distance (NPD) table and a flight profile. Both come, for real aircraft types, from the Aircraft Noise and Performance (ANP) database maintained by EUROCONTROL/EASA: per aircraft it tabulates NPD curves (LAmax and SEL versus slant distance for a set of engine power settings, per operation mode) and default trajectories.

This module reads the ANP database tables (the semicolon-delimited CSV exports) and exposes, for a given aircraft identifier and operation:

  • AnpNpdCurves — the NPD curves (LAmax/SEL versus distance for each tabulated power), with a .plot();
  • AnpProfile — the default fixed-point trajectory as a Doc 29 flight path (N, 5) with the takeoff/landing ground-roll masks, with a .plot();
  • AnpAircraft — the aircraft metadata plus convenience wiring (AnpAircraft.event_level, AnpAircraft.noise_contour) that feeds the NPD curves and the profile straight into the existing Doc 29 functions.

load_anp_database returns an AnpDatabase. Called without a path it loads the full EASA ANP database (archive version 2.3) shipped with the package (see aircraft/data/anp/PROVENANCE.md); pointed at a directory it reads any other ANP CSV export the user provides.

Aircraft whose default trajectory is published as procedural steps rather than as fixed points are reached through phonometry.aircraft.flight_performance, the ECAC Doc 29 Vol. 2 Appendix B performance model: AnpDatabase.flight_profile flies the published procedure for an aerodrome and its weather, and AnpDatabase.procedural_profile returns the result as the same Doc 29 flight path the fixed-point bridge produces, so either kind of profile feeds the same chain. NPD curves are available for every aircraft regardless.

Source (clean-room, implemented from the published table format): EASA ANP database v2.3 (2020) and the ECAC Doc 29 4th ed. Vol 2 NPD/profile conventions.

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

AnpAircraft(
aircraft_id: str,
description: str,
engine_type: str,
num_engines: int,
weight_class: str,
mounting: str,
npd_id: str,
power_parameter: str,
approach_spectral_class_id: str,
departure_spectral_class_id: str,
_database: AnpDatabase,
)

One ANP aircraft type: metadata plus NPD/profile access and Doc 29 wiring.

Attributes

NameDescription
aircraft_idANP aircraft identifier (e.g. "747100").
descriptionHuman-readable aircraft/engine description.
engine_type"Jet", "Turboprop" or "Piston".
num_enginesNumber of engines.
weight_classICAO wake weight class.
mountingDoc 29 engine mounting ("wing"/"fuselage"/"propeller").
npd_idANP noise identifier.
power_parameterName/unit of the NPD power parameter.
approach_spectral_class_idSpectral class of the approach NPD.
departure_spectral_class_idSpectral class of the departure NPD.
AnpAircraft.event_level(
observer: NDArray[np.float64] | list[float],
operation: str,
*,
aerodrome: Aerodrome | None = None,
stage_length: int | str = 1,
metric: EventMetric = 'exposure',
temperature_c: float | None = None,
atmospheric_pressure_kpa: float | None = None,
relative_humidity_percent: float | None = None,
absorption: str = 'arp5534',
) -> FlyoverResult

Single-event level at a receiver (see AnpDatabase.event_level).

AnpAircraft.noise_contour(
operation: str,
*,
x: NDArray[np.float64] | list[float],
y: NDArray[np.float64] | list[float],
aerodrome: Aerodrome | None = None,
stage_length: int | str = 1,
metric: EventMetric = 'exposure',
temperature_c: float | None = None,
atmospheric_pressure_kpa: float | None = None,
relative_humidity_percent: float | None = None,
absorption: str = 'arp5534',
) -> NoiseContourResult

Single-event ground contour (see AnpDatabase.noise_contour).

AnpAircraft.npd_curves(operation: str, metric: str = 'SEL') -> AnpNpdCurves

NPD curves for this aircraft (see AnpDatabase.npd_curves).

AnpAircraft.profile(
operation: str,
stage_length: int = 1,
*,
profile_id: str | None = None,
) -> AnpProfile

Fixed-point profile (see AnpDatabase.profile).

AnpAircraft.revised_npd_curves(
operation: str,
metric: str = 'SEL',
*,
temperature_c: float,
relative_humidity_percent: float,
atmospheric_pressure_kpa: float = 101.325,
absorption: str = 'arp5534',
) -> RevisedNpdCurves

NPD curves for another atmosphere (see AnpDatabase.revised_npd_curves).

AnpAircraft.spectral_class(operation: str) -> SpectralClass

Spectral class of this aircraft’s NPD for an operation.

Parameters

NameDescription
operation"departure"/"D" or "arrival"/"A".

Returns: The SpectralClass the ANP database assigns.

Raises

ExceptionWhen
KeyErrorif the database carries no such class.
AnpDatabase(
aircraft: Mapping[str, dict[str, str]],
npd: Mapping[tuple[str, str, str], tuple[NDArray[np.float64], NDArray[np.float64]]],
distances: NDArray[np.float64],
profiles: Mapping[tuple[str, str, str, int], NDArray[np.float64]],
performance: _PerformanceTables | None = None,
spectral_classes: Mapping[str, SpectralClass] | None = None,
)

A parsed ANP database (aircraft metadata, NPD curves and default profiles).

Build one with load_anp_database. NPD curves are available for every aircraft; default profiles are available for aircraft that have a fixed-point trajectory in the database, and procedural-step profiles for those whose coefficient and step tables the export carries.

AnpDatabase.aircraft(aircraft_id: str) -> AnpAircraft

Return the AnpAircraft for an identifier.

Raises

ExceptionWhen
KeyErrorIf the identifier is not in the database.

property

Sorted list of aircraft identifiers in the database.

AnpDatabase.event_level(
aircraft_id: str,
observer: NDArray[np.float64] | list[float],
operation: str,
*,
aerodrome: Aerodrome | None = None,
stage_length: int | str = 1,
metric: EventMetric = 'exposure',
temperature_c: float | None = None,
atmospheric_pressure_kpa: float | None = None,
relative_humidity_percent: float | None = None,
absorption: str = 'arp5534',
) -> FlyoverResult

Doc 29 single-event level of an ANP aircraft at a receiver.

Feeds the aircraft’s profile and NPD curves into phonometry.aircraft.airport_noise.event_level.

Parameters

NameDescription
aircraft_idANP aircraft identifier.
observerReceiver position (x, y, z), in metres.
operation"departure"/"D" or "arrival"/"A".
aerodromeFly the published procedural steps at this field through the Appendix B performance model instead of reading the tabulated fixed-point trajectory. Most ANP types publish only steps, so for them this is not an alternative but the only way in.
stage_lengthANP stage length (default 1).
metric"exposure" (SEL) or "maximum" (LAmax).
temperature_cAir temperature at the field, in °C, for the atmospheric impedance adjustment. Left unset it follows aerodrome, or the standard atmosphere when there is none.
atmospheric_pressure_kpaAir pressure at the field, in kPa, likewise.
relative_humidity_percentRelative humidity at the field, in percent. Given, the SEL and LAmax NPD curves are recalculated for that humidity and the temperature and pressure above by ECAC Doc 29 Vol. 2 Appendix D, with the aircraft’s spectral class for the operation; left unset they stay in the SAE AIR-1845 atmosphere the database is normalised to.
absorptionThe Appendix D absorption route, "arp5534" (default) or "arp866a"; read only with a humidity.

Returns: A FlyoverResult.

AnpDatabase.flight_profile(
aircraft_id: str,
operation: str,
*,
aerodrome: Aerodrome,
stage_length: int | str = 1,
profile_id: str | None = None,
weight_lb: float | None = None,
) -> FlightProfile

Fly an aircraft’s published procedure into a Doc 29 flight profile.

The ECAC Doc 29 Vol. 2 Appendix B model applied to this aircraft’s ANP procedural steps: the profile depends on the aerodrome and its weather, which is why one has to be given and why the answer is not a table entry.

Parameters

NameDescription
aircraft_idANP aircraft identifier.
operation"departure"/"D" or "arrival"/"A".
aerodromeThe Aerodrome to fly from, carrying its elevation, temperature, pressure and headwind.
stage_lengthANP stage length (default 1), which selects the take-off weight of a departure.
profile_idOptional ANP profile identifier.
weight_lbWeight to fly at, lb. None (default) takes the ANP default weight for the stage length on a departure, and 90 % of the maximum landing weight on an arrival, as Doc 29 defines it.

Returns: A FlightProfile.

Raises

ExceptionWhen
KeyErrorIf the aircraft has no procedural-step profile or no default weight for the request.
AnpDatabase.noise_contour(
aircraft_id: str,
operation: str,
*,
x: NDArray[np.float64] | list[float],
y: NDArray[np.float64] | list[float],
aerodrome: Aerodrome | None = None,
stage_length: int | str = 1,
metric: EventMetric = 'exposure',
temperature_c: float | None = None,
atmospheric_pressure_kpa: float | None = None,
relative_humidity_percent: float | None = None,
absorption: str = 'arp5534',
) -> NoiseContourResult

Doc 29 single-event ground contour of an ANP aircraft.

Feeds the aircraft’s profile and NPD curves into phonometry.aircraft.airport_noise.noise_contour.

Parameters

NameDescription
aircraft_idANP aircraft identifier.
operation"departure"/"D" or "arrival"/"A".
xGrid x coordinates (along-track), in metres.
yGrid y coordinates (lateral), in metres.
aerodromeFly the published procedural steps at this field through the Appendix B performance model instead of reading the tabulated fixed-point trajectory. Most ANP types publish only steps, so for them this is not an alternative but the only way in.
stage_lengthANP stage length (default 1).
metric"exposure" (SEL) or "maximum" (LAmax).
temperature_cAir temperature at the field, in °C, for the atmospheric impedance adjustment. Left unset it follows aerodrome, or the standard atmosphere when there is none.
atmospheric_pressure_kpaAir pressure at the field, in kPa, likewise.
relative_humidity_percentRelative humidity at the field, in percent. Given, the SEL and LAmax NPD curves are recalculated for that humidity and the temperature and pressure above by ECAC Doc 29 Vol. 2 Appendix D, with the aircraft’s spectral class for the operation; left unset they stay in the SAE AIR-1845 atmosphere the database is normalised to.
absorptionThe Appendix D absorption route, "arp5534" (default) or "arp866a"; read only with a humidity.

Returns: A NoiseContourResult.

AnpDatabase.npd_curves(
aircraft_id: str,
operation: str,
metric: str = 'SEL',
) -> AnpNpdCurves

NPD curves for an aircraft, operation and noise metric.

Parameters

NameDescription
aircraft_idANP aircraft identifier.
operation"departure"/"D" or "arrival"/"A".
metric"SEL" (default) or "LAmax".

Returns: An AnpNpdCurves.

Raises

ExceptionWhen
KeyErrorIf the aircraft has no NPD data for the request.
ValueErrorIf the metric or operation is unknown.
AnpDatabase.performance_aircraft(aircraft_id: str) -> PerformanceAircraft

The aeroplane’s ECAC Doc 29 Vol. 2 Appendix B coefficient set.

Gathers the engine, aerodynamic and weight tables into the PerformanceAircraft the performance model takes. The engine count, the maximum sea-level static thrust and the maximum landing weight come from the aircraft table; the approach weight follows from the last of those as Doc 29 defines it.

Parameters

NameDescription
aircraft_idANP aircraft identifier.

Returns: A PerformanceAircraft.

Raises

ExceptionWhen
KeyErrorIf the aircraft is not in the database.
ValueErrorIf the export carries no performance tables at all, which is the case for an NPD-only export.
AnpDatabase.procedural_profile(
aircraft_id: str,
operation: str,
*,
aerodrome: Aerodrome,
stage_length: int | str = 1,
profile_id: str | None = None,
weight_lb: float | None = None,
) -> AnpProfile

A flown procedure as the flight path the Doc 29 noise chain reads.

flight_profile converted into the same AnpProfile the fixed-point bridge returns, so an aircraft that publishes procedural steps and one that publishes fixed points feed event_level and noise_contour alike. The units change on the way (Appendix B works in feet, knots and pounds; the noise chain in metres and metres per second) and the power setting stays the corrected net thrust per engine the NPD tables are indexed on.

Takes the same arguments as flight_profile.

Returns: An AnpProfile.

AnpDatabase.procedural_steps(
aircraft_id: str,
operation: str,
stage_length: int | str = 1,
*,
profile_id: str | None = None,
) -> tuple[DepartureStep, ...] | tuple[ApproachStep, ...]

The published procedure for an aircraft, as procedural steps.

The rows of the ANP departure or approach procedural-step table, in step order, as the types flight_performance flies. Approach procedures are not tabulated per stage length, so stage_length is read only for a departure.

Parameters

NameDescription
aircraft_idANP aircraft identifier.
operation"departure"/"D" or "arrival"/"A".
stage_lengthANP stage length (default 1), departures only.
profile_idOptional ANP profile identifier; None (default) selects "DEFAULT" when present, or the single available one.

Returns: The steps, in order.

Raises

ExceptionWhen
KeyErrorIf the aircraft has no procedural-step profile for the request, or profile_id is not among the available ones.
ValueErrorIf profile_id is None and several profiles exist with none of them named "DEFAULT".
AnpDatabase.profile(
aircraft_id: str,
operation: str,
stage_length: int | str = 1,
*,
profile_id: str | None = None,
) -> AnpProfile

Fixed-point trajectory for an aircraft, operation and stage length.

Aircraft may ship several fixed-point profiles for the same operation and stage length (e.g. weight variants). With profile_id=None the "DEFAULT" profile is selected when present; otherwise the single available profile is used, and an ambiguous request (several profiles, none named "DEFAULT") raises listing the identifiers.

Parameters

NameDescription
aircraft_idANP aircraft identifier.
operation"departure"/"D" or "arrival"/"A".
stage_lengthANP stage length (default 1).
profile_idOptional ANP profile identifier (e.g. "DEFAULT", "3000LB"); None (default) selects as described above.

Returns: An AnpProfile (a Doc 29 flight path with ground-roll masks).

Raises

ExceptionWhen
KeyErrorIf the aircraft is unknown, has no fixed-point profile for the request, or profile_id is not among the available ones.
ValueErrorIf profile_id is None and several profiles exist with none of them named "DEFAULT".
AnpDatabase.revised_npd_curves(
aircraft_id: str,
operation: str,
metric: str = 'SEL',
*,
temperature_c: float,
relative_humidity_percent: float,
atmospheric_pressure_kpa: float = 101.325,
absorption: str = 'arp5534',
) -> RevisedNpdCurves

NPD curves recalculated for another atmosphere (Doc 29 Vol. 2 Appendix D).

The curves of npd_curves revised by the increment of the aircraft’s own spectral class for the operation, as revise_npd_curves computes it.

Parameters

NameDescription
aircraft_idANP aircraft identifier.
operation"departure"/"D" or "arrival"/"A".
metric"SEL" (default) or "LAmax".
temperature_cAir temperature, in degrees Celsius.
relative_humidity_percentRelative humidity, in percent.
atmospheric_pressure_kpaAir pressure, in kPa (default 101.325).
absorption"arp5534" (default) or "arp866a".

Returns: A RevisedNpdCurves.

Raises

ExceptionWhen
KeyErrorif the aircraft, its NPD data or its spectral class is missing.
ValueErrorfor an unknown metric, operation or absorption route.
AnpDatabase.spectral_class(class_id: int | str) -> SpectralClass

One spectral class of the database (ECAC Doc 29 Vol. 2 G4.3).

Parameters

NameDescription
class_idSpectral class identifier, as a number or as the table writes it (103 or "103").

Returns: A SpectralClass.

Raises

ExceptionWhen
KeyErrorif the export carries no such class, or no spectral-class table at all.

property

Sorted list of the spectral class identifiers in the database.

AnpNpdCurves(
aircraft_id: str,
npd_id: str,
metric: str,
operation: str,
power_parameter: str,
powers: NDArray[np.float64],
distances: NDArray[np.float64],
levels: NDArray[np.float64],
)

ANP Noise-Power-Distance curves for one aircraft, metric and operation.

Attributes

NameDescription
aircraft_idANP aircraft identifier.
npd_idANP noise identifier (shared by aircraft with the same NPD set).
metric"SEL" or "LAmax".
operation"A" (arrival) or "D" (departure).
power_parameterName/unit of the power setting (e.g. corrected net thrust).
powersTabulated engine power settings (1-D, strictly increasing).
distancesTabulated slant distances, in metres (1-D, strictly increasing).
levelsTabulated event levels, shape (len(powers), len(distances)), in dB.

The powers, distances and levels arrays are read-only views shared with the parent database; copy them before mutating.

AnpNpdCurves.level(
power: float,
distance: NDArray[np.float64] | list[float] | float,
) -> NDArray[np.float64]

Interpolated NPD level L(P, d) (Doc 29 Eq. 4-3/4-4).

Parameters

NameDescription
powerQuery engine power setting.
distanceQuery slant distance(s), in metres.

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

AnpNpdCurves.plot(
ax: Axes | None = None,
*,
language: str = 'en',
**kwargs: Any,
) -> Axes

Plot the NPD curve at each tabulated power versus slant distance.

AnpProfile(
aircraft_id: str,
operation: str,
profile_id: str,
stage_length: int | str,
path: NDArray[np.float64],
ground_roll: NDArray[np.bool_],
landing_roll: NDArray[np.bool_],
)

Default fixed-point trajectory of an ANP aircraft as a Doc 29 flight path.

Attributes

NameDescription
aircraft_idANP aircraft identifier.
operation"A" (arrival) or "D" (departure).
profile_idANP profile label (usually "DEFAULT").
stage_lengthANP stage length (trip-distance/weight bin). Usually one of the numbered bins, but the database’s own column also carries "M" for a maximum-weight procedure, so the label is kept as it is read.
pathFlight-path points, shape (N, 5): x, y, z (m, along-track, lateral, altitude), engine power setting and true airspeed (m/s).
ground_rollBoolean mask (length N-1) of takeoff ground-roll segments.
landing_rollBoolean mask (length N-1) of landing rollout segments.

path is a read-only view shared with the parent database; copy it before mutating.

AnpProfile.plot(
ax: Axes | None = None,
*,
language: str = 'en',
**kwargs: Any,
) -> Axes

Plot the trajectory altitude versus along-track distance.

load_anp_database(path: Path | str | None = None) -> AnpDatabase

Load an EASA ANP database (aircraft, NPD curves and default profiles).

Parameters

NameDescription
pathDirectory of an ANP CSV export (the *Aircraft.csv, *NPD_data.csv, *fixed_point_profiles.csv tables, plus the optional performance tables the procedural-step model reads: *engine_coefficients.csv, *Aerodynamic_coefficients.csv, *weights.csv and the two *procedural_steps.csv, and the *Spectral_classes.csv table ECAC Doc 29 Vol. 2 Appendix D reads to recalculate the NPD curves for another atmosphere). If None (default), loads the full EASA ANP database v2.3 shipped with the package (see aircraft/data/anp/PROVENANCE.md).

Returns: An AnpDatabase.

Raises

ExceptionWhen
FileNotFoundErrorIf a required table is missing.
SpectralClass(
class_id: str,
operation: str,
description: str,
frequencies_hz: NDArray[np.float64],
levels_db: NDArray[np.float64],
)

One ANP spectral class: the reference spectrum of a group of aircraft.

ECAC Doc 29 Vol. 2 G4.3: the average unweighted spectrum at the time of the maximum level, at 1 000 ft, normalised to the same SAE AIR-1845 attenuation rates as the NPD data and, for historical reasons, to 70 dB in the 1 kHz band. Every aircraft is assigned one for approach and one for departure. Appendix D recalculates the aircraft’s NPD curves for another atmosphere from it (revise_npd_curves).

Attributes

NameDescription
class_idSpectral class identifier ("103", "205"…).
operation"A" (approach) or "D" (departure).
descriptionThe aircraft family the class describes.
frequencies_hzNominal one-third-octave-band centre frequencies, in Hz, from 50 Hz to 10 kHz.
levels_dbBand levels at 1 000 ft, in dB.
SpectralClass.plot(
ax: Axes | None = None,
*,
language: str = 'en',
**kwargs: Any,
) -> Axes

Plot the band levels versus frequency.