aircraft.npd_atmosphere
NPD data for a non-reference atmosphere (ECAC Doc 29 Vol. 2 Appendix D).
The noise-power-distance (NPD) curves of the ANP database are normalised to the SAE AIR-1845 atmosphere: the arithmetic mean of the attenuation rates measured in European and US certification tests (Table D-1), a notional atmosphere that no single temperature and humidity produce. Where the air of a study differs, Appendix D recalculates the NPD data from the spectral class of the NPD, the unweighted reference spectrum at 1 000 ft, in three steps:
- the AIR-1845 attenuation over the reference distance = 1 000 ft is added back (Eq. D-1);
- the corrected spectrum is taken to each NPD distance with spherical spreading and, in turn, the AIR-1845 attenuation (Eq. D-2) and the attenuation of the specified atmosphere (Eq. D-3), by SAE ARP 5534 or by SAE ARP 866A;
- both spectra are A-weighted and summed, and the difference of the two
levels is the increment (Eq. D-4), added to the
LmaxandLENPD levels alike.
SAE_AIR1845_ATTENUATION_DB_PER_100M— Table D-1.npd_atmosphere_increment— the increment at each NPD distance, as anNpdAtmosphereIncrementwith.plot()(the increment against distance) and.plot_attenuation()(the attenuation of the two atmospheres against frequency).revise_npd_curves— anAnpNpdCurvesrevised by that increment, as aRevisedNpdCurveswith.plot(); itsrevisedcurves feedevent_levelandnoise_contourlike any other NPD table.
The A-weighting of step 3 is the nominal one of IEC 61672-1, to 0.1 dB, in the 24 bands from 50 Hz to 10 kHz: Doc 29 names it without printing it, and those are the values that reproduce Tables D-4 and D-5.
Source (clean-room, implemented from the document): ECAC.CEAC Doc 29, 5th ed. (2026), Volume 2, Appendix D, Eqs. D-1 to D-4 and Table D-1, and G4.3 for the spectral classes. Checked end to end against Tables D-2 to D-6c of the same appendix.
Auto-generated from the source docstrings by
scripts/generate_api_docs.py(make api-docs). Do not edit by hand.
npd_atmosphere_increment
Section titled “npd_atmosphere_increment”npd_atmosphere_increment( spectrum: SpectralClass | ArrayLike, *, temperature_c: float, relative_humidity_percent: float, atmospheric_pressure_kpa: float = 101.325, absorption: str = 'arp5534', distances_m: ArrayLike | None = None,) -> NpdAtmosphereIncrementNPD increment of a spectral class for a specified atmosphere (Doc 29 Appendix D).
with the distances in metres, = 1 000 ft = 304.8 m,
the Table D-1 rate in dB per 100 m of path,
the unit the table prints (Doc 29 writes the equations with the rates in
dB/m instead), and
the band attenuation of
the specified atmosphere over : the SAE Method of SAE ARP 5534
(sae_band_attenuation),
which depends on the path and the pressure, or SAE ARP 866A
(arp866a_attenuation),
which depends on neither, with η(δ) read linearly in Table 1 of ISO
3891, as Tables D-3b and D-5 are computed. Doc 29 recommends ARP 5534 and
keeps ARP 866A for transition. Nothing is rounded: Tables D-4 to D-6c are rounded for
presentation only, and the increment is carried at full precision.
The increment is a difference of two sums over the same spectrum, so it does not depend on the overall level of the spectral class, only on its shape; the spectral classes are normalised to 70 dB at 1 kHz (G4.3).
Parameters
| Name | Description |
|---|---|
spectrum | The spectral class of the NPD, a SpectralClass or its 24 one-third-octave-band levels from 50 Hz to 10 kHz at 1 000 ft, in dB. |
temperature_c | Air temperature T, in degrees Celsius. |
relative_humidity_percent | Relative humidity, in percent. |
atmospheric_pressure_kpa | Air pressure pa, in kPa (default 101.325, sea level). Read by ARP 5534 only. |
absorption | "arp5534" (default) or "arp866a". |
distances_m | The NPD slant distances, in metres. None takes the ten standard ones of footnote 40, 200 ft to 25 000 ft. |
Returns: An NpdAtmosphereIncrement.
Raises
| Exception | When |
|---|---|
| ValueError | for a spectrum that is not 24 finite levels, an unknown absorption route, a distance that is not positive, or an atmosphere the chosen route refuses. |
NpdAtmosphereIncrement
Section titled “NpdAtmosphereIncrement”NpdAtmosphereIncrement( frequencies_hz: NDArray[np.float64], distances_m: NDArray[np.float64], spectrum_db: NDArray[np.float64], source_spectrum_db: NDArray[np.float64], reference_attenuation_db: NDArray[np.float64], specified_attenuation_db: NDArray[np.float64], reference_levels_dba: NDArray[np.float64], specified_levels_dba: NDArray[np.float64], increment_db: NDArray[np.float64], absorption: str, temperature_c: float, relative_humidity_percent: float, atmospheric_pressure_kpa: float,)The NPD increment for a specified atmosphere (ECAC Doc 29 Vol. 2 Appendix D).
Every per-band array runs over the 24 bands of frequencies_hz, and
every per-distance array over distances_m; the two attenuation
tables are (bands, distances).
Attributes
| Name | Description |
|---|---|
frequencies_hz | Nominal one-third-octave-band centre frequencies, in Hz (50 Hz to 10 kHz). |
distances_m | The NPD slant distances , in metres. |
spectrum_db | The spectral class as given, at 1 000 ft in the AIR-1845 atmosphere, in dB. |
source_spectrum_db | , the same spectrum with the AIR-1845 attenuation added back (Eq. D-1), in dB. |
reference_attenuation_db | , the AIR-1845 attenuation at each distance (Table D-3a), in dB. |
specified_attenuation_db | , the attenuation of the specified atmosphere (Tables D-3b and D-3c), in dB. |
reference_levels_dba | , in dB. |
specified_levels_dba | , in dB. |
increment_db | (Eq. D-4), in dB, to add to the NPD levels at the same distances. |
absorption | "arp5534" or "arp866a", the route taken for the specified atmosphere. |
temperature_c | Air temperature, in degrees Celsius. |
relative_humidity_percent | Relative humidity, in percent. |
atmospheric_pressure_kpa | Air pressure, in kPa. SAE ARP 866A does not use it. |
NpdAtmosphereIncrement.distance_column()
Section titled “NpdAtmosphereIncrement.distance_column()”NpdAtmosphereIncrement.distance_column(distance_m: float) -> intColumn of the tables that holds one of distances_m.
Parameters
| Name | Description |
|---|---|
distance_m | One of the NPD distances, in metres. |
Returns: Its index along the distance axis.
Raises
| Exception | When |
|---|---|
| ValueError | if the distance is not one of the table’s. |
NpdAtmosphereIncrement.plot()
Section titled “NpdAtmosphereIncrement.plot()”NpdAtmosphereIncrement.plot( ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesPlot the increment against slant distance.
NpdAtmosphereIncrement.plot_attenuation()
Section titled “NpdAtmosphereIncrement.plot_attenuation()”NpdAtmosphereIncrement.plot_attenuation( ax: Axes | None = None, *, distance_m: float = 304.8, reference: bool = True, language: str = 'en', **kwargs: Any,) -> AxesPlot the attenuation of both atmospheres against frequency at one distance.
Parameters
| Name | Description |
|---|---|
ax | Existing axes, or None to create a figure. |
distance_m | One of distances_m (default 1 000 ft). |
reference | Also draw the AIR-1845 attenuation. Pass False to add a second route to axes that already carry it. |
language | Label language, "en" (default) or "es". |
kwargs | Forwarded to the specified-atmosphere plot call. |
Returns: The axes.
revise_npd_curves
Section titled “revise_npd_curves”revise_npd_curves( curves: AnpNpdCurves, spectrum: SpectralClass | ArrayLike, *, temperature_c: float, relative_humidity_percent: float, atmospheric_pressure_kpa: float = 101.325, absorption: str = 'arp5534',) -> RevisedNpdCurvesNPD curves recalculated for a specified atmosphere (Doc 29 Vol. 2 Appendix D).
Adds npd_atmosphere_increment, taken at the curves’ own distances,
to the level of every power setting. The same increment applies to the
Lmax and the LE curves of an operation, which assumes the
atmosphere changes the reference spectrum and not the shape of the level
time history (Appendix D, last paragraph of step 3).
Parameters
| Name | Description |
|---|---|
curves | The NPD curves, an AnpNpdCurves. |
spectrum | The spectral class of the same aircraft and operation (see spectral_class). |
temperature_c | Air temperature, in degrees Celsius. |
relative_humidity_percent | Relative humidity, in percent. |
atmospheric_pressure_kpa | Air pressure, in kPa (default 101.325). |
absorption | "arp5534" (default) or "arp866a". |
Returns: A RevisedNpdCurves.
Raises
| Exception | When |
|---|---|
| ValueError | as npd_atmosphere_increment does. |
RevisedNpdCurves
Section titled “RevisedNpdCurves”RevisedNpdCurves( original: AnpNpdCurves, revised: AnpNpdCurves, increment: NpdAtmosphereIncrement,)NPD curves recalculated for a specified atmosphere (Doc 29 Vol. 2 Appendix D).
Attributes
| Name | Description |
|---|---|
original | The curves as the ANP database gives them, in the AIR-1845 atmosphere. |
revised | The same curves with increment added at every power setting, an AnpNpdCurves that level and the Doc 29 event chain read like any other. |
increment | The increment and everything it was computed from. |
RevisedNpdCurves.plot()
Section titled “RevisedNpdCurves.plot()”RevisedNpdCurves.plot( ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesPlot the revised curves over the original ones against slant distance.
SAE_AIR1845_ATTENUATION_DB_PER_100M
Section titled “SAE_AIR1845_ATTENUATION_DB_PER_100M”Constant (mapping).
SAE_AIR1845_ATTENUATION_DB_PER_100M = {50.0: 0.033, 63.0: 0.033, 80.0: 0.033, 100.0: 0.066, 125.0: 0.066, 160.0: 0.098, 200.0: 0.131, 250.0: 0.131, 315.0: 0.197, 400.0: 0.23, 500.0: 0.295, 630.0: 0.361, 800.0: 0.459, 1000.0: 0.59, 1250.0: 0.754, 1600.0: 0.983, 2000.0: 1.311, 2500.0: 1.705, 3150.0: 2.295, 4000.0: 3.115, 5000.0: 3.607, 6300.0: 5.246, 8000.0: 7.213, 10000.0: 9.836}