levels¶
class description¶
-
class
levels.Levels(**kwargs)[source]¶ Bases:
openmdao.core.explicitcomponent.ExplicitComponentCompute 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.