2010-03-22 13:47:19 +01:00
|
|
|
#include "interlinknetworks.hh"
|
|
|
|
#include "mobile.hh"
|
|
|
|
|
|
|
|
using std::tr1::unordered_map ;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
float InterlinkNetworks::estimate_distance(const Measurement &measurement)
|
|
|
|
{
|
2010-05-04 10:44:19 +02:00
|
|
|
assert(request) ;
|
|
|
|
|
2010-03-22 13:47:19 +01:00
|
|
|
const AccessPoint &ap = *measurement.get_ap() ;
|
|
|
|
assert(&ap) ;
|
|
|
|
|
|
|
|
double constant_term =
|
|
|
|
ap.get_trx_power() +
|
|
|
|
ap.get_antenna_gain() +
|
|
|
|
20 * log10(
|
|
|
|
300000000.0 /
|
|
|
|
ap.get_frequency() /
|
|
|
|
(4 * M_PI)
|
|
|
|
) +
|
2010-05-04 10:44:19 +02:00
|
|
|
request->get_mobile()->get_antenna_gain() ;
|
2010-03-22 13:47:19 +01:00
|
|
|
const float &average_ss = measurement.get_average_ss() ;
|
|
|
|
return pow(10, (constant_term - average_ss) / 35) ;
|
|
|
|
}
|