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.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
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 // rolling component, heavy vehicles, alpha
45 double
46 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 };
47 
48 // rolling component, heavy vehicles, beta
49 double
50 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 };
51 
52 // traction component, light vehicles, alpha
53 double
54 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 };
55 
56 // traction component, light vehicles, beta
57 double
58 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 };
59 
60 // traction component, heavy vehicles, alpha
61 double
62 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 };
63 
64 // traction component, heavy vehicles, beta
65 double
66 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 };
67 
68 // ---------------------------------------------------------------------------
69 // A-weighted correction for octave bands
70 // ---------------------------------------------------------------------------
71 const double
72 HelpersHarmonoise::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 
77 const double
78 HelpersHarmonoise::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 // ===========================================================================
86 double
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.