139 lines
4.3 KiB
C
139 lines
4.3 KiB
C
|
#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
|