CARMA C++
Maths.h
1 #ifndef CARMA_PHASEMONITOR_MATHS_H
2 #define CARMA_PHASEMONITOR_MATHS_H
3 
4 /* $Id: Maths.h,v 1.3 2006/06/26 08:45:16 colby Exp $ */
5 
6 #include <math.h>
7 
8 namespace carma
9 {
10  namespace phasemonitor
11  {
12 
13  class Maths
14  {
15  public:
16  static double mean( time_t *x, int n )
17  {
18  float Sx = 0.0;
19 
20  for ( int i = 0; i < n; i++ )
21  Sx += x[i];
22 
23  return (double)( Sx / (double)n );
24  }
25 
26  static double mean( float *x, int n )
27  {
28  float Sx = 0.0;
29 
30  for ( int i = 0; i < n; i++ )
31  Sx += x[i];
32 
33  return (double)( Sx / (double)n );
34  }
35 
36  static double mean( double *x, int n )
37  {
38  double Sx = 0.0;
39 
40  for ( int i = 0; i < n; i++ )
41  Sx += x[i];
42 
43  return ( Sx / (double)n );
44  }
45 
46  static void fitLine( float *x, float *y, int n, float &a, float &b )
47  {
48  double Sx, Sy, Sxx, Sxy;
49 
50  Sx = Sy = Sxx = Sxy = 0.0;
51 
52  for ( int i = 0; i < n; i++ )
53  {
54  Sx += (double)x[i];
55  Sy += (double)y[i];
56  Sxx += (double)x[i] * (double)x[i];
57  Sxy += (double)x[i] * (double)y[i];
58  }
59 
60  Sx /= (double)n;
61  Sy /= (double)n;
62  Sxx /= (double)n;
63  Sxy /= (double)n;
64 
65  if (n == 1)
66  {
67  a = 0.0 ;
68  b = y[0] ;
69  }
70  else
71  {
72  a = (float)((Sxy - Sx * Sy) / (Sxx - Sx * Sx));
73  b = (float)((Sxx * Sy - Sx * Sxy) / (Sxx - Sx * Sx));
74  }
75 
76  }
77 
78  static float rms( float *x, int n )
79  {
80  float Sx, Sxx;
81 
82  Sx = Sxx = 0.0;
83 
84  for ( int i = 0; i < n; i++ )
85  {
86  Sx += x[i];
87  Sxx += x[i] * x[i];
88  }
89 
90  Sx /= (float)n;
91  Sxx /= (float)n;
92 
93  return ( sqrtf(Sxx - Sx*Sx) );
94  }
95 
96  }; // Class Maths
97  } // namespace phasemonitor
98 } // namespace carma
99 #endif // CARMA_PHASEMONITOR_MATHS_H