LibreVNA/Software/PC_Application/Calibration/calibrationmeasurement.h

192 lines
4.7 KiB
C
Raw Normal View History

2022-08-27 21:28:45 +08:00
#ifndef CALIBRATIONMEASUREMENT_H
#define CALIBRATIONMEASUREMENT_H
#include "calstandard.h"
#include "Device/virtualdevice.h"
#include <QDateTime>
#include <QObject>
2022-08-27 21:28:45 +08:00
class Calibration2;
namespace CalibrationMeasurement {
class Base : public QObject, public Savable
2022-08-27 21:28:45 +08:00
{
Q_OBJECT
2022-08-27 21:28:45 +08:00
public:
Base(Calibration2 *cal);
enum class Type {
Open,
Short,
Load,
Through,
Last,
};
std::vector<CalStandard::Virtual*> supportedStandards();
2022-08-27 21:28:45 +08:00
bool setFirstSupportedStandard();
bool setStandard(CalStandard::Virtual *standard);
QString getStatistics();
virtual double minFreq() = 0;
virtual double maxFreq() = 0;
virtual unsigned int numPoints() = 0;
static std::vector<Type> availableTypes();
static QString TypeToString(Type type);
static Type TypeFromString(QString s);
virtual std::set<CalStandard::Virtual::Type> supportedStandardTypes() = 0;
2022-08-27 21:28:45 +08:00
virtual Type getType() = 0;
2022-08-27 21:28:45 +08:00
virtual void clearPoints() = 0;
virtual void addPoint(const VirtualDevice::VNAMeasurement &m) = 0;
virtual QWidget* createStandardWidget();
virtual QWidget* createSettingsWidget() = 0;
2022-08-27 21:28:45 +08:00
virtual nlohmann::json toJSON() override;
virtual void fromJSON(nlohmann::json j) override;
static bool canMeasureSimultaneously(std::set<Base *> measurements);
QDateTime getTimestamp() const;
protected:
signals:
void standardChanged(CalStandard::Virtual* newStandard);
2022-08-27 21:28:45 +08:00
protected:
CalStandard::Virtual *standard;
QDateTime timestamp;
Calibration2 *cal;
};
class OnePort : public Base
{
Q_OBJECT
2022-08-27 21:28:45 +08:00
public:
OnePort(Calibration2 *cal) :
Base(cal),
port(0) {}
virtual double minFreq() override;
virtual double maxFreq() override;
virtual unsigned int numPoints() override {return points.size();}
virtual void clearPoints();
virtual void addPoint(const VirtualDevice::VNAMeasurement &m);
virtual QWidget* createSettingsWidget() override;
2022-08-27 21:28:45 +08:00
virtual nlohmann::json toJSON() override;
virtual void fromJSON(nlohmann::json j) override;
std::complex<double> getMeasured(double frequency);
std::complex<double> getActual(double frequency);
int getPort() const;
public slots:
void setPort(int p);
protected:
signals:
void portChanged(int p);
2022-08-27 21:28:45 +08:00
protected:
int port;
class Point {
public:
double frequency;
std::complex<double> S;
};
std::vector<Point> points;
};
class Open : public OnePort
{
Q_OBJECT
2022-08-27 21:28:45 +08:00
public:
Open(Calibration2 *cal) :
OnePort(cal){setFirstSupportedStandard();}
virtual std::set<CalStandard::Virtual::Type> supportedStandardTypes() override {return {CalStandard::Virtual::Type::Open};}
2022-08-27 21:28:45 +08:00
virtual Type getType() override {return Type::Open;}
};
class Short : public OnePort
{
Q_OBJECT
2022-08-27 21:28:45 +08:00
public:
Short(Calibration2 *cal) :
OnePort(cal){setFirstSupportedStandard();}
virtual std::set<CalStandard::Virtual::Type> supportedStandardTypes() override {return {CalStandard::Virtual::Type::Short};}
2022-08-27 21:28:45 +08:00
virtual Type getType() override {return Type::Short;}
};
class Load : public OnePort
{
Q_OBJECT
2022-08-27 21:28:45 +08:00
public:
Load(Calibration2 *cal) :
OnePort(cal){setFirstSupportedStandard();}
virtual std::set<CalStandard::Virtual::Type> supportedStandardTypes() override {return {CalStandard::Virtual::Type::Load};}
2022-08-27 21:28:45 +08:00
virtual Type getType() override {return Type::Load;}
};
class TwoPort : public Base
{
Q_OBJECT
2022-08-27 21:28:45 +08:00
public:
TwoPort(Calibration2 *cal) :
Base(cal),
port1(0),
port2(0){}
virtual double minFreq() override;
virtual double maxFreq() override;
virtual unsigned int numPoints() override {return points.size();}
virtual void clearPoints();
virtual void addPoint(const VirtualDevice::VNAMeasurement &m);
virtual QWidget* createSettingsWidget() override;
2022-08-27 21:28:45 +08:00
virtual nlohmann::json toJSON() override;
virtual void fromJSON(nlohmann::json j) override;
Sparam getMeasured(double frequency);
Sparam getActual(double frequency);
int getPort1() const;
int getPort2() const;
public slots:
void setPort1(int p);
void setPort2(int p);
protected:
signals:
void port1Changed(int p);
void port2Changed(int p);
2022-08-27 21:28:45 +08:00
protected:
int port1, port2;
class Point {
public:
double frequency;
Sparam S;
};
std::vector<Point> points;
};
class Through : public TwoPort
{
Q_OBJECT
2022-08-27 21:28:45 +08:00
public:
Through(Calibration2 *cal) :
TwoPort(cal){setFirstSupportedStandard();}
virtual std::set<CalStandard::Virtual::Type> supportedStandardTypes() override {return {CalStandard::Virtual::Type::Through};}
2022-08-27 21:28:45 +08:00
virtual Type getType() override {return Type::Through;}
};
}
#endif // CALIBRATIONMEASUREMENT_H