Port extension test
This commit is contained in:
parent
96f8b6c90a
commit
b20e5598be
@ -141,27 +141,6 @@ void OnePort::fromJSON(nlohmann::json j)
|
||||
}
|
||||
}
|
||||
|
||||
std::complex<double> OnePort::addTransmissionLine(std::complex<double> termination_reflection, double offset_impedance, double offset_delay, double offset_loss, double frequency)
|
||||
{
|
||||
// nomenclature and formulas from https://loco.lab.asu.edu/loco-memos/edges_reports/report_20130807.pdf
|
||||
auto Gamma_T = termination_reflection;
|
||||
auto f = frequency;
|
||||
auto w = 2.0 * M_PI * frequency;
|
||||
auto f_sqrt = sqrt(f / 1e9);
|
||||
|
||||
auto Z_c = complex<double>(offset_impedance + (offset_loss / (2*w)) * f_sqrt, -(offset_loss / (2*w)) * f_sqrt);
|
||||
auto gamma_l = complex<double>(offset_loss*offset_delay/(2*offset_impedance)*f_sqrt, w*offset_delay+offset_loss*offset_delay/(2*offset_impedance)*f_sqrt);
|
||||
|
||||
auto Z_r = complex<double>(50.0);
|
||||
|
||||
auto Gamma_1 = (Z_c - Z_r) / (Z_c + Z_r);
|
||||
|
||||
auto Gamma_i = (Gamma_1*(1.0-exp(-2.0*gamma_l)-Gamma_1*Gamma_T)+exp(-2.0*gamma_l)*Gamma_T)
|
||||
/ (1.0-Gamma_1*(exp(-2.0*gamma_l)*Gamma_1+Gamma_T*(1.0-exp(-2.0*gamma_l))));
|
||||
|
||||
return Gamma_i;
|
||||
}
|
||||
|
||||
Open::Open()
|
||||
{
|
||||
Z0 = 50.0;
|
||||
@ -184,7 +163,7 @@ std::complex<double> Open::toS11(double freq)
|
||||
auto imp_open = complex<double>(0, -1.0 / (freq * 2 * M_PI * Cfringing));
|
||||
open = (imp_open - complex<double>(50.0)) / (imp_open + complex<double>(50.0));
|
||||
}
|
||||
return addTransmissionLine(open, Z0, delay*1e-12, loss*1e9, freq);
|
||||
return Util::addTransmissionLine(open, Z0, delay*1e-12, loss*1e9, freq);
|
||||
}
|
||||
}
|
||||
|
||||
@ -299,7 +278,7 @@ std::complex<double> Short::toS11(double freq)
|
||||
// convert to impedance
|
||||
auto imp_short = complex<double>(0, freq * 2 * M_PI * Lseries);
|
||||
complex<double> _short = (imp_short - complex<double>(50.0)) / (imp_short + complex<double>(50.0));
|
||||
return addTransmissionLine(_short, Z0, delay*1e-12, loss*1e9, freq);
|
||||
return Util::addTransmissionLine(_short, Z0, delay*1e-12, loss*1e9, freq);
|
||||
}
|
||||
}
|
||||
|
||||
@ -427,7 +406,7 @@ std::complex<double> Load::toS11(double freq)
|
||||
imp_load += complex<double>(0, freq * 2 * M_PI * Lseries);
|
||||
}
|
||||
complex<double> load = (imp_load - complex<double>(50.0)) / (imp_load + complex<double>(50.0));
|
||||
return addTransmissionLine(load, Z0, delay*1e-12, loss*1e9, freq);
|
||||
return Util::addTransmissionLine(load, Z0, delay*1e-12, loss*1e9, freq);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -70,9 +70,6 @@ public:
|
||||
virtual void fromJSON(nlohmann::json j) override;
|
||||
|
||||
protected:
|
||||
std::complex<double> addTransmissionLine(std::complex<double> termination_reflection,
|
||||
double offset_impedance, double offset_delay,
|
||||
double offset_loss, double frequency);
|
||||
Touchstone *touchstone;
|
||||
};
|
||||
|
||||
|
Binary file not shown.
@ -167,3 +167,24 @@ std::complex<double> Util::findCenterOfCircle(const std::vector<std::complex<dou
|
||||
|
||||
return std::complex<double>(Xcenter + meanX, Ycenter + meanY);
|
||||
}
|
||||
|
||||
std::complex<double> Util::addTransmissionLine(std::complex<double> termination_reflection, double offset_impedance, double offset_delay, double offset_loss, double frequency)
|
||||
{
|
||||
// nomenclature and formulas from https://loco.lab.asu.edu/loco-memos/edges_reports/report_20130807.pdf
|
||||
auto Gamma_T = termination_reflection;
|
||||
auto f = frequency;
|
||||
auto w = 2.0 * M_PI * frequency;
|
||||
auto f_sqrt = sqrt(f / 1e9);
|
||||
|
||||
auto Z_c = std::complex<double>(offset_impedance + (offset_loss / (2*w)) * f_sqrt, -(offset_loss / (2*w)) * f_sqrt);
|
||||
auto gamma_l = std::complex<double>(offset_loss*offset_delay/(2*offset_impedance)*f_sqrt, w*offset_delay+offset_loss*offset_delay/(2*offset_impedance)*f_sqrt);
|
||||
|
||||
auto Z_r = std::complex<double>(50.0);
|
||||
|
||||
auto Gamma_1 = (Z_c - Z_r) / (Z_c + Z_r);
|
||||
|
||||
auto Gamma_i = (Gamma_1*(1.0-exp(-2.0*gamma_l)-Gamma_1*Gamma_T)+exp(-2.0*gamma_l)*Gamma_T)
|
||||
/ (1.0-Gamma_1*(exp(-2.0*gamma_l)*Gamma_1+Gamma_T*(1.0-exp(-2.0*gamma_l))));
|
||||
|
||||
return Gamma_i;
|
||||
}
|
||||
|
@ -79,6 +79,8 @@ namespace Util {
|
||||
unsigned long long random(unsigned long long max);
|
||||
|
||||
std::complex<double> findCenterOfCircle(const std::vector<std::complex<double>> &points);
|
||||
|
||||
std::complex<double> addTransmissionLine(std::complex<double> termination_reflection, double offset_impedance, double offset_delay, double offset_loss, double frequency);
|
||||
}
|
||||
|
||||
#endif // UTILH_H
|
||||
|
@ -20,8 +20,10 @@ PortExtension::PortExtension()
|
||||
ext.velocityFactor = 0.66;
|
||||
|
||||
port = 1;
|
||||
isIdeal = true;
|
||||
|
||||
kit = nullptr;
|
||||
ui = nullptr;
|
||||
}
|
||||
|
||||
std::set<int> PortExtension::getAffectedPorts()
|
||||
@ -60,6 +62,7 @@ void PortExtension::edit()
|
||||
ui->setupUi(dialog);
|
||||
connect(dialog, &QDialog::finished, [=](){
|
||||
delete ui;
|
||||
ui = nullptr;
|
||||
});
|
||||
|
||||
// set initial values
|
||||
@ -164,7 +167,6 @@ void PortExtension::measurementCompleted(std::vector<VirtualDevice::VNAMeasureme
|
||||
phasediff += 2 * M_PI;
|
||||
}
|
||||
phasediff_sum += phasediff;
|
||||
qDebug() << phasediff;
|
||||
}
|
||||
|
||||
double x = sqrt(p.frequency / m.back().frequency);
|
||||
@ -230,6 +232,7 @@ void PortExtension::fromJSON(nlohmann::json j)
|
||||
if(j.contains("port")) {
|
||||
// new format
|
||||
jfrom = j;
|
||||
port = j.value("port", 1);
|
||||
} else {
|
||||
jfrom = j[0];
|
||||
port = 1;
|
||||
|
@ -1,25 +0,0 @@
|
||||
#ifndef PORTEXTENSIONDIALOG_H
|
||||
#define PORTEXTENSIONDIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
namespace Ui {
|
||||
class PortExtensionDialog;
|
||||
}
|
||||
|
||||
class PortExtensionDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit PortExtensionDialog(QWidget *parent = nullptr);
|
||||
~PortExtensionDialog();
|
||||
|
||||
private slots:
|
||||
void on_buttonBox_accepted();
|
||||
|
||||
private:
|
||||
Ui::PortExtensionDialog *ui;
|
||||
};
|
||||
|
||||
#endif // PORTEXTENSIONDIALOG_H
|
Binary file not shown.
@ -1,5 +1,4 @@
|
||||
QT += testlib
|
||||
#QT -= gui
|
||||
QT += testlib widgets network
|
||||
|
||||
CONFIG += qt console warn_on depend_includepath testcase
|
||||
CONFIG -= app_bundle
|
||||
@ -7,13 +6,384 @@ CONFIG -= app_bundle
|
||||
TEMPLATE = app
|
||||
|
||||
SOURCES += \
|
||||
../../VNA_embedded/Application/Communication/Protocol.cpp \
|
||||
../LibreVNA-GUI/Calibration/LibreCAL/caldevice.cpp \
|
||||
../LibreVNA-GUI/Calibration/LibreCAL/librecaldialog.cpp \
|
||||
../LibreVNA-GUI/Calibration/LibreCAL/usbdevice.cpp \
|
||||
../LibreVNA-GUI/Calibration/amplitudecaldialog.cpp \
|
||||
../LibreVNA-GUI/Calibration/calibration.cpp \
|
||||
../LibreVNA-GUI/Calibration/calibrationmeasurement.cpp \
|
||||
../LibreVNA-GUI/Calibration/calkit.cpp \
|
||||
../LibreVNA-GUI/Calibration/calkitdialog.cpp \
|
||||
../LibreVNA-GUI/Calibration/calstandard.cpp \
|
||||
../LibreVNA-GUI/Calibration/frequencycaldialog.cpp \
|
||||
../LibreVNA-GUI/Calibration/manualcalibrationdialog.cpp \
|
||||
../LibreVNA-GUI/Calibration/receivercaldialog.cpp \
|
||||
../LibreVNA-GUI/Calibration/sourcecaldialog.cpp \
|
||||
../LibreVNA-GUI/CustomWidgets/colorpickerbutton.cpp \
|
||||
../LibreVNA-GUI/CustomWidgets/csvimport.cpp \
|
||||
../LibreVNA-GUI/CustomWidgets/informationbox.cpp \
|
||||
../LibreVNA-GUI/CustomWidgets/jsonpickerdialog.cpp \
|
||||
../LibreVNA-GUI/CustomWidgets/siunitedit.cpp \
|
||||
../LibreVNA-GUI/CustomWidgets/tilewidget.cpp \
|
||||
../LibreVNA-GUI/CustomWidgets/toggleswitch.cpp \
|
||||
../LibreVNA-GUI/CustomWidgets/touchstoneimport.cpp \
|
||||
../LibreVNA-GUI/Device/compounddevice.cpp \
|
||||
../LibreVNA-GUI/Device/compounddeviceeditdialog.cpp \
|
||||
../LibreVNA-GUI/Device/device.cpp \
|
||||
../LibreVNA-GUI/Device/devicelog.cpp \
|
||||
../LibreVNA-GUI/Device/firmwareupdatedialog.cpp \
|
||||
../LibreVNA-GUI/Device/manualcontroldialog.cpp \
|
||||
../LibreVNA-GUI/Device/virtualdevice.cpp \
|
||||
../LibreVNA-GUI/Generator/generator.cpp \
|
||||
../LibreVNA-GUI/Generator/signalgenwidget.cpp \
|
||||
../LibreVNA-GUI/SpectrumAnalyzer/spectrumanalyzer.cpp \
|
||||
../LibreVNA-GUI/SpectrumAnalyzer/tracewidgetsa.cpp \
|
||||
../LibreVNA-GUI/Tools/eseries.cpp \
|
||||
../LibreVNA-GUI/Tools/impedancematchdialog.cpp \
|
||||
../LibreVNA-GUI/Tools/parameters.cpp \
|
||||
../LibreVNA-GUI/Traces/Marker/marker.cpp \
|
||||
../LibreVNA-GUI/Traces/Marker/markergroup.cpp \
|
||||
../LibreVNA-GUI/Traces/Marker/markermodel.cpp \
|
||||
../LibreVNA-GUI/Traces/Marker/markerwidget.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/dft.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/expression.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/medianfilter.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpError.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpFuncCmplx.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpFuncCommon.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpFuncMatrix.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpFuncNonCmplx.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpFuncStr.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpICallback.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpIOprt.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpIPackage.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpIToken.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpIValReader.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpIValue.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpIfThenElse.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpOprtBinAssign.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpOprtBinCommon.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpOprtCmplx.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpOprtIndex.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpOprtMatrix.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpOprtNonCmplx.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpOprtPostfixCommon.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpPackageCmplx.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpPackageCommon.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpPackageMatrix.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpPackageNonCmplx.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpPackageStr.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpPackageUnit.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpParser.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpParserBase.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpParserMessageProvider.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpRPN.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpScriptTokens.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpTest.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpTokenReader.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpValReader.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpValue.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpValueCache.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpVariable.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/tdr.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/timegate.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/tracemath.cpp \
|
||||
../LibreVNA-GUI/Traces/Math/windowfunction.cpp \
|
||||
../LibreVNA-GUI/Traces/fftcomplex.cpp \
|
||||
../LibreVNA-GUI/Traces/sparamtraceselector.cpp \
|
||||
../LibreVNA-GUI/Traces/trace.cpp \
|
||||
../LibreVNA-GUI/Traces/traceaxis.cpp \
|
||||
../LibreVNA-GUI/Traces/tracecsvexport.cpp \
|
||||
../LibreVNA-GUI/Traces/traceeditdialog.cpp \
|
||||
../LibreVNA-GUI/Traces/traceimportdialog.cpp \
|
||||
../LibreVNA-GUI/Traces/tracemodel.cpp \
|
||||
../LibreVNA-GUI/Traces/traceplot.cpp \
|
||||
../LibreVNA-GUI/Traces/tracepolar.cpp \
|
||||
../LibreVNA-GUI/Traces/tracepolarchart.cpp \
|
||||
../LibreVNA-GUI/Traces/tracesmithchart.cpp \
|
||||
../LibreVNA-GUI/Traces/tracetouchstoneexport.cpp \
|
||||
../LibreVNA-GUI/Traces/tracewaterfall.cpp \
|
||||
../LibreVNA-GUI/Traces/tracewidget.cpp \
|
||||
../LibreVNA-GUI/Traces/tracexyplot.cpp \
|
||||
../LibreVNA-GUI/Traces/waterfallaxisdialog.cpp \
|
||||
../LibreVNA-GUI/Traces/xyplotaxisdialog.cpp \
|
||||
../LibreVNA-GUI/Util/util.cpp \
|
||||
../LibreVNA-GUI/VNA/Deembedding/deembedding.cpp \
|
||||
../LibreVNA-GUI/VNA/Deembedding/deembeddingdialog.cpp \
|
||||
../LibreVNA-GUI/VNA/Deembedding/deembeddingoption.cpp \
|
||||
../LibreVNA-GUI/VNA/Deembedding/impedancerenormalization.cpp \
|
||||
../LibreVNA-GUI/VNA/Deembedding/manualdeembeddingdialog.cpp \
|
||||
../LibreVNA-GUI/VNA/Deembedding/matchingnetwork.cpp \
|
||||
../LibreVNA-GUI/VNA/Deembedding/portextension.cpp \
|
||||
../LibreVNA-GUI/VNA/Deembedding/twothru.cpp \
|
||||
../LibreVNA-GUI/VNA/tracewidgetvna.cpp \
|
||||
../LibreVNA-GUI/VNA/vna.cpp \
|
||||
../LibreVNA-GUI/about.cpp \
|
||||
../LibreVNA-GUI/appwindow.cpp \
|
||||
../LibreVNA-GUI/averaging.cpp \
|
||||
../LibreVNA-GUI/csv.cpp \
|
||||
../LibreVNA-GUI/mode.cpp \
|
||||
../LibreVNA-GUI/modehandler.cpp \
|
||||
../LibreVNA-GUI/modewindow.cpp \
|
||||
../LibreVNA-GUI/preferences.cpp \
|
||||
../LibreVNA-GUI/savable.cpp \
|
||||
../LibreVNA-GUI/scpi.cpp \
|
||||
../LibreVNA-GUI/tcpserver.cpp \
|
||||
../LibreVNA-GUI/touchstone.cpp \
|
||||
../LibreVNA-GUI/unit.cpp \
|
||||
main.cpp \
|
||||
portextensiontests.cpp \
|
||||
utiltests.cpp
|
||||
|
||||
HEADERS += \
|
||||
../../VNA_embedded/Application/Communication/Protocol.hpp \
|
||||
../LibreVNA-GUI/Calibration/Eigen/Cholesky \
|
||||
../LibreVNA-GUI/Calibration/Eigen/CholmodSupport \
|
||||
../LibreVNA-GUI/Calibration/Eigen/Core \
|
||||
../LibreVNA-GUI/Calibration/Eigen/Dense \
|
||||
../LibreVNA-GUI/Calibration/Eigen/Eigen \
|
||||
../LibreVNA-GUI/Calibration/Eigen/Eigenvalues \
|
||||
../LibreVNA-GUI/Calibration/Eigen/Geometry \
|
||||
../LibreVNA-GUI/Calibration/Eigen/Householder \
|
||||
../LibreVNA-GUI/Calibration/Eigen/IterativeLinearSolvers \
|
||||
../LibreVNA-GUI/Calibration/Eigen/Jacobi \
|
||||
../LibreVNA-GUI/Calibration/Eigen/KLUSupport \
|
||||
../LibreVNA-GUI/Calibration/Eigen/LU \
|
||||
../LibreVNA-GUI/Calibration/Eigen/MetisSupport \
|
||||
../LibreVNA-GUI/Calibration/Eigen/OrderingMethods \
|
||||
../LibreVNA-GUI/Calibration/Eigen/PaStiXSupport \
|
||||
../LibreVNA-GUI/Calibration/Eigen/PardisoSupport \
|
||||
../LibreVNA-GUI/Calibration/Eigen/QR \
|
||||
../LibreVNA-GUI/Calibration/Eigen/QtAlignedMalloc \
|
||||
../LibreVNA-GUI/Calibration/Eigen/SPQRSupport \
|
||||
../LibreVNA-GUI/Calibration/Eigen/SVD \
|
||||
../LibreVNA-GUI/Calibration/Eigen/Sparse \
|
||||
../LibreVNA-GUI/Calibration/Eigen/SparseCholesky \
|
||||
../LibreVNA-GUI/Calibration/Eigen/SparseCore \
|
||||
../LibreVNA-GUI/Calibration/Eigen/SparseLU \
|
||||
../LibreVNA-GUI/Calibration/Eigen/SparseQR \
|
||||
../LibreVNA-GUI/Calibration/Eigen/StdDeque \
|
||||
../LibreVNA-GUI/Calibration/Eigen/StdList \
|
||||
../LibreVNA-GUI/Calibration/Eigen/StdVector \
|
||||
../LibreVNA-GUI/Calibration/Eigen/SuperLUSupport \
|
||||
../LibreVNA-GUI/Calibration/Eigen/UmfPackSupport \
|
||||
../LibreVNA-GUI/Calibration/LibreCAL/caldevice.h \
|
||||
../LibreVNA-GUI/Calibration/LibreCAL/librecaldialog.h \
|
||||
../LibreVNA-GUI/Calibration/LibreCAL/usbdevice.h \
|
||||
../LibreVNA-GUI/Calibration/amplitudecaldialog.h \
|
||||
../LibreVNA-GUI/Calibration/calibration.h \
|
||||
../LibreVNA-GUI/Calibration/calibrationmeasurement.h \
|
||||
../LibreVNA-GUI/Calibration/calkit.h \
|
||||
../LibreVNA-GUI/Calibration/calkitdialog.h \
|
||||
../LibreVNA-GUI/Calibration/calstandard.h \
|
||||
../LibreVNA-GUI/Calibration/frequencycaldialog.h \
|
||||
../LibreVNA-GUI/Calibration/manualcalibrationdialog.h \
|
||||
../LibreVNA-GUI/Calibration/receivercaldialog.h \
|
||||
../LibreVNA-GUI/Calibration/sourcecaldialog.h \
|
||||
../LibreVNA-GUI/CustomWidgets/colorpickerbutton.h \
|
||||
../LibreVNA-GUI/CustomWidgets/csvimport.h \
|
||||
../LibreVNA-GUI/CustomWidgets/informationbox.h \
|
||||
../LibreVNA-GUI/CustomWidgets/jsonpickerdialog.h \
|
||||
../LibreVNA-GUI/CustomWidgets/siunitedit.h \
|
||||
../LibreVNA-GUI/CustomWidgets/tilewidget.h \
|
||||
../LibreVNA-GUI/CustomWidgets/toggleswitch.h \
|
||||
../LibreVNA-GUI/CustomWidgets/touchstoneimport.h \
|
||||
../LibreVNA-GUI/Device/compounddevice.h \
|
||||
../LibreVNA-GUI/Device/compounddeviceeditdialog.h \
|
||||
../LibreVNA-GUI/Device/device.h \
|
||||
../LibreVNA-GUI/Device/devicelog.h \
|
||||
../LibreVNA-GUI/Device/firmwareupdatedialog.h \
|
||||
../LibreVNA-GUI/Device/manualcontroldialog.h \
|
||||
../LibreVNA-GUI/Device/virtualdevice.h \
|
||||
../LibreVNA-GUI/Generator/generator.h \
|
||||
../LibreVNA-GUI/Generator/signalgenwidget.h \
|
||||
../LibreVNA-GUI/SpectrumAnalyzer/spectrumanalyzer.h \
|
||||
../LibreVNA-GUI/SpectrumAnalyzer/tracewidgetsa.h \
|
||||
../LibreVNA-GUI/Tools/eseries.h \
|
||||
../LibreVNA-GUI/Tools/impedancematchdialog.h \
|
||||
../LibreVNA-GUI/Tools/parameters.h \
|
||||
../LibreVNA-GUI/Traces/Marker/marker.h \
|
||||
../LibreVNA-GUI/Traces/Marker/markergroup.h \
|
||||
../LibreVNA-GUI/Traces/Marker/markermodel.h \
|
||||
../LibreVNA-GUI/Traces/Marker/markerwidget.h \
|
||||
../LibreVNA-GUI/Traces/Math/dft.h \
|
||||
../LibreVNA-GUI/Traces/Math/expression.h \
|
||||
../LibreVNA-GUI/Traces/Math/medianfilter.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpCompat.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpDefines.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpError.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpFuncCmplx.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpFuncCommon.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpFuncMatrix.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpFuncNonCmplx.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpFuncStr.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpFwdDecl.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpICallback.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpIOprt.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpIPackage.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpIPrecedence.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpIToken.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpIValReader.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpIValue.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpIfThenElse.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpMatrix.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpMatrixError.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpOprtBinAssign.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpOprtBinCommon.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpOprtCmplx.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpOprtIndex.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpOprtMatrix.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpOprtNonCmplx.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpOprtPostfixCommon.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpPackageCmplx.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpPackageCommon.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpPackageMatrix.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpPackageNonCmplx.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpPackageStr.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpPackageUnit.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpParser.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpParserBase.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpParserMessageProvider.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpRPN.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpScriptTokens.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpStack.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpTest.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpTokenReader.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpTypes.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpValReader.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpValue.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpValueCache.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/mpVariable.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/suSortPred.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/suStringTokens.h \
|
||||
../LibreVNA-GUI/Traces/Math/parser/utGeneric.h \
|
||||
../LibreVNA-GUI/Traces/Math/tdr.h \
|
||||
../LibreVNA-GUI/Traces/Math/timegate.h \
|
||||
../LibreVNA-GUI/Traces/Math/tracemath.h \
|
||||
../LibreVNA-GUI/Traces/Math/windowfunction.h \
|
||||
../LibreVNA-GUI/Traces/fftcomplex.h \
|
||||
../LibreVNA-GUI/Traces/sparamtraceselector.h \
|
||||
../LibreVNA-GUI/Traces/trace.h \
|
||||
../LibreVNA-GUI/Traces/traceaxis.h \
|
||||
../LibreVNA-GUI/Traces/tracecsvexport.h \
|
||||
../LibreVNA-GUI/Traces/traceeditdialog.h \
|
||||
../LibreVNA-GUI/Traces/traceimportdialog.h \
|
||||
../LibreVNA-GUI/Traces/tracemodel.h \
|
||||
../LibreVNA-GUI/Traces/traceplot.h \
|
||||
../LibreVNA-GUI/Traces/tracepolar.h \
|
||||
../LibreVNA-GUI/Traces/tracepolarchart.h \
|
||||
../LibreVNA-GUI/Traces/tracesmithchart.h \
|
||||
../LibreVNA-GUI/Traces/tracetouchstoneexport.h \
|
||||
../LibreVNA-GUI/Traces/tracewaterfall.h \
|
||||
../LibreVNA-GUI/Traces/tracewidget.h \
|
||||
../LibreVNA-GUI/Traces/tracexyplot.h \
|
||||
../LibreVNA-GUI/Traces/waterfallaxisdialog.h \
|
||||
../LibreVNA-GUI/Traces/xyplotaxisdialog.h \
|
||||
../LibreVNA-GUI/Util/util.h \
|
||||
../LibreVNA-GUI/VNA/Deembedding/deembedding.h \
|
||||
../LibreVNA-GUI/VNA/Deembedding/deembeddingdialog.h \
|
||||
../LibreVNA-GUI/VNA/Deembedding/deembeddingoption.h \
|
||||
../LibreVNA-GUI/VNA/Deembedding/impedancerenormalization.h \
|
||||
../LibreVNA-GUI/VNA/Deembedding/manualdeembeddingdialog.h \
|
||||
../LibreVNA-GUI/VNA/Deembedding/matchingnetwork.h \
|
||||
../LibreVNA-GUI/VNA/Deembedding/portextension.h \
|
||||
../LibreVNA-GUI/VNA/Deembedding/twothru.h \
|
||||
../LibreVNA-GUI/VNA/portextensiondialog.h \
|
||||
../LibreVNA-GUI/VNA/tracewidgetvna.h \
|
||||
../LibreVNA-GUI/VNA/vna.h \
|
||||
../LibreVNA-GUI/about.h \
|
||||
../LibreVNA-GUI/appwindow.h \
|
||||
../LibreVNA-GUI/averaging.h \
|
||||
../LibreVNA-GUI/csv.h \
|
||||
../LibreVNA-GUI/json.hpp \
|
||||
../LibreVNA-GUI/mode.h \
|
||||
../LibreVNA-GUI/modehandler.h \
|
||||
../LibreVNA-GUI/modewindow.h \
|
||||
../LibreVNA-GUI/preferences.h \
|
||||
../LibreVNA-GUI/savable.h \
|
||||
../LibreVNA-GUI/scpi.h \
|
||||
../LibreVNA-GUI/tcpserver.h \
|
||||
../LibreVNA-GUI/touchstone.h \
|
||||
../LibreVNA-GUI/unit.h \
|
||||
portextensiontests.h \
|
||||
utiltests.h
|
||||
|
||||
INCLUDEPATH += \
|
||||
../LibreVNA-GUI/Util
|
||||
../LibreVNA-GUI \
|
||||
../LibreVNA-GUI/Util \
|
||||
../LibreVNA-GUI/VNA/Deembedding \
|
||||
../LibreVNA-GUI/Calibration
|
||||
|
||||
FORMS += \
|
||||
../LibreVNA-GUI/Calibration/CalStandardLineEditDialog.ui \
|
||||
../LibreVNA-GUI/Calibration/CalStandardLoadEditDialog.ui \
|
||||
../LibreVNA-GUI/Calibration/CalStandardOpenEditDialog.ui \
|
||||
../LibreVNA-GUI/Calibration/CalStandardReflectEditDialog.ui \
|
||||
../LibreVNA-GUI/Calibration/CalStandardShortEditDialog.ui \
|
||||
../LibreVNA-GUI/Calibration/CalStandardThroughEditDialog.ui \
|
||||
../LibreVNA-GUI/Calibration/LibreCAL/librecaldialog.ui \
|
||||
../LibreVNA-GUI/Calibration/addamplitudepointsdialog.ui \
|
||||
../LibreVNA-GUI/Calibration/amplitudecaldialog.ui \
|
||||
../LibreVNA-GUI/Calibration/automaticamplitudedialog.ui \
|
||||
../LibreVNA-GUI/Calibration/calibrationdialogui.ui \
|
||||
../LibreVNA-GUI/Calibration/calkitdialog.ui \
|
||||
../LibreVNA-GUI/Calibration/frequencycaldialog.ui \
|
||||
../LibreVNA-GUI/Calibration/manualcalibrationdialog.ui \
|
||||
../LibreVNA-GUI/CustomWidgets/csvimport.ui \
|
||||
../LibreVNA-GUI/CustomWidgets/jsonpickerdialog.ui \
|
||||
../LibreVNA-GUI/CustomWidgets/tilewidget.ui \
|
||||
../LibreVNA-GUI/CustomWidgets/touchstoneimport.ui \
|
||||
../LibreVNA-GUI/Device/compounddeviceeditdialog.ui \
|
||||
../LibreVNA-GUI/Device/devicelog.ui \
|
||||
../LibreVNA-GUI/Device/firmwareupdatedialog.ui \
|
||||
../LibreVNA-GUI/Device/manualcontroldialog.ui \
|
||||
../LibreVNA-GUI/Generator/signalgenwidget.ui \
|
||||
../LibreVNA-GUI/Tools/impedancematchdialog.ui \
|
||||
../LibreVNA-GUI/Traces/Marker/markerwidget.ui \
|
||||
../LibreVNA-GUI/Traces/Math/dftdialog.ui \
|
||||
../LibreVNA-GUI/Traces/Math/dftexplanationwidget.ui \
|
||||
../LibreVNA-GUI/Traces/Math/expressiondialog.ui \
|
||||
../LibreVNA-GUI/Traces/Math/expressionexplanationwidget.ui \
|
||||
../LibreVNA-GUI/Traces/Math/medianexplanationwidget.ui \
|
||||
../LibreVNA-GUI/Traces/Math/medianfilterdialog.ui \
|
||||
../LibreVNA-GUI/Traces/Math/newtracemathdialog.ui \
|
||||
../LibreVNA-GUI/Traces/Math/tdrdialog.ui \
|
||||
../LibreVNA-GUI/Traces/Math/tdrexplanationwidget.ui \
|
||||
../LibreVNA-GUI/Traces/Math/timedomaingatingexplanationwidget.ui \
|
||||
../LibreVNA-GUI/Traces/Math/timegatedialog.ui \
|
||||
../LibreVNA-GUI/Traces/Math/timegateexplanationwidget.ui \
|
||||
../LibreVNA-GUI/Traces/XYPlotConstantLineEditDialog.ui \
|
||||
../LibreVNA-GUI/Traces/polarchartdialog.ui \
|
||||
../LibreVNA-GUI/Traces/smithchartdialog.ui \
|
||||
../LibreVNA-GUI/Traces/tracecsvexport.ui \
|
||||
../LibreVNA-GUI/Traces/traceeditdialog.ui \
|
||||
../LibreVNA-GUI/Traces/traceimportdialog.ui \
|
||||
../LibreVNA-GUI/Traces/tracetouchstoneexport.ui \
|
||||
../LibreVNA-GUI/Traces/tracewidget.ui \
|
||||
../LibreVNA-GUI/Traces/waterfallaxisdialog.ui \
|
||||
../LibreVNA-GUI/Traces/xyplotaxisdialog.ui \
|
||||
../LibreVNA-GUI/VNA/Deembedding/deembeddingdialog.ui \
|
||||
../LibreVNA-GUI/VNA/Deembedding/impedancenormalizationdialog.ui \
|
||||
../LibreVNA-GUI/VNA/Deembedding/manualdeembeddingdialog.ui \
|
||||
../LibreVNA-GUI/VNA/Deembedding/matchingnetworkdialog.ui \
|
||||
../LibreVNA-GUI/VNA/Deembedding/measurementdialog.ui \
|
||||
../LibreVNA-GUI/VNA/Deembedding/portextensioneditdialog.ui \
|
||||
../LibreVNA-GUI/VNA/Deembedding/twothrudialog.ui \
|
||||
../LibreVNA-GUI/VNA/s2pImportOptions.ui \
|
||||
../LibreVNA-GUI/aboutdialog.ui \
|
||||
../LibreVNA-GUI/main.ui \
|
||||
../LibreVNA-GUI/preferencesdialog.ui
|
||||
|
||||
DISTFILES += \
|
||||
../LibreVNA-GUI/TraceSetup \
|
||||
../LibreVNA-GUI/test.setup
|
||||
|
||||
CONFIG += c++17
|
||||
|
||||
LIBS += -lusb-1.0
|
||||
unix:LIBS += -L/usr/lib/
|
||||
|
||||
REVISION = $$system(git rev-parse HEAD)
|
||||
DEFINES += GITHASH=\\"\"$$REVISION\\"\"
|
||||
DEFINES += FW_MAJOR=1 FW_MINOR=4 FW_PATCH=0 FW_SUFFIX=""#\\"\"-alpha.2\\"\"
|
||||
|
@ -1,11 +1,15 @@
|
||||
#include "utiltests.h"
|
||||
#include "portextensiontests.h"
|
||||
|
||||
#include <QtTest>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication a(argc, argv);
|
||||
|
||||
int status = 0;
|
||||
status |= QTest::qExec(new UtilTests, argc, argv);
|
||||
status |= QTest::qExec(new PortExtensionTests, argc, argv);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
72
Software/PC_Application/LibreVNA-Test/portextensiontests.cpp
Normal file
72
Software/PC_Application/LibreVNA-Test/portextensiontests.cpp
Normal file
@ -0,0 +1,72 @@
|
||||
#include "portextensiontests.h"
|
||||
|
||||
#include "util.h"
|
||||
#include "json.hpp"
|
||||
|
||||
#include <QtTest>
|
||||
|
||||
PortExtensionTests::PortExtensionTests() : QObject(nullptr)
|
||||
{
|
||||
// create dummy data: port 1 is a simple open, port 2 is open with 1ns of (one-way) delay and some loss
|
||||
constexpr double startFreq = 1000000;
|
||||
constexpr double stopFreq = 6000000000;
|
||||
constexpr int steps = 501;
|
||||
for(int i=0;i<steps;i++) {
|
||||
double f = startFreq + (stopFreq - startFreq) * i / (steps - 1);
|
||||
VirtualDevice::VNAMeasurement m;
|
||||
m.frequency = f;
|
||||
m.dBm = -10;
|
||||
m.pointNum = i;
|
||||
m.Z0 = 50.0;
|
||||
m.measurements["S11"] = 1.0;
|
||||
m.measurements["S22"] = Util::addTransmissionLine(0.5, 50.0, 1e-9, 10, f);
|
||||
dummyData.push_back(m);
|
||||
}
|
||||
}
|
||||
|
||||
void PortExtensionTests::autocalc()
|
||||
{
|
||||
auto pe2 = new PortExtension();
|
||||
|
||||
nlohmann::json j;
|
||||
j["port"] = 2;
|
||||
pe2->fromJSON(j);
|
||||
|
||||
pe2->edit();
|
||||
pe2->measurementCompleted(dummyData);
|
||||
|
||||
j = pe2->toJSON();
|
||||
QVERIFY(qFuzzyCompare((float)j.value("delay", 0.0), (float)1e-9));
|
||||
QVERIFY(qFuzzyCompare((float)j.value("DCloss", 0.0), (float)(-10*log10(0.5))));
|
||||
|
||||
auto pe1 = new PortExtension();
|
||||
|
||||
j.clear();
|
||||
j["port"] = 1;
|
||||
pe1->fromJSON(j);
|
||||
|
||||
pe1->edit();
|
||||
pe1->measurementCompleted(dummyData);
|
||||
|
||||
j = pe1->toJSON();
|
||||
QVERIFY(qFuzzyIsNull((float)j.value("delay", 0.0)));
|
||||
QVERIFY(qFuzzyIsNull((float)j.value("DCloss", 0.0)));
|
||||
}
|
||||
|
||||
void PortExtensionTests::correct()
|
||||
{
|
||||
auto pe = new PortExtension();
|
||||
nlohmann::json j;
|
||||
j["port"] = 2;
|
||||
pe->fromJSON(j);
|
||||
pe->edit();
|
||||
pe->measurementCompleted(dummyData);
|
||||
|
||||
for(auto m : dummyData) {
|
||||
pe->transformDatapoint(m);
|
||||
QVERIFY(qFuzzyIsNull((float)m.measurements["S22"].imag()));
|
||||
QVERIFY(qFuzzyCompare((float)m.measurements["S22"].real(), 1.0f));
|
||||
}
|
||||
}
|
||||
|
||||
|
21
Software/PC_Application/LibreVNA-Test/portextensiontests.h
Normal file
21
Software/PC_Application/LibreVNA-Test/portextensiontests.h
Normal file
@ -0,0 +1,21 @@
|
||||
#ifndef PORTEXTENSIONTESTS_H
|
||||
#define PORTEXTENSIONTESTS_H
|
||||
|
||||
#include <QObject>
|
||||
|
||||
#include "portextension.h"
|
||||
|
||||
class PortExtensionTests : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit PortExtensionTests();
|
||||
|
||||
private slots:
|
||||
void autocalc();
|
||||
void correct();
|
||||
private:
|
||||
std::vector<VirtualDevice::VNAMeasurement> dummyData;
|
||||
};
|
||||
|
||||
#endif // PORTEXTENSIONTESTS_H
|
Loading…
Reference in New Issue
Block a user