#ifndef GTL_MATH_CROSS_SPEC_H #define GTL_MATH_CROSS_SPEC_H #include #include #include "core/gtl_device.h" #include "core/gtl_analog_data.h" #include "gtl_math_fft.h" #include "math_global.h" namespace gtl { namespace math { class MATH_EXPORT cross_spec : public QObject, public std::vector { Q_OBJECT Q_PROPERTY(qreal frequency READ frequency WRITE set_frequency NOTIFY frequency_changed); Q_PROPERTY(qreal resolution READ resolution WRITE set_resolution NOTIFY resolution_changed); Q_PROPERTY(windows window READ window WRITE set_window NOTIFY window_changed); Q_PROPERTY(int lines READ lines WRITE set_lines NOTIFY lines_changed); Q_PROPERTY(int average READ average WRITE set_average NOTIFY average_changed); Q_PROPERTY(int overlap READ overlap WRITE set_overlap NOTIFY overlap_changed); // Q_PROPERTY(units unit READ unit WRITE set_unit NOTIFY unit_changed); Q_PROPERTY(qreal acq_time READ acq_time NOTIFY acq_time_changed); public: typedef fft::windows windows; cross_spec(gtl::analog_data *ref, gtl::analog_data *data); ~cross_spec(); void set_ref(gtl::analog_data *ref); void set_data(gtl::analog_data *data); qreal frequency() const; void set_frequency(qreal value); qreal resolution() const; void set_resolution(qreal value); windows window() const; void set_window(windows value); int lines() const; void set_lines(int value); uint average() const; void set_average(int value); qreal overlap() const; void set_overlap(int value); // units unit() const; // void set_unit(units value); gtl::analog_data *ad() const; qreal acq_time() const; private: void cleanup(); bool _is_acq; int _av; // Количество усреднений // units _un; // Единицы измерения int _av_cnt; // Счетчик усреднений bool _av_filled; // Флаг заполнения окна усреднения qreal _ac; // Процент завершения усреднения qreal _threshold; // Порог % от max // gtl::analog_data* _ad; std::vector*> _buffer_out; std::vector::iterator _calculated_it; // Итератор текущего буффера для вычисления спектра int _size_fft_calc; // Размер буфера/ 2 - до частоты Котельникова int _size_fft_out; // Количество отображаемых линий math::fft* _ref; // БПФ эталона math::fft* _data; // БПФ данных gtl::device* _device; protected: virtual void calculate(); virtual void before_updating(); virtual void after_updating(); private slots: virtual void device_recieved_data(); void init(); public slots: void stop_acq(); signals: void frequency_changed(); void resolution_changed(); void window_changed(); void lines_changed(); void average_changed(); void overlap_changed(); // void unit_changed(); void acq_time_changed(); void initialized(); void changed(); void acquired(qreal); void deleting(); }; } // namespace math } // namespace gtl #endif // GTL_MATH_CROSS_SPEC_H