SUMO - Simulation of Urban MObility
|
00001 /****************************************************************************/ 00009 // Noise data collector for edges/lanes 00010 /****************************************************************************/ 00011 // SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/ 00012 // Copyright (C) 2001-2012 DLR (http://www.dlr.de/) and contributors 00013 /****************************************************************************/ 00014 // 00015 // This file is part of SUMO. 00016 // SUMO is free software: you can redistribute it and/or modify 00017 // it under the terms of the GNU General Public License as published by 00018 // the Free Software Foundation, either version 3 of the License, or 00019 // (at your option) any later version. 00020 // 00021 /****************************************************************************/ 00022 00023 00024 // =========================================================================== 00025 // included modules 00026 // =========================================================================== 00027 #ifdef _MSC_VER 00028 #include <windows_config.h> 00029 #else 00030 #include <config.h> 00031 #endif 00032 00033 #include "HelpersHarmonoise.h" 00034 #include <limits> 00035 #include <cmath> 00036 00037 #ifdef CHECK_MEMORY_LEAKS 00038 #include <foreign/nvwa/debug_new.h> 00039 #endif // CHECK_MEMORY_LEAKS 00040 00041 00042 // =========================================================================== 00043 // static definitions 00044 // =========================================================================== 00045 // --------------------------------------------------------------------------- 00046 // vehicle class noise emission coefficients 00047 // --------------------------------------------------------------------------- 00048 // rolling component, light vehicles, alpha 00049 double 00050 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 }; 00051 00052 // rolling component, light vehicles, beta 00053 double 00054 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 }; 00055 00056 00057 // rolling component, heavy vehicles, alpha 00058 double 00059 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 }; 00060 00061 // rolling component, heavy vehicles, beta 00062 double 00063 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 }; 00064 00065 00066 00067 // traction component, light vehicles, alpha 00068 double 00069 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 }; 00070 00071 // traction component, light vehicles, beta 00072 double 00073 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 }; 00074 00075 00076 // traction component, heavy vehicles, alpha 00077 double 00078 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 }; 00079 00080 // traction component, heavy vehicles, beta 00081 double 00082 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 }; 00083 00084 00085 // --------------------------------------------------------------------------- 00086 // A-weighted correction for octave bands 00087 // --------------------------------------------------------------------------- 00088 double 00089 HelpersHarmonoise::myAOctaveBandCorrection[27] = { -44.7, -39.4, -34.6, -30.2, -26.2, -22.5, -19.1, -16.1, -13.4, 00090 -10.9, -8.6, -6.6, -4.8, -3.2, -1.9, -0.8, 0.0, +0.6, 00091 +1.0, +1.2, +1.3, +1.2, +1.0, +0.5, -0.1, -1.1, -2.5 00092 }; 00093 00094 00095 00096 double 00097 mySurfaceCorrection[27] = { 0.7, 0.2, 3.6, -1.0, -1.8, -0.1, -0.9, -0.7, -1.1, -0.5, -1.5, 00098 -2.4, -3.0, -4.6, -5.8, -6.5, -7.9, -7.8, -7.2, -6.3, -5.6, 00099 -5.5, -4.8, -4.3 00100 }; 00101 00102 00103 // =========================================================================== 00104 // method definitions 00105 // =========================================================================== 00106 SUMOReal 00107 HelpersHarmonoise::computeNoise(SUMOEmissionClass c, double v, double a) { 00108 double* alphaT, *betaT, *alphaR, *betaR; 00109 double ac = 0; 00110 if (c >= SVE_HDV_3_1 && c <= SVE_HDV_12_12) { 00111 alphaT = myT_A_C3_Parameter; 00112 betaT = myT_B_C3_Parameter; 00113 alphaR = myR_A_C3_Parameter; 00114 betaR = myR_B_C3_Parameter; 00115 ac = 5.6; 00116 } else if (c != SVE_ZERO_EMISSIONS) { 00117 alphaT = myT_A_C1_Parameter; 00118 betaT = myT_B_C1_Parameter; 00119 alphaR = myR_A_C1_Parameter; 00120 betaR = myR_B_C1_Parameter; 00121 ac = 4.4; 00122 } else { 00123 return 0; 00124 } 00125 // 00126 double L_low = 0; 00127 double L_high = 0; 00128 v = v * 3.6; 00129 double s = -30.;// 00130 for (unsigned int i = 0; i < 27; ++i) { 00131 double crc_low = alphaR[i] + betaR[i] * log10(v / 70.) + 10.*log10(.8); // + mySurfaceCorrection[i]; 00132 double ctc_low = alphaT[i] + betaT[i] * ((v - 70.) / 70.) + a * ac + 10.*log10(.2); 00133 double Li_low = 10. * log10(pow(10., (crc_low / 10.)) + pow(10., (ctc_low / 10.))); 00134 Li_low += s; 00135 double crc_high = alphaR[i] + betaR[i] * log10(v / 70.) + 10.*log10(.2); // + mySurfaceCorrection[i]; 00136 double ctc_high = alphaT[i] + betaT[i] * ((v - 70.) / 70.) + a * ac + 10.*log10(.8); 00137 double Li_high = 10. * log10(pow(10., (crc_high / 10.)) + pow(10., (ctc_high / 10.))); 00138 Li_high += s; 00139 L_low += pow(10., (Li_low + myAOctaveBandCorrection[i]) / 10.); 00140 L_high += pow(10., (Li_high + myAOctaveBandCorrection[i]) / 10.); 00141 } 00142 L_low = (10. * log10(L_low)); 00143 L_high = (10. * log10(L_high)); 00144 SUMOReal v1 = (SUMOReal)(10. * log10(pow(10., L_low / 10.) + pow(10., L_high / 10.))); 00145 return v1; 00146 } 00147 00148 00149 00150 00151 /****************************************************************************/ 00152