Chris@49
|
1 // Copyright (C) 2009-2011 NICTA (www.nicta.com.au)
|
Chris@49
|
2 // Copyright (C) 2009-2011 Conrad Sanderson
|
Chris@49
|
3 //
|
Chris@49
|
4 // This Source Code Form is subject to the terms of the Mozilla Public
|
Chris@49
|
5 // License, v. 2.0. If a copy of the MPL was not distributed with this
|
Chris@49
|
6 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
Chris@49
|
7
|
Chris@49
|
8
|
Chris@49
|
9 //! \addtogroup running_stat
|
Chris@49
|
10 //! @{
|
Chris@49
|
11
|
Chris@49
|
12
|
Chris@49
|
13
|
Chris@49
|
14 template<typename eT>
|
Chris@49
|
15 class arma_counter
|
Chris@49
|
16 {
|
Chris@49
|
17 public:
|
Chris@49
|
18
|
Chris@49
|
19 inline ~arma_counter();
|
Chris@49
|
20 inline arma_counter();
|
Chris@49
|
21
|
Chris@49
|
22 inline const arma_counter& operator++();
|
Chris@49
|
23 inline void operator++(int);
|
Chris@49
|
24
|
Chris@49
|
25 inline void reset();
|
Chris@49
|
26 inline eT value() const;
|
Chris@49
|
27 inline eT value_plus_1() const;
|
Chris@49
|
28 inline eT value_minus_1() const;
|
Chris@49
|
29
|
Chris@49
|
30
|
Chris@49
|
31 private:
|
Chris@49
|
32
|
Chris@49
|
33 arma_aligned eT d_count;
|
Chris@49
|
34 arma_aligned uword i_count;
|
Chris@49
|
35 };
|
Chris@49
|
36
|
Chris@49
|
37
|
Chris@49
|
38
|
Chris@49
|
39 //! Class for keeping statistics of a continuously sampled process / signal.
|
Chris@49
|
40 //! Useful if the storage of individual samples is not necessary or desired.
|
Chris@49
|
41 //! Also useful if the number of samples is not known beforehand or exceeds
|
Chris@49
|
42 //! available memory.
|
Chris@49
|
43 template<typename eT>
|
Chris@49
|
44 class running_stat
|
Chris@49
|
45 {
|
Chris@49
|
46 public:
|
Chris@49
|
47
|
Chris@49
|
48 typedef typename get_pod_type<eT>::result T;
|
Chris@49
|
49
|
Chris@49
|
50
|
Chris@49
|
51 inline ~running_stat();
|
Chris@49
|
52 inline running_stat();
|
Chris@49
|
53
|
Chris@49
|
54 inline void operator() (const T sample);
|
Chris@49
|
55 inline void operator() (const std::complex<T>& sample);
|
Chris@49
|
56
|
Chris@49
|
57 inline void reset();
|
Chris@49
|
58
|
Chris@49
|
59 inline eT mean() const;
|
Chris@49
|
60
|
Chris@49
|
61 inline T var (const uword norm_type = 0) const;
|
Chris@49
|
62 inline T stddev(const uword norm_type = 0) const;
|
Chris@49
|
63
|
Chris@49
|
64 inline eT min() const;
|
Chris@49
|
65 inline eT max() const;
|
Chris@49
|
66
|
Chris@49
|
67 inline T count() const;
|
Chris@49
|
68
|
Chris@49
|
69 //
|
Chris@49
|
70 //
|
Chris@49
|
71
|
Chris@49
|
72 private:
|
Chris@49
|
73
|
Chris@49
|
74 arma_aligned arma_counter<T> counter;
|
Chris@49
|
75
|
Chris@49
|
76 arma_aligned eT r_mean;
|
Chris@49
|
77 arma_aligned T r_var;
|
Chris@49
|
78
|
Chris@49
|
79 arma_aligned eT min_val;
|
Chris@49
|
80 arma_aligned eT max_val;
|
Chris@49
|
81
|
Chris@49
|
82 arma_aligned T min_val_norm;
|
Chris@49
|
83 arma_aligned T max_val_norm;
|
Chris@49
|
84
|
Chris@49
|
85
|
Chris@49
|
86 friend class running_stat_aux;
|
Chris@49
|
87 };
|
Chris@49
|
88
|
Chris@49
|
89
|
Chris@49
|
90
|
Chris@49
|
91 class running_stat_aux
|
Chris@49
|
92 {
|
Chris@49
|
93 public:
|
Chris@49
|
94
|
Chris@49
|
95 template<typename eT>
|
Chris@49
|
96 inline static void update_stats(running_stat<eT>& x, const eT sample);
|
Chris@49
|
97
|
Chris@49
|
98 template<typename T>
|
Chris@49
|
99 inline static void update_stats(running_stat< std::complex<T> >& x, const T sample);
|
Chris@49
|
100
|
Chris@49
|
101 template<typename T>
|
Chris@49
|
102 inline static void update_stats(running_stat< std::complex<T> >& x, const std::complex<T>& sample);
|
Chris@49
|
103
|
Chris@49
|
104 };
|
Chris@49
|
105
|
Chris@49
|
106
|
Chris@49
|
107
|
Chris@49
|
108 //! @}
|