environment.assessment.wind_turbine_receptor
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.
Wind turbine sound at a receptor (IEC TS 61400-11-2:2024).
IEC 61400-11 measures what a turbine emits; IEC TS 61400-11-2:2024 measures
what arrives at a dwelling, where the wind that drives the turbine also stirs
the trees, the background and the propagation. This module holds its closed
forms and printed tables; the amplitude modulation of clause 13 is in
wind_turbine_modulation.
Wind speed at another height (Annex K, IEC 61400-11:2012 Annex D). The
power law of Equation (K.1), power_law_wind_speed, and its inverse
for the shear exponent, Equation (K.2), wind_shear_exponent, which
Tables K.1 and K.2 tabulate for 10 m and 120 m; the logarithmic profile with
the reference roughness length m (3.31) that
9.3.2.1 uses to bring a hub-height wind speed to 10 m,
logarithmic_wind_speed; and wind_shear_profile, which plots
both through two measured heights. Table K.3’s roughness lengths are
ROUGHNESS_LENGTHS_M.
Bins and their averages (10.1, 10.3). bin_sound_levels sorts
interval levels into 1 m/s wind speed bins and 30 degree sectors and forms, per
bin, the energy average of Equation (1) (or the arithmetic one of Equation (8)
for statistical levels), the type A uncertainty of Equation (2) or (9), the
type B one of Equations (3) and (4) and their combination, Equation (5).
turbine_sound_levels subtracts the background per bin with Equations
(6) and (7), under the 3 dB rule of 11.7. predicted_receptor_level
sums a prediction over the turbines with the uncertainty of Equations (10)
and (11), and sound_relevant_turbines picks the turbines whose wind
speeds make the binning wind speed (9.3.2.3).
Low frequency sound (Annex C). wind_turbine_low_frequency_level
evaluates Equation (C.1) band by band with the ground correction and air
attenuation of Table C.2 and a facade insulation such as those of Table C.3.
Table C.2’s air attenuation is the Danish statutory order’s, not the
ISO 9613-1 value at the 70 % humidity its caption names: from 25 Hz to
100 Hz its cells are those of the order (BEK nr. 135 of 7 February 2019,
Table 1.4), set for 10 degrees C and 80 % relative humidity with the
Nord2000 band attenuation rates and nothing below 25 Hz, which puts them
0.01 dB/km to 0.02 dB/km under ISO 9613-1 at 70 % between 50 Hz and 100 Hz;
from 125 Hz to 200 Hz the cells are ISO 9613-1 at 10 degrees C and 70 %
evaluated at the nominal band centres. ISO 9613-1’s own Table 1 is computed at
the exact mid-band frequencies and prints 0.584 dB/km at 160 Hz (158.5 Hz
exactly), where Table C.2 prints the nominal 160 Hz value 0.59; Table 7 of the
TS, in contrast, follows the exact mid-bands.
Emergence and the rating level (Annexes J and A). sound_emergence
is Equation (J.1); wind_turbine_rating_level adds the most severe of
the tonal, amplitude modulation and impulsive adjustments (A.1), with the
amplitude modulation adjustment of Figure A.1 in
amplitude_modulation_adjustment.
The upper tone search frequency (12.5.2.4, Table 7).
upper_tone_search_frequency finds the lowest one-third-octave band that
ISO 9613-1 attenuates by at least 20 dB over the distance to the nearest
turbine.
Auto-generated from the source docstrings by
scripts/generate_api_docs.py(make api-docs). Do not edit by hand.
amplitude_modulation_adjustment
Section titled “amplitude_modulation_adjustment”amplitude_modulation_adjustment( modulation_depth_db: ArrayLike,) -> NDArray[np.float64] | floatThe amplitude modulation adjustment of Figure A.1, in dB.
The example adjustment of A.3: none below a modulation depth of 3 dB,
3 dB at 3 dB, rising linearly to 5 dB at 10 dB and 5 dB above it. The
figure is drawn to 12 dB; the 5 dB is kept beyond. The depth is the
reconstructed time-series modulation depth of clause 13 (the AM rating of
amplitude_modulation_period).
Parameters
| Name | Description |
|---|---|
modulation_depth_db | The modulation depth, in dB. |
Returns: The adjustment , in dB; a float for a scalar depth.
Raises
| Exception | When |
|---|---|
| ValueError | If a depth is negative or not finite. |
BackgroundCorrectionRegime
Section titled “BackgroundCorrectionRegime”BackgroundCorrectionRegime(*values)Which rule of 11.7 a bin’s background correction followed.
LOGARITHMIC: the total is at least 3 dB above the background, and the
background is subtracted (Equation (6)). THREE_DB: the total is at
least 0 dB but less than 3 dB above it, and the suggested 3 dB correction
is applied.
UNDETERMINED: the background is above the total, and the turbine
level cannot be determined (11.6.4).
bin_sound_levels
Section titled “bin_sound_levels”bin_sound_levels( levels_db: ArrayLike, wind_speeds_m_s: ArrayLike, wind_directions_deg: ArrayLike | None = None, *, averaging: str = 'energy', type_b_uncertainty_db: ArrayLike = 0.0, bin_width_m_s: float = 1.0, sector_width_deg: float = 30.0,) -> BinnedSoundLevelsAverage interval levels per wind speed bin and sector (10.1, 10.3).
Each interval (typically 10 s to 10 min) goes into the wind speed bin of
its binning wind speed, bin_width_m_s wide and centred on its
multiples, and, with directions, into the sector_width_deg sector
whose first member is centred on north. Per bin:
- the average, Equation (1) for equivalent levels, or Equation (8), the arithmetic mean, for statistical levels such as (10.3.2 NOTE);
- the type A uncertainty, Equation (2) (or (9)), ;
- the type B uncertainty, Equation (4), the root mean square of the per-interval type B uncertainties of Equation (3);
- their combination, Equation (5), .
Parameters
| Name | Description |
|---|---|
levels_db | The interval levels, in dB. |
wind_speeds_m_s | The binning wind speed of each interval, in m/s. |
wind_directions_deg | Optional wind direction of each interval, in degrees from north. |
averaging | "energy" (Equation (1), for LAeq) or "arithmetic" (Equation (8), for statistical levels). |
type_b_uncertainty_db | Combined type B standard uncertainty of each interval, Equation (3), in dB: one value for all or one per interval. Combine the components in quadrature, for example those of TYPE_B_UNCERTAINTY_EXAMPLES_DB. |
bin_width_m_s | Width of the wind speed bins, in m/s (1 m/s by default, 10.1). |
sector_width_deg | Width of the direction sectors, in degrees (30 by default, 10.1); it must divide 360. |
Returns: A BinnedSoundLevels.
Raises
| Exception | When |
|---|---|
| ValueError | If the inputs disagree in length, a value is not finite, a wind speed or an uncertainty is negative, or averaging is unknown. |
BinnedSoundLevels
Section titled “BinnedSoundLevels”BinnedSoundLevels( wind_speeds_m_s: NDArray[np.float64], wind_directions_deg: NDArray[np.float64] | None, counts: NDArray[np.int64], mean_levels_db: NDArray[np.float64], type_a_uncertainty_db: NDArray[np.float64], type_b_uncertainty_db: NDArray[np.float64], combined_uncertainty_db: NDArray[np.float64], *, averaging: str, interval_levels_db: NDArray[np.float64], interval_wind_speeds_m_s: NDArray[np.float64], bin_width_m_s: float, sector_width_deg: float,)Interval levels averaged per wind speed bin and sector (10.1, 10.3).
One row per occupied bin, sorted by sector and then wind speed.
Attributes
| Name | Description |
|---|---|
wind_speeds_m_s | Centre of each bin’s wind speed class, in m/s. |
wind_directions_deg | Centre of each bin’s direction sector, in degrees, or None when binned by wind speed alone. |
counts | Number of intervals in each bin. |
mean_levels_db | The bin average, Equation (1) (energy) or Equation (8) (arithmetic), in dB. |
type_a_uncertainty_db | Equation (2) or (9), in dB; NaN for a bin of one interval, whose spread the equation cannot give. |
type_b_uncertainty_db | Equation (4), in dB. |
combined_uncertainty_db | Equation (5), in dB; NaN where the type A part is. |
averaging | "energy" or "arithmetic". |
interval_levels_db | The interval levels binned, in dB. |
interval_wind_speeds_m_s | Their wind speeds, in m/s. |
bin_width_m_s | Width of the wind speed bins, in m/s. |
sector_width_deg | Width of the direction sectors, in degrees (also kept when binned by wind speed alone). |
BinnedSoundLevels.background_corrected()
Section titled “BinnedSoundLevels.background_corrected()”BinnedSoundLevels.background_corrected( background: BinnedSoundLevels,) -> TurbineSoundLevelsCorrect these total levels for a background binned the same way (11.7).
The bins the two share are corrected by turbine_sound_levels
with their combined uncertainties; a bin of either without a partner
in the other is left out.
Parameters
| Name | Description |
|---|---|
background | The background (turbines off) levels, binned with the same wind speed classes and sectors. |
Returns: A TurbineSoundLevels over the shared bins, with their sector centres when binned by direction.
Raises
| Exception | When |
|---|---|
| ValueError | If the two share no bin, one is binned by direction and the other is not, or their bin or sector widths differ. |
BinnedSoundLevels.plot()
Section titled “BinnedSoundLevels.plot()”BinnedSoundLevels.plot( ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesPlot the intervals against wind speed and the bin averages over them.
The scatter of interval levels against the binning wind speed is what 11.9 asks to be reported; the bin averages carry their combined uncertainty as error bars.
Parameters
| Name | Description |
|---|---|
ax | Existing axes, or None to create a figure. |
language | "en" (default) or "es". |
kwargs | Forwarded to the bin averages. |
Returns: The axes.
GroundImpedanceClass
Section titled “GroundImpedanceClass”GroundImpedanceClass( flow_resistivity_kpa_s_m2: float, nordtest_classes_kpa_s_m2: tuple[float, ...], description: str,)One impedance class of Table C.1.
Attributes
| Name | Description |
|---|---|
flow_resistivity_kpa_s_m2 | Representative flow resistivity, in kPa s/m². |
nordtest_classes_kpa_s_m2 | The Nordtest flow resistivity classes the class covers, in kPa s/m² (empty where the table prints a dash). |
description | The ground the class describes. |
logarithmic_wind_speed
Section titled “logarithmic_wind_speed”logarithmic_wind_speed( reference_speed_m_s: ArrayLike, *, height_m: float, reference_height_m: float, roughness_length_m: float = 0.05,) -> NDArray[np.float64] | floatWind speed at another height by the logarithmic profile.
(IEC 61400-11:2012 Equation (D.1)). With the default reference roughness length m (3.31), a hub-height wind speed brought to 10 m is the binning wind speed of 9.3.2.1 (IEC 61400-11:2012 Equation (29) solved for ).
Parameters
| Name | Description |
|---|---|
reference_speed_m_s | Wind speed at the reference height, in m/s. |
height_m | Height of the wanted wind speed, in m. |
reference_height_m | Height of the known wind speed, in m. |
roughness_length_m | Roughness length , in m. |
Returns: The wind speed at height_m, in m/s; a float for scalar inputs.
Raises
| Exception | When |
|---|---|
| ValueError | If a height or the roughness length is not positive, a height does not exceed the roughness length, or a speed is negative. |
LOW_FREQUENCY_AIR_ATTENUATION_DB_PER_KM
Section titled “LOW_FREQUENCY_AIR_ATTENUATION_DB_PER_KM”Constant (numpy.ndarray, shape (14,)).
LOW_FREQUENCY_BANDS_HZ
Section titled “LOW_FREQUENCY_BANDS_HZ”Constant (numpy.ndarray, shape (14,)).
LOW_FREQUENCY_FACADE_INSULATION_DB
Section titled “LOW_FREQUENCY_FACADE_INSULATION_DB”Constant (mapping).
LOW_FREQUENCY_FACADE_INSULATION_DB = {'Denmark brick or similar': array([ 4.9, 5.9, 4.6, 6.6, 8.4, 10.8, 11.4, 13. , 16.6, 19.7, 21.2, 20.2, 21.2, 21. ]), 'Denmark lightweight': array([ 6.8, 3.9, 0.4, -0.2, 4.8, 6.2, 8.4, 10.5, 11.9, 11.9, 16. , 17.5, 17.9, 17. ])}LOW_FREQUENCY_GROUND_CORRECTION_DB
Section titled “LOW_FREQUENCY_GROUND_CORRECTION_DB”Constant (numpy.ndarray, shape (14,)).
LOW_FREQUENCY_GROUND_IMPEDANCE_CLASSES
Section titled “LOW_FREQUENCY_GROUND_IMPEDANCE_CLASSES”Constant (mapping).
LOW_FREQUENCY_GROUND_IMPEDANCE_CLASSES = {'A': GroundImpedanceClass(flow_resistivity_kpa_s_m2=12.5, nordtest_classes_kpa_s_m2=(10.0, 15.0), description='Very soft (snow, moss like)'), 'B': GroundImpedanceClass(flow_resistivity_kpa_s_m2=32.0, nordtest_classes_kpa_s_m2=(25.0, 40.0), description='Soft forest floor (short dense heatherlike or thick moss)'), 'C': GroundImpedanceClass(flow_resistivity_kpa_s_m2=80.0, nordtest_classes_kpa_s_m2=(63.0, 100.0), description='Uncompacted loose ground (turf, grass, loose soil)'), 'D': GroundImpedanceClass(flow_resistivity_kpa_s_m2=200.0, nordtest_classes_kpa_s_m2=(160.0, 250.0), description='Normal uncompacted ground (forest floor, pasture field)'), 'E': GroundImpedanceClass(flow_resistivity_kpa_s_m2=500.0, nordtest_classes_kpa_s_m2=(400.0, 630.0), description='Compacted field and gravel (compacted lawns, park area)'), 'F': GroundImpedanceClass(flow_resistivity_kpa_s_m2=2000.0, nordtest_classes_kpa_s_m2=(2000.0,), description='Compacted dense ground (gravel road, parking lot, ISO 10844)'), 'G': GroundImpedanceClass(flow_resistivity_kpa_s_m2=20000.0, nordtest_classes_kpa_s_m2=(), description='Hard surface (most normal asphalt, concrete)'), 'H': GroundImpedanceClass(flow_resistivity_kpa_s_m2=200000.0, nordtest_classes_kpa_s_m2=(), description='Very hard and dense surfaces (dense asphalt, concrete, water)')}LowFrequencyLevel
Section titled “LowFrequencyLevel”LowFrequencyLevel( frequencies_hz: NDArray[np.float64], sound_power_levels_db: NDArray[np.float64], a_weighting_db: NDArray[np.float64], distance_terms_db: NDArray[np.float64], ground_correction_db: NDArray[np.float64], air_attenuation_db: NDArray[np.float64], facade_insulation_db: NDArray[np.float64] | None, outdoor_levels_db: NDArray[np.float64], indoor_levels_db: NDArray[np.float64] | None, outdoor_level_db: float, indoor_level_db: float | None, *, a_weighted: bool,)Low frequency sound at a receptor by Equation (C.1) (Annex C).
Arrays with a turbine axis have one row per turbine and one column per band; the band arrays are summed over the turbines.
Attributes
| Name | Description |
|---|---|
frequencies_hz | The one-third-octave centres, in Hz. |
sound_power_levels_db | The turbines’ band sound power levels. |
a_weighting_db | The A-weighting added to each band (zero when the result is unweighted). |
distance_terms_db | of each turbine, in dB. |
ground_correction_db | per band. |
air_attenuation_db | per turbine and band. |
facade_insulation_db | per band, or None for an outdoor result. |
outdoor_levels_db | Outdoor band levels summed over the turbines. |
indoor_levels_db | Indoor band levels, or None. |
outdoor_level_db | Energy sum of the outdoor bands, in dB. |
indoor_level_db | Energy sum of the indoor bands, or None. |
a_weighted | Whether the levels are A-weighted. |
LowFrequencyLevel.plot()
Section titled “LowFrequencyLevel.plot()”LowFrequencyLevel.plot( ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesPlot the outdoor and indoor band levels.
Parameters
| Name | Description |
|---|---|
ax | Existing axes, or None to create a figure. |
language | "en" (default) or "es". |
kwargs | Forwarded to the outdoor levels. |
Returns: The axes.
MODELLING_UNCERTAINTY_DB
Section titled “MODELLING_UNCERTAINTY_DB”Constant (float).
MODELLING_UNCERTAINTY_DB = 0.5power_law_wind_speed
Section titled “power_law_wind_speed”power_law_wind_speed( reference_speed_m_s: ArrayLike, *, height_m: float, reference_height_m: float, shear_exponent: ArrayLike,) -> NDArray[np.float64] | floatWind speed at another height by the power law (Equation (K.1)).
, the profile of IEC 61400-11:2012 D.3 that Table K.1 evaluates for 120 m and 10 m.
Parameters
| Name | Description |
|---|---|
reference_speed_m_s | Wind speed at the reference height, in m/s. |
height_m | Height of the wanted wind speed, in m. |
reference_height_m | Height of the known wind speed, in m. |
shear_exponent | The wind shear exponent . |
Returns: The wind speed at height_m, in m/s; a float for scalar inputs.
Raises
| Exception | When |
|---|---|
| ValueError | If a height is not positive, a speed is negative or a value is not finite. |
predicted_receptor_level
Section titled “predicted_receptor_level”predicted_receptor_level( turbine_levels_db: ArrayLike, sound_power_uncertainty_db: ArrayLike, *, prediction_model_uncertainty_db: float = 2.0, modelling_uncertainty_db: float = 0.5,) -> PredictedReceptorLevelSum a prediction over the turbines, with its uncertainty (10.3.4).
The receptor level is the energy sum of the turbines’ predicted levels. Equation (10) carries each turbine’s sound power level uncertainty to it weighted by the turbine’s share of the energy,
(a linear, fully correlated combination), and Equation (11) adds the prediction model and the modelling in quadrature.
Parameters
| Name | Description |
|---|---|
turbine_levels_db | Predicted level at the receptor from each turbine, in dB. |
sound_power_uncertainty_db | Uncertainty of each turbine’s sound power level, from IEC 61400-11, in dB (one value for all or one each). |
prediction_model_uncertainty_db | Standard uncertainty of the prediction model, in dB (2 dB by default, 10.3.4 NOTE). |
modelling_uncertainty_db | Uncertainty of the propagation modelling, in dB (0.5 dB by default). |
Returns: A PredictedReceptorLevel.
Raises
| Exception | When |
|---|---|
| ValueError | If a value is not finite or an uncertainty is negative. |
PredictedReceptorLevel
Section titled “PredictedReceptorLevel”PredictedReceptorLevel( turbine_levels_db: NDArray[np.float64], sound_power_uncertainty_db: NDArray[np.float64], level_db: float, propagated_uncertainty_db: float, combined_uncertainty_db: float, *, prediction_model_uncertainty_db: float, modelling_uncertainty_db: float,)A predicted receptor level and its uncertainty (10.3.4).
Attributes
| Name | Description |
|---|---|
turbine_levels_db | The predicted level from each turbine, in dB. |
sound_power_uncertainty_db | The sound power level uncertainty of each turbine, in dB. |
level_db | The energy sum of the turbines’ levels, in dB. |
propagated_uncertainty_db | Equation (10), the level-weighted mean of the turbines’ sound power uncertainties, in dB. |
combined_uncertainty_db | Equation (11), in dB. |
prediction_model_uncertainty_db | The model’s uncertainty used, in dB. |
modelling_uncertainty_db | The modelling uncertainty used, in dB. |
PredictedReceptorLevel.plot()
Section titled “PredictedReceptorLevel.plot()”PredictedReceptorLevel.plot( ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesPlot each turbine’s contribution and the total with its uncertainty.
Parameters
| Name | Description |
|---|---|
ax | Existing axes, or None to create a figure. |
language | "en" (default) or "es". |
kwargs | Forwarded to the turbine bars. |
Returns: The axes.
PREDICTION_MODEL_UNCERTAINTY_DB
Section titled “PREDICTION_MODEL_UNCERTAINTY_DB”Constant (float).
PREDICTION_MODEL_UNCERTAINTY_DB = 2.0REFERENCE_ROUGHNESS_LENGTH_M
Section titled “REFERENCE_ROUGHNESS_LENGTH_M”Constant (float).
REFERENCE_ROUGHNESS_LENGTH_M = 0.05ROUGHNESS_LENGTHS_M
Section titled “ROUGHNESS_LENGTHS_M”Constant (mapping).
ROUGHNESS_LENGTHS_M = {'Water, snow or sand surfaces': 0.0001, 'Open, flat land, mown grass, bare soil': 0.01, 'Farmland with some vegetation': 0.05, 'Suburbs, towns, forests, many trees and bushes': 0.3}sound_emergence
Section titled “sound_emergence”sound_emergence( ambient_levels_db: ArrayLike, background_levels_db: ArrayLike, *, wind_speeds_m_s: ArrayLike | None = None,) -> SoundEmergenceThe emergence criterion of each wind speed class (Equation (J.1)).
, the difference of the ambient sound criterion (turbines operating) and the background sound criterion (turbines stopped) for each complete wind speed class, the criterion of French regulation. The TS warns it is not to be confused with limits on the difference between the turbine sound and the background.
Parameters
| Name | Description |
|---|---|
ambient_levels_db | The ambient sound criterion of each class, in dB. |
background_levels_db | The background sound criterion of each class. |
wind_speeds_m_s | Optional wind speed of each class, in m/s. |
Returns: A SoundEmergence.
Raises
| Exception | When |
|---|---|
| ValueError | If the inputs disagree in length or are not finite. |
sound_relevant_turbines
Section titled “sound_relevant_turbines”sound_relevant_turbines( predicted_levels_db: ArrayLike,) -> SoundRelevantTurbinesSelect the sound relevant turbines of a wind farm (9.3.2.3).
The turbines are sorted by their predicted contribution at the receptor. The quietest is left out of the prediction, and the next quietest after it, for as long as the total of those that remain has dropped by no more than 1.0 dB from the total of all; the turbine whose exclusion would drop it by more is kept, with every louder one. Typically two or three turbines remain. A drop within a nanodecibel of 1.0 dB is a drop of 1.0 dB, not more, so the rounding of the energy sums cannot keep a turbine the TS leaves out.
Parameters
| Name | Description |
|---|---|
predicted_levels_db | Each turbine’s predicted level at the receptor, in dB. |
Returns: A SoundRelevantTurbines.
Raises
| Exception | When |
|---|---|
| ValueError | If the levels are empty or not finite. |
SoundEmergence
Section titled “SoundEmergence”SoundEmergence( ambient_levels_db: NDArray[np.float64], background_levels_db: NDArray[np.float64], emergence_db: NDArray[np.float64], *, wind_speeds_m_s: NDArray[np.float64] | None,)The emergence criterion per wind speed class (Annex J, Equation (J.1)).
Attributes
| Name | Description |
|---|---|
ambient_levels_db | The ambient sound criterion per class, in dB. |
background_levels_db | The background sound criterion per class. |
emergence_db | . |
wind_speeds_m_s | The wind speed classes, in m/s, when given. |
SoundEmergence.plot()
Section titled “SoundEmergence.plot()”SoundEmergence.plot( ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesPlot the emergence of each wind speed class.
Parameters
| Name | Description |
|---|---|
ax | Existing axes, or None to create a figure. |
language | "en" (default) or "es". |
kwargs | Forwarded to the emergence bars. |
Returns: The axes.
SoundRelevantTurbines
Section titled “SoundRelevantTurbines”SoundRelevantTurbines(predicted_levels_db: NDArray[np.float64])The turbines that set the binning wind speed at a receptor (9.3.2.3).
Which turbines are relevant is read from the predicted levels and the 1.0 dB of 9.3.2.3, so it is not a field.
Attributes
| Name | Description |
|---|---|
predicted_levels_db | Each turbine’s predicted level at the receptor, in dB, in the order given. |
SoundRelevantTurbines.binning_wind_speed_m_s()
Section titled “SoundRelevantTurbines.binning_wind_speed_m_s()”SoundRelevantTurbines.binning_wind_speed_m_s( turbine_wind_speeds_m_s: ArrayLike,) -> floatThe binning wind speed: the arithmetic mean over the relevant turbines.
Parameters
| Name | Description |
|---|---|
turbine_wind_speeds_m_s | The wind speed derived from each turbine (power curve or nacelle, recalculated to 10 m), in m/s, in the order of predicted_levels_db. |
Returns: The mean of the relevant turbines’ wind speeds, in m/s.
Raises
| Exception | When |
|---|---|
| ValueError | If the speeds are not one per turbine or not finite. |
SoundRelevantTurbines.indices
Section titled “SoundRelevantTurbines.indices”property
Positions of the sound relevant turbines, loudest first.
SoundRelevantTurbines.plot()
Section titled “SoundRelevantTurbines.plot()”SoundRelevantTurbines.plot( ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesPlot the turbines’ levels, loudest first, the relevant ones marked.
Parameters
| Name | Description |
|---|---|
ax | Existing axes, or None to create a figure. |
language | "en" (default) or "es". |
kwargs | Forwarded to the turbine bars. |
Returns: The axes.
SoundRelevantTurbines.relevant
Section titled “SoundRelevantTurbines.relevant”property
Whether each turbine is sound relevant.
The quietest is left out, and the next quietest after it, for as long as the total of those that remain has dropped by no more than 1.0 dB from the total of all (“reduced by more than 1,0 dB”, 9.3.2.3: 1.0 dB itself is not more, and a drop within a nanodecibel of it is 1.0 dB).
SoundRelevantTurbines.relevant_level_db
Section titled “SoundRelevantTurbines.relevant_level_db”property
The predicted level of the relevant ones, in dB.
SoundRelevantTurbines.total_level_db
Section titled “SoundRelevantTurbines.total_level_db”property
The predicted level of all turbines, in dB.
SWEDISH_LOW_FREQUENCY_LIMITS_DB
Section titled “SWEDISH_LOW_FREQUENCY_LIMITS_DB”Constant (mapping).
SWEDISH_LOW_FREQUENCY_LIMITS_DB = {31.5: 56.0, 40.0: 49.0, 50.0: 43.0, 63.0: 42.0, 80.0: 40.0, 100.0: 38.0, 125.0: 36.0, 160.0: 34.0, 200.0: 32.0}TONE_SEARCH_BANDS_HZ
Section titled “TONE_SEARCH_BANDS_HZ”Constant (numpy.ndarray, shape (24,)).
ToneSearchLimit
Section titled “ToneSearchLimit”ToneSearchLimit( distance_m: float, frequencies_hz: NDArray[np.float64], attenuation_db: NDArray[np.float64], upper_frequency_hz: float, *, temperature_c: float, relative_humidity_percent: float, atmospheric_pressure_kpa: float,)The upper frequency of the tonal search range (12.5.2.4).
Attributes
| Name | Description |
|---|---|
distance_m | Distance from the nearest turbine, in m. |
frequencies_hz | The nominal one-third-octave centres searched. |
attenuation_db | ISO 9613-1 attenuation of each band over the distance, at the exact mid-band frequency, in dB. |
upper_frequency_hz | The nominal centre of the lowest band attenuated by at least 20 dB, or 10 kHz when none is. |
temperature_c | Air temperature, in degrees C. |
relative_humidity_percent | Relative humidity, in %. |
atmospheric_pressure_kpa | Atmospheric pressure, in kPa. |
ToneSearchLimit.plot()
Section titled “ToneSearchLimit.plot()”ToneSearchLimit.plot( ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesPlot the band attenuation over the distance and the 20 dB line.
Parameters
| Name | Description |
|---|---|
ax | Existing axes, or None to create a figure. |
language | "en" (default) or "es". |
kwargs | Forwarded to the attenuation curve. |
Returns: The axes.
turbine_sound_levels
Section titled “turbine_sound_levels”turbine_sound_levels( total_levels_db: ArrayLike, background_levels_db: ArrayLike, *, total_uncertainty_db: ArrayLike = 0.0, background_uncertainty_db: ArrayLike = 0.0, wind_speeds_m_s: ArrayLike | None = None, wind_directions_deg: ArrayLike | None = None,) -> TurbineSoundLevelsSubtract the background from the total, bin by bin (10.3.2, 11.7).
Where the bin-averaged total is at least 3 dB above the background, the turbine level is the logarithmic subtraction of Equation (6), , with the uncertainty of Equation (7). Where it is at least 0 dB but less than 3 dB above, 11.7 suggests a 3 dB correction instead, and a regulatory excess cannot then be found (11.7 NOTE 1). Where the background is louder than the total, no turbine level can be determined (11.6.4) and the bin is NaN. A difference within a nanodecibel of 3 dB or of 0 dB is on that limit, so the rounding of two energy means cannot move a bin from one rule to the other.
Parameters
| Name | Description |
|---|---|
total_levels_db | Bin levels with the turbines operating, in dB. |
background_levels_db | Bin levels with the turbines off, in dB. |
total_uncertainty_db | Combined standard uncertainty of each total level, Equation (5), in dB; NaN for a bin of one interval, whose uncertainty Equation (2) cannot give. |
background_uncertainty_db | That of each background level, in dB. |
wind_speeds_m_s | Optional wind speed of each bin, in m/s, for the plot. |
wind_directions_deg | Optional centre of each bin’s direction sector, in degrees, for bins classified by direction as well (10.1); the plot draws each sector apart. |
Returns: A TurbineSoundLevels.
Raises
| Exception | When |
|---|---|
| ValueError | If the inputs disagree in length or are not finite, or an uncertainty is infinite or negative. |
TurbineSoundLevels
Section titled “TurbineSoundLevels”TurbineSoundLevels( total_levels_db: NDArray[np.float64], background_levels_db: NDArray[np.float64], level_differences_db: NDArray[np.float64], turbine_levels_db: NDArray[np.float64], turbine_uncertainty_db: NDArray[np.float64], *, wind_speeds_m_s: NDArray[np.float64] | None, wind_directions_deg: NDArray[np.float64] | None,)Background-corrected wind turbine levels per bin (10.3.2, 11.7).
Attributes
| Name | Description |
|---|---|
total_levels_db | The total (turbines on) bin levels, in dB. |
background_levels_db | The background (turbines off) bin levels. |
level_differences_db | Total minus background, in dB. |
turbine_levels_db | The turbine level , in dB: Equation (6) where the difference is at least 3 dB, the total minus 3 dB where it is at least 0 dB but less than 3 dB, NaN where it is negative. |
turbine_uncertainty_db | Its standard uncertainty, in dB: Equation (7) for the logarithmic subtraction, the total’s own uncertainty for the fixed 3 dB correction (a constant offset), NaN where undetermined. |
wind_speeds_m_s | The bins’ wind speeds, in m/s, when known. |
wind_directions_deg | Centre of each bin’s direction sector, in degrees, when binned by direction; None otherwise. Two bins of one wind speed class in different sectors are told apart by it. |
Which rule of 11.7 each bin followed (regimes) is read from the
total and the background levels, so it is not a field.
TurbineSoundLevels.plot()
Section titled “TurbineSoundLevels.plot()”TurbineSoundLevels.plot( ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesPlot total, background and turbine levels per bin.
Binned by direction, each sector is drawn apart, in its own colour: the turbine level solid, the total dashed and the background dotted. The twelve 30° sectors of 10.1 take twelve colours; narrower sectors past the twelfth take them again, in the same order.
Parameters
| Name | Description |
|---|---|
ax | Existing axes, or None to create a figure. |
language | "en" (default) or "es". |
kwargs | Forwarded to the turbine level line (one per sector). |
Returns: The axes.
TurbineSoundLevels.regimes
Section titled “TurbineSoundLevels.regimes”property
The BackgroundCorrectionRegime of each bin (11.7).
Read from total_levels_db and background_levels_db:
the logarithmic subtraction where the total is at least 3 dB above the
background, the 3 dB correction where it is at least 0 dB but less
than 3 dB above, and undetermined where the background is louder. A
difference within a nanodecibel of 3 dB or of 0 dB is on that limit.
TYPE_B_UNCERTAINTY_EXAMPLES_DB
Section titled “TYPE_B_UNCERTAINTY_EXAMPLES_DB”Constant (mapping).
TYPE_B_UNCERTAINTY_EXAMPLES_DB = {'calibration': (0.3, 0.2), 'instrument': (0.5, 0.3), 'measurement position': (0.5, 0.3), 'wind screen insertion loss': (0.3, 0.2)}TYPICAL_WIND_SHEAR_EXPONENT_RANGE
Section titled “TYPICAL_WIND_SHEAR_EXPONENT_RANGE”Constant (tuple).
TYPICAL_WIND_SHEAR_EXPONENT_RANGE = (-0.1, 0.5)upper_tone_search_frequency
Section titled “upper_tone_search_frequency”upper_tone_search_frequency( distance_m: float, *, temperature_c: float, relative_humidity_percent: float, atmospheric_pressure_kpa: float = 101.325,) -> ToneSearchLimitUpper frequency of the search for tones at a receptor (12.5.2.4).
Tones in a one-third-octave band that ISO 9613-1 attenuates by at least 20 dB over the distance to the nearest turbine are typically of no concern to its neighbours, and every higher band is attenuated more; the lowest such band sets the top of the search range. The attenuation is evaluated at the exact mid-band frequency of each band (ISO 9613-1), which reproduces the printed rows of Table 7; the search stops at 10 kHz, the top of ISO 9613-1, when no band reaches 20 dB.
Parameters
| Name | Description |
|---|---|
distance_m | Distance from the source to the receiver, in m. |
temperature_c | Air temperature, in degrees C. |
relative_humidity_percent | Relative humidity, in %. |
atmospheric_pressure_kpa | Atmospheric pressure, in kPa. |
Returns: A ToneSearchLimit.
Raises
| Exception | When |
|---|---|
| ValueError | If the distance is not positive or the atmosphere is outside what ISO 9613-1 accepts. |
wind_shear_exponent
Section titled “wind_shear_exponent”wind_shear_exponent( speed_m_s: ArrayLike, reference_speed_m_s: ArrayLike, *, height_m: float, reference_height_m: float,) -> NDArray[np.float64] | floatWind shear exponent from two wind speeds (Equation (K.2)).
; with
m and m this is Table K.2.
Values outside TYPICAL_WIND_SHEAR_EXPONENT_RANGE are returned as
computed; Table K.2 leaves them blank.
Parameters
| Name | Description |
|---|---|
speed_m_s | Wind speed at height_m, in m/s. |
reference_speed_m_s | Wind speed at reference_height_m, in m/s. |
height_m | The higher (or other) height, in m. |
reference_height_m | The reference height, in m. |
Returns: The shear exponent; a float for scalar inputs.
Raises
| Exception | When |
|---|---|
| ValueError | If a speed or height is not positive, or the two heights are the same. |
wind_shear_profile
Section titled “wind_shear_profile”wind_shear_profile( lower_speed_m_s: float, upper_speed_m_s: float, *, lower_height_m: float = 10.0, upper_height_m: float,) -> WindShearProfileThe power-law wind profile through two measured wind speeds (K.4.3).
The wind shear is typically found from a wind speed at 10 m and one at
hub height (K.4.3); WindShearProfile.speed_at then gives the wind
speed at any height by Equation (K.1).
Parameters
| Name | Description |
|---|---|
lower_speed_m_s | Wind speed at lower_height_m, in m/s. |
upper_speed_m_s | Wind speed at upper_height_m, in m/s. |
lower_height_m | The lower measurement height, in m (10 m by default). |
upper_height_m | The upper measurement height, in m (typically the hub height). |
Returns: A WindShearProfile.
Raises
| Exception | When |
|---|---|
| ValueError | If a speed or height is not positive or the upper height is not above the lower one. |
wind_turbine_low_frequency_level
Section titled “wind_turbine_low_frequency_level”wind_turbine_low_frequency_level( sound_power_levels_db: ArrayLike, *, distance_m: ArrayLike, hub_height_m: ArrayLike, frequencies_hz: ArrayLike = ..., ground_correction_db: ArrayLike | None = None, air_attenuation_db_per_km: ArrayLike | None = None, facade_insulation_db: ArrayLike | None = None, a_weighted: bool = True,) -> LowFrequencyLevelLow frequency sound level at a receptor (Annex C, Equation (C.1)).
band by band, with (the distance in km for in dB/km) and 11 dB the of the text, taken as printed. The contributions of the relevant turbines are summed energetically per band, and the equivalent level is the energy sum of the bands (C.3, C.5); the Danish criterion of C.6.1 sums 10 Hz to 160 Hz, so pass those bands for it.
Parameters
| Name | Description |
|---|---|
sound_power_levels_db | Band sound power levels from IEC 61400-11, in dB: one row per turbine, or one row for a single turbine. |
distance_m | Horizontal distance from each tower to the receptor, in m. |
hub_height_m | Hub height of each turbine, in m. |
frequencies_hz | Nominal centre of each column, in Hz (10 Hz to 200 Hz by default, LOW_FREQUENCY_BANDS_HZ). |
ground_correction_db | per band; None for Table C.2 (onshore, impedance class D). |
air_attenuation_db_per_km | per band, in dB/km, zero or positive (the ISO 9613-1 absorption coefficient, C.2); None for Table C.2, as printed (see LOW_FREQUENCY_AIR_ATTENUATION_DB_PER_KM). |
facade_insulation_db | per band, for an indoor level (for instance a row of LOW_FREQUENCY_FACADE_INSULATION_DB); None for the outdoor level alone. |
a_weighted | Add the A-weighting of Table C.4 (IEC 61672-1) to each band (the default), or give unweighted levels. |
Returns: A LowFrequencyLevel.
Raises
| Exception | When |
|---|---|
| ValueError | If the shapes disagree, a distance or height is not positive, an air attenuation coefficient is negative, a default table has no value at a supplied band, or a_weighted is not a boolean. |
wind_turbine_rating_level
Section titled “wind_turbine_rating_level”wind_turbine_rating_level( equivalent_level_db: float, *, tonal_adjustment_db: float = 0.0, amplitude_modulation_adjustment_db: float = 0.0, impulsive_adjustment_db: float = 0.0,) -> WindTurbineRatingLevelRating level of wind turbine sound (Annex A, A.1).
with the most severe of
the tonal adjustment , the amplitude modulation
adjustment and the impulsive adjustment
: only one type is applied at a time. Local regulation
usually defines the adjustments; the TS’s examples are Table A.1 for
(tonal_adjustment_from_mean_audibility,
ISO 1996-2:2017 Table J.1, with its 3 dB-step variant), Figure A.1 for
(amplitude_modulation_adjustment) and
ISO/PAS 1996-3 for
(impulse_adjustment).
Parameters
| Name | Description |
|---|---|
equivalent_level_db | The equivalent continuous level, in dB. |
tonal_adjustment_db | , in dB. |
amplitude_modulation_adjustment_db | , in dB. |
impulsive_adjustment_db | , in dB. |
Returns: A WindTurbineRatingLevel.
Raises
| Exception | When |
|---|---|
| ValueError | If a value is not finite or an adjustment is negative. |
WindShearProfile
Section titled “WindShearProfile”WindShearProfile( heights_m: tuple[float, float], speeds_m_s: tuple[float, float], shear_exponent: float,)A wind profile through two measured heights (Annex K).
Attributes
| Name | Description |
|---|---|
heights_m | The two measurement heights, lower first, in m. |
speeds_m_s | The wind speeds measured there, in m/s. |
shear_exponent | The power-law exponent through the two points (Equation (K.2)). |
WindShearProfile.plot()
Section titled “WindShearProfile.plot()”WindShearProfile.plot( ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesPlot the power-law profile through the two measured points.
The logarithmic profile with the reference roughness length through the lower point is drawn for comparison, as the binning wind speed of 9.3.2.1 assumes it.
Parameters
| Name | Description |
|---|---|
ax | Existing axes, or None to create a figure. |
language | "en" (default) or "es". |
kwargs | Forwarded to the power-law profile. |
Returns: The axes.
WindShearProfile.speed_at()
Section titled “WindShearProfile.speed_at()”WindShearProfile.speed_at( height_m: ArrayLike,) -> NDArray[np.float64] | floatThe power-law wind speed at height_m (Equation (K.1)), in m/s.
WindShearProfile.typical
Section titled “WindShearProfile.typical”property
Whether lies in the typical range (K.4.3).
The range is TYPICAL_WIND_SHEAR_EXPONENT_RANGE, bounds included.
WindTurbineRatingLevel
Section titled “WindTurbineRatingLevel”WindTurbineRatingLevel( equivalent_level_db: float, adjustments_db: Mapping[str, float], governing: str | None, rating_level_db: float,)The rating level of wind turbine sound (Annex A, A.1).
Attributes
| Name | Description |
|---|---|
equivalent_level_db | The equivalent continuous level , in dB. |
adjustments_db | The three candidate adjustments, keyed "tonal", "amplitude_modulation" and "impulsive", in dB. |
governing | The adjustment applied, the most severe of the three, or None when all three are zero. |
rating_level_db | , in dB. |
WindTurbineRatingLevel.plot()
Section titled “WindTurbineRatingLevel.plot()”WindTurbineRatingLevel.plot( ax: Axes | None = None, *, language: str = 'en', **kwargs: Any,) -> AxesPlot the three candidate adjustments with the governing one marked.
Parameters
| Name | Description |
|---|---|
ax | Existing axes, or None to create a figure. |
language | "en" (default) or "es". |
kwargs | Forwarded to the adjustment bars. |
Returns: The axes.