lock-in.h 1.1 KB

1234567891011121314151617181920212223242526272829303132
  1. #ifndef SRC_LOCK_IN_H_
  2. #define SRC_LOCK_IN_H_
  3. #include <iostream>
  4. #include <vector>
  5. namespace mri {
  6. class LockIn {
  7. public:
  8. template<class T> inline T pow2(const T value) {return value*value;}
  9. const double PI_=3.14159265358979323846;
  10. void Analyse(const std::vector<double> &signal,double period_ms,
  11. const std::vector<double> &timesteps,
  12. int samples_per_period,
  13. std::vector<double> &avg_sin,
  14. std::vector<double> &avg_cos);
  15. private:
  16. std::vector<double> lockin_sin_, lockin_cos_;
  17. std::vector<double> mul_sin_, mul_cos_;
  18. std::vector<double> mag_sin_, mag_cos_;
  19. double period_ms_, omega_;
  20. unsigned long total_samples_;
  21. int samples_per_period_;
  22. void GenerateSinCos(const std::vector<double> &timesteps);
  23. void Multiply(const std::vector<double> &signal);
  24. void FilterLowPassFirstOrder();
  25. void FilterLowPassForthOrder();
  26. void FilterLowPassPeriodAverage();
  27. void FilterLowPassWindowedSinc();
  28. }; // end of class LockIn
  29. } // end of namespace mri
  30. #endif // SRC_LOCK_IN_H_