latest version
This commit is contained in:
@@ -429,7 +429,7 @@ private:
|
||||
|
||||
}
|
||||
|
||||
double errFuncOther(const float* params, const WiFiMeasurements& mes) {
|
||||
double errFuncOther(const float* params, const WiFiMeasurements& _mes) {
|
||||
|
||||
// crop z to 1 meter
|
||||
//params[2] = std::round(params[2]);
|
||||
@@ -439,11 +439,11 @@ private:
|
||||
|
||||
const float sigma = 8.0;
|
||||
double prob = 1.0;
|
||||
double error = 0;
|
||||
int cnt = 0;
|
||||
|
||||
//const auto comp = [] (const WiFiMeasurement& m1, const WiFiMeasurement& m2) {return m1.getRSSI() < m2.getRSSI();};
|
||||
//const auto& min = std::min_element(mes.entries.begin(), mes.entries.end(), comp);
|
||||
WiFiMeasurements mes = _mes;
|
||||
const auto comp = [] (const WiFiMeasurement& m1, const WiFiMeasurement& m2) {return m1.getRSSI() < m2.getRSSI();};
|
||||
//std::sort(mes.entries.begin(), mes.entries.end(), comp);
|
||||
const auto& min = std::min_element(mes.entries.begin(), mes.entries.end(), comp);
|
||||
|
||||
// calculate error for above position using the currently available measurements
|
||||
for (const WiFiMeasurement& m : mes.entries) {
|
||||
@@ -452,9 +452,13 @@ private:
|
||||
if (!LeHelper::isFHWS_AP(m.getAP().getMAC())) {continue;}
|
||||
|
||||
// TESTING
|
||||
//if (m.getAP().getMAC() == min->getAP().getMAC()) {continue;}
|
||||
//if (m.getRSSI() < -90) {continue;}
|
||||
//if (m.getRSSI() > -55) {continue;}
|
||||
|
||||
|
||||
if (mes.entries.size() > 8) {
|
||||
//if (m.getRSSI() < mes.entries[1].getRSSI()-10) {continue;}
|
||||
//if (m.getRSSI() > -65) {continue;}
|
||||
if (m.getAP().getMAC() == min->getAP().getMAC()) {continue;}
|
||||
}
|
||||
|
||||
const float rssi = m.getRSSI();
|
||||
// const volatile float min = -100;
|
||||
@@ -474,26 +478,7 @@ private:
|
||||
const float rssi_scan = m.getRSSI();
|
||||
|
||||
// likelyhood
|
||||
//double p = Distribution::Normal<double>::getProbability(rssi_model, sigma, rssi_scan);
|
||||
//const double p = Distribution::Region<double>::getProbability(rssi_model, sigma, rssi_scan);
|
||||
//const double p = Distribution::Triangle<double>::getProbability(rssi_model, sigma*2, rssi_scan);
|
||||
//double p = Distribution::Exponential<double>::getProbability(1, std::abs(rssi_model-rssi_scan));
|
||||
|
||||
double p = Distribution::Exponential<double>::getProbability(1.0, std::abs(rssi_model-rssi_scan));
|
||||
|
||||
//p = 0.85 * p + 0.15 * (1.0-p);
|
||||
//p = 0.95 * p + 0.05;
|
||||
|
||||
// const double diff = std::abs(rssi_model - rssi_scan);
|
||||
//// error += diff;
|
||||
// ++cnt;
|
||||
// if (diff < 3) {error += 0.001;}
|
||||
// else if (diff < 5) {error += 0.001;}
|
||||
// else if (diff < 8) {error += 0.001;}
|
||||
// else if (diff < 10) {error += 3.0;}
|
||||
// else if (diff < 15) {error += 5.0;}
|
||||
// else {error += 15.0;}
|
||||
// error += std::pow((diff / 10.0f), 5) / 10.0f;
|
||||
double p = Distribution::Normal<double>::getProbability(rssi_model, sigma, rssi_scan);
|
||||
|
||||
// adjust
|
||||
prob *= p;
|
||||
@@ -505,6 +490,53 @@ private:
|
||||
|
||||
}
|
||||
|
||||
|
||||
/** USED WITHIN THE PAPER */
|
||||
double errFuncOtherExponential(const float* params, const WiFiMeasurements& mes) {
|
||||
|
||||
// crop z to 1 meter
|
||||
//params[2] = std::round(params[2]);
|
||||
|
||||
// suggested position
|
||||
const Point3 pos_m(params[0], params[1], params[2]);
|
||||
|
||||
double prob = 1.0;
|
||||
|
||||
//const auto comp = [] (const WiFiMeasurement& m1, const WiFiMeasurement& m2) {return m1.getRSSI() < m2.getRSSI();};
|
||||
//const auto& min = std::min_element(mes.entries.begin(), mes.entries.end(), comp);
|
||||
|
||||
// calculate error for above position using the currently available measurements
|
||||
for (const WiFiMeasurement& m : mes.entries) {
|
||||
|
||||
// skip non-FHWS APs
|
||||
if (!LeHelper::isFHWS_AP(m.getAP().getMAC())) {continue;}
|
||||
|
||||
// get model's rssi for the given location
|
||||
const float rssi_model = wiModel->getRSSI(m.getAP().getMAC(), pos_m);
|
||||
|
||||
// skip APs unknown to the model
|
||||
if (rssi_model != rssi_model) {
|
||||
std::cout << "unknown ap: " << m.getAP().getMAC().asString() << std::endl;
|
||||
continue;
|
||||
}
|
||||
|
||||
// get scan's rssi
|
||||
const float rssi_scan = m.getRSSI();
|
||||
|
||||
// likelyhood
|
||||
double p = Distribution::Exponential<double>::getProbability(1.0, std::abs(rssi_model-rssi_scan));
|
||||
|
||||
// adjust
|
||||
prob *= p;
|
||||
|
||||
}
|
||||
|
||||
const double err = -prob;
|
||||
return err;
|
||||
|
||||
}
|
||||
|
||||
|
||||
double getVeto(const Point3& pos_m, const WiFiMeasurements& obs) const {
|
||||
|
||||
struct APR {
|
||||
|
||||
Reference in New Issue
Block a user