WIP: ignore stale values
This commit is contained in:
parent
571e677a63
commit
9f0ea040f1
|
@ -467,15 +467,25 @@ bool BleFingerprint::fill(JsonObject *doc) {
|
||||||
float weightedDistances = 0;
|
float weightedDistances = 0;
|
||||||
float sumWeights = 0;
|
float sumWeights = 0;
|
||||||
float sumVariances = 0;
|
float sumVariances = 0;
|
||||||
// FIXME: weight channels by timestamp of last packet, so we can ignore stale values
|
int channelCount = 0;
|
||||||
for (const auto& channel : channels) {
|
for (const auto& channel : channels) {
|
||||||
|
if (channel.lastSeenMillis < millis() - 5000)
|
||||||
|
continue;
|
||||||
float weight = 1 / std::max(channel.vari, 0.05f);
|
float weight = 1 / std::max(channel.vari, 0.05f);
|
||||||
weightedDistances += channel.dist * weight;
|
weightedDistances += channel.dist * weight;
|
||||||
sumWeights += weight;
|
sumWeights += weight;
|
||||||
sumVariances += channel.vari;
|
sumVariances += channel.vari;
|
||||||
|
channelCount++;
|
||||||
|
}
|
||||||
|
// FIXME: weight channels by timestamp of last packet, so we can ignore stale values?
|
||||||
|
if (!channelCount) {
|
||||||
|
weightedDistances = getMinObservedDistance();
|
||||||
|
sumWeights = 1;
|
||||||
|
sumVariances = 0;
|
||||||
|
channelCount = 1;
|
||||||
}
|
}
|
||||||
float fusedDistance = weightedDistances / sumWeights;
|
float fusedDistance = weightedDistances / sumWeights;
|
||||||
float fusedVariance = sumVariances / 3;
|
float fusedVariance = sumVariances / channelCount;
|
||||||
(*doc)[F("distance")] = serialized(String(fusedDistance, 2));
|
(*doc)[F("distance")] = serialized(String(fusedDistance, 2));
|
||||||
(*doc)[F("var")] = serialized(String(fusedVariance, 2));
|
(*doc)[F("var")] = serialized(String(fusedVariance, 2));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue