SUMO - Simulation of Urban MObility
HelpersHarmonoise.cpp
Go to the documentation of this file.
1 /****************************************************************************/
9 // Noise data collector for edges/lanes
10 /****************************************************************************/
11 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
12 // Copyright (C) 2001-2016 DLR (http://www.dlr.de/) and contributors
13 /****************************************************************************/
14 //
15 // This file is part of SUMO.
16 // SUMO is free software: you can redistribute it and/or modify
17 // it under the terms of the GNU General Public License as published by
18 // the Free Software Foundation, either version 3 of the License, or
19 // (at your option) any later version.
20 //
21 /****************************************************************************/
22 
23 
24 // ===========================================================================
25 // included modules
26 // ===========================================================================
27 #ifdef _MSC_VER
28 #include <windows_config.h>
29 #else
30 #include <config.h>
31 #endif
32 
33 #include "PollutantsInterface.h"
34 #include "HelpersHarmonoise.h"
35 #include <limits>
36 #include <cmath>
37 
38 #ifdef CHECK_MEMORY_LEAKS
39 #include <foreign/nvwa/debug_new.h>
40 #endif // CHECK_MEMORY_LEAKS
41 
42 
43 // ===========================================================================
44 // static definitions
45 // ===========================================================================
46 // ---------------------------------------------------------------------------
47 // vehicle class noise emission coefficients
48 // ---------------------------------------------------------------------------
49 // rolling component, light vehicles, alpha
50 double
51 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 };
52 
53 // rolling component, light vehicles, beta
54 double
55 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 };
56 
57 
58 // rolling component, heavy vehicles, alpha
59 double
60 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 };
61 
62 // rolling component, heavy vehicles, beta
63 double
64 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 };
65 
66 
67 
68 // traction component, light vehicles, alpha
69 double
70 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 };
71 
72 // traction component, light vehicles, beta
73 double
74 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 };
75 
76 
77 // traction component, heavy vehicles, alpha
78 double
79 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 };
80 
81 // traction component, heavy vehicles, beta
82 double
83 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 };
84 
85 
86 // ---------------------------------------------------------------------------
87 // A-weighted correction for octave bands
88 // ---------------------------------------------------------------------------
89 double
90 HelpersHarmonoise::myAOctaveBandCorrection[27] = { -44.7, -39.4, -34.6, -30.2, -26.2, -22.5, -19.1, -16.1, -13.4,
91  -10.9, -8.6, -6.6, -4.8, -3.2, -1.9, -0.8, 0.0, +0.6,
92  +1.0, +1.2, +1.3, +1.2, +1.0, +0.5, -0.1, -1.1, -2.5
93  };
94 
95 
96 
97 double
98 mySurfaceCorrection[27] = { 0.7, 0.2, 3.6, -1.0, -1.8, -0.1, -0.9, -0.7, -1.1, -0.5, -1.5,
99  -2.4, -3.0, -4.6, -5.8, -6.5, -7.9, -7.8, -7.2, -6.3, -5.6,
100  -5.5, -4.8, -4.3
101  };
102 
103 
104 // ===========================================================================
105 // method definitions
106 // ===========================================================================
107 SUMOReal
109  double* alphaT, *betaT, *alphaR, *betaR;
110  double ac = 0;
112  alphaT = myT_A_C3_Parameter;
113  betaT = myT_B_C3_Parameter;
114  alphaR = myR_A_C3_Parameter;
115  betaR = myR_B_C3_Parameter;
116  ac = 5.6;
117  } else if (!PollutantsInterface::isSilent(c)) {
118  alphaT = myT_A_C1_Parameter;
119  betaT = myT_B_C1_Parameter;
120  alphaR = myR_A_C1_Parameter;
121  betaR = myR_B_C1_Parameter;
122  ac = 4.4;
123  } else {
124  return 0;
125  }
126  //
127  double L_low = 0;
128  double L_high = 0;
129  v = v * 3.6;
130  double s = -30.;//
131  for (int i = 0; i < 27; ++i) {
132  double crc_low = alphaR[i] + betaR[i] * log10(v / 70.) + 10.*log10(.8); // + mySurfaceCorrection[i];
133  double ctc_low = alphaT[i] + betaT[i] * ((v - 70.) / 70.) + a * ac + 10.*log10(.2);
134  double Li_low = 10. * log10(pow(10., (crc_low / 10.)) + pow(10., (ctc_low / 10.)));
135  Li_low += s;
136  double crc_high = alphaR[i] + betaR[i] * log10(v / 70.) + 10.*log10(.2); // + mySurfaceCorrection[i];
137  double ctc_high = alphaT[i] + betaT[i] * ((v - 70.) / 70.) + a * ac + 10.*log10(.8);
138  double Li_high = 10. * log10(pow(10., (crc_high / 10.)) + pow(10., (ctc_high / 10.)));
139  Li_high += s;
140  L_low += pow(10., (Li_low + myAOctaveBandCorrection[i]) / 10.);
141  L_high += pow(10., (Li_high + myAOctaveBandCorrection[i]) / 10.);
142  }
143  L_low = (10. * log10(L_low));
144  L_high = (10. * log10(L_high));
145  SUMOReal v1 = (SUMOReal)(10. * log10(pow(10., L_low / 10.) + pow(10., L_high / 10.)));
146  return v1;
147 }
148 
149 
150 
151 
152 /****************************************************************************/
153 
double mySurfaceCorrection[27]
static double myAOctaveBandCorrection[27]
A-weighted correction for octave bands.
static double myR_B_C3_Parameter[27]
rolling component, heavy vehicles, beta
static double myR_A_C3_Parameter[27]
rolling component, heavy vehicles, alpha
static double myT_B_C3_Parameter[27]
traction component, heavy vehicles, beta
static double myT_B_C1_Parameter[27]
traction component, light vehicles, beta
static SUMOReal computeNoise(SUMOEmissionClass c, double v, double a)
Returns the noise produced by the a vehicle of the given type at the given speed. ...
int SUMOEmissionClass
static bool isSilent(const SUMOEmissionClass c)
Checks whether the emission class describes an electric or similar silent vehicle.
static double myT_A_C3_Parameter[27]
traction component, heavy vehicles, alpha
static bool isHeavy(const SUMOEmissionClass c)
Checks whether the emission class describes a bus, truck or similar vehicle.
static double myR_B_C1_Parameter[27]
rolling component, light vehicles, beta
static double myR_A_C1_Parameter[27]
rolling component, light vehicles, alpha
static double myT_A_C1_Parameter[27]
traction component, light vehicles, alpha
#define SUMOReal
Definition: config.h:213