Port extension test

This commit is contained in:
Jan Käberich 2022-10-01 20:09:46 +02:00
parent 96f8b6c90a
commit b20e5598be
12 changed files with 500 additions and 56 deletions

View File

@ -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);
}
}

View File

@ -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;
};

View File

@ -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;
}

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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\\"\"

View File

@ -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;
}

View 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));
}
}

View 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