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