1234567891011121314151617181920212223242526272829303132 |
- #ifndef SRC_LOCK_IN_H_
- #define SRC_LOCK_IN_H_
- #include <iostream>
- #include <vector>
- namespace mri {
- class LockIn {
- public:
- template<class T> inline T pow2(const T value) {return value*value;}
- const double PI_=3.14159265358979323846;
- void Analyse(const std::vector<double> &signal,double period_ms,
- const std::vector<double> ×teps,
- int samples_per_period,
- std::vector<double> &avg_sin,
- std::vector<double> &avg_cos);
- private:
- std::vector<double> lockin_sin_, lockin_cos_;
- std::vector<double> mul_sin_, mul_cos_;
- std::vector<double> mag_sin_, mag_cos_;
- double period_ms_, omega_;
- unsigned long total_samples_;
- int samples_per_period_;
- void GenerateSinCos(const std::vector<double> ×teps);
- void Multiply(const std::vector<double> &signal);
- void FilterLowPassFirstOrder();
- void FilterLowPassForthOrder();
- void FilterLowPassPeriodAverage();
- void FilterLowPassWindowedSinc();
- }; // end of class LockIn
- } // end of namespace mri
- #endif // SRC_LOCK_IN_H_
|