[Positioner] Fix "interval" similarity algorithm
The "interval" similarity algorithm now handles the case where no packet is found within the interval.
This commit is contained in:
parent
1f22ece3d9
commit
8f3bf50aa5
|
@ -128,6 +128,13 @@ void Measurement::clear()
|
||||||
/* *** Operations *** */
|
/* *** Operations *** */
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @returns The similarity score. A small number means an important
|
||||||
|
* similarity, a big number means an important dissimilarity. The
|
||||||
|
* scale of this score depends on the similarity method used (option
|
||||||
|
* positioning.ss-similarity); the similarity scores are therefore
|
||||||
|
* not comparable across the various methods.
|
||||||
|
*/
|
||||||
float Measurement::similarity(const Measurement &source) const
|
float Measurement::similarity(const Measurement &source) const
|
||||||
{
|
{
|
||||||
assert(! ss_list.empty()) ;
|
assert(! ss_list.empty()) ;
|
||||||
|
@ -140,8 +147,15 @@ float Measurement::similarity(const Measurement &source) const
|
||||||
return ss_square_distance(source) ;
|
return ss_square_distance(source) ;
|
||||||
|
|
||||||
if (algorithm == "interval")
|
if (algorithm == "interval")
|
||||||
return 1 / nb_in_interval(source, get_std_deviation_mw()) ;
|
{
|
||||||
/* Note: this score ranges from 0 (excluded) to 1 (obviously). */
|
unsigned int nb = nb_in_interval(source, get_std_deviation_mw()) ;
|
||||||
|
if (nb != 0)
|
||||||
|
return 1 / nb ;
|
||||||
|
return 2 ;
|
||||||
|
}
|
||||||
|
/* Note: this score ranges from 0 (excluded) to 1 if at least one
|
||||||
|
* packet was found within the interval. It is equals to 2 if no
|
||||||
|
* packet was found in the interval. */
|
||||||
|
|
||||||
if (algorithm == "interval2")
|
if (algorithm == "interval2")
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue