test_sdk/math/gtl_math_octv.h

139 lines
4.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#ifndef OCTV_H
#define OCTV_H
#include <QObject>
#include "core/gtl_analog_data.h"
#include "core/gtl.h"
#include "gtl_math_spec.h"
#include "math_global.h"
namespace gtl
{
namespace math
{
class MATH_EXPORT octv : public QObject, public std::vector<std::pair<qreal, qreal>>
{
Q_OBJECT
Q_PROPERTY(qreal minimum READ minimum WRITE set_minimum NOTIFY minimum_changed);
Q_PROPERTY(qreal maximum READ maximum WRITE set_maximum NOTIFY maximum_changed);
Q_PROPERTY(ratios ratio READ ratio WRITE set_ratio NOTIFY ratio_changed);
Q_PROPERTY(looks look READ look WRITE set_look NOTIFY look_changed);
Q_PROPERTY(fractions fraction READ fraction WRITE set_fraction NOTIFY fraction_changed);
Q_PROPERTY(units unit READ unit WRITE set_unit NOTIFY unit_changed);
// Q_PROPERTY(windows window READ window WRITE set_window NOTIFY window_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);
public:
enum ratios
{
two,
ten
};
Q_ENUM(ratios)
enum looks
{
amplitude,
rms
};
Q_ENUM(looks)
enum fractions
{
one,
one_third,
one_sixth,
one_twelwe
};
Q_ENUM(fractions)
public:
octv(gtl::analog_data *ad);
gtl::analog_data *ad() const;
qreal left(int idx);
qreal right(int idx);
qreal minimum() const;
void set_minimum(qreal value);
qreal maximum() const;
void set_maximum(qreal value);
ratios ratio() const;
void set_ratio(ratios value);
looks look() const;
void set_look(looks value);
fractions fraction() const;
void set_fraction(fractions value);
units unit() const;
void set_unit(units value);
// int average() const;
// void set_average(int value);
// qreal overlap() const;
// void set_overlap(int value);
private:
void init();
std::pair<int, int> calculate_band_indexes(qreal frequency);
qreal calculate_octave(std::vector<qreal>::iterator begin, std::vector<qreal>::iterator end);
qreal g_pow(qreal value, bool direction);
gtl::analog_data* _ad;
qreal _min; // Минимальная частота
qreal _max; // Максимальная частота
ratios _r; // Изменение в 2 или в 10 раз
looks _l; // Представление - амплитуда или СКЗ
fractions _frac; // Делитель полосы октавы
units _unit;
gtl::math::spec *_spec = NULL; // Спектр
std::vector<qreal> *_frequencies = NULL; // Частоты октав (нижняя, верхняя, нижняя,...)
int _r_rbw; // Делитель разрешения
qreal _gfl; // Коэффициент для вычисления нижней частоты октавы
qreal _gfh; // Коэффициент для вычисления верхней частоты октавы
int _frac_num; // Делитель полосы октавы - число
protected:
virtual void calculate();
virtual void before_updating();
virtual void after_updating();
private slots:
virtual void spec_changed();
virtual void set_rate(qreal value);
signals:
void minimum_changed();
void maximum_changed();
void ratio_changed();
void look_changed();
void fraction_changed();
void unit_changed();
// void window_changed();
// void average_changed();
// void overlap_changed();
void initialized();
void changed();
void acquired(qreal);
};
}
}
#endif // OCTV_H