levels¶
class description¶
-
class
levels.
Levels
(**kwargs)[source]¶ Bases:
openmdao.core.explicitcomponent.ExplicitComponent
Compute noise levels according to ICAO Annex 16 Volume I: Noise.
Sound pressure level (spl)
Overall sound pressure level (oaspl)
Perceived noise level, tone-corrected (pnlt)
Tone corrections (C)
The Levels component requires the following inputs:
inputs['rho_0']
: ambient density [kg/m3]inputs['c_0']
: ambient speed of sound [m/s]inputs['msap_prop']
: mean-square acoustic pressure, propagated to the observer (re. rho_0^2c_0^2) [-]
The Levels component computes the following outputs:
outputs['spl']
: sound pressure level [dB]outputs['oaspl']
: overall sound pressure level [dB]outputs['pnlt']
: perceived noise leve, tone corrected [PNdB]outputs['C']
: pnlt tone correction [dB]
The LevelsInt component has the following options:
settings
: pyna settingsn_t
: number of time steps in the noise time seriesdata
: pyna noise data
-
compute
(inputs: openmdao.vectors.default_vector.DefaultVector, outputs: openmdao.vectors.default_vector.DefaultVector)[source]¶ Compute outputs given inputs. The model is assumed to be in an unscaled state.
- Parameters
inputs (Vector) – Unscaled, dimensional input variables read via inputs[key].
outputs (Vector) – Unscaled, dimensional output variables read via outputs[key].
discrete_inputs (dict or None) – If not None, dict containing discrete input values.
discrete_outputs (dict or None) – If not None, dict containing discrete output values.
Warning
The Julia version of the Levels component, levels.jl
, is not documented yet. However, it is very similar to the Python version, levels.py
. More information and examples on how OpenMDAO.jl components work can be found here.
theory¶
Sound pressure level¶
The sound pressure level (SPL) is calculated using:
The reference pressure \(p_{\textrm{ref}} = 2\cdot 10^{-5}\).
Overall sound pressure level¶
The overall sound pressure level (OASPL) is calculated using:
Tone-corrected perceived noise level¶
The tone-corrected perceived noise level (PNLT) is calculated using the method described in ICAO Annex 16, Volume I cite{ICAO2017}. The PNLT calculation at each time step requires an SPL spectrum as a function of frequency. In this section, the SPL at the i-th one-third octave frequency band is denoted by \(SPL[i]\). Firstly, the SPL is converted into perceived noisiness:
The Noy tables (i.e. \(SPL_a\), \(SPL_b\), \(SPL_c\), \(SPL_d\), \(SPL_e\), \(m_b\), \(m_c\), \(m_d\), \(m_d\)) are tabulated online. The perceived noisiness values are combined to total perceived noisiness using:
The perceived noise level is computed using:
The corrections for spectral irregularities on the perceived noise level involve several steps. Step 1: compute the slopes of the SPL spectrum using:
Step 2: Encircle the values of the slopes in the spectrum with a value larger than 5, i.e. \(|s[i] - s[i-1]| > 5\). Step 3: In the spectrum of SPL, encircle:
Step 4: Compute adjusted \(SPL\), i.e. \(SPL'\):
Step 5: Compute adjusted slopes \(s'\), including an ‘imaginary’ 25-th frequency band:
Step 6: Compute average of adjacent adjusted slopes:
Step 7: Compute final adjusted SPL, i.e. \(SPL"\):
Step 8: Compute differences \(F[i] = SPL[i]-SPL[i]"\). Step 9: Compute the tone corrections, \(C[i]\), using:
f[i] [Hz] |
F[i] (Step 8) |
C[i] |
---|---|---|
\(f[i]\in [50, 500)\) |
\(3/2 \leq F[i] < 3\) |
\(F[i]/3 - 1/2\) |
\(.\) |
\(3<F[i]<20\) |
\(F/6\) |
\(.\) |
\(20 \leq F[i]\) |
\(10/3\) |
\(f[i]\in [500, 5000)\) |
\(3/2 \leq F[i] < 3\) |
\(F[i]/3 - 1\) |
\(.\) |
\(3 \leq F[i] < 20\) |
\(F[i]/3\) |
\(.\) |
\(20 \leq F[i]\) |
\(20/3\) |
\(f[i]\in [5000, 10000]\) |
\(3/2 \leq F[i] < 3\) |
\(F/3 - 1/2\) |
\(.\) |
\(3 \leq F[i] < 20\) |
\(F[i]/6\) |
\(.\) |
\(20 \leq F[i]\) |
\(10/3\) |
Step 10: Compute the largest tone-correction and add it to the perceived noise level to obtain the tone-corrected perceived noise level:
When computing the maximum tone correction, the range of frequencies below 800Hz is ignored when enabling the TCF8001
flag.