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