91 hdr_MPhy *ph = HDR_MPHY(p);
92 Position* sp = ph->srcPosition;
93 Position* rp = ph->dstPosition;
94 double f_ = ph -> srcSpectralMask-> getFreq();
100 std::cout << NOW <<
" UwElectroMagneticMPropagation: Tx position= " << sp -> getX() <<
" " << sp -> getY() <<
" " << sp -> getZ() << std::endl;
101 std::cout << NOW <<
" UwElectroMagneticMPropagation: Rx position= " << rp -> getX() <<
" " << rp -> getY() <<
" " << rp -> getZ() << std::endl;
106 if(sp -> getZ() < 0 && rp -> getZ() >= 0){
107 duw = fabs(sp -> getZ());
108 daw = sqrt(pow(rp -> getZ(),2) + pow((sp -> getY() - rp -> getY()),2) + pow((sp -> getX() - rp -> getX()),2));
111 if(sp -> getZ() >= 0 && rp -> getZ() < 0){
112 duw = fabs(rp -> getZ());
113 daw = sqrt(pow(sp -> getZ(),2) + pow((sp -> getY() - rp -> getY()),2) + pow((sp -> getX() - rp -> getX()),2));
116 if(sp -> getZ() < 0 && rp -> getZ() < 0){
117 duw = sqrt(pow(sp -> getZ() - rp -> getZ(),2) + pow((sp -> getY() - rp -> getY()),2) + pow((sp -> getX() - rp -> getX()),2));
121 cerr <<
"Devices aren't placed in the right position" << endl;
126 double w = 2 * M_PI * (f_);
131 double sigmaW = rel_e[1] *
E_0 * w;
132 double alpha =
getAlpha(rel_e,w, sigmaW);
133 double beta =
getBeta(rel_e,w,sigmaW);
145 PLaw = 20 * log10(daw) + 20 * log10(f_) - 147.5;
147 if(daw > 0 && duw > 0)
148 PLuw2aw = 10 * log10(1 / (modTauSq * (etaW[0]/
ETA_A)));
151 PLuw = 8.69 * alpha * duw + 20 * log10(duw) + 20 * log10(beta) + 6;
153 double PLtot = PLaw + PLuw2aw + PLuw;
156 std::cout << NOW <<
" UwElectroMagneticMPropagation: distance aw= " << daw << std::endl;
157 std::cout << NOW <<
" UwElectroMagneticMPropagation: distance uw= " << duw << std::endl;
158 std::cout << NOW <<
" UwElectroMagneticMPropagation: total attenuation= " << PLtot << std::endl;
166 double theta = (300/(
T_ + 273.15)) - 1;
167 double es = 77.66 + 103.3 * theta;
168 double e1 = 0.0671 * es;
169 double einf = 3.52 - 7.52 * theta;
170 double f1 = 20.20 - 146.4 * theta + 316 * pow(theta,2);
171 double f2 = 39.8 * f1;
172 double fGhz = f_ / 1e9;
174 es = es * exp(-3.56417 * 1e-3 *
S_ + 4.74868 * 1e-6 * pow(
S_,2) + 1.15574 * 1e-5 *
T_ *
S_);
175 e1 = e1 * exp(-6.28908 * 1e-3 *
S_ + 1.76032 * 1e-4 * pow(
S_,2) - 9.22144 * 1e-5 *
T_ *
S_);
176 einf = einf * (1 +
S_* (-2.04265 * 1e-3 + 1.57883 * 1e-4 *
T_));
177 f1 = f1 * (1 +
S_ * (2.39357 * 1e-3 - 3.13530 * 1e-5 *
T_ + 2.52477 * 1e-7 * pow(
T_,2)));
178 f2 = f2 * (1 +
S_ * (-1.99723 * 1e-2 + 1.81176 * 1e-4 *
T_));
181 double a = pow((fGhz/f1),2);
182 double b = pow((fGhz/f2),2);
184 e[0] = ((es - e1)/(1 + a)) + ((e1 - einf)/(1 + b)) + einf;
185 e[1] = (((fGhz/f1)*(es - e1))/(1 + a)) + (((fGhz/f2)*(e1 - einf))/(1 + b)) + (18 * sigmaSW)/fGhz;
188 std::cout << NOW <<
" UwElectroMagneticMPropagation: relativePermittivity= " << e[0] <<
" + "
189 << e[1] <<
"i" << std::endl;
194 double sigma35 = 2.903602 + 8.607 * 1e-2 *
T_ + 4.738817 * 1e-4 * pow(
T_,2) -2.991 * 1e-6 * pow(
T_,3) + 4.3047 * 1e-9 * pow(
T_,4);
195 double R35 =
S_ * (37.5109+5.45216 *
S_ + 1.4409 * 1e-2 * pow (
S_,2)) / (1004.75 + 182.283 *
S_ + pow(
S_,2));
196 double alpha0 = (6.9431 + 3.2841 *
S_ -9.9486 * 1e-2 * pow(
S_,2)) / (84.850 + 69.024 *
S_+ pow(
S_,2)) ;
197 double alpha1 = 49.843 - 0.2276*
S_ + 0.198 * 1e-2 * pow(
S_,2);
199 double RT15 = 1 + (alpha0 * (
T_ - 15)) / (alpha1 +
T_);
200 return sigma35 * R35 * RT15;