[Positioner] Measurement: variance in dBm
Along with the variance in mW, compute the variance of the dBm values.
This commit is contained in:
parent
6d40ecc8c5
commit
91ff55ca0e
|
@ -108,7 +108,7 @@ void Measurement::merge(const Measurement &source)
|
||||||
/**
|
/**
|
||||||
* - #ap is not deleted, only initialised to NULL.
|
* - #ap is not deleted, only initialised to NULL.
|
||||||
* - #ss_list is cleared.
|
* - #ss_list is cleared.
|
||||||
* - #average_dbm, #average_mw and #variance_mw are reset to 0.
|
* - average and variance variables are reset to 0.
|
||||||
*/
|
*/
|
||||||
void Measurement::clear()
|
void Measurement::clear()
|
||||||
{
|
{
|
||||||
|
@ -116,7 +116,9 @@ void Measurement::clear()
|
||||||
average_dbm = 0 ;
|
average_dbm = 0 ;
|
||||||
average_mw = 0 ;
|
average_mw = 0 ;
|
||||||
variance_mw = 0 ;
|
variance_mw = 0 ;
|
||||||
|
variance_dbm = 0 ;
|
||||||
variance_mw_m2 = 0 ;
|
variance_mw_m2 = 0 ;
|
||||||
|
variance_dbm_m2 = 0 ;
|
||||||
variance_size = 0 ;
|
variance_size = 0 ;
|
||||||
ap = NULL ;
|
ap = NULL ;
|
||||||
}
|
}
|
||||||
|
@ -186,7 +188,9 @@ void Measurement::recalculate_average()
|
||||||
average_dbm = 0 ;
|
average_dbm = 0 ;
|
||||||
average_mw = 0 ;
|
average_mw = 0 ;
|
||||||
variance_mw = 0 ;
|
variance_mw = 0 ;
|
||||||
|
variance_dbm = 0 ;
|
||||||
variance_mw_m2 = 0 ;
|
variance_mw_m2 = 0 ;
|
||||||
|
variance_dbm_m2 = 0 ;
|
||||||
variance_size = 0 ;
|
variance_size = 0 ;
|
||||||
|
|
||||||
for (map<pkt_id_t, ss_t>::const_iterator
|
for (map<pkt_id_t, ss_t>::const_iterator
|
||||||
|
@ -204,14 +208,19 @@ void Measurement::update_average(ss_t ss_dbm)
|
||||||
float ss_mw = pow(10, static_cast<float>(ss_dbm) / 10.0) ;
|
float ss_mw = pow(10, static_cast<float>(ss_dbm) / 10.0) ;
|
||||||
|
|
||||||
// Update the average:
|
// Update the average:
|
||||||
float delta = ss_mw - average_mw ;
|
float delta_mw = ss_mw - average_mw ;
|
||||||
average_mw += delta / variance_size ;
|
average_mw += delta_mw / variance_size ;
|
||||||
average_dbm = 10.0 * log10(average_mw) ;
|
average_dbm = 10.0 * log10(average_mw) ;
|
||||||
|
float delta_dbm = ss_dbm - average_dbm ;
|
||||||
|
|
||||||
// Update the variance:
|
// Update the variance:
|
||||||
variance_mw_m2 += delta * (ss_mw - average_mw) ;
|
variance_mw_m2 += delta_mw * (ss_mw - average_mw) ;
|
||||||
|
variance_dbm_m2 += delta_dbm * (ss_dbm - average_dbm) ;
|
||||||
if (variance_size > 1)
|
if (variance_size > 1)
|
||||||
variance_mw = variance_mw_m2 / (variance_size - 1) ;
|
{
|
||||||
|
variance_mw = variance_mw_m2 / (variance_size - 1) ;
|
||||||
|
variance_dbm = variance_dbm_m2 / (variance_size - 1) ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -229,7 +238,9 @@ Measurement& Measurement::operator=(const Measurement &m)
|
||||||
average_dbm = m.average_dbm ;
|
average_dbm = m.average_dbm ;
|
||||||
average_mw = m.average_mw ;
|
average_mw = m.average_mw ;
|
||||||
variance_mw = m.variance_mw ;
|
variance_mw = m.variance_mw ;
|
||||||
|
variance_dbm = m.variance_mw ;
|
||||||
variance_mw_m2 = m.variance_mw_m2 ;
|
variance_mw_m2 = m.variance_mw_m2 ;
|
||||||
|
variance_dbm_m2 = m.variance_mw_m2 ;
|
||||||
variance_size = m.variance_size ;
|
variance_size = m.variance_size ;
|
||||||
|
|
||||||
return *this ;
|
return *this ;
|
||||||
|
@ -294,7 +305,13 @@ ostream &operator<<(ostream &os, const Measurement &m)
|
||||||
os << static_cast<int_fast16_t>(i->second)
|
os << static_cast<int_fast16_t>(i->second)
|
||||||
<< '(' << i->first << ')' ;
|
<< '(' << i->first << ')' ;
|
||||||
}
|
}
|
||||||
os << " [AVG_dBm=" << m.average_dbm << ";AVG_mW=" << m.average_mw << ";VAR_mW=" << m.variance_mw << ";STD_mW=" << m.get_std_deviation_mw() << "]" ;
|
os << " [AVG_dBm=" << m.average_dbm
|
||||||
|
<< ";VAR_dBm=" << m.variance_dbm
|
||||||
|
<< ";STD_dBm=" << m.get_std_deviation_dbm()
|
||||||
|
<< ";AVG_mW=" << m.average_mw
|
||||||
|
<< ";VAR_mW=" << m.variance_mw
|
||||||
|
<< ";STD_mW=" << m.get_std_deviation_mw()
|
||||||
|
<< "]" ;
|
||||||
|
|
||||||
return os ;
|
return os ;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,10 +31,14 @@ protected:
|
||||||
float average_mw ;
|
float average_mw ;
|
||||||
/// Variance of all the captured signal strengths (mW)
|
/// Variance of all the captured signal strengths (mW)
|
||||||
float variance_mw ;
|
float variance_mw ;
|
||||||
|
/// Variance of all the captured signal strengths (dBm)
|
||||||
|
float variance_dbm ;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// Intermediate variable used to compute the variance (mW)
|
/// Intermediate variable used to compute the variance (mW)
|
||||||
float variance_mw_m2 ;
|
float variance_mw_m2 ;
|
||||||
|
/// Intermediate variable used to compute the variance (dBm)
|
||||||
|
float variance_dbm_m2 ;
|
||||||
/// Number of elements taken into account in the variance computation
|
/// Number of elements taken into account in the variance computation
|
||||||
unsigned int variance_size ;
|
unsigned int variance_size ;
|
||||||
|
|
||||||
|
@ -56,14 +60,14 @@ protected:
|
||||||
public:
|
public:
|
||||||
Measurement(const AccessPoint *_ap = NULL):
|
Measurement(const AccessPoint *_ap = NULL):
|
||||||
ap(const_cast<AccessPoint*>(_ap)), average_dbm(0),
|
ap(const_cast<AccessPoint*>(_ap)), average_dbm(0),
|
||||||
average_mw(0), variance_mw(0), variance_mw_m2(0),
|
average_mw(0), variance_mw(0), variance_dbm(0),
|
||||||
variance_size(0) {}
|
variance_mw_m2(0), variance_dbm_m2(0), variance_size(0) {}
|
||||||
|
|
||||||
Measurement(const Measurement &source):
|
Measurement(const Measurement &source):
|
||||||
ap(source.ap), ss_list(source.ss_list),
|
ap(source.ap), ss_list(source.ss_list),
|
||||||
average_dbm(source.average_dbm), average_mw(source.average_mw),
|
average_dbm(source.average_dbm), average_mw(source.average_mw),
|
||||||
variance_mw(source.variance_mw), variance_mw_m2(0),
|
variance_mw(source.variance_mw), variance_dbm(source.variance_dbm),
|
||||||
variance_size(0) {}
|
variance_mw_m2(0), variance_dbm_m2(0), variance_size(0) {}
|
||||||
|
|
||||||
~Measurement(void) ;
|
~Measurement(void) ;
|
||||||
|
|
||||||
|
@ -79,6 +83,8 @@ public:
|
||||||
float get_variance_mw() const ;
|
float get_variance_mw() const ;
|
||||||
/// Returns the standard deviation of the SS list (mW)
|
/// Returns the standard deviation of the SS list (mW)
|
||||||
float get_std_deviation_mw() const ;
|
float get_std_deviation_mw() const ;
|
||||||
|
/// Returns the standard deviation of the SS list (dBm)
|
||||||
|
float get_std_deviation_dbm() const ;
|
||||||
/// Returns the number of SS in the SS list
|
/// Returns the number of SS in the SS list
|
||||||
int get_nb_ss() const ;
|
int get_nb_ss() const ;
|
||||||
//@}
|
//@}
|
||||||
|
@ -158,6 +164,12 @@ inline float Measurement::get_std_deviation_mw() const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline float Measurement::get_std_deviation_dbm() const
|
||||||
|
{
|
||||||
|
return sqrt(variance_dbm) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
inline int Measurement::get_nb_ss() const
|
inline int Measurement::get_nb_ss() const
|
||||||
{
|
{
|
||||||
return ss_list.size() ;
|
return ss_list.size() ;
|
||||||
|
|
Loading…
Reference in New Issue