/trunk/FreeSpeech/HMM/include/mean.h

# · C++ Header · 77 lines · 60 code · 13 blank · 4 comment · 4 complexity · d52907196f8852d0aa693bb10b2d7394 MD5 · raw file

  1. // Copyright (C) 1998-1999 Jean-Marc Valin
  2. #ifndef MEAN_H
  3. #define MEAN_H
  4. #include <math.h>
  5. #include <vector>
  6. #include "Object.h"
  7. #include "ObjectParser.h"
  8. #include "misc.h"
  9. #include "Vector.h"
  10. class Mean : public Vector<double>
  11. {
  12. protected:
  13. int mode;
  14. int accum_count;
  15. int dimension;
  16. public:
  17. enum Mode {accum=0, real, rotated, inverted};
  18. Mean()
  19. : Vector<double>()
  20. , mode(accum)
  21. , accum_count(0)
  22. , dimension(0)
  23. {}
  24. Mean(int n, const double &x = 0)
  25. : Vector<double>(n, x)
  26. , mode(accum)
  27. , accum_count(0)
  28. , dimension(n)
  29. {}
  30. int getAccum() {return accum_count;}
  31. void accumFrame(const float *v)
  32. {
  33. for (int i=0;i<dimension;i++)
  34. this->operator[] (i) += v[i];
  35. accum_count++;
  36. }
  37. void accumFrame(const vector<float> &v)
  38. {
  39. for (int i=0;i<v.size();i++)
  40. this->operator[] (i) += v[i];
  41. accum_count++;
  42. }
  43. void toReal()
  44. {
  45. double accum_1 = 1.0/accum_count;
  46. for (int i=0;i<dimension;i++)
  47. this->operator[] (i) *= accum_1;
  48. mode = real;
  49. }
  50. void resetToAccum()
  51. {
  52. for (int i=0;i<dimension;i++)
  53. this->operator[] (i) = 0.0;
  54. mode = accum;
  55. accum_count = 0;
  56. }
  57. /** print function used for operator << */
  58. virtual void printOn(ostream &out=cout) const;
  59. /**Read function used for operator >> */
  60. void readFrom (istream &in=cin);
  61. /**extractor operator*/
  62. friend istream &operator >> (istream &in, Mean &cov);
  63. };
  64. #endif