/* * This file is part of the Owl Positioning System (OwlPS). * OwlPS is a project of the University of Franche-Comté * (Université de Franche-Comté), France. */ #include "frbhmbasic.hh" Result FRBHMBasic::compute(const Request &_request) { request = &_request ; // Select the closest point in SS closest_in_ss = &select_point(_request) ; compute_ap_distance_circles() ; Point3D position(multilaterate_2d(closest_in_ss->get_z())) ; return Result(request, name, position) ; } /* TODO: * It is ugly to duplicate this function from FBCM. We should find a * trick to do it prettier. The thing is that FBCM::estimate_distance() * will not call FRBHMBasic::friis_index() but FBCM::friis_index(), * which is wrong in our case. */ float FRBHMBasic::estimate_distance(const Measurement &measurement) { double constant_term = make_constant_term(measurement) ; const float &average_ss = measurement.get_average_ss() ; const AccessPoint *ap = measurement.get_ap() ; return pow(10, (constant_term - average_ss) / (10 * friis_index(ap))) ; } inline float FRBHMBasic::friis_index(const AccessPoint *const ap) const { return closest_in_ss->friis_index_for_ap(ap->get_mac_addr()) ; }