Eclipse SUMO - Simulation of Urban MObility
HelpersHarmonoise.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2020 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
37 double
38 HelpersHarmonoise::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
41 double
42 HelpersHarmonoise::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 
45 // rolling component, heavy vehicles, alpha
46 double
47 HelpersHarmonoise::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 };
48 
49 // rolling component, heavy vehicles, beta
50 double
51 HelpersHarmonoise::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 };
52 
53 
54 
55 // traction component, light vehicles, alpha
56 double
57 HelpersHarmonoise::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 };
58 
59 // traction component, light vehicles, beta
60 double
61 HelpersHarmonoise::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 };
62 
63 
64 // traction component, heavy vehicles, alpha
65 double
66 HelpersHarmonoise::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 };
67 
68 // traction component, heavy vehicles, beta
69 double
70 HelpersHarmonoise::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 };
71 
72 
73 // ---------------------------------------------------------------------------
74 // A-weighted correction for octave bands
75 // ---------------------------------------------------------------------------
76 double
77 HelpersHarmonoise::myAOctaveBandCorrection[27] = { -44.7, -39.4, -34.6, -30.2, -26.2, -22.5, -19.1, -16.1, -13.4,
78  -10.9, -8.6, -6.6, -4.8, -3.2, -1.9, -0.8, 0.0, +0.6,
79  +1.0, +1.2, +1.3, +1.2, +1.0, +0.5, -0.1, -1.1, -2.5
80  };
81 
82 
83 
84 double
85 mySurfaceCorrection[27] = { 0.7, 0.2, 3.6, -1.0, -1.8, -0.1, -0.9, -0.7, -1.1, -0.5, -1.5,
86  -2.4, -3.0, -4.6, -5.8, -6.5, -7.9, -7.8, -7.2, -6.3, -5.6,
87  -5.5, -4.8, -4.3
88  };
89 
90 
91 // ===========================================================================
92 // method definitions
93 // ===========================================================================
94 double
96  double* alphaT, *betaT, *alphaR, *betaR;
97  double ac = 0;
99  alphaT = myT_A_C3_Parameter;
100  betaT = myT_B_C3_Parameter;
101  alphaR = myR_A_C3_Parameter;
102  betaR = myR_B_C3_Parameter;
103  ac = 5.6;
104  } else if (!PollutantsInterface::isSilent(c)) {
105  alphaT = myT_A_C1_Parameter;
106  betaT = myT_B_C1_Parameter;
107  alphaR = myR_A_C1_Parameter;
108  betaR = myR_B_C1_Parameter;
109  ac = 4.4;
110  } else {
111  return 0;
112  }
113  //
114  double L_low = 0;
115  double L_high = 0;
116  v = v * 3.6;
117  double s = -30.;//
118  for (int i = 0; i < 27; ++i) {
119  double crc_low = alphaR[i] + betaR[i] * log10(v / 70.) + 10.*log10(.8); // + mySurfaceCorrection[i];
120  double ctc_low = alphaT[i] + betaT[i] * ((v - 70.) / 70.) + a * ac + 10.*log10(.2);
121  double Li_low = 10. * log10(pow(10., (crc_low / 10.)) + pow(10., (ctc_low / 10.)));
122  Li_low += s;
123  double crc_high = alphaR[i] + betaR[i] * log10(v / 70.) + 10.*log10(.2); // + mySurfaceCorrection[i];
124  double ctc_high = alphaT[i] + betaT[i] * ((v - 70.) / 70.) + a * ac + 10.*log10(.8);
125  double Li_high = 10. * log10(pow(10., (crc_high / 10.)) + pow(10., (ctc_high / 10.)));
126  Li_high += s;
127  L_low += pow(10., (Li_low + myAOctaveBandCorrection[i]) / 10.);
128  L_high += pow(10., (Li_high + myAOctaveBandCorrection[i]) / 10.);
129  }
130  L_low = (10. * log10(L_low));
131  L_high = (10. * log10(L_high));
132  double v1 = (double)(10. * log10(pow(10., L_low / 10.) + pow(10., L_high / 10.)));
133  return v1;
134 }
135 
136 
137 /****************************************************************************/
double mySurfaceCorrection[27]
int SUMOEmissionClass
static double myR_B_C3_Parameter[27]
rolling component, heavy vehicles, beta
static double myAOctaveBandCorrection[27]
A-weighted correction for octave bands.
static double myR_B_C1_Parameter[27]
rolling component, light vehicles, beta
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 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.