Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
HelpersHarmonoise.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
20// Noise data collector for edges/lanes
21/****************************************************************************/
22#include <config.h>
23
24#include "PollutantsInterface.h"
25#include "HelpersHarmonoise.h"
26#include <limits>
27#include <cmath>
28
29
30// ===========================================================================
31// static definitions
32// ===========================================================================
33// ---------------------------------------------------------------------------
34// vehicle class noise emission coefficients
35// ---------------------------------------------------------------------------
36// rolling component, light vehicles, alpha
37double
38HelpersHarmonoise::myR_A_C1_Parameter[27] = { 69.9, 69.9, 69.9, 74.9, 74.9, 74.9, 77.3, 77.5, 78.1, 78.3, 78.9, 77.8, 78.5, 81.9, 84.1, 86.5, 88.6, 88.2, 87.6, 85.8, 82.8, 80.2, 77.6, 75.0, 72.8, 70.4, 67.9 };
39
40// rolling component, light vehicles, beta
41double
42HelpersHarmonoise::myR_B_C1_Parameter[27] = { 33.0, 33.0, 33.0, 15.2, 15.2, 15.2, 41.0, 41.2, 42.3, 41.8, 38.6, 35.5, 31.7, 21.5, 21.2, 23.5, 29.1, 33.5, 34.1, 35.1, 36.4, 37.4, 38.9, 39.7, 39.7, 39.7, 39.7 };
43
44// rolling component, heavy vehicles, alpha
45double
46HelpersHarmonoise::myR_A_C3_Parameter[27] = { 80.5, 80.5, 80.5, 82.5, 83.5, 83.5, 86.5, 88.3, 88.7, 88.3, 91.4, 92.2, 96.0, 98.1, 97.8, 98.4, 97.2, 94.6, 95.9, 90.5, 87.1, 85.1, 83.2, 81.3, 81.3, 81.3, 81.3 };
47
48// rolling component, heavy vehicles, beta
49double
50HelpersHarmonoise::myR_B_C3_Parameter[27] = { 33.0, 33.0, 33.0, 30.0, 30.0, 30.0, 41.0, 41.2, 42.3, 41.8, 38.6, 35.5, 31.7, 21.5, 21.2, 23.5, 29.1, 33.5, 34.1, 35.1, 36.4, 37.4, 38.9, 39.7, 39.7, 39.7, 39.7 };
51
52// traction component, light vehicles, alpha
53double
54HelpersHarmonoise::myT_A_C1_Parameter[27] = { 90.0, 92.0, 89.0, 91.0, 92.4, 94.8, 90.8, 86.8, 86.2, 84.5, 84.5, 84.8, 83.5, 81.8, 81.4, 79.0, 79.2, 81.4, 85.5, 85.8, 85.2, 82.9, 81.0, 78.2, 77.2, 75.2, 74.2 };
55
56// traction component, light vehicles, beta
57double
58HelpersHarmonoise::myT_B_C1_Parameter[27] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4 };
59
60// traction component, heavy vehicles, alpha
61double
62HelpersHarmonoise::myT_A_C3_Parameter[27] = { 97.7, 97.3, 98.2, 103.3, 109.5, 104.3, 99.8, 100.2, 98.9, 99.5, 100.7, 101.2, 100.6, 100.2, 97.4, 97.1, 97.8, 97.3, 95.8, 94.9, 92.7, 90.6, 89.9, 87.9, 85.9, 83.8, 82.2 };
63
64// traction component, heavy vehicles, beta
65double
66HelpersHarmonoise::myT_B_C3_Parameter[27] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7 };
67
68// ---------------------------------------------------------------------------
69// A-weighted correction for octave bands
70// ---------------------------------------------------------------------------
71const double
72HelpersHarmonoise::myAOctaveBandCorrection[27] = { -44.7, -39.4, -34.6, -30.2, -26.2, -22.5, -19.1, -16.1, -13.4,
73 -10.9, -8.6, -6.6, -4.8, -3.2, -1.9, -0.8, 0.0, +0.6,
74 +1.0, +1.2, +1.3, +1.2, +1.0, +0.5, -0.1, -1.1, -2.5
75 };
76
77const double
78HelpersHarmonoise::mySurfaceCorrection[27] = { 0.7, 0.2, 3.6, -1.0, -1.8, -0.1, -0.9, -0.7, -1.1, -0.5, -1.5,
79 -2.4, -3.0, -4.6, -5.8, -6.5, -7.9, -7.8, -7.2, -6.3, -5.6,
80 -5.5, -4.8, -4.3
81 };
82
83// ===========================================================================
84// method definitions
85// ===========================================================================
86double
88 double* alphaT, *betaT, *alphaR, *betaR;
89 double ac = 0;
91 alphaT = myT_A_C3_Parameter;
92 betaT = myT_B_C3_Parameter;
93 alphaR = myR_A_C3_Parameter;
94 betaR = myR_B_C3_Parameter;
95 ac = 5.6;
96 } else if (!PollutantsInterface::isSilent(c)) {
97 alphaT = myT_A_C1_Parameter;
98 betaT = myT_B_C1_Parameter;
99 alphaR = myR_A_C1_Parameter;
100 betaR = myR_B_C1_Parameter;
101 ac = 4.4;
102 } else {
103 return 0;
104 }
105 //
106 double L_low = 0;
107 double L_high = 0;
108 v = v * 3.6;
109 double s = -30.;//
110 for (int i = 0; i < 27; ++i) {
111 double crc_low = alphaR[i] + betaR[i] * log10(v / 70.) + 10.*log10(.8); // + mySurfaceCorrection[i];
112 double ctc_low = alphaT[i] + betaT[i] * ((v - 70.) / 70.) + a * ac + 10.*log10(.2);
113 double Li_low = 10. * log10(pow(10., (crc_low / 10.)) + pow(10., (ctc_low / 10.)));
114 Li_low += s;
115 double crc_high = alphaR[i] + betaR[i] * log10(v / 70.) + 10.*log10(.2); // + mySurfaceCorrection[i];
116 double ctc_high = alphaT[i] + betaT[i] * ((v - 70.) / 70.) + a * ac + 10.*log10(.8);
117 double Li_high = 10. * log10(pow(10., (crc_high / 10.)) + pow(10., (ctc_high / 10.)));
118 Li_high += s;
119 L_low += pow(10., (Li_low + myAOctaveBandCorrection[i]) / 10.);
120 L_high += pow(10., (Li_high + myAOctaveBandCorrection[i]) / 10.);
121 }
122 L_low = (10. * log10(L_low));
123 L_high = (10. * log10(L_high));
124 double v1 = (double)(10. * log10(pow(10., L_low / 10.) + pow(10., L_high / 10.)));
125 return v1;
126}
127
128
129/****************************************************************************/
int SUMOEmissionClass
static double myR_B_C3_Parameter[27]
rolling component, heavy vehicles, beta
static double myR_B_C1_Parameter[27]
rolling component, light vehicles, beta
static const double mySurfaceCorrection[27]
A-weighted correction for surface.
static double myT_B_C1_Parameter[27]
traction component, light vehicles, beta
static double myR_A_C3_Parameter[27]
rolling component, heavy vehicles, alpha
static const double myAOctaveBandCorrection[27]
A-weighted correction for octave bands.
static double computeNoise(SUMOEmissionClass c, double v, double a)
Returns the noise produced by the a vehicle of the given type at the given speed.
static double myR_A_C1_Parameter[27]
rolling component, light vehicles, alpha
static double myT_A_C1_Parameter[27]
traction component, light vehicles, alpha
static double myT_B_C3_Parameter[27]
traction component, heavy vehicles, beta
static double myT_A_C3_Parameter[27]
traction component, heavy vehicles, alpha
static bool isSilent(const SUMOEmissionClass c)
Checks whether the emission class describes an electric or similar silent vehicle.
static bool isHeavy(const SUMOEmissionClass c)
Checks whether the emission class describes a bus, truck or similar vehicle.